ASoC: nau8824: Add DMI quirk mechanism for active-high jack-detect
[ 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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
ae2207a078
commit
97f3cbb57b
@@ -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 @@
|
|||||||
|
|
||||||
#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);
|
||||||
@@ -1875,6 +1882,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)
|
||||||
{
|
{
|
||||||
@@ -1899,6 +1934,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);
|
||||||
|
Reference in New Issue
Block a user