Commit ab0925ab authored by Mark Brown's avatar Mark Brown

ASoC: da7219: Small fixes for jack detection and removal

Merge series from Adam Thomson <DLG-Adam.Thomson.Opensource@dm.renesas.com>:

This series contains 2 small fixes around the AAD part of DA7219, particularly
in relation to jack pole detection on certain active headsets, and tidy up
when a jack is removed.
parents d6f8168e 2d969e8f
...@@ -60,6 +60,9 @@ static void da7219_aad_btn_det_work(struct work_struct *work) ...@@ -60,6 +60,9 @@ static void da7219_aad_btn_det_work(struct work_struct *work)
bool micbias_up = false; bool micbias_up = false;
int retries = 0; int retries = 0;
/* Disable ground switch */
snd_soc_component_update_bits(component, 0xFB, 0x01, 0x00);
/* Drive headphones/lineout */ /* Drive headphones/lineout */
snd_soc_component_update_bits(component, DA7219_HP_L_CTRL, snd_soc_component_update_bits(component, DA7219_HP_L_CTRL,
DA7219_HP_L_AMP_OE_MASK, DA7219_HP_L_AMP_OE_MASK,
...@@ -153,6 +156,9 @@ static void da7219_aad_hptest_work(struct work_struct *work) ...@@ -153,6 +156,9 @@ static void da7219_aad_hptest_work(struct work_struct *work)
tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC); tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC);
} }
/* Disable ground switch */
snd_soc_component_update_bits(component, 0xFB, 0x01, 0x00);
/* Ensure gain ramping at fastest rate */ /* Ensure gain ramping at fastest rate */
gain_ramp_ctrl = snd_soc_component_read(component, DA7219_GAIN_RAMP_CTRL); gain_ramp_ctrl = snd_soc_component_read(component, DA7219_GAIN_RAMP_CTRL);
snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, DA7219_GAIN_RAMP_RATE_X8); snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, DA7219_GAIN_RAMP_RATE_X8);
...@@ -428,6 +434,10 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data) ...@@ -428,6 +434,10 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data)
mask |= DA7219_AAD_REPORT_ALL_MASK; mask |= DA7219_AAD_REPORT_ALL_MASK;
da7219_aad->jack_inserted = false; da7219_aad->jack_inserted = false;
/* Cancel any pending work */
cancel_work_sync(&da7219_aad->btn_det_work);
cancel_work_sync(&da7219_aad->hptest_work);
/* Un-drive headphones/lineout */ /* Un-drive headphones/lineout */
snd_soc_component_update_bits(component, DA7219_HP_R_CTRL, snd_soc_component_update_bits(component, DA7219_HP_R_CTRL,
DA7219_HP_R_AMP_OE_MASK, 0); DA7219_HP_R_AMP_OE_MASK, 0);
...@@ -444,9 +454,8 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data) ...@@ -444,9 +454,8 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data)
snd_soc_dapm_disable_pin(dapm, "Mic Bias"); snd_soc_dapm_disable_pin(dapm, "Mic Bias");
snd_soc_dapm_sync(dapm); snd_soc_dapm_sync(dapm);
/* Cancel any pending work */ /* Enable ground switch */
cancel_work_sync(&da7219_aad->btn_det_work); snd_soc_component_update_bits(component, 0xFB, 0x01, 0x01);
cancel_work_sync(&da7219_aad->hptest_work);
} }
} }
...@@ -899,6 +908,9 @@ int da7219_aad_init(struct snd_soc_component *component) ...@@ -899,6 +908,9 @@ int da7219_aad_init(struct snd_soc_component *component)
snd_soc_component_update_bits(component, DA7219_ACCDET_CONFIG_1, snd_soc_component_update_bits(component, DA7219_ACCDET_CONFIG_1,
DA7219_BUTTON_CONFIG_MASK, 0); DA7219_BUTTON_CONFIG_MASK, 0);
/* Enable ground switch */
snd_soc_component_update_bits(component, 0xFB, 0x01, 0x01);
INIT_WORK(&da7219_aad->btn_det_work, da7219_aad_btn_det_work); INIT_WORK(&da7219_aad->btn_det_work, da7219_aad_btn_det_work);
INIT_WORK(&da7219_aad->hptest_work, da7219_aad_hptest_work); INIT_WORK(&da7219_aad->hptest_work, da7219_aad_hptest_work);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment