mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 15:11:48 -04:00
Merge "ASoC: wcd938x: Update mibias configuration on WCD938x"
This commit is contained in:
commit
ca34d4602c
1 changed files with 53 additions and 0 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue