Hi Takashi, Sorry for a long delay for the hdmi jacks. I was busy on another critical issue last 2 weeks. I have worked out the UCM configuration files. Please check the attachment. It is a long file, so I use the attachment instead of the patch mode. Based on my test, it works well. Could you please help review if the configuration file is OK or not. I will do more test on the meantime, including DPMST and NON-DPMST. Regards, Libin >-----Original Message----- >From: Yang, Libin >Sent: Friday, May 31, 2019 10:27 AM >To: Takashi Iwai <tiwai@xxxxxxx> >Cc: alsa-devel@xxxxxxxxxxxxxxxx; broonie@xxxxxxxxxx; pierre- >louis.bossart@xxxxxxxxxxxxxxx >Subject: RE: [RFC PATCH 3/4] ASoC: hdac_hdmi: refine hdmi jacks > >Hi Takashi, > >> >>On Thu, 30 May 2019 17:00:24 +0200, >>Yang, Libin wrote: >>> >>> Hi Takashi, >>> >>> >-----Original Message----- >>> >From: Takashi Iwai [mailto:tiwai@xxxxxxx] >>> >Sent: Thursday, May 30, 2019 3:13 PM >>> >To: Yang, Libin <libin.yang@xxxxxxxxx> >>> >Cc: alsa-devel@xxxxxxxxxxxxxxxx; broonie@xxxxxxxxxx; pierre- >>> >louis.bossart@xxxxxxxxxxxxxxx >>> >Subject: Re: [RFC PATCH 3/4] ASoC: hdac_hdmi: refine >>> >hdmi jacks >>> > >>> >On Mon, 27 May 2019 11:07:26 +0200, >>> >libin.yang@xxxxxxxxx wrote: >>> >> >>> >> From: Libin Yang <libin.yang@xxxxxxxxx> >>> >> >>> >> This patch does the following actions: >>> >> 1) move snd_soc_card_jack_new() from machine driver to codec driver. >>> >> This is because the jack information is more lated to the codec >>> >> Also this patch calls snd_jack_add_new_kctl() to export the jack kctl >>> >> to userspace. >>> >> >>> >> 2) jack is bound to pcm in origal code. The patch binds jack to pin-port. >>> >> This mean each pin-port (3x3) has a jack. pin-port is used for DP-MST >>> >> mode. The port means device entry for DP-MST in hdac_hdmi >>> >> As hdac_hdmi allows user to map the pin-port to a pcm manually, >>> >> the >>jack >>> >> is bound to pcm is not accurate. >>> >> However, PA assumes jack is bound to PCM for the legacy mode. >>> >> For example, for ubuntu, in >>> >> /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-x.conf uses >>> >> "Jack HDMI/DP,pcm=n" to find which jack event is used. >>> >> This main issue is: pcm number is fixed (3, 7, 8, 9, 10) for hdmi in >>> >> legacy mode. But it is not always the same for ASoC hdmi audio. >>> > >>> >The question is what brings this change practically. On the legacy >>> >driver, as the jack is bound with the PCM, user-space (typically PA) >>> >who receives a jack connection event opens simply the corresponding >>> >PCM substream. Now, for >>> >ASoC: >>> > 1. Which PCM substream? >>> > 2. How to set up the routing? >>> > >>> >I assume the 1 doens't matter, any substream, unlike the legacy case. >>> >But how is 2 done automatically? >>> >>> For the legacy HDA, there are 2 mode (dynamic pcm assignment (DPMST) >>> and static pcm assignment (NON-DPMST)). >>> 1) For static pcm assignment, pcm is always statically mapped to pin. >>> For example, pcm1 <=> pin 1; pcm <=> pin 2 and so on. So it is the >>> same to bind jack to pcm or to pin. >>> 2) For dynamic pcm assignment, in generic_hdmi_build_jack(), the jack >>> is bound to PCM when it is created (spec->pcm_rec[pcm_idx].jack). We >>> will find the jack by pcm_idx. And when monitor is connected to a >>> pin, >>> update_eld() will be called. In update_eld(), it will call >>> hdmi_attach_hda_pcm() to find a pcm to bind to the pin. So it can >>> find a jack (from the pcm) and report its status to userspace. >>> >>> So in a word for legacy HDA, it can always find a PCM (no matter in >>> static mode or in dynamic mode) when the monitor is connected to a >>> pin. This means it can always update the status of to userspace that >>> the pcm status is changed. >> >>Right, that's why the jack control has a pcm suffix. It is bound with >>the PCM stream in the end, so user-space can simply open it. >> >>> However, in hdac_hdmi, there is no such dynamic pcm assignment. And >>> it is not statically assignment of pcm to pin. PCM is statically bound to cvt. >>> hdac_hdmi allows user to assign a cvt to a pin with alsamixer ( in >>> function hdac_hdmi_set_pin_port_mux(), so this function maps the pin >>> to >>the pcm). >>> As user may assign NONE pcm to a pin in alsamixer, this means a pin >>> can be assigned none of pcms. So if we mapped jack to pcm, we may not >>> find any jack for the pin when a monitor is connected to the pin. >>> This means driver can't notify userspace of the monitor connection. >>> As you know, PA will use the monitor connection status to decide >>> whether to user it or not. So this is the problem. The root cause is >>> pcm is bound to cvt. And pin may be not bound to any pcm (This is the >>> difference from the legacy hda). >>> >>> In my patch, as jack is bound to pin-port, so it can always notify >>> userspace that a monitor is connected. We can use configuration in >>> /usr/share/alsa/ ucm or /usr/share/pulseaudio to configure the amixer >>> to assign a pcm to the pin (monitor). And userspace can playback on >>> the >>monitor now. >> >>Then please prepare the UCM stuff at first and make sure that >>everything works with the proposed change. The kernel changes can be >>merged once after all things get ready. > >OK. I will prepare the UCM and PA configurations to check it works well and >the purpose is patch should be compatible with the old drivers. > >Regards, >Libin > >> >> >>thanks, >> >>Takashi >> >>> >>> Regards, >>> Libin >>> >>> > >>> > >>> >thanks, >>> > >>> >Takashi >>> > >>> >> >>> >> Signed-off-by: Libin Yang <libin.yang@xxxxxxxxx> >>> >> --- >>> >> sound/soc/codecs/hdac_hdmi.c | 127 ++++++++++++--------- >>> >> sound/soc/intel/boards/bxt_da7219_max98357a.c | 10 -- >>> >> sound/soc/intel/boards/bxt_rt298.c | 10 -- >>> >> sound/soc/intel/boards/glk_rt5682_max98357a.c | 10 -- >>> >> sound/soc/intel/boards/kbl_da7219_max98357a.c | 10 -- >>> >> sound/soc/intel/boards/kbl_da7219_max98927.c | 10 -- >>> >> sound/soc/intel/boards/kbl_rt5660.c | 10 -- >>> >> sound/soc/intel/boards/kbl_rt5663_max98927.c | 10 -- >>> >> .../soc/intel/boards/kbl_rt5663_rt5514_max98927.c | 9 -- >>> >> sound/soc/intel/boards/skl_hda_dsp_common.c | 9 -- >>> >> sound/soc/intel/boards/skl_nau88l25_max98357a.c | 11 -- >>> >> sound/soc/intel/boards/skl_nau88l25_ssm4567.c | 11 -- >>> >> sound/soc/intel/boards/skl_rt286.c | 10 -- >>> >> sound/soc/intel/boards/sof_rt5682.c | 11 -- >>> >> 14 files changed, 74 insertions(+), 184 deletions(-) >>> >> >>> >> diff --git a/sound/soc/codecs/hdac_hdmi.c >>> >> b/sound/soc/codecs/hdac_hdmi.c index 90c2ee3..ed267fa 100644 >>> >> --- a/sound/soc/codecs/hdac_hdmi.c >>> >> +++ b/sound/soc/codecs/hdac_hdmi.c >>> >> @@ -4,6 +4,7 @@ >>> >> * Copyright (C) 2014-2015 Intel Corp >>> >> * Author: Samreen Nilofer <samreen.nilofer@xxxxxxxxx> >>> >> * Subhransu S. Prusty <subhransu.s.prusty@xxxxxxxxx> >>> >> + * Libin Yang <libin.yang@xxxxxxxxx> >>> >> * >>> >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >~ >>~~~ >>> >~~~~~~~~~ >>> >> * >>> >> * This program is free software; you can redistribute it and/or >>> >> modify @@ -30,6 +31,7 @@ #include <sound/hda_i915.h> #include >>> >> <sound/pcm_drm_eld.h> #include <sound/hda_chmap.h> >>> >> +#include <sound/hda_codec.h> >>> >> #include "../../hda/local.h" >>> >> #include "hdac_hdmi.h" >>> >> >>> >> @@ -95,6 +97,8 @@ struct hdac_hdmi_port { >>> >> int num_mux_nids; >>> >> hda_nid_t mux_nids[HDA_MAX_CONNECTIONS]; >>> >> struct hdac_hdmi_eld eld; >>> >> + struct snd_soc_jack jack; >>> >> + int jack_event; >>> >> const char *jack_pin; >>> >> struct snd_soc_dapm_context *dapm; >>> >> const char *output_pin; >>> >> @@ -105,14 +109,12 @@ struct hdac_hdmi_pcm { >>> >> int pcm_id; >>> >> struct list_head port_list; >>> >> struct hdac_hdmi_cvt *cvt; >>> >> - struct snd_soc_jack *jack; >>> >> int stream_tag; >>> >> int channels; >>> >> int format; >>> >> bool chmap_set; >>> >> unsigned char chmap[8]; /* ALSA API channel-map */ >>> >> struct mutex lock; >>> >> - int jack_event; >>> >> }; >>> >> >>> >> struct hdac_hdmi_dai_port_map { >>> >> @@ -166,8 +168,7 @@ hdac_hdmi_get_pcm_from_cvt(struct >>> >hdac_hdmi_priv *hdmi, >>> >> return pcm; >>> >> } >>> >> >>> >> -static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm, >>> >> - struct hdac_hdmi_port *port, bool is_connect) >>> >> +static void hdac_hdmi_jack_report(struct hdac_hdmi_port *port, >>> >> +bool >>> >> +is_connect) >>> >> { >>> >> struct hdac_device *hdev = port->pin->hdev; >>> >> >>> >> @@ -176,19 +177,25 @@ static void hdac_hdmi_jack_report(struct >>> >hdac_hdmi_pcm *pcm, >>> >> else >>> >> snd_soc_dapm_disable_pin(port->dapm, port->jack_pin); >>> >> >>> >> + /* if jack is not ready, skip reporting jack status */ >>> >> + if (!port->jack.jack) { >>> >> + snd_soc_dapm_sync(port->dapm); >>> >> + return; >>> >> + } >>> >> + >>> >> if (is_connect) { >>> >> - if (pcm->jack_event == 0) { >>> >> + if (port->jack_event == 0) { >>> >> dev_dbg(&hdev->dev, >>> >> - "jack report for pcm=%d\n", >>> >> - pcm->pcm_id); >>> >> - snd_soc_jack_report(pcm->jack, SND_JACK_AVOUT, >>> >> - SND_JACK_AVOUT); >>> >> + "jack report for pin:port = %d:%d\n", >>> >> + port->id, port->pin->nid); >>> >> + snd_soc_jack_report(&port->jack, SND_JACK_AVOUT, >>> >> + SND_JACK_AVOUT); >>> >> } >>> >> - pcm->jack_event = 1; >>> >> + port->jack_event = 1; >>> >> } else { >>> >> - if (pcm->jack_event == 1) >>> >> - snd_soc_jack_report(pcm->jack, 0, SND_JACK_AVOUT); >>> >> - pcm->jack_event = 0; >>> >> + if (port->jack_event == 1) >>> >> + snd_soc_jack_report(&port->jack, 0, >>> >SND_JACK_AVOUT); >>> >> + port->jack_event = 0; >>> >> } >>> >> >>> >> snd_soc_dapm_sync(port->dapm); >>> >> @@ -1235,26 +1242,15 @@ static void >hdac_hdmi_present_sense(struct >>> >hdac_hdmi_pin *pin, >>> >> pcm = hdac_hdmi_get_pcm(hdev, port); >>> >> >>> >> if (!port->eld.monitor_present || !port->eld.eld_valid) { >>> >> - >>> >> dev_err(&hdev->dev, "%s: disconnect for pin:port %d:%d\n", >>> >> __func__, pin->nid, port->id); >>> >> - >>> >> - /* >>> >> - * PCMs are not registered during device probe, so don't >>> >> - * report jack here. It will be done in usermode mux >>> >> - * control select. >>> >> - */ >>> >> - if (pcm) >>> >> - hdac_hdmi_jack_report(pcm, port, false); >>> >> - >>> >> + hdac_hdmi_jack_report(port, false); >>> >> mutex_unlock(&hdmi->pin_mutex); >>> >> return; >>> >> } >>> >> >>> >> if (port->eld.monitor_present && port->eld.eld_valid) { >>> >> - if (pcm) >>> >> - hdac_hdmi_jack_report(pcm, port, true); >>> >> - >>> >> + hdac_hdmi_jack_report(port, true); >>> >> print_hex_dump_debug("ELD: ", DUMP_PREFIX_OFFSET, 16, 1, >>> >> port->eld.eld_buffer, port->eld.eld_size, false); >>> >> >>> >> @@ -1650,6 +1646,30 @@ static int >>> >> create_fill_jack_kcontrols(struct >>> >snd_soc_card *card, >>> >> return snd_soc_add_card_controls(card, kc, i); } >>> >> >>> >> +static void hdac_hdmi_present_sense_all_pins(struct hdac_device >>*hdev, >>> >> + struct hdac_hdmi_priv *hdmi, bool detect_pin_caps) { >>> >> + int i; >>> >> + struct hdac_hdmi_pin *pin; >>> >> + >>> >> + list_for_each_entry(pin, &hdmi->pin_list, head) { >>> >> + if (detect_pin_caps) { >>> >> + >>> >> + if (hdac_hdmi_get_port_len(hdev, pin->nid) == 0) >>> >> + pin->mst_capable = false; >>> >> + else >>> >> + pin->mst_capable = true; >>> >> + } >>> >> + >>> >> + for (i = 0; i < pin->num_ports; i++) { >>> >> + if (!pin->mst_capable && i > 0) >>> >> + continue; >>> >> + >>> >> + hdac_hdmi_present_sense(pin, &pin->ports[i]); >>> >> + } >>> >> + } >>> >> +} >>> >> + >>> >> int hdac_hdmi_jack_port_init(struct snd_soc_component *component, >>> >> struct snd_soc_dapm_context *dapm) { @@ -1659,6 >>> >+1679,7 @@ int >>> >> hdac_hdmi_jack_port_init(struct snd_soc_component *component, >>> >> struct snd_soc_dapm_widget *widgets; >>> >> struct snd_soc_dapm_route *route; >>> >> char w_name[NAME_SIZE]; >>> >> + char jack_name[NAME_SIZE]; >>> >> int i = 0, j, ret; >>> >> >>> >> widgets = devm_kcalloc(dapm->dev, hdmi->num_ports, @@ -1687,6 >>> >> +1708,30 @@ int hdac_hdmi_jack_port_init(struct snd_soc_component >>> >*component, >>> >> pin->ports[j].jack_pin = widgets[i].name; >>> >> pin->ports[j].dapm = dapm; >>> >> >>> >> + /* >>> >> + * Create pin-port jack. Each port (device entry) of >>> >> + * the pin has a corresponding jack >>> >> + */ >>> >> + snprintf(jack_name, sizeof(jack_name), >>> >> + "HDMI/DP, pin:port=%d:%d Jack", >>> >> + pin->nid, pin->ports[j].id); >>> >> + ret = snd_soc_card_jack_new(dapm->card, jack_name, >>> >> + SND_JACK_AVOUT, >>> >> + &(pin->ports[j].jack), >>> >> + NULL, 0); >>> >> + if (ret) >>> >> + return ret; >>> >> + >>> >> + /* create the jack kctl */ >>> >> + ret = snd_jack_add_new_kctl(pin->ports[j].jack.jack, >>> >> + jack_name, >>> >SND_JACK_AVOUT); >>> >> + /* >>> >> + * It's not a critical issue if driver fails to >>> >> + * create jack kctl. >>> >> + */ >>> >> + if (ret) >>> >> + dev_warn(&hdev->dev, "failed creating Jack >>> >kctl\n"); >>> >> + >>> >> /* add to route from Jack widget to output */ >>> >> hdac_hdmi_fill_route(&route[i], pin->ports[j].jack_pin, >>> >> NULL, pin->ports[j].output_pin, NULL); >>> >@@ -1695,6 +1740,9 @@ int >>> >> hdac_hdmi_jack_port_init(struct snd_soc_component *component, >>> >> } >>> >> } >>> >> >>> >> + /* now jack is ready, let's update the status */ >>> >> + hdac_hdmi_present_sense_all_pins(hdev, hdmi, true); >>> >> + >>> >> /* Add Route from Jack widget to the output widget */ >>> >> ret = snd_soc_dapm_new_controls(dapm, widgets, hdmi- num_ports); >>> >> if (ret < 0) >>> >> @@ -1744,8 +1792,6 @@ int hdac_hdmi_jack_init(struct snd_soc_dai >>> >>*dai, >>> >int device, >>> >> return -ENOMEM; >>> >> pcm->pcm_id = device; >>> >> pcm->cvt = hdmi->dai_map[dai->id].cvt; >>> >> - pcm->jack_event = 0; >>> >> - pcm->jack = jack; >>> >> mutex_init(&pcm->lock); >>> >> INIT_LIST_HEAD(&pcm->port_list); >>> >> snd_pcm = hdac_hdmi_get_pcm_from_id(dai->component->card, >>> >device); >>> >> @@ -1765,30 +1811,6 @@ int hdac_hdmi_jack_init(struct snd_soc_dai >>> >> *dai, int device, } EXPORT_SYMBOL_GPL(hdac_hdmi_jack_init); >>> >> >>> >> -static void hdac_hdmi_present_sense_all_pins(struct hdac_device >*hdev, >>> >> - struct hdac_hdmi_priv *hdmi, bool detect_pin_caps) >>> >> -{ >>> >> - int i; >>> >> - struct hdac_hdmi_pin *pin; >>> >> - >>> >> - list_for_each_entry(pin, &hdmi->pin_list, head) { >>> >> - if (detect_pin_caps) { >>> >> - >>> >> - if (hdac_hdmi_get_port_len(hdev, pin->nid) == 0) >>> >> - pin->mst_capable = false; >>> >> - else >>> >> - pin->mst_capable = true; >>> >> - } >>> >> - >>> >> - for (i = 0; i < pin->num_ports; i++) { >>> >> - if (!pin->mst_capable && i > 0) >>> >> - continue; >>> >> - >>> >> - hdac_hdmi_present_sense(pin, &pin->ports[i]); >>> >> - } >>> >> - } >>> >> -} >>> >> - >>> >> static int hdmi_codec_probe(struct snd_soc_component *component) >{ >>> >> struct hdac_hdmi_priv *hdmi = >>> >> snd_soc_component_get_drvdata(component); >>> >> @@ -1823,7 +1845,6 @@ static int hdmi_codec_probe(struct >>> >snd_soc_component *component) >>> >> return ret; >>> >> } >>> >> >>> >> - hdac_hdmi_present_sense_all_pins(hdev, hdmi, true); >>> >> /* Imp: Store the card pointer in hda_codec */ >>> >> hdmi->card = dapm->card->snd_card; >>> >> >>> >> diff --git a/sound/soc/intel/boards/bxt_da7219_max98357a.c >>> >> b/sound/soc/intel/boards/bxt_da7219_max98357a.c >>> >> index 5cadb7f..c69cfa9 100644 >>> >> --- a/sound/soc/intel/boards/bxt_da7219_max98357a.c >>> >> +++ b/sound/soc/intel/boards/bxt_da7219_max98357a.c >>> >> @@ -573,14 +573,12 @@ static const struct x86_cpu_id glk_ids[] = { >>> >> {} >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int bxt_card_late_probe(struct snd_soc_card *card) { >>> >> struct bxt_card_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct bxt_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> if (x86_match_cpu(glk_ids)) >>> >> snd_soc_dapm_add_routes(&card->dapm, gemini_map, @@ >>> >-591,14 +589,6 >>> >> @@ static int bxt_card_late_probe(struct snd_soc_card *card) >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &broxton_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &broxton_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/bxt_rt298.c >>> >> b/sound/soc/intel/boards/bxt_rt298.c >>> >> index e91057f..d1372891 100644 >>> >> --- a/sound/soc/intel/boards/bxt_rt298.c >>> >> +++ b/sound/soc/intel/boards/bxt_rt298.c >>> >> @@ -507,25 +507,15 @@ static struct snd_soc_dai_link >>> >> broxton_rt298_dais[] >>> >= { >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int bxt_card_late_probe(struct snd_soc_card *card) { >>> >> struct bxt_rt286_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct bxt_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &broxton_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &broxton_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/glk_rt5682_max98357a.c >>> >> b/sound/soc/intel/boards/glk_rt5682_max98357a.c >>> >> index d17126f..2a35974 100644 >>> >> --- a/sound/soc/intel/boards/glk_rt5682_max98357a.c >>> >> +++ b/sound/soc/intel/boards/glk_rt5682_max98357a.c >>> >> @@ -29,7 +29,6 @@ >>> >> #define MAXIM_DEV0_NAME "MX98357A:00" >>> >> #define DUAL_CHANNEL 2 >>> >> #define QUAD_CHANNEL 4 >>> >> -#define NAME_SIZE 32 >>> >> >>> >> static struct snd_soc_jack geminilake_hdmi[3]; >>> >> >>> >> @@ -523,21 +522,12 @@ static int glk_card_late_probe(struct >>> >> snd_soc_card *card) { >>> >> struct glk_card_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct snd_soc_component *component = NULL; >>> >> - char jack_name[NAME_SIZE]; >>> >> struct glk_hdmi_pcm *pcm; >>> >> int err = 0; >>> >> int i = 0; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, >>> >&geminilake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &geminilake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/kbl_da7219_max98357a.c >>> >> b/sound/soc/intel/boards/kbl_da7219_max98357a.c >>> >> index 07491a0..f293307 100644 >>> >> --- a/sound/soc/intel/boards/kbl_da7219_max98357a.c >>> >> +++ b/sound/soc/intel/boards/kbl_da7219_max98357a.c >>> >> @@ -519,25 +519,15 @@ static struct snd_soc_dai_link >>> >> kabylake_dais[] = >>{ >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int kabylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct kbl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/kbl_da7219_max98927.c >>> >> b/sound/soc/intel/boards/kbl_da7219_max98927.c >>> >> index f72a7bf..84d3609 100644 >>> >> --- a/sound/soc/intel/boards/kbl_da7219_max98927.c >>> >> +++ b/sound/soc/intel/boards/kbl_da7219_max98927.c >>> >> @@ -34,7 +34,6 @@ >>> >> >>> >> #define DUAL_CHANNEL 2 >>> >> #define QUAD_CHANNEL 4 >>> >> -#define NAME_SIZE 32 >>> >> >>> >> static struct snd_soc_card *kabylake_audio_card; static struct >>> >> snd_soc_jack kabylake_hdmi[3]; @@ -952,18 +951,9 @@ static int >>> >> kabylake_card_late_probe(struct snd_soc_card *card) >>> >> struct kbl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &kabylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &kabylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/kbl_rt5660.c >>> >> b/sound/soc/intel/boards/kbl_rt5660.c >>> >> index 3255e00..06411bf 100644 >>> >> --- a/sound/soc/intel/boards/kbl_rt5660.c >>> >> +++ b/sound/soc/intel/boards/kbl_rt5660.c >>> >> @@ -447,25 +447,15 @@ static struct snd_soc_dai_link >>> >> kabylake_rt5660_dais[] = { }; >>> >> >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int kabylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct kbl_codec_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct kbl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/kbl_rt5663_max98927.c >>> >> b/sound/soc/intel/boards/kbl_rt5663_max98927.c >>> >> index d714752..9c43c6c 100644 >>> >> --- a/sound/soc/intel/boards/kbl_rt5663_max98927.c >>> >> +++ b/sound/soc/intel/boards/kbl_rt5663_max98927.c >>> >> @@ -898,25 +898,15 @@ static struct snd_soc_dai_link >>> >kabylake_5663_dais[] = { >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int kabylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct kbl_rt5663_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct kbl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c >>> >> b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c >>> >> index 879f142..8fe4007 100644 >>> >> --- a/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c >>> >> +++ b/sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c >>> >> @@ -40,7 +40,6 @@ >>> >> #define RT5663_DEV_NAME "i2c-10EC5663:00" >>> >> #define RT5514_AIF1_BCLK_FREQ (48000 * 8 * 16) #define >>> >> RT5514_AIF1_SYSCLK_FREQ 12288000 -#define NAME_SIZE 32 >>> >> >>> >> #define DMIC_CH(p) p->list[p->count-1] >>> >> >>> >> @@ -600,18 +599,10 @@ static int kabylake_card_late_probe(struct >>> >snd_soc_card *card) >>> >> struct kbl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP,pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &ctx->kabylake_hdmi[i], >>> >> - NULL, 0); >>> >> >>> >> - if (err) >>> >> - return err; >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &ctx->kabylake_hdmi[i]); >>> >> if (err < 0) >>> >> diff --git a/sound/soc/intel/boards/skl_hda_dsp_common.c >>> >> b/sound/soc/intel/boards/skl_hda_dsp_common.c >>> >> index 8b68f41..0f57fc2 100644 >>> >> --- a/sound/soc/intel/boards/skl_hda_dsp_common.c >>> >> +++ b/sound/soc/intel/boards/skl_hda_dsp_common.c >>> >> @@ -118,19 +118,10 @@ int skl_hda_hdmi_jack_init(struct >>> >> snd_soc_card >>> >*card) >>> >> struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct snd_soc_component *component = NULL; >>> >> struct skl_hda_hdmi_pcm *pcm; >>> >> - char jack_name[NAME_SIZE]; >>> >> int err; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &pcm- >>> >>hdmi_jack, >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &pcm->hdmi_jack); >>> >> diff --git a/sound/soc/intel/boards/skl_nau88l25_max98357a.c >>> >> b/sound/soc/intel/boards/skl_nau88l25_max98357a.c >>> >> index 0922106..aca426f 100644 >>> >> --- a/sound/soc/intel/boards/skl_nau88l25_max98357a.c >>> >> +++ b/sound/soc/intel/boards/skl_nau88l25_max98357a.c >>> >> @@ -587,26 +587,15 @@ static struct snd_soc_dai_link skylake_dais[] = >{ >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int skylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct skl_nau8825_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct skl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, >>> >> - &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/skl_nau88l25_ssm4567.c >>> >> b/sound/soc/intel/boards/skl_nau88l25_ssm4567.c >>> >> index 8433c52..788a837 100644 >>> >> --- a/sound/soc/intel/boards/skl_nau88l25_ssm4567.c >>> >> +++ b/sound/soc/intel/boards/skl_nau88l25_ssm4567.c >>> >> @@ -638,26 +638,15 @@ static struct snd_soc_dai_link skylake_dais[] = >{ >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int skylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct skl_nau88125_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct skl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, >>> >> - &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/skl_rt286.c >>> >> b/sound/soc/intel/boards/skl_rt286.c >>> >> index 0e1818d..5d245f5 100644 >>> >> --- a/sound/soc/intel/boards/skl_rt286.c >>> >> +++ b/sound/soc/intel/boards/skl_rt286.c >>> >> @@ -473,25 +473,15 @@ static struct snd_soc_dai_link >>> >> skylake_rt286_dais[] >>> >= { >>> >> }, >>> >> }; >>> >> >>> >> -#define NAME_SIZE 32 >>> >> static int skylake_card_late_probe(struct snd_soc_card *card) { >>> >> struct skl_rt286_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct skl_hdmi_pcm *pcm; >>> >> struct snd_soc_component *component = NULL; >>> >> int err, i = 0; >>> >> - char jack_name[NAME_SIZE]; >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &skylake_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &skylake_hdmi[i]); >>> >> diff --git a/sound/soc/intel/boards/sof_rt5682.c >>> >> b/sound/soc/intel/boards/sof_rt5682.c >>> >> index f28fb98..660e4a6 100644 >>> >> --- a/sound/soc/intel/boards/sof_rt5682.c >>> >> +++ b/sound/soc/intel/boards/sof_rt5682.c >>> >> @@ -22,8 +22,6 @@ >>> >> #include "../../codecs/rt5682.h" >>> >> #include "../../codecs/hdac_hdmi.h" >>> >> >>> >> -#define NAME_SIZE 32 >>> >> - >>> >> #define SOF_RT5682_SSP_CODEC(quirk) ((quirk) & GENMASK(2, >>> >0)) >>> >> #define SOF_RT5682_SSP_CODEC_MASK (GENMASK(2, >>> >0)) >>> >> #define SOF_RT5682_MCLK_EN BIT(3) >>> >> @@ -216,7 +214,6 @@ static int sof_card_late_probe(struct >>> >> snd_soc_card >>> >> *card) { >>> >> struct sof_card_private *ctx = snd_soc_card_get_drvdata(card); >>> >> struct snd_soc_component *component = NULL; >>> >> - char jack_name[NAME_SIZE]; >>> >> struct sof_hdmi_pcm *pcm; >>> >> int err = 0; >>> >> int i = 0; >>> >> @@ -227,14 +224,6 @@ static int sof_card_late_probe(struct >>> >> snd_soc_card *card) >>> >> >>> >> list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) { >>> >> component = pcm->codec_dai->component; >>> >> - snprintf(jack_name, sizeof(jack_name), >>> >> - "HDMI/DP, pcm=%d Jack", pcm->device); >>> >> - err = snd_soc_card_jack_new(card, jack_name, >>> >> - SND_JACK_AVOUT, &sof_hdmi[i], >>> >> - NULL, 0); >>> >> - >>> >> - if (err) >>> >> - return err; >>> >> >>> >> err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device, >>> >> &sof_hdmi[i]); >>> >> -- >>> >> 2.7.4 >>> >> >>>
Attachment:
HiFi
Description: HiFi
_______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel