lkml.org 
[lkml]   [2021]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 10/27] ALSA: hda/cs8409: Simplify CS42L42 jack detect.
    Date
    From: Stefan Binding <sbinding@opensource.cirrus.com>

    Cleanup interrupt masks.
    Remove unnecessary read/writes.
    Ensure Tip Sense/Type Detection interrupts are enabled/disabled
    when needed.

    Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
    Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
    ---

    Changes in v2:
    - No changes

    Changes in v3:
    - No changes

    sound/pci/hda/patch_cs8409.c | 21 ++++++++++++++-------
    1 file changed, 14 insertions(+), 7 deletions(-)

    diff --git a/sound/pci/hda/patch_cs8409.c b/sound/pci/hda/patch_cs8409.c
    index f4401c1e8572..4ad832f5c4ba 100644
    --- a/sound/pci/hda/patch_cs8409.c
    +++ b/sound/pci/hda/patch_cs8409.c
    @@ -406,10 +406,8 @@ static void cs8409_cs42l42_enable_jack_detect(struct hda_codec *codec)
    cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b71, 0x00C0, 1);
    /* Clear interrupts status */
    cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130f, 1);
    - cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b7b, 1);
    /* Enable interrupt */
    - cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1320, 0x03, 1);
    - cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b79, 0x00, 1);
    + cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1320, 0xF3, 1);

    mutex_unlock(&spec->cs8409_i2c_mux);
    }
    @@ -424,11 +422,13 @@ static void cs8409_cs42l42_run_jack_detect(struct hda_codec *codec)
    /* Clear interrupts */
    cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1308, 1);
    cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b77, 1);
    + cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1320, 0xFF, 1);
    + cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130f, 1);

    cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1102, 0x87, 1);
    cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1f06, 0x86, 1);
    cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1b74, 0x07, 1);
    - cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x131b, 0x01, 1);
    + cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x131b, 0xFD, 1);
    cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1120, 0x80, 1);
    /* Wait ~110ms*/
    usleep_range(110000, 200000);
    @@ -487,9 +487,6 @@ static void cs8409_jack_unsol_event(struct hda_codec *codec, unsigned int res)
    reg_hs_status = cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1124, 1);
    reg_ts_status = cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x130f, 1);

    - /* Clear interrupts, by reading interrupt status registers */
    - cs8409_i2c_read(codec, CS42L42_I2C_ADDR, 0x1b7b, 1);
    -
    mutex_unlock(&spec->cs8409_i2c_mux);

    /* If status values are < 0, read error has occurred. */
    @@ -499,6 +496,11 @@ static void cs8409_jack_unsol_event(struct hda_codec *codec, unsigned int res)
    /* HSDET_AUTO_DONE */
    if (reg_cdc_status & CS42L42_HSDET_AUTO_DONE) {

    + mutex_lock(&spec->cs8409_i2c_mux);
    + /* Disable HSDET_AUTO_DONE */
    + cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x131b, 0xFF, 1);
    + mutex_unlock(&spec->cs8409_i2c_mux);
    +
    type = ((reg_hs_status & CS42L42_HSTYPE_MASK) + 1);
    /* CS42L42 reports optical jack as type 4
    * We don't handle optical jack
    @@ -521,6 +523,11 @@ static void cs8409_jack_unsol_event(struct hda_codec *codec, unsigned int res)
    }
    }

    + mutex_lock(&spec->cs8409_i2c_mux);
    + /* Re-Enable Tip Sense Interrupt */
    + cs8409_i2c_write(codec, CS42L42_I2C_ADDR, 0x1320, 0xF3, 1);
    + mutex_unlock(&spec->cs8409_i2c_mux);
    +
    } else {
    /* TIP_SENSE INSERT/REMOVE */
    switch (reg_ts_status) {
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-07-30 17:19    [W:4.070 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site