From patchwork Thu Sep 16 16:49:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Singh X-Patchwork-Id: 12499693 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5C3AFC43217 for ; Thu, 16 Sep 2021 16:51:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 44AE962F90 for ; Thu, 16 Sep 2021 16:51:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345493AbhIPQxA (ORCPT ); Thu, 16 Sep 2021 12:53:00 -0400 Received: from esa.microchip.iphmx.com ([68.232.154.123]:11873 "EHLO esa.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345752AbhIPQut (ORCPT ); Thu, 16 Sep 2021 12:50:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1631810969; x=1663346969; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=snusMlwh7w0F89xQSSWO47PnEfQYhjgNsKCRezcNchc=; b=VQOxbGJkMwnvAM4y1kdaRKCjWsXM0usUnJcU/t7oDh/DEdCovW/dm0QR 9lzoWIhYB68XlzM9I5si2/63nHV298nfbCTXQlKeyGatOTr6WnDNmb+9h k/bOhkzKUVNWgLbQx/544dSoh3wVDs2JvH/00etbBoiILWp1xd/EfLFLD OYB6MxTxH5Zg3JKg3t8pQUZ+leGNB7GDCSVo6Whp3hYIeCBUJPq6c6akh NB8hT13ewXxYQCXtPbnCJ8YnDrwXWlIIOU5SR7+tg0siRzZcf378rok67 NIO9Cbd1UB+cludfqH8b7WFCsD6gKFXQNKacteIWcwMfGdTB86L0JbHcj w==; IronPort-SDR: wbfGaCxPwuwiANZg+a1bc45AMMCwqGfrDgLfAn9ilgkqzDtdZUHAkK4twce4wTgVZUiJipr33r jSy+CWsD6XoiynY+oZaA6hyQ//CXp26O87ZWDmH1rM58bauoeoyWQlnOIrsxMFoMGghsgkt1WI gfcS6ixxcMHAi8pVdno0VAr1zCSFl6rzeAjVib30SqXOYss/0eSNxi3LqqvhFGf0r60K1OW/vY lNpu3HBA1CmIfCA0KDjg1/UoLw/lcYFLsap5rOFj/ISd87MPBydilHGsvuBmJrr1C0HGlewseK v558HNTV1BkYKHsfDs8WNQ8k X-IronPort-AV: E=Sophos;i="5.85,299,1624345200"; d="scan'208";a="132089778" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 16 Sep 2021 09:49:21 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Thu, 16 Sep 2021 09:49:21 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14 via Frontend Transport; Thu, 16 Sep 2021 09:49:21 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IqGZqnrZmaicvVkI2UcUvSjoCwHCDYg5UtVAgUX1trZH1FSCGd6glCLJ3CtKufV0FXKEUt3kk5QNi8CcbHPPi+nGY2embByiJCbAkTEZQactIsm1muGkZL1FVE11KJ9hxsQtk9Z6Im6nmIan9VSP7Fo4SsOa9N/zfq6oEgyF/5NG3M04wKU5T1kUOlTnni0pHUG9eknM35oICgRvFrvVZPvAwJOhoo4vIAMPe2Jl+lzrYsp8C7x083unS+c6MZg0neWXlsNKoUsVoMJsLR5M6cN2MXJ2DZcTpd5v0WZr0HypTncCJgHnALxShL4SYe8u/pfM8sYD9+jpBKvAhv8pjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=fZVSgySNqzZP8CQHePX2jefRh9byqXnOJDJw/kVNV4Q=; b=hURi2Nwrcr9qpPghGxcH4rsfyxzb+LGQI6bL1b+C1BOYmq3XRoui4i1aQpwkTscK0iloWaQXVR2IPBTM18Y4sOkivo9/d77ZYjvPXiD/Hbr00zlcK3t75pyVWov7Kwv4TwNcyzxzD08piqcOm15ud/HLyPE6SjnDVd3HcwJsxYUgZKyJtTux0/3fWisU398pufcJrOOllJNoboORws6BDuaRQ31le2WwAJRk7lvyODHikbZQmQGKOPWu3RwAOrESbVeF+peecboRiKOtvT4IEZycc2Gsu46B7+MfHqGCccCUEZAloxx8drTI19kzRTXm9FvaGiQg3ASvQkPIrjLL0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fZVSgySNqzZP8CQHePX2jefRh9byqXnOJDJw/kVNV4Q=; b=mNZkx4VZjUwtACeuDCJX0d6lmAS4SCLloc3nPmhe+W/An4nHy0VD4mqwndnObY8AY/KR0Fi2KtqJ4fEjaJ+kz3h9omUNMkuejX5VWDkm+AlgmO4wj4zmy2fbBCRCqidyPwzjxMVGtvWI+dQ7GDstSypui5eq6LxcAQfLbxcLQ3k= Received: from SJ0PR11MB4943.namprd11.prod.outlook.com (2603:10b6:a03:2ad::17) by SJ0PR11MB5197.namprd11.prod.outlook.com (2603:10b6:a03:2d1::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Thu, 16 Sep 2021 16:49:19 +0000 Received: from SJ0PR11MB4943.namprd11.prod.outlook.com ([fe80::b095:c8cf:1d0c:a3bc]) by SJ0PR11MB4943.namprd11.prod.outlook.com ([fe80::b095:c8cf:1d0c:a3bc%5]) with mapi id 15.20.4500.019; Thu, 16 Sep 2021 16:49:19 +0000 From: To: CC: , Subject: [PATCH v2 04/11] wilc1000: configure registers to handle chip wakeup sequence Thread-Topic: [PATCH v2 04/11] wilc1000: configure registers to handle chip wakeup sequence Thread-Index: AQHXqxrKCB5luK3DD0ulSA8CbfvGcA== Date: Thu, 16 Sep 2021 16:49:19 +0000 Message-ID: <20210916164902.74629-5-ajay.kathat@microchip.com> References: <20210916164902.74629-1-ajay.kathat@microchip.com> In-Reply-To: <20210916164902.74629-1-ajay.kathat@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.25.1 authentication-results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=microchip.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7c368b93-408d-44f2-45c9-08d97931ed69 x-ms-traffictypediagnostic: SJ0PR11MB5197: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2276; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SM+Cluv4o7zGntFOGe3iI79yb28UaP5SIzrKUJPWGYulX5W0gDJTFzl2wS/YG/EWNobt9nBPsjAevPJMq9w733GFGpskzD5VuqrTWialbe+Z8AprkKzE/5HSs0d9wsyMEkh79iooqrLY2ESHgGPbXyosgiMOMuhsoJFBgqdO/RDE+3DKB1o8+NxiqLyrsJCj3W0M36TGoAAEeJzSwjf3uMgnISpk2oHndbE7EHuRoVX94LVGQPGCOskfVGwqwg5mLiY7M3h4RoYba+3X5/8oqeJodELS7cBevOOk2jnDa4RYJMBgbzmD7D416CHA1GwMYS7YNMpT/HVdXwmjd6+sxG0deDT2Re8RTw/ddyg/dt93TCRClceUAbwgIZDc445RK6FcqcBrRXt8URGs7JUKg1QiPPC0FFkM+oJ3hv4ySr+ZpCX2FBYENB5nQhOhzbpEn1c+wDFaGn0vIbaNR5oSMLI9dSu5qisjgmRGh7nH659VVHdxCqszUSelBa35oq3ZyjKT3KMdL5b3rkLMJ3ozoqEPCPsaM+woZpwmPEDewixwzE/QwK4DsUMSWmbXVoj6WK9YX7B2Bnpjf5RqUKKCsNKZIkIQO4XvP51nd8bstNF6MFWszZLJvbuJusmHa25jpOwwUa4nS6ETVJfogVWDPxn5lKhQQowv47xxZfQTrgLgMZLrM0sXRArku8VcR7Kp/VXGs0jnk8QmW8kAskyv4w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR11MB4943.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(26005)(107886003)(54906003)(76116006)(8676002)(6512007)(6916009)(66556008)(66476007)(86362001)(64756008)(66446008)(8936002)(66946007)(91956017)(122000001)(38100700002)(316002)(83380400001)(186003)(5660300002)(38070700005)(1076003)(2906002)(508600001)(4326008)(71200400001)(6486002)(2616005)(36756003)(6506007);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?blSHp97CS7Iw6Sx975r5sLo?= =?iso-8859-1?q?ynbpRS9jpC4u92st5lJPNicyiBFAbZ7oZC11a6n5KEdyfEnjtNH+1uT1rLlD?= =?iso-8859-1?q?bsJKuK0mk5cJQR0i2Rda/FRHayq2xXiHF/YxNGx2RZItodIB3wLyV2XVgMun?= =?iso-8859-1?q?Gi3Rto0rihiV5Twhc/51ol6CtRoGfXJCR3LBaccwyBbrDPFmGJvUomRveYgP?= =?iso-8859-1?q?W1p1bOS7GlMx0bNb1HJHrhWpBKQCAZS3tBANs9dBjvbTZ8ydw5EHT3PRaVaC?= =?iso-8859-1?q?fPVsFAMqG988uzDV9tFrDWgnqA/x4U0wLeCvg4qxf2L9X9gCv+LnG51YCged?= =?iso-8859-1?q?iSUlQy2oHjykB9AgMLPmUAHtk+rCgjcUkX9nJZwZ2v5FKLXNG6xVQPN8BUmP?= =?iso-8859-1?q?G4K7MFmAZNyvF2TnwLpeSh57oet2H0Zh5UUdgk5PZIOODj3kAkZPS/0F7dev?= =?iso-8859-1?q?B7xoY2+FcuFwbNlHX4TqbKJglvIiG3kYLMeF9M2SNMNiLu41/J3tbpJCJr3p?= =?iso-8859-1?q?aUPu+ANfnXmsEdRGZA4mHPP6ZoN+cIlN0jnENBiJqfSwSNyG/5rf1wELpmkx?= =?iso-8859-1?q?X1s9HM51zBYMh1UhcnxjASJslrKkwo8Y/KIV1ZuQXHNFXWRodE1HSeVIjng/?= =?iso-8859-1?q?d2omjnB3fK0RL3wh45Tlepn3qG7VRRuI8V+hQyfcNp3d+n0L+wf6W/uguejC?= =?iso-8859-1?q?Sle5Q8pyuqfmiQFuYpEetBoKzGw0OxytKRlYt0DPaFlJ6jU3QWxrO5QYlr5P?= =?iso-8859-1?q?4aIs+NVed8oavPYYw1Ilh+xBLeIK1SOc1b2jMMbMAxOGllmuBAufiFhLsvcj?= =?iso-8859-1?q?Wy3afXSgtefnXRQzC5FXvbo6529RYrMY95Y1s2eSx0o/iK6d/+Ug4LmzzHb5?= =?iso-8859-1?q?ZSY2KHJe0oy7HhF9lLovyhTs57vIUqENk4kVm4Xh8JvJ6dS/vjghM4R9Lhlg?= =?iso-8859-1?q?UTMdHe2tns/b3j07k1u7IO/Z5S5Hrv/ZU4A6VltGm+KqhvbizxmxEDHoYJzm?= =?iso-8859-1?q?EXelFwoGDreSqEb2gXyzOd3iY86+Oi4dXBhNHZ2Ev2UlzlLOAZiw0DR8P8WF?= =?iso-8859-1?q?yJliXPOx7ufZG/WNWV1u8OX6pt3LnBtwH7VtH2FFptF80BwqLQJQqSTZeE9j?= =?iso-8859-1?q?ZNDvOi28T2GwPMXRtSkoLqNycxpeI5kazbgxz7WZoGJ7rrNX7M1DkFiv/yTi?= =?iso-8859-1?q?XnnnQwP2oFMZ0CC9mWTtc5NCd5is+68kqHDCDVt9JnAJ4O1XmjOy6m+jekPf?= =?iso-8859-1?q?zZIn7idiyrQXa615V7xVSNHutbt/uslYqXxkN3WKjYosoHwvJxlorfHRokdH?= =?iso-8859-1?q?SA2Y1ZSKikWBfvH04R794AxQ1dKM3D9m/JfhxhWwf4zmlqvXjeJ0qsgaImHa?= =?iso-8859-1?q?W?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR11MB4943.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c368b93-408d-44f2-45c9-08d97931ed69 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2021 16:49:19.2187 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: U/x+GoRZlStL8RlZR4rZYKXkBaVW4OjNvdZlY53E8LJIeyjEyogbyRQkGHfAPJU9Kgpr5ezXtIvBKPZ1xt4XY2TTxlj+ly5o2J/fHVNnIZI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB5197 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ajay Singh Use the correct sequence to configure clockless registers for chip wake-up. The following sequence is expected from WILC chip for wakeup: - set wakeup bit in wakeup_reg register - after setting the wakeup bit, read back the clock status bit for wakeup complete. For SDIO/SPI modules, the wakeup sequence is the same except uses different register values so refactored the code to use common function for both SDIO/SPI bus. Signed-off-by: Ajay Singh --- .../wireless/microchip/wilc1000/cfg80211.c | 1 - .../net/wireless/microchip/wilc1000/netdev.h | 1 - .../net/wireless/microchip/wilc1000/wlan.c | 98 ++++++++++--------- .../net/wireless/microchip/wilc1000/wlan.h | 2 + .../net/wireless/microchip/wilc1000/wlan_if.h | 6 -- 5 files changed, 53 insertions(+), 55 deletions(-) diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c index 75160ab3914a..91a471f3b1c8 100644 --- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c +++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c @@ -1726,7 +1726,6 @@ int wilc_cfg80211_init(struct wilc **wilc, struct device *dev, int io_type, *wilc = wl; wl->io_type = io_type; wl->hif_func = ops; - wl->chip_ps_state = WILC_CHIP_WAKEDUP; for (i = 0; i < NQUEUES; i++) INIT_LIST_HEAD(&wl->txq[i].txq_head.list); diff --git a/drivers/net/wireless/microchip/wilc1000/netdev.h b/drivers/net/wireless/microchip/wilc1000/netdev.h index a39c62a20f04..79f73a72da57 100644 --- a/drivers/net/wireless/microchip/wilc1000/netdev.h +++ b/drivers/net/wireless/microchip/wilc1000/netdev.h @@ -265,7 +265,6 @@ struct wilc { bool suspend_event; struct workqueue_struct *hif_workqueue; - enum chip_ps_states chip_ps_state; struct wilc_cfg cfg; void *bus_data; struct net_device *monitor_dev; diff --git a/drivers/net/wireless/microchip/wilc1000/wlan.c b/drivers/net/wireless/microchip/wilc1000/wlan.c index 200a103a0a85..1aad537c468f 100644 --- a/drivers/net/wireless/microchip/wilc1000/wlan.c +++ b/drivers/net/wireless/microchip/wilc1000/wlan.c @@ -10,6 +10,8 @@ #include "cfg80211.h" #include "wlan_cfg.h" +#define WAKE_UP_TRIAL_RETRY 10000 + static inline bool is_wilc1000(u32 id) { return (id & (~WILC_CHIP_REV_FIELD)) == WILC_1000_BASE_ID; @@ -611,60 +613,62 @@ EXPORT_SYMBOL_GPL(chip_allow_sleep); void chip_wakeup(struct wilc *wilc) { - u32 reg, clk_status_reg; - const struct wilc_hif_func *h = wilc->hif_func; - - if (wilc->io_type == WILC_HIF_SPI) { - do { - h->hif_read_reg(wilc, WILC_SPI_WAKEUP_REG, ®); - h->hif_write_reg(wilc, WILC_SPI_WAKEUP_REG, - reg | WILC_SPI_WAKEUP_BIT); - h->hif_write_reg(wilc, WILC_SPI_WAKEUP_REG, - reg & ~WILC_SPI_WAKEUP_BIT); - - do { - usleep_range(2000, 2500); - wilc_get_chipid(wilc, true); - } while (wilc_get_chipid(wilc, true) == 0); - } while (wilc_get_chipid(wilc, true) == 0); - } else if (wilc->io_type == WILC_HIF_SDIO) { - h->hif_write_reg(wilc, WILC_SDIO_HOST_TO_FW_REG, - WILC_SDIO_HOST_TO_FW_BIT); - usleep_range(200, 400); - h->hif_read_reg(wilc, WILC_SDIO_WAKEUP_REG, ®); - do { - h->hif_write_reg(wilc, WILC_SDIO_WAKEUP_REG, - reg | WILC_SDIO_WAKEUP_BIT); - h->hif_read_reg(wilc, WILC_SDIO_CLK_STATUS_REG, - &clk_status_reg); - - while (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT)) { - usleep_range(2000, 2500); + u32 ret = 0; + u32 clk_status_val = 0, trials = 0; + u32 wakeup_reg, wakeup_bit; + u32 clk_status_reg, clk_status_bit; + u32 to_host_from_fw_reg, to_host_from_fw_bit; + u32 from_host_to_fw_reg, from_host_to_fw_bit; + const struct wilc_hif_func *hif_func = wilc->hif_func; - h->hif_read_reg(wilc, WILC_SDIO_CLK_STATUS_REG, - &clk_status_reg); - } - if (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT)) { - h->hif_write_reg(wilc, WILC_SDIO_WAKEUP_REG, - reg & ~WILC_SDIO_WAKEUP_BIT); - } - } while (!(clk_status_reg & WILC_SDIO_CLK_STATUS_BIT)); + if (wilc->io_type == WILC_HIF_SDIO) { + wakeup_reg = WILC_SDIO_WAKEUP_REG; + wakeup_bit = WILC_SDIO_WAKEUP_BIT; + clk_status_reg = WILC_SDIO_CLK_STATUS_REG; + clk_status_bit = WILC_SDIO_CLK_STATUS_BIT; + from_host_to_fw_reg = WILC_SDIO_HOST_TO_FW_REG; + from_host_to_fw_bit = WILC_SDIO_HOST_TO_FW_BIT; + to_host_from_fw_reg = WILC_SDIO_FW_TO_HOST_REG; + to_host_from_fw_bit = WILC_SDIO_FW_TO_HOST_BIT; + } else { + wakeup_reg = WILC_SPI_WAKEUP_REG; + wakeup_bit = WILC_SPI_WAKEUP_BIT; + clk_status_reg = WILC_SPI_CLK_STATUS_REG; + clk_status_bit = WILC_SPI_CLK_STATUS_BIT; + from_host_to_fw_reg = WILC_SPI_HOST_TO_FW_REG; + from_host_to_fw_bit = WILC_SPI_HOST_TO_FW_BIT; + to_host_from_fw_reg = WILC_SPI_FW_TO_HOST_REG; + to_host_from_fw_bit = WILC_SPI_FW_TO_HOST_BIT; } - if (wilc->chip_ps_state == WILC_CHIP_SLEEPING_MANUAL) { - if (wilc_get_chipid(wilc, false) < WILC_1000_BASE_ID_2B) { - u32 val32; + /* indicate host wakeup */ + ret = hif_func->hif_write_reg(wilc, from_host_to_fw_reg, + from_host_to_fw_bit); + if (ret) + return; - h->hif_read_reg(wilc, WILC_REG_4_TO_1_RX, &val32); - val32 |= BIT(6); - h->hif_write_reg(wilc, WILC_REG_4_TO_1_RX, val32); + /* Set wake-up bit */ + ret = hif_func->hif_write_reg(wilc, wakeup_reg, + wakeup_bit); + if (ret) + return; - h->hif_read_reg(wilc, WILC_REG_4_TO_1_TX_BANK0, &val32); - val32 |= BIT(6); - h->hif_write_reg(wilc, WILC_REG_4_TO_1_TX_BANK0, val32); + while (trials < WAKE_UP_TRIAL_RETRY) { + ret = hif_func->hif_read_reg(wilc, clk_status_reg, + &clk_status_val); + if (ret) { + pr_err("Bus error %d %x\n", ret, clk_status_val); + return; } + if (clk_status_val & clk_status_bit) + break; + + trials++; + } + if (trials >= WAKE_UP_TRIAL_RETRY) { + pr_err("Failed to wake-up the chip\n"); + return; } - wilc->chip_ps_state = WILC_CHIP_WAKEDUP; } EXPORT_SYMBOL_GPL(chip_wakeup); diff --git a/drivers/net/wireless/microchip/wilc1000/wlan.h b/drivers/net/wireless/microchip/wilc1000/wlan.h index 771c25fa849b..285e5d9a2b48 100644 --- a/drivers/net/wireless/microchip/wilc1000/wlan.h +++ b/drivers/net/wireless/microchip/wilc1000/wlan.h @@ -97,6 +97,8 @@ #define WILC_SPI_WAKEUP_REG 0x1 #define WILC_SPI_WAKEUP_BIT BIT(1) +#define WILC_SPI_CLK_STATUS_REG 0x0f +#define WILC_SPI_CLK_STATUS_BIT BIT(2) #define WILC_SPI_HOST_TO_FW_REG 0x0b #define WILC_SPI_HOST_TO_FW_BIT BIT(0) diff --git a/drivers/net/wireless/microchip/wilc1000/wlan_if.h b/drivers/net/wireless/microchip/wilc1000/wlan_if.h index 31c68643731d..6eb7eb4ac294 100644 --- a/drivers/net/wireless/microchip/wilc1000/wlan_if.h +++ b/drivers/net/wireless/microchip/wilc1000/wlan_if.h @@ -48,12 +48,6 @@ enum { WILC_FW_MAX_PSPOLL_PS = 4 }; -enum chip_ps_states { - WILC_CHIP_WAKEDUP = 0, - WILC_CHIP_SLEEPING_AUTO = 1, - WILC_CHIP_SLEEPING_MANUAL = 2 -}; - enum bus_acquire { WILC_BUS_ACQUIRE_ONLY = 0, WILC_BUS_ACQUIRE_AND_WAKEUP = 1,