From: Hauke Mehrtens Date: Wed, 18 Apr 2018 21:50:25 +0000 (+0200) Subject: mac80211: Fix loading of rsi_sdio module X-Git-Tag: v18.06.0-rc1~382 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=51e4868fc90e79adf6a58cb3af6ab178b339d84d;p=oweals%2Fopenwrt.git mac80211: Fix loading of rsi_sdio module When CONFIG_PM was not set rsi_sdio_reinit_device() was not compiled into the driver but referenced. This is a backport form the mainline Linux kernel. Signed-off-by: Hauke Mehrtens --- diff --git a/package/kernel/mac80211/patches/971-rsi-move-rsi_sdio_reinit_device-out-of-CONFIG_PM.patch b/package/kernel/mac80211/patches/971-rsi-move-rsi_sdio_reinit_device-out-of-CONFIG_PM.patch new file mode 100644 index 0000000000..499b4ee7fc --- /dev/null +++ b/package/kernel/mac80211/patches/971-rsi-move-rsi_sdio_reinit_device-out-of-CONFIG_PM.patch @@ -0,0 +1,96 @@ +From 39f1332c526cd9d6de59a72520e8334e54b62cda Mon Sep 17 00:00:00 2001 +From: Amitkumar Karwar +Date: Wed, 1 Nov 2017 17:42:44 +0530 +Subject: rsi: move rsi_sdio_reinit_device() out of CONFIG_PM + +This function is generic. It doesn't contain wowlan specific code. +It should not be under CONFIG_PM. This patch resolves compilation +errors observed when CONFIG_PM flag is disabled. + +Reported-by: kbuild test robot +Fixes: ef71ed0608c ("rsi: sdio: Add WOWLAN support for S5 shutdown state") +Fixes: a24e35fcee0 ("rsi: sdio: Add WOWLAN support for S4 hibernate state") +Fixes: e1ced6422a3 ("rsi: sdio: add WOWLAN support for S3 suspend state") +Signed-off-by: Amitkumar Karwar +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/rsi/rsi_91x_sdio.c | 52 ++++++++++++++++----------------- + drivers/net/wireless/rsi/rsi_sdio.h | 1 - + 2 files changed, 26 insertions(+), 27 deletions(-) + +--- a/drivers/net/wireless/rsi/rsi_91x_sdio.c ++++ b/drivers/net/wireless/rsi/rsi_91x_sdio.c +@@ -871,6 +871,32 @@ fail: + return status; + } + ++static int rsi_sdio_reinit_device(struct rsi_hw *adapter) ++{ ++ struct rsi_91x_sdiodev *sdev = adapter->rsi_dev; ++ struct sdio_func *pfunction = sdev->pfunction; ++ int ii; ++ ++ for (ii = 0; ii < NUM_SOFT_QUEUES; ii++) ++ skb_queue_purge(&adapter->priv->tx_queue[ii]); ++ ++ /* Initialize device again */ ++ sdio_claim_host(pfunction); ++ ++ sdio_release_irq(pfunction); ++ rsi_reset_card(pfunction); ++ ++ sdio_enable_func(pfunction); ++ rsi_setupcard(adapter); ++ rsi_init_sdio_slave_regs(adapter); ++ sdio_claim_irq(pfunction, rsi_handle_interrupt); ++ rsi_hal_device_init(adapter); ++ ++ sdio_release_host(pfunction); ++ ++ return 0; ++} ++ + static struct rsi_host_intf_ops sdio_host_intf_ops = { + .write_pkt = rsi_sdio_host_intf_write_pkt, + .read_pkt = rsi_sdio_host_intf_read_pkt, +@@ -1281,32 +1307,6 @@ static void rsi_shutdown(struct device * + rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n"); + } + +-int rsi_sdio_reinit_device(struct rsi_hw *adapter) +-{ +- struct rsi_91x_sdiodev *sdev = adapter->rsi_dev; +- struct sdio_func *pfunction = sdev->pfunction; +- int ii; +- +- for (ii = 0; ii < NUM_SOFT_QUEUES; ii++) +- skb_queue_purge(&adapter->priv->tx_queue[ii]); +- +- /* Initialize device again */ +- sdio_claim_host(pfunction); +- +- sdio_release_irq(pfunction); +- rsi_reset_card(pfunction); +- +- sdio_enable_func(pfunction); +- rsi_setupcard(adapter); +- rsi_init_sdio_slave_regs(adapter); +- sdio_claim_irq(pfunction, rsi_handle_interrupt); +- rsi_hal_device_init(adapter); +- +- sdio_release_host(pfunction); +- +- return 0; +-} +- + static int rsi_restore(struct device *dev) + { + struct sdio_func *pfunction = dev_to_sdio_func(dev); +--- a/drivers/net/wireless/rsi/rsi_sdio.h ++++ b/drivers/net/wireless/rsi/rsi_sdio.h +@@ -131,5 +131,4 @@ int rsi_sdio_master_access_msword(struct + void rsi_sdio_ack_intr(struct rsi_hw *adapter, u8 int_bit); + int rsi_sdio_determine_event_timeout(struct rsi_hw *adapter); + int rsi_sdio_check_buffer_status(struct rsi_hw *adapter, u8 q_num); +-int rsi_sdio_reinit_device(struct rsi_hw *adapter); + #endif