diff options
author | Andy Duan <fugang.duan@nxp.com> | 2019-01-04 14:48:59 +0800 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:44:49 +0800 |
commit | 9198db3a1a052eb3f0fcbd651f3a2ea1cde03355 (patch) | |
tree | 294e5380311b55b92c557c79ea475113f6f455fc /drivers/net/wireless/broadcom/brcm80211 | |
parent | 0536e4052dc984695bab1a52fa6d315dd5aad5c9 (diff) |
MLK-20681 brcmfmac: add brcmfmac platform device pinctrl state support
Add brcmfmac platform device pinctrl state support. That is useful
for dynamically configurate pin group for different wlan chips.
Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
(cherry picked from commit 88f2834cd5b8cb8864af68d265b5bdee3000c4bf)
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211')
-rw-r--r-- | drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c index 2fe7efc07dd7..31f2ea29146d 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c @@ -8,6 +8,7 @@ #include <linux/netdevice.h> #include <linux/module.h> #include <linux/firmware.h> +#include <linux/pinctrl/consumer.h> #include <brcmu_wifi.h> #include <brcmu_utils.h> #include "core.h" @@ -442,6 +443,7 @@ struct brcmf_mp_device *brcmf_get_module_param(struct device *dev, /* See if there is any device specific platform data configured */ found = false; if (brcmfmac_pdata) { + pinctrl_pm_select_default_state(brcmfmac_pdata->dev); for (i = 0; i < brcmfmac_pdata->device_count; i++) { device_pd = &brcmfmac_pdata->devices[i]; if ((device_pd->bus_type == bus_type) && @@ -475,10 +477,30 @@ void brcmf_release_module_param(struct brcmf_mp_device *module_param) static int __init brcmf_common_pd_probe(struct platform_device *pdev) { + int err; + struct brcmfmac_platform_data pdata = { + .power_on = NULL, + .power_off = NULL, + .fw_alternative_path = NULL, + .device_count = 0, + }; + brcmf_dbg(INFO, "Enter\n"); brcmfmac_pdata = dev_get_platdata(&pdev->dev); + if (!brcmfmac_pdata) { + err = platform_device_add_data(pdev, &pdata, + sizeof(pdata)); + if (err) + brcmf_err("platform data allocation failed\n"); + brcmfmac_pdata = dev_get_platdata(&pdev->dev); + pinctrl_pm_select_idle_state(&pdev->dev); + } + + if (!brcmfmac_pdata) + return 0; + brcmfmac_pdata->dev = &pdev->dev; if (brcmfmac_pdata->power_on) brcmfmac_pdata->power_on(); @@ -489,7 +511,7 @@ static int brcmf_common_pd_remove(struct platform_device *pdev) { brcmf_dbg(INFO, "Enter\n"); - if (brcmfmac_pdata->power_off) + if (brcmfmac_pdata && brcmfmac_pdata->power_off) brcmfmac_pdata->power_off(); return 0; |