All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaud Pouliquen <arnaud.pouliquen@st.com>
To: Jyri Sarha <jsarha@ti.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
Cc: Jean-Francois Moine <moinejf@free.fr>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	David Airlie <airlied@linux.ie>,
	Liam Girdwood <lgirdwood@gmail.com>, Takashi Iwai <tiwai@suse.de>,
	Mark Brown <broonie@kernel.org>,
	Benjamin Gaignard <benjamin.gaignard@linaro.org>
Subject: Re: [RFC v2 5/6] ASoc: hdmi-codec: add IEC control.
Date: Mon, 15 Feb 2016 11:51:49 +0100	[thread overview]
Message-ID: <56C1ADC5.4090207@st.com> (raw)
In-Reply-To: <56B649B0.3080200@ti.com>



On 02/06/2016 08:29 PM, Jyri Sarha wrote:
> On 01/22/16 19:48, Arnaud Pouliquen wrote:
>> Create 'IEC958 Playback Default' controls to support IEC61937 formats.
>> the use of the alsa control is optional, using 'iec_ctl' flag.
>>
> 
> I applied the patches "ALSA: pcm: add IEC958 channel status control 
> helper", "ASoC: core: add code to complete dai init after pcm creation", 
> and "ASoc: hdmi-codec: add IEC control" to my BBB HDMI audio branch. I 
> needed to do some trivial conflict solving, but after that everything 
> compiled fine. However, when I tried to read the iec mixer with:
> 
> # amixer -c0 cget name='IEC958 Playback Default',device=0
> amixer: Cannot find the given element from control hw:0
> 
> The same command worked just fine on my intel based laptop:
> # amixer -c0 cget iface=MIXER,name='IEC958 Playback Default',device=0
> numid=31,iface=MIXER,name='IEC958 Playback Default'
>    ; type=IEC958,access=rw------,values=1
>    : values=[AES0=0x04 AES1=0x00 AES2=0x00 AES3=0x00]
Do you enable "iec_ctl" field in hdmi_codec_pdata structure?
i add this field because control can be declared and used by CPU DAI or
codec, depending on hardware.

> 
> How did you test the mixer yourself?
To test on my platform i hacked my code because control is handled by
CPU_DAI...
But just by disabling control creation in CPU DAI for HDMI and set
"iec_ctl" filed to 1, i can see and use the control.

**** List of PLAYBACK Hardware Devices ****
card 0: Default [sti audio card], device 0: Uni Player #0
(HDMI)-i2s-hifi i2s-hifi-0 []
card 0: Default [sti audio card], device 1: Uni Player #1
(DAC)-sas-dai-dac sas-dai-dac-1 []
card 0: Default [sti audio card], device 2: Uni Player #1
(PIO)-sas-dai-spdif-out sas-dai-spdif-out-2 []

# amixer -c0 controls | grep IEC958
numid=5,iface=PCM,name='IEC958 Playback Default'
numid=3,iface=PCM,name='IEC958 Playback Default',device=3


BR,
Arnaud
> 
> Best regards,
> Jyri
> 
>> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
>> ---
>>   include/sound/hdmi-codec.h    |  1 +
>>   sound/soc/codecs/hdmi-codec.c | 59 +++++++++++++++++++++++++++++++++----------
>>   2 files changed, 46 insertions(+), 14 deletions(-)
>>
>> diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h
>> index ed780b2..58e8eae 100644
>> --- a/include/sound/hdmi-codec.h
>> +++ b/include/sound/hdmi-codec.h
>> @@ -96,6 +96,7 @@ struct hdmi_codec_pdata {
>>   	const struct hdmi_codec_ops *ops;
>>   	uint i2s:1;
>>   	uint spdif:1;
>> +	uint iec_ctl:1;
>>   	int max_i2s_channels;
>>   };
>>
>> diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c
>> index 94349b3..1b6cb5a 100644
>> --- a/sound/soc/codecs/hdmi-codec.c
>> +++ b/sound/soc/codecs/hdmi-codec.c
>> @@ -32,6 +32,7 @@ struct hdmi_codec_priv {
>>   	struct snd_pcm_substream *current_stream;
>>   	struct snd_pcm_hw_constraint_list ratec;
>>   	uint8_t eld[MAX_ELD_BYTES];
>> +	struct snd_aes_iec958 iec;
>>   };
>>
>>   static const struct snd_soc_dapm_widget hdmi_widgets[] = {
>> @@ -140,27 +141,30 @@ static int hdmi_codec_hw_params(struct snd_pcm_substream *substream,
>>   				struct snd_soc_dai *dai)
>>   {
>>   	struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai);
>> -	struct hdmi_codec_params hp = {
>> -		.iec = {
>> -			.status = { 0 },
>> -			.subcode = { 0 },
>> -			.pad = 0,
>> -			.dig_subframe = { 0 },
>> -		}
>> -	};
>> +	struct hdmi_codec_params hp;
>>   	int ret;
>>
>>   	dev_dbg(dai->dev, "%s() width %d rate %d channels %d\n", __func__,
>>   		params_width(params), params_rate(params),
>>   		params_channels(params));
>>
>> -	ret = snd_pcm_create_iec958_consumer_hw_params(params, hp.iec.status,
>> -						       sizeof(hp.iec.status));
>> -	if (ret < 0) {
>> -		dev_err(dai->dev, "Creating IEC958 channel status failed %d\n",
>> -			ret);
>> -		return ret;
>> +	mutex_lock(&hcp->current_stream_lock);
>> +	hp.iec = hcp->iec;
>> +
>> +	if (!hcp->hcd.iec_ctl) {
>> +		/*
>> +		* only PCM format supported
>> +		*channel status set according to runtime parameters
>> +		*/
>> +		ret = snd_pcm_create_iec958_consumer_hw_params(params,
>> +					hp.iec.status, sizeof(hp.iec.status));
>> +		if (ret < 0) {
>> +			dev_err(dai->dev, "Creating IEC958 status failed %d\n",
>> +				ret);
>> +			return ret;
>> +		}
>>   	}
>> +	mutex_unlock(&hcp->current_stream_lock);
>>
>>   	ret = hdmi_codec_new_stream(substream, dai);
>>   	if (ret)
>> @@ -266,12 +270,37 @@ static int hdmi_codec_digital_mute(struct snd_soc_dai *dai, int mute)
>>   	return 0;
>>   }
>>
>> +static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
>> +			      struct snd_soc_dai *dai)
>> +{
>> +	struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai);
>> +	struct snd_pcm_iec958_params *iec958_params;
>> +
>> +	dev_dbg(dai->dev, "%s()\n", __func__);
>> +
>> +	if (!hcp->hcd.iec_ctl)
>> +		return 0;
>> +
>> +	iec958_params = devm_kzalloc(dai->dev, sizeof(*iec958_params),
>> +				     GFP_KERNEL);
>> +	if (!iec958_params)
>> +		return -ENOMEM;
>> +
>> +	iec958_params->iec = &hcp->iec;
>> +	iec958_params->pdata = hcp;
>> +	iec958_params->mutex = &hcp->current_stream_lock;
>> +
>> +	return snd_pcm_create_iec958_ctl(rtd->pcm, iec958_params,
>> +					 SNDRV_PCM_STREAM_PLAYBACK);
>> +}
>> +
>>   static const struct snd_soc_dai_ops hdmi_dai_ops = {
>>   	.startup        = hdmi_codec_startup,
>>   	.shutdown       = hdmi_codec_shutdown,
>>   	.hw_params      = hdmi_codec_hw_params,
>>   	.set_fmt        = hdmi_codec_set_fmt,
>>   	.digital_mute   = hdmi_codec_digital_mute,
>> +	.pcm_new        = hdmi_codec_pcm_new,
>>   };
>>
>>
>> @@ -352,6 +381,8 @@ static int hdmi_codec_probe(struct platform_device *pdev)
>>   	if (!hcp)
>>   		return -ENOMEM;
>>
>> +	memset(&hcp->iec, 0, sizeof(hcp->iec));
>> +
>>   	hcp->hcd = *hcd;
>>   	mutex_init(&hcp->current_stream_lock);
>>
>>
> 

  reply	other threads:[~2016-02-15 10:51 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-22 17:48 [RFC v2 0/6] sti: add audio interface to the hdmi driver Arnaud Pouliquen
2016-01-22 17:48 ` [RFC v2 1/6] video: hdmi: add helper function for N and CTS Arnaud Pouliquen
2016-02-18 14:20   ` Philipp Zabel
2016-02-19  8:20     ` Arnaud Pouliquen
2016-01-22 17:48 ` [RFC v2 2/6] ALSA: pcm: add IEC958 channel status control helper Arnaud Pouliquen
2016-02-16 20:17   ` Jyri Sarha
2016-02-17  8:37     ` Arnaud Pouliquen
2016-02-17  0:31   ` Russell King - ARM Linux
2016-02-17  9:07     ` Arnaud Pouliquen
2016-01-22 17:48 ` [RFC v2 3/6] ASoC: core: add code to complete dai init after pcm creation Arnaud Pouliquen
2016-02-05  9:58   ` Jyri Sarha
2016-02-15 10:39     ` Arnaud Pouliquen
2016-01-22 17:48 ` [RFC v2 4/6] drm: sti: Add ASoC generic hdmi codec support Arnaud Pouliquen
2016-01-22 17:48 ` [RFC v2 5/6] ASoc: hdmi-codec: add IEC control Arnaud Pouliquen
2016-02-06 19:29   ` Jyri Sarha
2016-02-15 10:51     ` Arnaud Pouliquen [this message]
2016-02-16 20:16       ` Jyri Sarha
2016-01-22 17:48 ` [RFC v2 6/6] ARM: DT: b2120: add audio HDMI dai link in audio card Arnaud Pouliquen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56C1ADC5.4090207@st.com \
    --to=arnaud.pouliquen@st.com \
    --cc=airlied@linux.ie \
    --cc=alsa-devel@alsa-project.org \
    --cc=benjamin.gaignard@linaro.org \
    --cc=broonie@kernel.org \
    --cc=jsarha@ti.com \
    --cc=lars@metafoo.de \
    --cc=lgirdwood@gmail.com \
    --cc=linux@arm.linux.org.uk \
    --cc=moinejf@free.fr \
    --cc=p.zabel@pengutronix.de \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.