Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 477f211b authored by Vatsal Bucha's avatar Vatsal Bucha
Browse files

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: default avatarVatsal Bucha <vbucha@codeaurora.org>
parent 711dbb3d
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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;
};
};


+63 −2
Original line number Original line Diff line number Diff line
@@ -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;
	}
	}