Merge "ASoC: codecs: handle device disconnect during SSR"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
5a6876340c
@@ -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;
|
||||
}
|
||||
|
@@ -2081,6 +2081,8 @@ static int wcd938x_event_notify(struct notifier_block *block,
|
||||
case BOLERO_WCD_EVT_SSR_DOWN:
|
||||
wcd938x->dev_up = false;
|
||||
wcd938x->mbhc->wcd_mbhc.deinit_in_progress = true;
|
||||
wcd938x->mbhc->wcd_mbhc.plug_before_ssr =
|
||||
wcd938x->mbhc->wcd_mbhc.current_plug;
|
||||
mbhc = &wcd938x->mbhc->wcd_mbhc;
|
||||
wcd938x->usbc_hs_status = get_usbc_hs_status(component,
|
||||
mbhc->mbhc_cfg);
|
||||
|
@@ -551,6 +551,7 @@ struct wcd_mbhc {
|
||||
wait_queue_head_t wait_btn_press;
|
||||
bool is_btn_press;
|
||||
u8 current_plug;
|
||||
u8 plug_before_ssr;
|
||||
bool in_swch_irq_handler;
|
||||
bool hphl_swh; /*track HPHL switch NC / NO */
|
||||
bool gnd_swh; /*track GND switch NC / NO */
|
||||
|
Reference in New Issue
Block a user