Merge "ASoC: wcd934x: Set micbias curr to higher value when micb is enabled"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
a25f9ecc66
@@ -68,6 +68,9 @@
|
|||||||
|
|
||||||
#define WCD934X_FORMATS_S16_LE (SNDRV_PCM_FMTBIT_S16_LE)
|
#define WCD934X_FORMATS_S16_LE (SNDRV_PCM_FMTBIT_S16_LE)
|
||||||
|
|
||||||
|
#define MICB_LOAD_PROP "qcom,vreg-micb"
|
||||||
|
#define MICB_LOAD_DEFAULT 30400
|
||||||
|
|
||||||
/* Macros for packing register writes into a U32 */
|
/* Macros for packing register writes into a U32 */
|
||||||
#define WCD934X_PACKED_REG_SIZE sizeof(u32)
|
#define WCD934X_PACKED_REG_SIZE sizeof(u32)
|
||||||
#define WCD934X_CODEC_UNPACK_ENTRY(packed, reg, mask, val) \
|
#define WCD934X_CODEC_UNPACK_ENTRY(packed, reg, mask, val) \
|
||||||
@@ -637,6 +640,9 @@ struct tavil_priv {
|
|||||||
struct platform_device *pdev_child_devices
|
struct platform_device *pdev_child_devices
|
||||||
[WCD934X_CHILD_DEVICES_MAX];
|
[WCD934X_CHILD_DEVICES_MAX];
|
||||||
int child_count;
|
int child_count;
|
||||||
|
struct regulator *micb_load;
|
||||||
|
int micb_load_low;
|
||||||
|
int micb_load_high;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct tavil_reg_mask_val tavil_spkr_default[] = {
|
static const struct tavil_reg_mask_val tavil_spkr_default[] = {
|
||||||
@@ -4888,6 +4894,9 @@ int tavil_micbias_control(struct snd_soc_codec *codec,
|
|||||||
case MICB_ENABLE:
|
case MICB_ENABLE:
|
||||||
tavil->micb_ref[micb_index]++;
|
tavil->micb_ref[micb_index]++;
|
||||||
if (tavil->micb_ref[micb_index] == 1) {
|
if (tavil->micb_ref[micb_index] == 1) {
|
||||||
|
if (tavil->micb_load)
|
||||||
|
regulator_set_load(tavil->micb_load,
|
||||||
|
tavil->micb_load_high);
|
||||||
snd_soc_update_bits(codec, micb_reg, 0xC0, 0x40);
|
snd_soc_update_bits(codec, micb_reg, 0xC0, 0x40);
|
||||||
if (post_on_event && tavil->mbhc)
|
if (post_on_event && tavil->mbhc)
|
||||||
blocking_notifier_call_chain(
|
blocking_notifier_call_chain(
|
||||||
@@ -4918,6 +4927,9 @@ int tavil_micbias_control(struct snd_soc_codec *codec,
|
|||||||
&tavil->mbhc->notifier,
|
&tavil->mbhc->notifier,
|
||||||
post_off_event,
|
post_off_event,
|
||||||
&tavil->mbhc->wcd_mbhc);
|
&tavil->mbhc->wcd_mbhc);
|
||||||
|
if (tavil->micb_load)
|
||||||
|
regulator_set_load(tavil->micb_load,
|
||||||
|
tavil->micb_load_low);
|
||||||
}
|
}
|
||||||
if (is_dapm && post_dapm_off && tavil->mbhc)
|
if (is_dapm && post_dapm_off && tavil->mbhc)
|
||||||
blocking_notifier_call_chain(&tavil->mbhc->notifier,
|
blocking_notifier_call_chain(&tavil->mbhc->notifier,
|
||||||
@@ -10953,11 +10965,12 @@ static const struct snd_event_ops wcd934x_ssr_ops = {
|
|||||||
|
|
||||||
static int tavil_probe(struct platform_device *pdev)
|
static int tavil_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0, len = 0;
|
||||||
struct tavil_priv *tavil;
|
struct tavil_priv *tavil;
|
||||||
struct clk *wcd_ext_clk;
|
struct clk *wcd_ext_clk;
|
||||||
struct wcd9xxx_resmgr_v2 *resmgr;
|
struct wcd9xxx_resmgr_v2 *resmgr;
|
||||||
struct wcd9xxx_power_region *cdc_pwr;
|
struct wcd9xxx_power_region *cdc_pwr;
|
||||||
|
const __be32 *micb_prop;
|
||||||
|
|
||||||
tavil = devm_kzalloc(&pdev->dev, sizeof(struct tavil_priv),
|
tavil = devm_kzalloc(&pdev->dev, sizeof(struct tavil_priv),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -11084,6 +11097,26 @@ static int tavil_probe(struct platform_device *pdev)
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tavil->micb_load = NULL;
|
||||||
|
|
||||||
|
if (of_get_property(tavil->wcd9xxx->dev->of_node,
|
||||||
|
"qcom,vreg-micb-supply", NULL)) {
|
||||||
|
micb_prop = of_get_property(tavil->wcd9xxx->dev->of_node,
|
||||||
|
"qcom,cdc-vdd-mic-bias-current",
|
||||||
|
&len);
|
||||||
|
if (!micb_prop || (len != (2 * sizeof(__be32)))) {
|
||||||
|
tavil->micb_load_low = MICB_LOAD_DEFAULT;
|
||||||
|
tavil->micb_load_high = MICB_LOAD_DEFAULT;
|
||||||
|
} else {
|
||||||
|
tavil->micb_load_low = be32_to_cpup(&micb_prop[0]);
|
||||||
|
tavil->micb_load_high = be32_to_cpup(&micb_prop[1]);
|
||||||
|
}
|
||||||
|
tavil->micb_load = regulator_get(&pdev->dev, MICB_LOAD_PROP);
|
||||||
|
if (IS_ERR(tavil->micb_load))
|
||||||
|
dev_dbg(tavil->dev, "%s micb load get failed\n",
|
||||||
|
__func__);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
err_cdc_reg:
|
err_cdc_reg:
|
||||||
@@ -11125,6 +11158,9 @@ static int tavil_remove(struct platform_device *pdev)
|
|||||||
count < WCD934X_CHILD_DEVICES_MAX; count++)
|
count < WCD934X_CHILD_DEVICES_MAX; count++)
|
||||||
platform_device_unregister(tavil->pdev_child_devices[count]);
|
platform_device_unregister(tavil->pdev_child_devices[count]);
|
||||||
|
|
||||||
|
if (tavil->micb_load)
|
||||||
|
regulator_put(tavil->micb_load);
|
||||||
|
|
||||||
mutex_destroy(&tavil->micb_lock);
|
mutex_destroy(&tavil->micb_lock);
|
||||||
mutex_destroy(&tavil->svs_mutex);
|
mutex_destroy(&tavil->svs_mutex);
|
||||||
mutex_destroy(&tavil->codec_mutex);
|
mutex_destroy(&tavil->codec_mutex);
|
||||||
|
Reference in New Issue
Block a user