ASoC: sm6150: Add logic to parse micbias from dt

Add logic to parse micbias info if it is
specified in dt.

CRs-Fixed: 2281591
Change-Id: I943cedcadeceaa4a7da3422cf427d5679fe703b6
Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
This commit is contained in:
Vatsal Bucha
2018-08-29 12:28:57 +05:30
parent 711dbb3dca
commit 477f211b8a
2 changed files with 65 additions and 2 deletions

View File

@@ -77,7 +77,9 @@ struct wcd937x_priv {
struct wcd937x_micbias_setting { struct wcd937x_micbias_setting {
u8 ldoh_v; u8 ldoh_v;
u32 cfilt1_mv; u32 cfilt1_mv;
u32 micb1_mv;
u32 micb2_mv; u32 micb2_mv;
u32 micb3_mv;
u8 bias1_cfilt_sel; u8 bias1_cfilt_sel;
}; };

View File

@@ -1725,6 +1725,65 @@ int wcd937x_reset(struct device *dev)
return rc; return rc;
} }
static int wcd937x_read_of_property_u32(struct device *dev, const char *name,
u32 *val)
{
int rc = 0;
rc = of_property_read_u32(dev->of_node, name, val);
if (rc)
dev_err(dev, "%s: Looking up %s property in node %s failed\n",
__func__, name, dev->of_node->full_name);
return rc;
}
static void wcd937x_dt_parse_micbias_info(struct device *dev,
struct wcd937x_micbias_setting *mb)
{
u32 prop_val = 0;
int rc = 0;
/* MB1 */
if (of_find_property(dev->of_node, "qcom,cdc-micbias1-mv",
NULL)) {
rc = wcd937x_read_of_property_u32(dev,
"qcom,cdc-micbias1-mv",
&prop_val);
if (!rc)
mb->micb1_mv = prop_val;
} else {
dev_info(dev, "%s: Micbias1 DT property not found\n",
__func__);
}
/* MB2 */
if (of_find_property(dev->of_node, "qcom,cdc-micbias2-mv",
NULL)) {
rc = wcd937x_read_of_property_u32(dev,
"qcom,cdc-micbias2-mv",
&prop_val);
if (!rc)
mb->micb2_mv = prop_val;
} else {
dev_info(dev, "%s: Micbias2 DT property not found\n",
__func__);
}
/* MB3 */
if (of_find_property(dev->of_node, "qcom,cdc-micbias3-mv",
NULL)) {
rc = wcd937x_read_of_property_u32(dev,
"qcom,cdc-micbias3-mv",
&prop_val);
if (!rc)
mb->micb3_mv = prop_val;
} else {
dev_info(dev, "%s: Micbias3 DT property not found\n",
__func__);
}
}
struct wcd937x_pdata *wcd937x_populate_dt_data(struct device *dev) struct wcd937x_pdata *wcd937x_populate_dt_data(struct device *dev)
{ {
struct wcd937x_pdata *pdata = NULL; struct wcd937x_pdata *pdata = NULL;
@@ -1755,6 +1814,7 @@ struct wcd937x_pdata *wcd937x_populate_dt_data(struct device *dev)
pdata->rx_slave = of_parse_phandle(dev->of_node, "qcom,rx-slave", 0); pdata->rx_slave = of_parse_phandle(dev->of_node, "qcom,rx-slave", 0);
pdata->tx_slave = of_parse_phandle(dev->of_node, "qcom,tx-slave", 0); pdata->tx_slave = of_parse_phandle(dev->of_node, "qcom,tx-slave", 0);
wcd937x_dt_parse_micbias_info(dev, &pdata->micbias);
return pdata; return pdata;
} }
@@ -1776,7 +1836,8 @@ static int wcd937x_bind(struct device *dev)
dev_err(dev, "%s: Fail to obtain platform data\n", __func__); dev_err(dev, "%s: Fail to obtain platform data\n", __func__);
return -EINVAL; return -EINVAL;
} }
wcd937x->dev = dev;
wcd937x->dev->platform_data = pdata;
wcd937x->rst_np = pdata->rst_np; wcd937x->rst_np = pdata->rst_np;
ret = msm_cdc_init_supplies(dev, &wcd937x->supplies, ret = msm_cdc_init_supplies(dev, &wcd937x->supplies,
pdata->regulator, pdata->num_supplies); pdata->regulator, pdata->num_supplies);
@@ -1854,7 +1915,7 @@ static int wcd937x_bind(struct device *dev)
ret = wcd_irq_init(wcd937x->irq_info, &wcd937x->virq); ret = wcd_irq_init(wcd937x->irq_info, &wcd937x->virq);
if (ret) { if (ret) {
dev_err(wcd937x->dev, "%s: IRQ init failed: %d\n", dev_err(dev, "%s: IRQ init failed: %d\n",
__func__, ret); __func__, ret);
goto err; goto err;
} }