summaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/nau8824.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2021-10-02 23:14:58 +0200
committerMark Brown <broonie@kernel.org>2021-10-04 16:55:29 +0200
commitefee0fca19cbc9a0946a2d7dab2d5546aee2098f (patch)
tree37c9c1e1f69ae1c310d98c16e79e50028ad3fff0 /sound/soc/codecs/nau8824.c
parentASoC: nau8824: Add DMI quirk mechanism for active-high jack-detect (diff)
downloadlinux-efee0fca19cbc9a0946a2d7dab2d5546aee2098f.tar.xz
linux-efee0fca19cbc9a0946a2d7dab2d5546aee2098f.zip
ASoC: nau8824: Add a nau8824_components() helper
Some devices using the NAU8824 have only one speaker. To still have things working properly this requires the left + right channels to both be mixed to the left speaker output. This mixer setup is done by userspace based on UCM profiles. But this requires userspace to know that there is a mono-speaker. Add a helper function (for the machine driver) to get a components string providing this info. This is done inside the codec driver because the codec driver already has a DMI quirk table. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Link: https://lore.kernel.org/r/20211002211459.110124-3-hdegoede@redhat.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs/nau8824.c')
-rw-r--r--sound/soc/codecs/nau8824.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/sound/soc/codecs/nau8824.c b/sound/soc/codecs/nau8824.c
index 761c59ff3851..ffb3881aa40f 100644
--- a/sound/soc/codecs/nau8824.c
+++ b/sound/soc/codecs/nau8824.c
@@ -29,6 +29,7 @@
#include "nau8824.h"
#define NAU8824_JD_ACTIVE_HIGH BIT(0)
+#define NAU8824_MONO_SPEAKER BIT(1)
static int nau8824_quirk;
static int quirk_override = -1;
@@ -1861,7 +1862,25 @@ static const struct dmi_system_id nau8824_quirk_table[] = {
DMI_EXACT_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "20170531"),
},
- .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH),
+ .driver_data = (void *)(NAU8824_JD_ACTIVE_HIGH |
+ NAU8824_MONO_SPEAKER),
+ },
+ {
+ /* CUBE iwork8 Air */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "cube"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "i1-TF"),
+ DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
+ },
+ .driver_data = (void *)(NAU8824_MONO_SPEAKER),
+ },
+ {
+ /* Pipo W2S */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "PIPO"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "W2S"),
+ },
+ .driver_data = (void *)(NAU8824_MONO_SPEAKER),
},
{}
};
@@ -1880,6 +1899,17 @@ static void nau8824_check_quirks(void)
nau8824_quirk = (unsigned long)dmi_id->driver_data;
}
+const char *nau8824_components(void)
+{
+ nau8824_check_quirks();
+
+ if (nau8824_quirk & NAU8824_MONO_SPEAKER)
+ return "cfg-spk:1";
+ else
+ return "cfg-spk:2";
+}
+EXPORT_SYMBOL_GPL(nau8824_components);
+
static int nau8824_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
{