Commit 92d33601 authored by Hans de Goede's avatar Hans de Goede Committed by Mark Brown

ASoC: nau8824: Add DMI quirk mechanism for active-high jack-detect

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: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211002211459.110124-2-hdegoede@redhat.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent d316597c
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/dmi.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/regmap.h> #include <linux/regmap.h>
...@@ -27,6 +28,12 @@ ...@@ -27,6 +28,12 @@
#include "nau8824.h" #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, static int nau8824_config_sysclk(struct nau8824 *nau8824,
int clk_id, unsigned int freq); int clk_id, unsigned int freq);
...@@ -1845,6 +1852,34 @@ static int nau8824_read_device_properties(struct device *dev, ...@@ -1845,6 +1852,34 @@ static int nau8824_read_device_properties(struct device *dev,
return 0; 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, static int nau8824_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id) const struct i2c_device_id *id)
{ {
...@@ -1869,6 +1904,11 @@ static int nau8824_i2c_probe(struct i2c_client *i2c, ...@@ -1869,6 +1904,11 @@ static int nau8824_i2c_probe(struct i2c_client *i2c,
nau8824->irq = i2c->irq; nau8824->irq = i2c->irq;
sema_init(&nau8824->jd_sem, 1); 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); nau8824_print_device_properties(nau8824);
ret = regmap_read(nau8824->regmap, NAU8824_REG_I2C_DEVICE_ID, &value); ret = regmap_read(nau8824->regmap, NAU8824_REG_I2C_DEVICE_ID, &value);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment