sdio: Use bus type function for shutdown
cover sdio: Use bus type function for shutdown
Hello,
this series is part of an effort to get rid of the .shutdown() callback (and .probe() and .remove()) in struct device_driver. Preparing that, all sdio drivers that up to now use this callback are converted to a new sdio specific shutdown callback.
Patch #2 is just a cleanup I noticed while working on drivers/net/wireless/rsi/rsi_91x_sdio.c. Note that it's uncommon to have the shutdown callback conditionalized by #ifdef CONFIG_PM. I guess this dependency was introduced by mistake in commit 063848c3e155 ("rsi: sdio:
Add WOWLAN support for S5 shutdown state"), but I didn't address it here.
Patches #3 and #4 depend on the first patch, and with just the first patch applied there is a runtime warning (emitted by the driver core in driver_register()) for each unconverted driver. So it would be nice to get the whole series in during a single merge window to not let users face the warning.
This series was build tested on amd64 and arm64 using allmodconfig.
Best regards
Uwe
Uwe Kleine-König (4):
sdio: Provide a bustype shutdown function
wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
wifi: rsi: sdio: Migrate to use sdio specific shutdown function
wifi: rtw88: sdio: Migrate to use sdio specific shutdown function
drivers/mmc/core/sdio_bus.c | 25 +++++++++++++++++++ .../net/wireless/realtek/rtw88/rtw8723cs.c | 2 +- .../net/wireless/realtek/rtw88/rtw8723ds.c | 2 +- .../net/wireless/realtek/rtw88/rtw8821cs.c | 2 +- .../net/wireless/realtek/rtw88/rtw8822bs.c | 2 +- .../net/wireless/realtek/rtw88/rtw8822cs.c | 2 +- drivers/net/wireless/realtek/rtw88/sdio.c | 3 +-- drivers/net/wireless/realtek/rtw88/sdio.h | 2 +- drivers/net/wireless/rsi/rsi_91x_sdio.c | 11 +++----- include/linux/mmc/sdio_func.h | 1 + 10 files changed, 36 insertions(+), 16 deletions(-)
base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
Signature · 1 line
2.47.3
PATCH 1/4 sdio: Provide a bustype shutdown function
To prepare sdio drivers to migrate away from struct device_driver::shutdown (and then eventually remove that callback) create a serdev driver shutdown callback and migration code to keep the existing behaviour. Note this introduces a warning for each driver that isn't converted yet to that callback at register time.
--- drivers/mmc/core/sdio_bus.c | 25 +++++++++++++++++++++++++ include/linux/mmc/sdio_func.h | 1 + 2 files changed, 26 insertions(+)
drivers/mmc/core/sdio_bus.c +25 -0
@@ -232,6 +232,15 @@ static void sdio_bus_remove(struct device *dev)pm_runtime_put_sync (dev); } +static void sdio_bus_shutdown (struct device *dev) +{ +struct sdio_driver *drv =to_sdio_driver (dev->driver); +struct sdio_func *func =dev_to_sdio_func (dev); + +if (dev->driver && drv->shutdown) + drv->shutdown (func); +} +static const struct dev_pm_ops sdio_bus_pm_ops = { SET_SYSTEM_SLEEP_PM_OPS(pm_generic_suspend, pm_generic_resume) SET_RUNTIME_PM_OPS(
@@ -248,6 +257,7 @@ static const struct bus_type sdio_bus_type = { .uevent = sdio_bus_uevent, .probe = sdio_bus_probe, .remove = sdio_bus_remove, + .shutdown = sdio_bus_shutdown, .pm = &sdio_bus_pm_ops, };
@@ -261,6 +271,14 @@ void sdio_unregister_bus(void)bus_unregister (&sdio_bus_type); } +static void sdio_legacy_shutdown (struct sdio_func *func) +{ +struct device *dev = &func->dev; +struct device_driver *driver = dev->driver; + + driver->shutdown (dev); +} +/** * __sdio_register_driver - register a function driver * @drv: SDIO function driver
@@ -272,6 +290,13 @@ int __sdio_register_driver(struct sdio_driver *drv, struct module *owner) drv->drv.bus = &sdio_bus_type; drv->drv.owner = owner; +/* +* This driver needs updating. Note that driver_register() warns about +* this, so we're not adding another warning here. +*/ +if (!drv->shutdown && drv->drv.shutdown) + drv->shutdown = sdio_legacy_shutdown; +return driver_register (&drv->drv); }EXPORT_SYMBOL_GPL (__sdio_register_driver);
include/linux/mmc/sdio_func.h +1 -0
@@ -78,6 +78,7 @@ struct sdio_driver {int (*probe)(struct sdio_func *,const struct sdio_device_id *);void (*remove)(struct sdio_func *); +void (*shutdown)(struct sdio_func *);struct device_driver drv; };
Signature · 1 line
2.47.3
PATCH 2/4 wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
In reply to Uwe Kleine-KönigThis drops two #ifdefs (which is good because they are ugly) without changing semantics. This also improves compile coverage because all the code in the first #ifdef block is now compiled even for configurations without CONFIG_PM (and then thrown away).
--- drivers/net/wireless/rsi/rsi_91x_sdio.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/net/wireless/rsi/rsi_91x_sdio.c +2 -6
@@ -1243,7 +1243,6 @@ static void rsi_disconnect(struct sdio_func *pfunction) } -#ifdef CONFIG_PM static int rsi_set_sdio_pm_caps (struct rsi_hw *adapter) {struct rsi_91x_sdiodev *dev = adapter->rsi_dev;
@@ -1499,7 +1498,6 @@ static const struct dev_pm_ops rsi_pm_ops = { .thaw = rsi_thaw, .restore = rsi_restore, }; -#endif static const struct sdio_device_id rsi_dev_table[] = { {SDIO_DEVICE (SDIO_VENDOR_ID_RSI ,SDIO_DEVICE_ID_RSI_9113 ) },
@@ -1512,12 +1510,10 @@ static struct sdio_driver rsi_driver = { .probe = rsi_probe, .remove = rsi_disconnect, .id_table = rsi_dev_table, -#ifdef CONFIG_PM .drv = { - .pm = &rsi_pm_ops, - .shutdown = rsi_shutdown, + .pm = pm_ptr(&rsi_pm_ops), + .shutdown = pm_ptr(rsi_shutdown), } -#endif };module_sdio_driver (rsi_driver);
Signature · 1 line
2.47.3
kernel test robot
build botRe: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
kernel test robot noticed the following build errors:
Hi Uwe,
kernel test robot noticed the following build errors:
[auto build test ERROR on 8f0b4cce4481fb22653697cced8d0d04027cb1e8]
url: https://github.com/intel-lab-lkp/linux/commits/Uwe-Kleine-K-nig/sdio-Provide-a-bustype-shutdown-function/20251217-191920 base: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 patch link: https://lore.kernel.org/r/f291cca2741f6ac994b2bde1fb9d21194fec4d3e.1765968841.git.ukleinek%40kernel.org patch subject: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20251221/[email protected]/config) compiler: nios2-linux-gcc (GCC) 11.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251221/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
drivers/net/wireless/rsi/rsi_91x_sdio.c: In function 'rsi_shutdown':
>> drivers/net/wireless/rsi/rsi_91x_sdio.c:1454:41: error: 'struct wiphy' has no member named 'wowlan_config'
1454 | if (hw && hw->wiphy && hw->wiphy->wowlan_config) {
| ^~
>> drivers/net/wireless/rsi/rsi_91x_sdio.c:1455:21: error: implicit declaration of function 'rsi_config_wowlan' [-Werror=implicit-function-declaration]
1455 | if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
| ^~~~~~~~~~~~~~~~~
drivers/net/wireless/rsi/rsi_91x_sdio.c:1455:57: error: 'struct wiphy' has no member named 'wowlan_config'
1455 | if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
| ^~cc1: some warnings being treated as errors
vim +1454 drivers/net/wireless/rsi/rsi_91x_sdio.c
b6c8d06c8a6465 Karun Eagalapati 2017-10-27 1444
063848c3e1558e Karun Eagalapati 2017-10-27 1445 static void rsi_shutdown(struct device *dev)
063848c3e1558e Karun Eagalapati 2017-10-27 1446 {
063848c3e1558e Karun Eagalapati 2017-10-27 1447 struct sdio_func *pfunction = dev_to_sdio_func(dev);
063848c3e1558e Karun Eagalapati 2017-10-27 1448 struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
f9bf6e729f4ebc Wu Yunchuan 2023-08-03 1449 struct rsi_91x_sdiodev *sdev = adapter->rsi_dev;
063848c3e1558e Karun Eagalapati 2017-10-27 1450 struct ieee80211_hw *hw = adapter->hw;
063848c3e1558e Karun Eagalapati 2017-10-27 1451
063848c3e1558e Karun Eagalapati 2017-10-27 1452 rsi_dbg(ERR_ZONE, "SDIO Bus shutdown =====>\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1453
b241e260820b68 Marek Vasut 2023-05-28 @1454 if (hw && hw->wiphy && hw->wiphy->wowlan_config) {
b241e260820b68 Marek Vasut 2023-05-28 @1455 if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
063848c3e1558e Karun Eagalapati 2017-10-27 1456 rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n");
16bbc3eb83728c Martin Kepplinger 2020-01-29 1457 }
063848c3e1558e Karun Eagalapati 2017-10-27 1458
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1459 if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 &&
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1460 adapter->priv->bt_adapter) {
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1461 rsi_bt_ops.detach(adapter->priv->bt_adapter);
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1462 adapter->priv->bt_adapter = NULL;
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1463 }
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1464
063848c3e1558e Karun Eagalapati 2017-10-27 1465 rsi_sdio_disable_interrupts(sdev->pfunction);
063848c3e1558e Karun Eagalapati 2017-10-27 1466
063848c3e1558e Karun Eagalapati 2017-10-27 1467 if (sdev->write_fail)
063848c3e1558e Karun Eagalapati 2017-10-27 1468 rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1469
063848c3e1558e Karun Eagalapati 2017-10-27 1470 rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1471 }
063848c3e1558e Karun Eagalapati 2017-10-27 1472 Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
kernel test robot
build botRe: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
In reply to Uwe Kleine-Königkernel test robot noticed the following build errors:
Hi Uwe,
kernel test robot noticed the following build errors:
[auto build test ERROR on 8f0b4cce4481fb22653697cced8d0d04027cb1e8]
url: https://github.com/intel-lab-lkp/linux/commits/Uwe-Kleine-K-nig/sdio-Provide-a-bustype-shutdown-function/20251217-191920 base: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 patch link: https://lore.kernel.org/r/f291cca2741f6ac994b2bde1fb9d21194fec4d3e.1765968841.git.ukleinek%40kernel.org patch subject: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM config: hexagon-allmodconfig (https://download.01.org/0day-ci/archive/20251221/[email protected]/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251221/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
>> drivers/net/wireless/rsi/rsi_91x_sdio.c:1454:36: error: no member named 'wowlan_config' in 'struct wiphy'
1454 | if (hw && hw->wiphy && hw->wiphy->wowlan_config) {
| ~~~~~~~~~ ^
>> drivers/net/wireless/rsi/rsi_91x_sdio.c:1455:7: error: call to undeclared function 'rsi_config_wowlan'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
1455 | if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
| ^ drivers/net/wireless/rsi/rsi_91x_sdio.c:1455:45: error: no member named 'wowlan_config' in 'struct wiphy'
1455 | if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
| ~~~~~~~~~ ^
3 errors generated.
vim +1454 drivers/net/wireless/rsi/rsi_91x_sdio.c
b6c8d06c8a6465 Karun Eagalapati 2017-10-27 1444
063848c3e1558e Karun Eagalapati 2017-10-27 1445 static void rsi_shutdown(struct device *dev)
063848c3e1558e Karun Eagalapati 2017-10-27 1446 {
063848c3e1558e Karun Eagalapati 2017-10-27 1447 struct sdio_func *pfunction = dev_to_sdio_func(dev);
063848c3e1558e Karun Eagalapati 2017-10-27 1448 struct rsi_hw *adapter = sdio_get_drvdata(pfunction);
f9bf6e729f4ebc Wu Yunchuan 2023-08-03 1449 struct rsi_91x_sdiodev *sdev = adapter->rsi_dev;
063848c3e1558e Karun Eagalapati 2017-10-27 1450 struct ieee80211_hw *hw = adapter->hw;
063848c3e1558e Karun Eagalapati 2017-10-27 1451
063848c3e1558e Karun Eagalapati 2017-10-27 1452 rsi_dbg(ERR_ZONE, "SDIO Bus shutdown =====>\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1453
b241e260820b68 Marek Vasut 2023-05-28 @1454 if (hw && hw->wiphy && hw->wiphy->wowlan_config) {
b241e260820b68 Marek Vasut 2023-05-28 @1455 if (rsi_config_wowlan(adapter, hw->wiphy->wowlan_config))
063848c3e1558e Karun Eagalapati 2017-10-27 1456 rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n");
16bbc3eb83728c Martin Kepplinger 2020-01-29 1457 }
063848c3e1558e Karun Eagalapati 2017-10-27 1458
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1459 if (IS_ENABLED(CONFIG_RSI_COEX) && adapter->priv->coex_mode > 1 &&
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1460 adapter->priv->bt_adapter) {
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1461 rsi_bt_ops.detach(adapter->priv->bt_adapter);
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1462 adapter->priv->bt_adapter = NULL;
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1463 }
cbde979b33fa16 Siva Rebbagondla 2019-02-04 1464
063848c3e1558e Karun Eagalapati 2017-10-27 1465 rsi_sdio_disable_interrupts(sdev->pfunction);
063848c3e1558e Karun Eagalapati 2017-10-27 1466
063848c3e1558e Karun Eagalapati 2017-10-27 1467 if (sdev->write_fail)
063848c3e1558e Karun Eagalapati 2017-10-27 1468 rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1469
063848c3e1558e Karun Eagalapati 2017-10-27 1470 rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n");
063848c3e1558e Karun Eagalapati 2017-10-27 1471 }
063848c3e1558e Karun Eagalapati 2017-10-27 1472 Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Re: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
In reply to Uwe Kleine-KönigQuoted 4 lines · Uwe Kleine-König
This drops two #ifdefs (which is good because they are ugly) without changing semantics. This also improves compile coverage because all the code in the first #ifdef block is now compiled even for configurations without
CONFIG_PM(and then thrown away).
This didn't build, and given that we never got 1/4 I'm going to assume it wasn't destined to the wireless tree.
johannes
Re: [PATCH v1 2/4] wifi: rsi: sdio: Reduce use of #ifdef for CONFIG_PM
Quoted 8 lines · Johannes Berg
Quoted 4 lines · Uwe Kleine-König
This drops two #ifdefs (which is good because they are ugly) without changing semantics. This also improves compile coverage because all the code in the first #ifdef block is now compiled even for configurations without
CONFIG_PM(and then thrown away).This didn't build, and given that we never got 1/4 I'm going to assume it wasn't destined to the wireless tree.
Yes, this depends on patch #1, I expected the series to go in via whatever tree sdio usually goes in and didn't notice that all users are in the wireless subsystem.
The kernel robot also found an issue[1] that needs addressing (probably by dropping patch #2 from the series). Will look into that next year.
Best regards
Uwe
PATCH 3/4 wifi: rsi: sdio: Migrate to use sdio specific shutdown function
In reply to Uwe Kleine-KönigThis saves a cast in the driver. The motivation is stop using the callback .shutdown in rsi_driver.drv to make it possible to drop that.
--- drivers/net/wireless/rsi/rsi_91x_sdio.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/net/wireless/rsi/rsi_91x_sdio.c +2 -3
@@ -1442,9 +1442,8 @@ static int rsi_thaw(struct device *dev)return 0 ; } -static void rsi_shutdown (struct device *dev) +static void rsi_shutdown (struct sdio_func *pfunction) { -struct sdio_func *pfunction =dev_to_sdio_func (dev);struct rsi_hw *adapter =sdio_get_drvdata (pfunction);struct rsi_91x_sdiodev *sdev = adapter->rsi_dev;struct ieee80211_hw *hw = adapter->hw;
@@ -1509,10 +1508,10 @@ static struct sdio_driver rsi_driver = { .name = "RSI-SDIO WLAN", .probe = rsi_probe, .remove = rsi_disconnect, + .shutdown = pm_ptr(rsi_shutdown), .id_table = rsi_dev_table, .drv = { .pm = pm_ptr(&rsi_pm_ops), - .shutdown = pm_ptr(rsi_shutdown), } };module_sdio_driver (rsi_driver);
Signature · 1 line
2.47.3
Re: [PATCH v1 3/4] wifi: rsi: sdio: Migrate to use sdio specific shutdown function
Quoted 25 lines · Uwe Kleine-König
This saves a cast in the driver. The motivation is stop using the callback .shutdown in rsi_driver.drv to make it possible to drop that.
Signed-off-by Uwe Kleine-König <[email protected]>--- drivers/net/wireless/rsi/rsi_91x_sdio.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)drivers/net/wireless/rsi/rsi_91x_sdio.c +1
-2@@ -1442,9 +1442,8 @@ static int rsi_thaw(struct device *dev)return 0 ; } -static void rsi_shutdown (struct device *dev) +static void rsi_shutdown (struct sdio_func *pfunction) { -struct sdio_func *pfunction =dev_to_sdio_func (dev);struct rsi_hw *adapter =sdio_get_drvdata (pfunction);struct rsi_91x_sdiodev *sdev = adapter->rsi_dev;struct ieee80211_hw *hw = adapter->hw;
drivers/net/wireless/rsi/rsi_91x_sdio.c static struct sdio_driver rsi_driver = { · line 1515
Quoted 8 lines
drivers/net/wireless/rsi/rsi_91x_sdio.c +1
-1@@ -1509,10 +1508,10 @@ static struct sdio_driver rsi_driver = { .name = "RSI-SDIO WLAN", .probe = rsi_probe, .remove = rsi_disconnect, + .shutdown = pm_ptr(rsi_shutdown), .id_table = rsi_dev_table, .drv = { .pm = pm_ptr(&rsi_pm_ops), - .shutdown = pm_ptr(rsi_shutdown),
Apologize for my ignorance, but why does an SDIO function driver need a ->shutdown() callback in the first place?
What does it need to do during shutdown?
Quoted 6 lines
drivers/net/wireless/rsi/rsi_91x_sdio.c +0
-1} };module_sdio_driver (rsi_driver); --2.47.3
Kind regards
Uffe
PATCH 4/4 wifi: rtw88: sdio: Migrate to use sdio specific shutdown function
In reply to Uwe Kleine-KönigThis saves a cast in the driver. The motivation is stop using the callback .shutdown in rsi_driver.drv to make it possible to drop that.
--- drivers/net/wireless/realtek/rtw88/rtw8723cs.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8723ds.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8821cs.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8822bs.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8822cs.c | 2 +- drivers/net/wireless/realtek/rtw88/sdio.c | 3 +-- drivers/net/wireless/realtek/rtw88/sdio.h | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-)
drivers/net/wireless/realtek/rtw88/rtw8723cs.c +1 -1
@@ -23,9 +23,9 @@ static struct sdio_driver rtw_8723cs_driver = { .id_table = rtw_8723cs_id_table, .probe = rtw_sdio_probe, .remove = rtw_sdio_remove, + .shutdown = rtw_sdio_shutdown, .drv = { .pm = &rtw_sdio_pm_ops, - .shutdown = rtw_sdio_shutdown }};module_sdio_driver (rtw_8723cs_driver);
drivers/net/wireless/realtek/rtw88/rtw8723ds.c +1 -1
@@ -28,10 +28,10 @@ static struct sdio_driver rtw_8723ds_driver = { .name = KBUILD_MODNAME, .probe = rtw_sdio_probe, .remove = rtw_sdio_remove, + .shutdown = rtw_sdio_shutdown, .id_table = rtw_8723ds_id_table, .drv = { .pm = &rtw_sdio_pm_ops, - .shutdown = rtw_sdio_shutdown, } };module_sdio_driver (rtw_8723ds_driver);
drivers/net/wireless/realtek/rtw88/rtw8821cs.c +1 -1
@@ -23,10 +23,10 @@ static struct sdio_driver rtw_8821cs_driver = { .name = KBUILD_MODNAME, .probe = rtw_sdio_probe, .remove = rtw_sdio_remove, + .shutdown = rtw_sdio_shutdown, .id_table = rtw_8821cs_id_table, .drv = { .pm = &rtw_sdio_pm_ops, - .shutdown = rtw_sdio_shutdown, } };module_sdio_driver (rtw_8821cs_driver);
drivers/net/wireless/realtek/rtw88/rtw8822bs.c +1 -1
@@ -23,10 +23,10 @@ static struct sdio_driver rtw_8822bs_driver = { .name = KBUILD_MODNAME, .probe = rtw_sdio_probe, .remove = rtw_sdio_remove, + .shutdown = rtw_sdio_shutdown, .id_table = rtw_8822bs_id_table, .drv = { .pm = &rtw_sdio_pm_ops, - .shutdown = rtw_sdio_shutdown, } };module_sdio_driver (rtw_8822bs_driver);
drivers/net/wireless/realtek/rtw88/rtw8822cs.c +1 -1
@@ -23,10 +23,10 @@ static struct sdio_driver rtw_8822cs_driver = { .name = KBUILD_MODNAME, .probe = rtw_sdio_probe, .remove = rtw_sdio_remove, + .shutdown = rtw_sdio_shutdown, .id_table = rtw_8822cs_id_table, .drv = { .pm = &rtw_sdio_pm_ops, - .shutdown = rtw_sdio_shutdown, } };module_sdio_driver (rtw_8822cs_driver);
drivers/net/wireless/realtek/rtw88/sdio.c +1 -2
@@ -1412,9 +1412,8 @@ void rtw_sdio_remove(struct sdio_func *sdio_func) }EXPORT_SYMBOL (rtw_sdio_remove); -void rtw_sdio_shutdown (struct device *dev) +void rtw_sdio_shutdown (struct sdio_func *sdio_func) { -struct sdio_func *sdio_func =dev_to_sdio_func (dev);const struct rtw_chip_info *chip;struct ieee80211_hw *hw;struct rtw_dev *rtwdev;
drivers/net/wireless/realtek/rtw88/sdio.h +1 -1
@@ -166,7 +166,7 @@ extern const struct dev_pm_ops rtw_sdio_pm_ops;int rtw_sdio_probe (struct sdio_func *sdio_func,const struct sdio_device_id *id);void rtw_sdio_remove (struct sdio_func *sdio_func); -void rtw_sdio_shutdown (struct device *dev); +void rtw_sdio_shutdown (struct sdio_func *sdio_func);static inline bool rtw_sdio_is_sdio30_supported (struct rtw_dev *rtwdev) {
Signature · 1 line
2.47.3