Loading asoc/codecs/wcd938x/wcd938x.c +53 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) Loading Loading @@ -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 Loading
asoc/codecs/wcd938x/wcd938x.c +53 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) Loading Loading @@ -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