diff options
| author | Govind Singh <govinds@codeaurora.org> | 2015-11-24 15:07:58 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:12:17 -0700 |
| commit | 9e34c2bdf3bf44496a9bc719442d8f402cedb4d7 (patch) | |
| tree | 6e597f0ace7e95036b2d1fe8965a525b3f0d56eb | |
| parent | 89d90cdddb547ed6949171c2f887e39df3183e49 (diff) | |
net: cnss: enable rome_vreg_dsrc regulator for dsrc
rome_vreg_dsrc regulator is a fixed regulator and this regulator
is control by PMIC gpio4. This is being used as vdd supply for
the wlan DSRC module based on sdio interface. Enable rome_vreg_dsrc
voltage regulators to enable the power up support in CNSS SDIO
platform driver.
Change-Id: I7c6032b706d468cc57b5304a3627f526935fb3a3
Signed-off-by: Govind Singh <govinds@codeaurora.org>
| -rw-r--r-- | Documentation/devicetree/bindings/cnss/cnss-sdio-wlan.txt | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss/cnss_sdio.c | 51 |
2 files changed, 56 insertions, 3 deletions
diff --git a/Documentation/devicetree/bindings/cnss/cnss-sdio-wlan.txt b/Documentation/devicetree/bindings/cnss/cnss-sdio-wlan.txt index 71162c291eec..a8044a198209 100644 --- a/Documentation/devicetree/bindings/cnss/cnss-sdio-wlan.txt +++ b/Documentation/devicetree/bindings/cnss/cnss-sdio-wlan.txt @@ -2,21 +2,23 @@ This platform driver adds support for the CNSS subsystem used for SDIO based Wi-Fi devices. It also adds support to manage two 1.8V voltage -regulators and WLAN power enable 3.3V PMIC GPIO. The main purpose of this +regulators and WLAN power enable 3.3V regulators. The main purpose of this device tree entry below is to invoke the CNSS SDIO platform driver and provide handle to the WLAN power enable 3.3V pmic GPIO and two 1.8V PMIC voltage regulator resources. Required properties: - compatible: "qcom,cnss_sdio" - - wlan-pmic-gpio: 3.3V PMIC GPIO for external power supply. + - vdd-wlan-supply: phandle to the WLAN vdd regulator device tree node. + - vdd-wlan-dsrc-supply: phandle to the WLAN dsrc vdd regulator device tree node. - vdd-wlan-io-supply: phandle to the WLAN IO regulator device tree node. - vdd-wlan-xtal-supply: phandle to the WLAM XTAL regulator device tree node. Example: qcom,cnss-sdio { compatible = "qcom,cnss_sdio"; - cnss_sdio,wlan-pmic-gpio = <&pm8019_gpios 3 0>; + vdd-wlan-supply = <&rome_vreg>; + vdd-wlan-dsrc-supply = <&sdcard_ext_vreg>; vdd-wlan-io-supply = <&mdm9607_l11>; vdd-wlan-xtal-supply = <&mdm9607_l2>; }; diff --git a/drivers/net/wireless/cnss/cnss_sdio.c b/drivers/net/wireless/cnss/cnss_sdio.c index 6b086a436eb6..71f2b55f9030 100644 --- a/drivers/net/wireless/cnss/cnss_sdio.c +++ b/drivers/net/wireless/cnss/cnss_sdio.c @@ -23,6 +23,7 @@ #include <linux/slab.h> #define WLAN_VREG_NAME "vdd-wlan" +#define WLAN_VREG_DSRC_NAME "vdd-wlan-dsrc" #define WLAN_VREG_IO_NAME "vdd-wlan-io" #define WLAN_VREG_XTAL_NAME "vdd-wlan-xtal" @@ -53,6 +54,7 @@ struct cnss_sdio_regulator { struct regulator *wlan_io; struct regulator *wlan_xtal; struct regulator *wlan_vreg; + struct regulator *wlan_vreg_dsrc; }; static struct cnss_sdio_data { @@ -217,6 +219,40 @@ static int cnss_sdio_configure_wlan_enable_regulator(void) err_vdd_vreg_regulator: regulator_put(cnss_pdata->regulator.wlan_vreg); + + return error; +} + +static int cnss_sdio_configure_wlan_enable_dsrc_regulator(void) +{ + int error; + struct device *dev = &cnss_pdata->pdev->dev; + + if (of_get_property( + cnss_pdata->pdev->dev.of_node, + WLAN_VREG_DSRC_NAME "-supply", NULL)) { + cnss_pdata->regulator.wlan_vreg_dsrc = regulator_get( + &cnss_pdata->pdev->dev, WLAN_VREG_DSRC_NAME); + if (IS_ERR(cnss_pdata->regulator.wlan_vreg_dsrc)) { + error = PTR_ERR(cnss_pdata->regulator.wlan_vreg_dsrc); + dev_err(dev, "VDD-VREG-DSRC get failed error=%d\n", + error); + return error; + } + + error = regulator_enable(cnss_pdata->regulator.wlan_vreg_dsrc); + if (error) { + dev_err(dev, "VDD-VREG-DSRC enable failed error=%d\n", + error); + goto err_vdd_vreg_dsrc_regulator; + } + } + + return 0; + +err_vdd_vreg_dsrc_regulator: + regulator_put(cnss_pdata->regulator.wlan_vreg_dsrc); + return error; } @@ -301,6 +337,8 @@ static void cnss_sdio_release_resource(void) regulator_put(cnss_pdata->regulator.wlan_vreg); if (cnss_pdata->regulator.wlan_io) regulator_put(cnss_pdata->regulator.wlan_io); + if (cnss_pdata->regulator.wlan_vreg_dsrc) + regulator_put(cnss_pdata->regulator.wlan_vreg_dsrc); } static int cnss_sdio_probe(struct platform_device *pdev) @@ -348,9 +386,22 @@ static int cnss_sdio_probe(struct platform_device *pdev) } } + if (of_get_property( + cnss_pdata->pdev->dev.of_node, + WLAN_VREG_DSRC_NAME "-supply", NULL)) { + error = cnss_sdio_configure_wlan_enable_dsrc_regulator(); + if (error) { + dev_err(&pdev->dev, + "Failed to enable wlan dsrc enable regulator\n"); + goto err_wlan_dsrc_enable_regulator; + } + } + dev_info(&pdev->dev, "CNSS SDIO Driver registered"); return 0; +err_wlan_dsrc_enable_regulator: + regulator_put(cnss_pdata->regulator.wlan_vreg_dsrc); err_wlan_enable_regulator: regulator_put(cnss_pdata->regulator.wlan_vreg); err_wlan_enable_gpio: |
