lkml.org 
[lkml]   [2011]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[006/152] ALSA: hda - Always allow basic audio irrespective of ELD info
    2.6.36-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Anssi Hannula <anssi.hannula@iki.fi>

    commit 3dc86429032910bdf762adeb2969112bb303924c upstream.

    Commit bbbe33900d1f3c added functionality to restrict PCM parameters
    based on ELD info (derived from EDID data) of the audio sink.

    However, according to CEA-861-D no SAD is needed for basic audio
    (32/44.1/48kHz stereo 16-bit audio), which is instead indicated with a
    basic audio flag in the CEA EDID Extension.

    The flag is not present in ELD. However, as all audio capable sinks are
    required to support basic audio, we can assume it to be always
    available.

    Fix allowed audio formats with sinks that have SADs (Short Audio
    Descriptors) which do not completely overlap with the basic audio
    formats (there are no reports of affected devices so far) by always
    assuming that basic audio is supported.

    Reported-by: Stephen Warren <swarren@nvidia.com>
    Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    sound/pci/hda/hda_eld.c | 16 +++++++---------
    1 file changed, 7 insertions(+), 9 deletions(-)

    --- a/sound/pci/hda/hda_eld.c
    +++ b/sound/pci/hda/hda_eld.c
    @@ -604,21 +604,19 @@ void hdmi_eld_update_pcm_info(struct hdm
    {
    int i;

    - pcm->rates = 0;
    - pcm->formats = 0;
    - pcm->maxbps = 0;
    - pcm->channels_max = 0;
    + /* assume basic audio support (the basic audio flag is not in ELD;
    + * however, all audio capable sinks are required to support basic
    + * audio) */
    + pcm->rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000;
    + pcm->formats = SNDRV_PCM_FMTBIT_S16_LE;
    + pcm->maxbps = 16;
    + pcm->channels_max = 2;
    for (i = 0; i < eld->sad_count; i++) {
    struct cea_sad *a = &eld->sad[i];
    pcm->rates |= a->rates;
    if (a->channels > pcm->channels_max)
    pcm->channels_max = a->channels;
    if (a->format == AUDIO_CODING_TYPE_LPCM) {
    - if (a->sample_bits & AC_SUPPCM_BITS_16) {
    - pcm->formats |= SNDRV_PCM_FMTBIT_S16_LE;
    - if (pcm->maxbps < 16)
    - pcm->maxbps = 16;
    - }
    if (a->sample_bits & AC_SUPPCM_BITS_20) {
    pcm->formats |= SNDRV_PCM_FMTBIT_S32_LE;
    if (pcm->maxbps < 20)



    \
     
     \ /
      Last update: 2011-01-06 01:31    [W:0.020 / U:31.700 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site