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

Commit ca34d460 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: wcd938x: Update mibias configuration on WCD938x"

parents 16bfcd8c 88c75963
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -2779,6 +2779,40 @@ int wcd938x_info_create_codec_entry(struct snd_info_entry *codec_root,
}
EXPORT_SYMBOL(wcd938x_info_create_codec_entry);

static int wcd938x_set_micbias_data(struct wcd938x_priv *wcd938x,
			      struct wcd938x_pdata *pdata)
{
	int vout_ctl_1 = 0, vout_ctl_2 = 0, vout_ctl_3 = 0, vout_ctl_4 = 0;
	int rc = 0;

	if (!pdata) {
		dev_err(wcd938x->dev, "%s: NULL pdata\n", __func__);
		return -ENODEV;
	}

	/* set micbias voltage */
	vout_ctl_1 = wcd938x_get_micb_vout_ctl_val(pdata->micbias.micb1_mv);
	vout_ctl_2 = wcd938x_get_micb_vout_ctl_val(pdata->micbias.micb2_mv);
	vout_ctl_3 = wcd938x_get_micb_vout_ctl_val(pdata->micbias.micb3_mv);
	vout_ctl_4 = wcd938x_get_micb_vout_ctl_val(pdata->micbias.micb4_mv);
	if (vout_ctl_1 < 0 || vout_ctl_2 < 0 || vout_ctl_3 < 0 ||
	    vout_ctl_4 < 0) {
		rc = -EINVAL;
		goto done;
	}
	regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB1, 0x3F,
			   vout_ctl_1);
	regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB2, 0x3F,
			   vout_ctl_2);
	regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB3, 0x3F,
			   vout_ctl_3);
	regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB4, 0x3F,
			   vout_ctl_4);

done:
	return rc;
}

static int wcd938x_soc_codec_probe(struct snd_soc_component *component)
{
	struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component);
@@ -3026,6 +3060,19 @@ static void wcd938x_dt_parse_micbias_info(struct device *dev,
		dev_info(dev, "%s: Micbias3 DT property not found\n",
			__func__);
	}

	/* MB4 */
	if (of_find_property(dev->of_node, "qcom,cdc-micbias4-mv",
				    NULL)) {
		rc = wcd938x_read_of_property_u32(dev,
						  "qcom,cdc-micbias4-mv",
						  &prop_val);
		if (!rc)
			mb->micb4_mv = prop_val;
	} else {
		dev_info(dev, "%s: Micbias4 DT property not found\n",
			__func__);
	}
}

static int wcd938x_reset_low(struct device *dev)
@@ -3164,6 +3211,12 @@ static int wcd938x_bind(struct device *dev)
	}
	wcd938x->tx_swr_dev->slave_irq = wcd938x->virq;

	ret = wcd938x_set_micbias_data(wcd938x, pdata);
	if (ret < 0) {
		dev_err(dev, "%s: bad micbias pdata\n", __func__);
		goto err_irq;
	}

	/* Request for watchdog interrupt */
	wcd_request_irq(&wcd938x->irq_info, WCD938X_IRQ_HPHR_PDM_WD_INT,
			"HPHR PDM WD INT", wcd938x_wd_handle_irq, NULL);