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:
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user