mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 14:12:07 +02:00
ASoC: nau8821: Add DMI quirk to bypass jack debounce circuit
Stress testing the audio jack hotplug handling on a few Steam Deck units revealed that the debounce circuit is responsible for having a negative impact on the detection reliability, e.g. in some cases the ejection interrupt is not fired, while in other instances it goes into a kind of invalid state and generates a flood of misleading interrupts. Add new entries to the DMI table introduced via commit1bc40efdaf("ASoC: nau8821: Add DMI quirk mechanism for active-high jack-detect") and extend the quirk logic to allow bypassing the debounce circuit used for jack detection on Valve Steam Deck LCD and OLED models. While at it, rename existing NAU8821_JD_ACTIVE_HIGH quirk bitfield to NAU8821_QUIRK_JD_ACTIVE_HIGH. This should help improve code readability by differentiating from similarly named register bits. Fixes:aab1ad11d6("ASoC: nau8821: new driver") Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Link: https://patch.msgid.link/20251003-nau8821-jdet-fixes-v1-4-f7b0e2543f09@collabora.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a698679fe8
commit
2b4eda7bf7
|
|
@ -26,7 +26,8 @@
|
|||
#include <sound/tlv.h>
|
||||
#include "nau8821.h"
|
||||
|
||||
#define NAU8821_JD_ACTIVE_HIGH BIT(0)
|
||||
#define NAU8821_QUIRK_JD_ACTIVE_HIGH BIT(0)
|
||||
#define NAU8821_QUIRK_JD_DB_BYPASS BIT(1)
|
||||
|
||||
static int nau8821_quirk;
|
||||
static int quirk_override = -1;
|
||||
|
|
@ -1177,9 +1178,10 @@ static void nau8821_setup_inserted_irq(struct nau8821 *nau8821)
|
|||
regmap_update_bits(regmap, NAU8821_R1D_I2S_PCM_CTRL2,
|
||||
NAU8821_I2S_MS_MASK, NAU8821_I2S_MS_SLAVE);
|
||||
|
||||
/* Not bypass de-bounce circuit */
|
||||
regmap_update_bits(regmap, NAU8821_R0D_JACK_DET_CTRL,
|
||||
NAU8821_JACK_DET_DB_BYPASS, 0);
|
||||
/* Do not bypass de-bounce circuit */
|
||||
if (!(nau8821_quirk & NAU8821_QUIRK_JD_DB_BYPASS))
|
||||
regmap_update_bits(regmap, NAU8821_R0D_JACK_DET_CTRL,
|
||||
NAU8821_JACK_DET_DB_BYPASS, 0);
|
||||
|
||||
/* Unmask & enable the ejection IRQs */
|
||||
regmap_update_bits(regmap, NAU8821_R0F_INTERRUPT_MASK,
|
||||
|
|
@ -1864,7 +1866,23 @@ static const struct dmi_system_id nau8821_quirk_table[] = {
|
|||
DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "CW14Q01P-V2"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8821_JD_ACTIVE_HIGH),
|
||||
.driver_data = (void *)(NAU8821_QUIRK_JD_ACTIVE_HIGH),
|
||||
},
|
||||
{
|
||||
/* Valve Steam Deck LCD */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Jupiter"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8821_QUIRK_JD_DB_BYPASS),
|
||||
},
|
||||
{
|
||||
/* Valve Steam Deck OLED */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
|
||||
},
|
||||
.driver_data = (void *)(NAU8821_QUIRK_JD_DB_BYPASS),
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
|
@ -1906,9 +1924,12 @@ static int nau8821_i2c_probe(struct i2c_client *i2c)
|
|||
|
||||
nau8821_check_quirks();
|
||||
|
||||
if (nau8821_quirk & NAU8821_JD_ACTIVE_HIGH)
|
||||
if (nau8821_quirk & NAU8821_QUIRK_JD_ACTIVE_HIGH)
|
||||
nau8821->jkdet_polarity = 0;
|
||||
|
||||
if (nau8821_quirk & NAU8821_QUIRK_JD_DB_BYPASS)
|
||||
dev_dbg(dev, "Force bypassing jack detection debounce circuit\n");
|
||||
|
||||
nau8821_print_device_properties(nau8821);
|
||||
|
||||
nau8821_reset_chip(nau8821->regmap);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user