ASoC: codecs: handle device disconnect during SSR
During SSR, when usbc analog device is disconnected, the respective disconnect interrupt is not handled and hence userspace is not notified. When ADSP recovers, fsa driver sends a disconnect notification. So handle device disconnect and notify jack/userspace through this notification. Change-Id: Ic695c2267c9289f9528d50202938ec09f634de8a Signed-off-by: Vignesh Kulothungan <vigneshk@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
06ed8063cd
commit
75f229237a
@@ -1621,6 +1621,8 @@ static int wcd_mbhc_set_keycode(struct wcd_mbhc *mbhc)
|
||||
static int wcd_mbhc_usbc_ana_event_handler(struct notifier_block *nb,
|
||||
unsigned long mode, void *ptr)
|
||||
{
|
||||
unsigned int l_det_en = 0;
|
||||
unsigned int detection_type = 0;
|
||||
struct wcd_mbhc *mbhc = container_of(nb, struct wcd_mbhc, fsa_nb);
|
||||
|
||||
if (!mbhc)
|
||||
@@ -1633,6 +1635,23 @@ static int wcd_mbhc_usbc_ana_event_handler(struct notifier_block *nb,
|
||||
mbhc->mbhc_cb->clk_setup(mbhc->component, true);
|
||||
/* insertion detected, enable L_DET_EN */
|
||||
WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_L_DET_EN, 1);
|
||||
} else {
|
||||
WCD_MBHC_REG_READ(WCD_MBHC_MECH_DETECTION_TYPE, detection_type);
|
||||
WCD_MBHC_REG_READ(WCD_MBHC_L_DET_EN, l_det_en);
|
||||
/* If both l_det_en and detection type are set, it means device was
|
||||
* unplugged during SSR and detection interrupt was not handled.
|
||||
* So trigger device disconnect */
|
||||
if (detection_type && l_det_en) {
|
||||
/* Set the detection type appropriately */
|
||||
WCD_MBHC_REG_UPDATE_BITS(WCD_MBHC_MECH_DETECTION_TYPE,
|
||||
!detection_type);
|
||||
/* Set current plug type to the state before SSR */
|
||||
mbhc->current_plug = mbhc->plug_before_ssr;
|
||||
|
||||
wcd_mbhc_swch_irq_handler(mbhc);
|
||||
mbhc->mbhc_cb->lock_sleep(mbhc, false);
|
||||
mbhc->plug_before_ssr = MBHC_PLUG_TYPE_NONE;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user