lkml.org 
[lkml]   [2021]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v4 02/13] extcon: arizona: Fix some issues when HPDET IRQ fires after the jack has been unplugged
    On Sat, Jan 23, 2021 at 01:13:02PM +0100, Hans de Goede wrote:
    > When the jack is partially inserted and then removed again it may be
    > removed while the hpdet code is running. In this case the following
    > may happen:
    >
    > 1. The "JACKDET rise" or ""JACKDET fall" IRQ triggers
    > 2. arizona_jackdet runs and takes info->lock
    > 3. The "HPDET" IRQ triggers
    > 4. arizona_hpdet_irq runs, blocks on info->lock
    > 5. arizona_jackdet calls arizona_stop_mic() and clears info->hpdet_done
    > 6. arizona_jackdet releases info->lock
    > 7. arizona_hpdet_irq now can continue running and:
    > 7.1 Calls arizona_start_mic() (if a mic was detected)
    > 7.2 sets info->hpdet_done
    >
    > Step 7 is undesirable / a bug:
    > 7.1 causes the device to stay in a high power-state (with MICVDD enabled)
    > 7.2 causes hpdet to not run on the next jack insertion, which in turn
    > causes the EXTCON_JACK_HEADPHONE state to never get set
    >
    > This fixes both issues by skipping these 2 steps when arizona_hpdet_irq
    > runs after the jack has been unplugged.
    >
    > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    > Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    > Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    > ---

    Tested-by: Charles Keepax <ckeepax@opensource.cirrus.com>

    Thanks,
    Charles

    \
     
     \ /
      Last update: 2021-01-30 17:06    [W:2.759 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site