lkml.org 
[lkml]   [2022]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 3/3] ASoC: ts3a227e: add parameters to control debounce times
    Date
    Add devicetree parameters to control the insert, release and press
    debounce times.

    Signed-off-by: Astrid Rost <astrid.rost@axis.com>
    ---
    sound/soc/codecs/ts3a227e.c | 61 +++++++++++++++++++++++++++++++++----
    1 file changed, 55 insertions(+), 6 deletions(-)

    diff --git a/sound/soc/codecs/ts3a227e.c b/sound/soc/codecs/ts3a227e.c
    index d8ab0810fceb..2305a472d132 100644
    --- a/sound/soc/codecs/ts3a227e.c
    +++ b/sound/soc/codecs/ts3a227e.c
    @@ -78,12 +78,20 @@ static const int ts3a227e_buttons[] = {
    #define ADC_COMPLETE_INT_DISABLE 0x04
    #define INTB_DISABLE 0x08

    +/* TS3A227E_REG_SETTING_1 0x4 */
    +#define DEBOUNCE_INSERTION_SETTING_SFT (0)
    +#define DEBOUNCE_INSERTION_SETTING_MASK (0x7 << DEBOUNCE_PRESS_SETTING_SFT)
    +
    /* TS3A227E_REG_SETTING_2 0x05 */
    #define KP_ENABLE 0x04

    /* TS3A227E_REG_SETTING_3 0x06 */
    -#define MICBIAS_SETTING_SFT (3)
    +#define MICBIAS_SETTING_SFT 3
    #define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT)
    +#define DEBOUNCE_RELEASE_SETTING_SFT 2
    +#define DEBOUNCE_RELEASE_SETTING_MASK (0x1 << DEBOUNCE_RELEASE_SETTING_SFT)
    +#define DEBOUNCE_PRESS_SETTING_SFT 0
    +#define DEBOUNCE_PRESS_SETTING_MASK (0x3 << DEBOUNCE_PRESS_SETTING_SFT)

    /* TS3A227E_REG_ACCESSORY_STATUS 0x0b */
    #define TYPE_3_POLE 0x01
    @@ -136,7 +144,7 @@ static bool ts3a227e_volatile_reg(struct device *dev, unsigned int reg)
    {
    switch (reg) {
    case TS3A227E_REG_INTERRUPT ... TS3A227E_REG_INTERRUPT_DISABLE:
    - case TS3A227E_REG_SETTING_2:
    + case TS3A227E_REG_SETTING_1 ... TS3A227E_REG_SETTING_2:
    case TS3A227E_REG_SWITCH_STATUS_1 ... TS3A227E_REG_ADC_OUTPUT:
    return true;
    default:
    @@ -269,14 +277,55 @@ static const struct regmap_config ts3a227e_regmap_config = {
    static int ts3a227e_parse_device_property(struct ts3a227e *ts3a227e,
    struct device *dev)
    {
    - u32 micbias;
    + u32 value;
    + u32 value_ms;
    + u32 setting3_value = 0;
    + u32 setting3_mask = 0;
    int err;

    - err = device_property_read_u32(dev, "ti,micbias", &micbias);
    + err = device_property_read_u32(dev, "ti,micbias", &value);
    + if (!err) {
    + setting3_mask = MICBIAS_SETTING_MASK;
    + setting3_value = (value << MICBIAS_SETTING_SFT) &
    + MICBIAS_SETTING_MASK;
    + }
    +
    + err = device_property_read_u32(dev, "ti,debounce-release-ms",
    + &value_ms);
    if (!err) {
    + value = (value_ms > 10);
    + setting3_mask |= DEBOUNCE_RELEASE_SETTING_MASK;
    + setting3_value |= (value << DEBOUNCE_RELEASE_SETTING_SFT) &
    + DEBOUNCE_RELEASE_SETTING_MASK;
    + }
    +
    + err = device_property_read_u32(dev, "ti,debounce-press-ms", &value_ms);
    + if (!err) {
    + value = (value_ms + 20) / 40;
    + if (value > 3)
    + value = 3;
    + setting3_mask |= DEBOUNCE_PRESS_SETTING_MASK;
    + setting3_value |= (value << DEBOUNCE_PRESS_SETTING_SFT) &
    + DEBOUNCE_PRESS_SETTING_MASK;
    + }
    +
    + if (setting3_mask)
    regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3,
    - MICBIAS_SETTING_MASK,
    - (micbias & 0x07) << MICBIAS_SETTING_SFT);
    + setting3_mask, setting3_value);
    +
    + err = device_property_read_u32(dev, "ti,debounce-insertion-ms",
    + &value_ms);
    + if (!err) {
    + if (value_ms < 165)
    + value = (value_ms + 15) / 30;
    + else if (value_ms < 1500)
    + value = 6;
    + else
    + value = 7;
    + regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_1,
    + DEBOUNCE_INSERTION_SETTING_MASK,
    + (value << DEBOUNCE_INSERTION_SETTING_SFT) &
    + DEBOUNCE_INSERTION_SETTING_MASK);
    }

    return 0;
    --
    2.20.1
    \
     
     \ /
      Last update: 2022-09-21 10:19    [W:9.222 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site