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>
Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
CRs-Fixed: 944601
This commit is contained in:
Govind Singh 2015-11-24 15:07:58 +05:30 committed by Anand Kumar
parent 60615c28e8
commit f254de3130
2 changed files with 56 additions and 5 deletions

View File

@ -2,21 +2,21 @@
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-io-supply = <&mdmfermium_l11>;
vdd-wlan-xtal-supply = <&mdmfermium_l2>;
vdd-wlan-supply = <&rome_vreg>;
vdd-wlan-io-supply = <&pm8950_l5>;
};

View File

@ -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_xtal);
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: