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 <hauke@hauke-m.de>
This commit is contained in:
		@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					From 39f1332c526cd9d6de59a72520e8334e54b62cda Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Amitkumar Karwar <amit.karwar@redpinesignals.com>
 | 
				
			||||||
 | 
					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 <fengguang.wu@intel.com>
 | 
				
			||||||
 | 
					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 <amit.karwar@redpinesignals.com>
 | 
				
			||||||
 | 
					Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user