lkml.org 
[lkml]   [2021]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 42/82] ASoC: nau8824: Add DMI quirk mechanism for active-high jack-detect
    Date
    From: Hans de Goede <hdegoede@redhat.com>

    [ Upstream commit 92d3360108f1839ca40451bad20ff67dd24a1964 ]

    Add a quirk mechanism to allow specifying that active-high jack-detection
    should be used on platforms where this info is not available in devicetree.

    And add an entry for the Cyberbook T116 tablet to the DMI table, so that
    jack-detection will work properly on this tablet.

    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20211002211459.110124-2-hdegoede@redhat.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/codecs/nau8824.c | 40 ++++++++++++++++++++++++++++++++++++++
    1 file changed, 40 insertions(+)

    diff --git a/sound/soc/codecs/nau8824.c b/sound/soc/codecs/nau8824.c
    index f946ef65a4c19..f7018f2dd21fd 100644
    --- a/sound/soc/codecs/nau8824.c
    +++ b/sound/soc/codecs/nau8824.c
    @@ -8,6 +8,7 @@

    #include <linux/module.h>
    #include <linux/delay.h>
    +#include <linux/dmi.h>
    #include <linux/init.h>
    #include <linux/i2c.h>
    #include <linux/regmap.h>
    @@ -27,6 +28,12 @@

    #include "nau8824.h"

    +#define NAU8824_JD_ACTIVE_HIGH BIT(0)
    +
    +static int nau8824_quirk;
    +static int quirk_override = -1;
    +module_param_named(quirk, quirk_override, uint, 0444);
    +MODULE_PARM_DESC(quirk, "Board-specific quirk override");

    static int nau8824_config_sysclk(struct nau8824 *nau8824,
    int clk_id, unsigned int freq);
    @@ -1845,6 +1852,34 @@ static int nau8824_read_device_properties(struct device *dev,
    return 0;
    }

    +/* Please keep this list alphabetically sorted */
    +static const struct dmi_system_id nau8824_quirk_table[] = {
    + {
    + /* Cyberbook T116 rugged tablet */
    + .matches = {
    + DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"),
    + DMI_EXACT_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
    + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "20170531"),
    + },
    + .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH),
    + },
    + {}
    +};
    +
    +static void nau8824_check_quirks(void)
    +{
    + const struct dmi_system_id *dmi_id;
    +
    + if (quirk_override != -1) {
    + nau8824_quirk = quirk_override;
    + return;
    + }
    +
    + dmi_id = dmi_first_match(nau8824_quirk_table);
    + if (dmi_id)
    + nau8824_quirk = (unsigned long)dmi_id->driver_data;
    +}
    +
    static int nau8824_i2c_probe(struct i2c_client *i2c,
    const struct i2c_device_id *id)
    {
    @@ -1869,6 +1904,11 @@ static int nau8824_i2c_probe(struct i2c_client *i2c,
    nau8824->irq = i2c->irq;
    sema_init(&nau8824->jd_sem, 1);

    + nau8824_check_quirks();
    +
    + if (nau8824_quirk & NAU8824_JD_ACTIVE_HIGH)
    + nau8824->jkdet_polarity = 0;
    +
    nau8824_print_device_properties(nau8824);

    ret = regmap_read(nau8824->regmap, NAU8824_REG_I2C_DEVICE_ID, &value);
    --
    2.33.0
    \
     
     \ /
      Last update: 2021-11-09 23:20    [W:2.673 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site