diff options
author | Anssi Hannula <anssi.hannula@iki.fi> | 2013-10-24 14:10:38 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-10-24 16:57:32 -0400 |
commit | 84d69e790f48ff2e8472a8cf602243e43683eaf0 (patch) | |
tree | 0596400b25c81148cf416c84d840d23b8cec1bcc | |
parent | 461cf6b39dded3ddb15a2300a534aba039870e5f (diff) |
ALSA: hda - hdmi: Disable ramp-up/down for non-PCM on AMD codecs
Recent AMD HDMI codecs (revision ID 3 and later, 0x100300 as reported by
procfs codec#0) have a configurable ramp-up/down functionality.
The documentation ( http://www.x.org/docs/AMD/AMD_HDA_verbs_v2.pdf )
specifies that 180 ("180/256 =~ 0.7") is recommended for PCM and 0 for
non-PCM.
Apply the recommended values according to provided S/PDIF AES0 settings
since ramp-up/down does not make sense for non-PCM.
v2: adapted to hdmi_ops infrastructure
* More note from Anssi:
actually, re-reading mails reveals that Olivier didn't find the
expected difference with this setting, except for "maybe slightly
slower startup with AES0=6" (i.e. value 0, which is unexpected).
So maybe
a) it makes too unnoticiable a difference, or
b) only affects certain hardware (card and/or sink), or
c) ramp-up/down is only triggered with the MUTE bit of
ATI_VERB_SET_MULTICHANNEL_xx which is also rev3+ specific,
but is not presently used by the driver,
or something else.
So there's a significant chance setting ramp rate is useless for us ATM,
but probably does not do actual harm either.
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Tested-by: Olivier Langlois <olivier@trillion01.com> # v1
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index f6a97607e522..7bd89bf62559 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c | |||
@@ -2818,6 +2818,10 @@ static int patch_nvhdmi_8ch_7x(struct hda_codec *codec) | |||
2818 | #define ATI_VERB_GET_MULTICHANNEL_7 0xf88 | 2818 | #define ATI_VERB_GET_MULTICHANNEL_7 0xf88 |
2819 | #define ATI_VERB_GET_MULTICHANNEL_MODE 0xf89 | 2819 | #define ATI_VERB_GET_MULTICHANNEL_MODE 0xf89 |
2820 | 2820 | ||
2821 | /* AMD specific HDA cvt verbs */ | ||
2822 | #define ATI_VERB_SET_RAMP_RATE 0x770 | ||
2823 | #define ATI_VERB_GET_RAMP_RATE 0xf70 | ||
2824 | |||
2821 | #define ATI_OUT_ENABLE 0x1 | 2825 | #define ATI_OUT_ENABLE 0x1 |
2822 | 2826 | ||
2823 | #define ATI_MULTICHANNEL_MODE_PAIRED 0 | 2827 | #define ATI_MULTICHANNEL_MODE_PAIRED 0 |
@@ -3049,6 +3053,23 @@ static int atihdmi_pin_hbr_setup(struct hda_codec *codec, hda_nid_t pin_nid, | |||
3049 | return 0; | 3053 | return 0; |
3050 | } | 3054 | } |
3051 | 3055 | ||
3056 | static int atihdmi_setup_stream(struct hda_codec *codec, hda_nid_t cvt_nid, | ||
3057 | hda_nid_t pin_nid, u32 stream_tag, int format) | ||
3058 | { | ||
3059 | |||
3060 | if (is_amdhdmi_rev3_or_later(codec)) { | ||
3061 | int ramp_rate = 180; /* default as per AMD spec */ | ||
3062 | /* disable ramp-up/down for non-pcm as per AMD spec */ | ||
3063 | if (format & AC_FMT_TYPE_NON_PCM) | ||
3064 | ramp_rate = 0; | ||
3065 | |||
3066 | snd_hda_codec_write(codec, cvt_nid, 0, ATI_VERB_SET_RAMP_RATE, ramp_rate); | ||
3067 | } | ||
3068 | |||
3069 | return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format); | ||
3070 | } | ||
3071 | |||
3072 | |||
3052 | static int atihdmi_init(struct hda_codec *codec) | 3073 | static int atihdmi_init(struct hda_codec *codec) |
3053 | { | 3074 | { |
3054 | struct hdmi_spec *spec = codec->spec; | 3075 | struct hdmi_spec *spec = codec->spec; |
@@ -3095,6 +3116,7 @@ static int patch_atihdmi(struct hda_codec *codec) | |||
3095 | spec->ops.pin_set_slot_channel = atihdmi_pin_set_slot_channel; | 3116 | spec->ops.pin_set_slot_channel = atihdmi_pin_set_slot_channel; |
3096 | spec->ops.pin_setup_infoframe = atihdmi_pin_setup_infoframe; | 3117 | spec->ops.pin_setup_infoframe = atihdmi_pin_setup_infoframe; |
3097 | spec->ops.pin_hbr_setup = atihdmi_pin_hbr_setup; | 3118 | spec->ops.pin_hbr_setup = atihdmi_pin_hbr_setup; |
3119 | spec->ops.setup_stream = atihdmi_setup_stream; | ||
3098 | 3120 | ||
3099 | if (!has_amd_full_remap_support(codec)) { | 3121 | if (!has_amd_full_remap_support(codec)) { |
3100 | /* override to ATI/AMD-specific versions with pairwise mapping */ | 3122 | /* override to ATI/AMD-specific versions with pairwise mapping */ |