diff options
author | Nikesh Oswal <noswal@nvidia.com> | 2012-07-26 15:58:46 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-08-02 09:37:28 -0700 |
commit | 93fa2d495c82c5b63572e62e8bba6a6acf3269f9 (patch) | |
tree | 44dba35d2495d83e11e5360df6ef537226d53887 /sound | |
parent | ece74a0888415460a005d52bcf2d5f6cf535597d (diff) |
alsa: hda: add alsa ctl to query max channels
add alsa ctl to query maximum supported
channels
Bug: 998697
Signed-off-by: Nikesh Oswal <noswal@nvidia.com>
Change-Id: Id2f0e6a62d2413615f13a0c18757c05610ef0c2c
Reviewed-on: http://git-master/r/118602
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Scott Peterson <speterson@nvidia.com>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 25 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.h | 1 | ||||
-rw-r--r-- | sound/pci/hda/hda_eld.c | 4 |
3 files changed, 30 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 91b2e4689175..ff10a630da92 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -2840,6 +2840,16 @@ static int snd_hda_spdif_out_switch_put(struct snd_kcontrol *kcontrol, return change; } +int snd_hda_max_pcm_ch_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 0xFFFFFFFF; + return 0; +} + int snd_hda_hdmi_decode_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { @@ -2850,6 +2860,15 @@ int snd_hda_hdmi_decode_info(struct snd_kcontrol *kcontrol, return 0; } +static int snd_hda_max_pcm_ch_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct hda_codec *codec = snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = codec->max_pcm_channels; + return 0; +} + static int snd_hda_hdmi_decode_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { @@ -2894,6 +2913,12 @@ static struct snd_kcontrol_new dig_mixes[] = { .info = snd_hda_hdmi_decode_info, .get = snd_hda_hdmi_decode_get, }, + { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "HDA Maximum PCM Channels", + .info = snd_hda_max_pcm_ch_info, + .get = snd_hda_max_pcm_ch_get, + }, { } /* end */ }; diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 1c5dc6d73d6b..6cba73ce1997 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h @@ -868,6 +868,7 @@ struct hda_codec { #endif unsigned int recv_dec_cap; + unsigned int max_pcm_channels; /* codec-specific additional proc output */ void (*proc_widget_hook)(struct snd_info_buffer *buffer, struct hda_codec *codec, hda_nid_t nid); diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c index a8042e14f5de..862dd35260d0 100644 --- a/sound/pci/hda/hda_eld.c +++ b/sound/pci/hda/hda_eld.c @@ -427,6 +427,10 @@ int snd_hdmi_get_eld(struct hdmi_eld *eld, codec->recv_dec_cap |= (1 << AUDIO_CODING_TYPE_AC3); } else if (eld->sad[i].format == AUDIO_CODING_TYPE_DTS) { codec->recv_dec_cap |= (1 << AUDIO_CODING_TYPE_DTS); + } else if (eld->sad[i].format == AUDIO_CODING_TYPE_LPCM) { + codec->max_pcm_channels = + eld->sad[i].channels > codec->max_pcm_channels ? + eld->sad[i].channels : codec->max_pcm_channels; } } |