Skip to content

Commit

Permalink
ASoC: nau8824: Add a nau8824_components() helper
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Hans de Goede authored and Mark Brown committed Oct 4, 2021
1 parent 92d3360 commit efee0fc
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
32 changes: 31 additions & 1 deletion sound/soc/codecs/nau8824.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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),
},
{}
};
Expand All @@ -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)
{
Expand Down
1 change: 1 addition & 0 deletions sound/soc/codecs/nau8824.h
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ struct nau8824_osr_attr {

int nau8824_enable_jack_detect(struct snd_soc_component *component,
struct snd_soc_jack *jack);
const char *nau8824_components(void);

#endif /* _NAU8824_H */

0 comments on commit efee0fc

Please sign in to comment.