Commit ba46bd04 authored by Mark Brown's avatar Mark Brown

ASoC: Intel: Chromebooks: remap jack pins

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

This patchset adds the missing jack pin remapping needed by upstream
UCM on Chromebooks, suggested by Jaroslav Kysela [1].

These patches were succesfully tested on GeminiLake and JasperLake
platforms, and generalized to other Chromebooks.

[1] https://mailman.alsa-project.org/pipermail/sound-open-firmware/2022-June/004468.html
parents 8b409f75 c3ce12b2
...@@ -186,6 +186,17 @@ static const struct snd_soc_dapm_route gemini_map[] = { ...@@ -186,6 +186,17 @@ static const struct snd_soc_dapm_route gemini_map[] = {
{"ssp2 Rx", NULL, "Capture"}, {"ssp2 Rx", NULL, "Capture"},
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static int broxton_ssp_fixup(struct snd_soc_pcm_runtime *rtd, static int broxton_ssp_fixup(struct snd_soc_pcm_runtime *rtd,
struct snd_pcm_hw_params *params) struct snd_pcm_hw_params *params)
{ {
...@@ -231,10 +242,12 @@ static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -231,10 +242,12 @@ static int broxton_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT, SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&broxton_headset); &broxton_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -121,6 +121,17 @@ static const struct snd_soc_dapm_route cml_rt1011_tt_map[] = { ...@@ -121,6 +121,17 @@ static const struct snd_soc_dapm_route cml_rt1011_tt_map[] = {
{"TR Ext Spk", NULL, "TR SPO" }, {"TR Ext Spk", NULL, "TR SPO" },
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static int cml_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd) static int cml_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct card_private *ctx = snd_soc_card_get_drvdata(rtd->card); struct card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
...@@ -137,11 +148,13 @@ static int cml_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -137,11 +148,13 @@ static int cml_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_1 | SND_JACK_BTN_2 |
SND_JACK_BTN_3, SND_JACK_BTN_3,
&ctx->headset); &ctx->headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -78,6 +78,17 @@ static const struct snd_soc_dapm_widget geminilake_widgets[] = { ...@@ -78,6 +78,17 @@ static const struct snd_soc_dapm_widget geminilake_widgets[] = {
SND_SOC_DAPM_SPK("HDMI3", NULL), SND_SOC_DAPM_SPK("HDMI3", NULL),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route geminilake_map[] = { static const struct snd_soc_dapm_route geminilake_map[] = {
/* HP jack connectors - unknown if we have jack detection */ /* HP jack connectors - unknown if we have jack detection */
{ "Headphone Jack", NULL, "HPOL" }, { "Headphone Jack", NULL, "HPOL" },
...@@ -173,10 +184,12 @@ static int geminilake_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -173,10 +184,12 @@ static int geminilake_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT, SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&ctx->geminilake_headset); &ctx->geminilake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -99,6 +99,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = { ...@@ -99,6 +99,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = {
SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route kabylake_map[] = { static const struct snd_soc_dapm_route kabylake_map[] = {
{ "Headphone Jack", NULL, "HPL" }, { "Headphone Jack", NULL, "HPL" },
{ "Headphone Jack", NULL, "HPR" }, { "Headphone Jack", NULL, "HPR" },
...@@ -179,10 +190,12 @@ static int kabylake_da7219_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -179,10 +190,12 @@ static int kabylake_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(kabylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(kabylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT, SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&ctx->kabylake_headset); &ctx->kabylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -119,6 +119,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = { ...@@ -119,6 +119,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = {
SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route kabylake_map[] = { static const struct snd_soc_dapm_route kabylake_map[] = {
/* speaker */ /* speaker */
{ "Left Spk", NULL, "Left BE_OUT" }, { "Left Spk", NULL, "Left BE_OUT" },
...@@ -354,10 +365,12 @@ static int kabylake_da7219_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -354,10 +365,12 @@ static int kabylake_da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(kabylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(kabylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT, SND_JACK_BTN_2 | SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&ctx->kabylake_headset); &ctx->kabylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -206,6 +206,17 @@ static const struct snd_soc_dapm_widget kabylake_5663_widgets[] = { ...@@ -206,6 +206,17 @@ static const struct snd_soc_dapm_widget kabylake_5663_widgets[] = {
SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route kabylake_5663_map[] = { static const struct snd_soc_dapm_route kabylake_5663_map[] = {
{ "Headphone Jack", NULL, "Platform Clock" }, { "Headphone Jack", NULL, "Platform Clock" },
{ "Headphone Jack", NULL, "HPOL" }, { "Headphone Jack", NULL, "HPOL" },
...@@ -271,10 +282,12 @@ static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -271,10 +282,12 @@ static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(kabylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(kabylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3, SND_JACK_BTN_2 | SND_JACK_BTN_3,
&ctx->kabylake_headset); &ctx->kabylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
return ret; return ret;
......
...@@ -145,6 +145,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = { ...@@ -145,6 +145,17 @@ static const struct snd_soc_dapm_widget kabylake_widgets[] = {
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route kabylake_map[] = { static const struct snd_soc_dapm_route kabylake_map[] = {
/* Headphones */ /* Headphones */
{ "Headphone Jack", NULL, "Platform Clock" }, { "Headphone Jack", NULL, "Platform Clock" },
...@@ -228,10 +239,12 @@ static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -228,10 +239,12 @@ static int kabylake_rt5663_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(&kabylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(&kabylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3, SND_JACK_BTN_2 | SND_JACK_BTN_3,
&ctx->kabylake_headset); &ctx->kabylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
return ret; return ret;
......
...@@ -97,6 +97,17 @@ static const struct snd_soc_dapm_widget skylake_widgets[] = { ...@@ -97,6 +97,17 @@ static const struct snd_soc_dapm_widget skylake_widgets[] = {
SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route skylake_map[] = { static const struct snd_soc_dapm_route skylake_map[] = {
/* HP jack connectors - unknown if we have jack detection */ /* HP jack connectors - unknown if we have jack detection */
{ "Headphone Jack", NULL, "HPOL" }, { "Headphone Jack", NULL, "HPOL" },
...@@ -163,9 +174,11 @@ static int skylake_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -163,9 +174,11 @@ static int skylake_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(&skylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(&skylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3, &skylake_headset); SND_JACK_BTN_2 | SND_JACK_BTN_3, &skylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
return ret; return ret;
......
...@@ -101,6 +101,17 @@ static const struct snd_soc_dapm_widget skylake_widgets[] = { ...@@ -101,6 +101,17 @@ static const struct snd_soc_dapm_widget skylake_widgets[] = {
SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD),
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static const struct snd_soc_dapm_route skylake_map[] = { static const struct snd_soc_dapm_route skylake_map[] = {
/* HP jack connectors - unknown if we have jack detection */ /* HP jack connectors - unknown if we have jack detection */
{"Headphone Jack", NULL, "HPOL"}, {"Headphone Jack", NULL, "HPOL"},
...@@ -182,9 +193,11 @@ static int skylake_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -182,9 +193,11 @@ static int skylake_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd)
* 4 buttons here map to the google Reference headset * 4 buttons here map to the google Reference headset
* The use of these buttons can be decided by the user space. * The use of these buttons can be decided by the user space.
*/ */
ret = snd_soc_card_jack_new(&skylake_audio_card, "Headset Jack", ret = snd_soc_card_jack_new_pins(&skylake_audio_card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_BTN_1 |
SND_JACK_BTN_2 | SND_JACK_BTN_3, &skylake_headset); SND_JACK_BTN_2 | SND_JACK_BTN_3, &skylake_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed %d\n", ret);
return ret; return ret;
......
...@@ -52,6 +52,17 @@ enum { ...@@ -52,6 +52,17 @@ enum {
LINK_HDMI = 4, LINK_HDMI = 4,
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
/* Default: SSP2 */ /* Default: SSP2 */
static unsigned long sof_cs42l42_quirk = SOF_CS42L42_SSP_CODEC(2); static unsigned long sof_cs42l42_quirk = SOF_CS42L42_SSP_CODEC(2);
...@@ -98,11 +109,13 @@ static int sof_cs42l42_init(struct snd_soc_pcm_runtime *rtd) ...@@ -98,11 +109,13 @@ static int sof_cs42l42_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_1 | SND_JACK_BTN_2 |
SND_JACK_BTN_3, SND_JACK_BTN_3,
jack); jack,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -135,6 +135,17 @@ static const struct snd_soc_dapm_route max98360a_map[] = { ...@@ -135,6 +135,17 @@ static const struct snd_soc_dapm_route max98360a_map[] = {
{"DMic", NULL, "SoC DMIC"}, {"DMic", NULL, "SoC DMIC"},
}; };
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static struct snd_soc_jack headset; static struct snd_soc_jack headset;
static int da7219_codec_init(struct snd_soc_pcm_runtime *rtd) static int da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
...@@ -156,11 +167,13 @@ static int da7219_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -156,11 +167,13 @@ static int da7219_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_1 | SND_JACK_BTN_2 |
SND_JACK_BTN_3 | SND_JACK_LINEOUT, SND_JACK_BTN_3 | SND_JACK_LINEOUT,
&headset); &headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -81,6 +81,17 @@ static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd) ...@@ -81,6 +81,17 @@ static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd)
return 0; return 0;
} }
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static int sof_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd) static int sof_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
...@@ -93,11 +104,13 @@ static int sof_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -93,11 +104,13 @@ static int sof_nau8825_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_1 | SND_JACK_BTN_2 |
SND_JACK_BTN_3, SND_JACK_BTN_3,
&ctx->sof_headset); &ctx->sof_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
...@@ -248,6 +248,17 @@ static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd) ...@@ -248,6 +248,17 @@ static int sof_hdmi_init(struct snd_soc_pcm_runtime *rtd)
return 0; return 0;
} }
static struct snd_soc_jack_pin jack_pins[] = {
{
.pin = "Headphone Jack",
.mask = SND_JACK_HEADPHONE,
},
{
.pin = "Headset Mic",
.mask = SND_JACK_MICROPHONE,
},
};
static int sof_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd) static int sof_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
...@@ -295,11 +306,13 @@ static int sof_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd) ...@@ -295,11 +306,13 @@ static int sof_rt5682_codec_init(struct snd_soc_pcm_runtime *rtd)
* Headset buttons map to the google Reference headset. * Headset buttons map to the google Reference headset.
* These can be configured by userspace. * These can be configured by userspace.
*/ */
ret = snd_soc_card_jack_new(rtd->card, "Headset Jack", ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
SND_JACK_HEADSET | SND_JACK_BTN_0 | SND_JACK_HEADSET | SND_JACK_BTN_0 |
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_1 | SND_JACK_BTN_2 |
SND_JACK_BTN_3, SND_JACK_BTN_3,
&ctx->sof_headset); &ctx->sof_headset,
jack_pins,
ARRAY_SIZE(jack_pins));
if (ret) { if (ret) {
dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment