|
26 | 26 | #include <sound/tlv.h> |
27 | 27 | #include "nau8821.h" |
28 | 28 |
|
29 | | -#define NAU8821_JD_ACTIVE_HIGH BIT(0) |
| 29 | +#define NAU8821_QUIRK_JD_ACTIVE_HIGH BIT(0) |
| 30 | +#define NAU8821_QUIRK_JD_DB_BYPASS BIT(1) |
30 | 31 |
|
31 | 32 | static int nau8821_quirk; |
32 | 33 | static int quirk_override = -1; |
@@ -1166,9 +1167,10 @@ static void nau8821_setup_inserted_irq(struct nau8821 *nau8821) |
1166 | 1167 | regmap_update_bits(regmap, NAU8821_R1D_I2S_PCM_CTRL2, |
1167 | 1168 | NAU8821_I2S_MS_MASK, NAU8821_I2S_MS_SLAVE); |
1168 | 1169 |
|
1169 | | - /* Not bypass de-bounce circuit */ |
1170 | | - regmap_update_bits(regmap, NAU8821_R0D_JACK_DET_CTRL, |
1171 | | - NAU8821_JACK_DET_DB_BYPASS, 0); |
| 1170 | + /* Do not bypass de-bounce circuit */ |
| 1171 | + if (!(nau8821_quirk & NAU8821_QUIRK_JD_DB_BYPASS)) |
| 1172 | + regmap_update_bits(regmap, NAU8821_R0D_JACK_DET_CTRL, |
| 1173 | + NAU8821_JACK_DET_DB_BYPASS, 0); |
1172 | 1174 |
|
1173 | 1175 | regmap_update_bits(regmap, NAU8821_R0F_INTERRUPT_MASK, |
1174 | 1176 | NAU8821_IRQ_EJECT_EN, 0); |
@@ -1863,7 +1865,23 @@ static const struct dmi_system_id nau8821_quirk_table[] = { |
1863 | 1865 | DMI_MATCH(DMI_SYS_VENDOR, "Positivo Tecnologia SA"), |
1864 | 1866 | DMI_MATCH(DMI_BOARD_NAME, "CW14Q01P-V2"), |
1865 | 1867 | }, |
1866 | | - .driver_data = (void *)(NAU8821_JD_ACTIVE_HIGH), |
| 1868 | + .driver_data = (void *)(NAU8821_QUIRK_JD_ACTIVE_HIGH), |
| 1869 | + }, |
| 1870 | + { |
| 1871 | + /* Valve Steam Deck LCD */ |
| 1872 | + .matches = { |
| 1873 | + DMI_MATCH(DMI_SYS_VENDOR, "Valve"), |
| 1874 | + DMI_MATCH(DMI_PRODUCT_NAME, "Jupiter"), |
| 1875 | + }, |
| 1876 | + .driver_data = (void *)(NAU8821_QUIRK_JD_DB_BYPASS), |
| 1877 | + }, |
| 1878 | + { |
| 1879 | + /* Valve Steam Deck OLED */ |
| 1880 | + .matches = { |
| 1881 | + DMI_MATCH(DMI_SYS_VENDOR, "Valve"), |
| 1882 | + DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"), |
| 1883 | + }, |
| 1884 | + .driver_data = (void *)(NAU8821_QUIRK_JD_DB_BYPASS), |
1867 | 1885 | }, |
1868 | 1886 | {} |
1869 | 1887 | }; |
@@ -1905,9 +1923,12 @@ static int nau8821_i2c_probe(struct i2c_client *i2c) |
1905 | 1923 |
|
1906 | 1924 | nau8821_check_quirks(); |
1907 | 1925 |
|
1908 | | - if (nau8821_quirk & NAU8821_JD_ACTIVE_HIGH) |
| 1926 | + if (nau8821_quirk & NAU8821_QUIRK_JD_ACTIVE_HIGH) |
1909 | 1927 | nau8821->jkdet_polarity = 0; |
1910 | 1928 |
|
| 1929 | + if (nau8821_quirk & NAU8821_QUIRK_JD_DB_BYPASS) |
| 1930 | + dev_dbg(dev, "Force bypassing jack detection debounce circuit\n"); |
| 1931 | + |
1911 | 1932 | nau8821_print_device_properties(nau8821); |
1912 | 1933 |
|
1913 | 1934 | nau8821_reset_chip(nau8821->regmap); |
|
0 commit comments