[alsa-devel] [PATCH] ALSA: hda - Fix the workaround for conflicting IEC958 controls
Anssi Hannula
anssi.hannula at iki.fi
Tue Feb 12 16:51:37 CET 2013
11.02.2013 13:28, Takashi Iwai kirjoitti:
> At Mon, 11 Feb 2013 13:20:03 +0200,
> Anssi Hannula wrote:
>>
>> On 11.02.2013 12:51, Takashi Iwai wrote:
>>> At Sun, 10 Feb 2013 13:05:14 +0200,
>>> Anssi Hannula wrote:
>>>>
>>>> 10.02.2013 12:38, Takashi Iwai kirjoitti:
>>>>> At Sat, 9 Feb 2013 00:44:39 +0200,
>>>>> Anssi Hannula wrote:
>>>>>>
>>>>>> Commit dcda5806165c155d90b9aa466a1602cf4726012b ("ALSA: hda - Add
>>>>>> workaround for conflicting IEC958 controls") added a workaround
>>>> for
>>>>>> cards that have both an S/PDIF and an HDMI device, so that S/PDIF
>>>> IEC958
>>>>>> controls will be moved to device=1 on such cards.
>>>>>>
>>>>>> However, the workaround did not take it into account that the
>>>> S/PDIF and
>>>>>> HDMI devices may be on different codecs of the same card.
>>>> Currently this
>>>>>> is always the case, and the workaround therefore fails to work.
>>>>>>
>>>>>> Fix the workaround to handle card-wide IEC958 conflicts.
>>>>>>
>>>>>> Reported-by: Stephan Raue <stephan at openelec.tv>
>>>>>> Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
>>>>>> ---
>>>>>>
>>>>>> Unfortunately this seems to cause a nasty issue with alsa-lib
>>>> 1.0.26:
>>>>>> $ amixer scontrols -c 0
>>>>>> ALSA lib simple_none.c:1551:(simple_add1) helem (MIXER,'IEC958
>>>> Playback Switch',0,1,0) appears twice or more
>>>>>> amixer: Mixer hw:0 load error: Invalid argument
>>>>>>
>>>>>> The non-simple-mode "amixer controls -c 0" works fine, though.
>>>>>>
>>>>>> Not really sure what to do now then, do we revert the workaround
>>>>>> completely and devise a different workaround/fix for this, or do
>>>> you
>>>>>> have some other good ideas?
>>>>>
>>>>> If the element isn't really dup'ed, it must be a bug in alsa-lib
>>>> mixer
>>>>> abstraction, so it should be fixed there.
>>>>
>>>> This is because the simple mixer interface only identifies controls
>>>> by
>>>> name+index:
>>>>
>>>> http://www.alsa-project.org/alsa-doc/alsa-lib/group___simple_mixer.html
>>>>
>>>> So controls that only differ by device (or subdevice?) are
>>>> considered
>>>> duplicated. I did look at the code but saw no straight-forward way
>>>> to
>>>> fix it, other than to introduce devices (and subdevices) to the
>>>> simple
>>>> mixer API (which is used by outside applications).
>>>
>>> OK, so it's a limitation of alsa-lib mixer simple abst
>>> implementation. We need to live with that for now...
>>>
>>>> Anyway, wouldn't breaking "old" alsa-lib make this way of fixing it
>>>> a
>>>> no-go (the error is fatal and mixer creation fails completely)?
>>>
>>> No, it's a general rule in the kernel that we can't break the old
>>> user-space.
>>
>> Isn't that a "yes" for my no-go? ;)
>
> I hate double negation :)
>
>
>>>>> Could you add alsa-info.sh output of this board (at best before
>>>> and
>>>>> after your patch)?
>>>>
>>>> Here's one after patch (can't get one before patch right now, but I
>>>> guess it isn't needed since the cause is very clear):
>>>>
>>>> http://www.alsa-project.org/db/?f=bb3fc8680b372c0475719d42d7fc8b2bb7bfb4eb
>>>> (this one has alsa-lib hack applied which ignores the failure to add
>>>> the
>>>> control so that the mixer error is non-fatal)
>>>
>>> Thinking it again, maybe an ugly but working workaround is to shift
>>> the SPDIF index to high enough not conflicting with HDMI, instead of
>>> changing the ctl device.
>>>
>>> The quick patch below is to put the SPDIF stuff into index=16+. It
>>> also fixes the issue of multiple codecs.
>>>
>>> Of course, this will require a similar fix in alsa-lib config.
>>> Instead of changing dev to 1, just change index to 16.
>>
>> OK, patch looks fine to me. I'll test this later today or tomorrow and
>> report
>> back.
>
> Thanks. The patch below is the revised alsa-lib patch corresponding
> to this fix.
Seems to work fine :)
>> Also, sorry for not catching this earlier.
>
> Oh no, thanks for updates!
>
>
> thanks,
>
> Takashi
--
Anssi Hannula
More information about the Alsa-devel
mailing list