aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorMatthew Ranostay <mranostay@embeddedalley.com>2008-10-25 01:05:45 -0400
committerTakashi Iwai <tiwai@suse.de>2008-10-27 03:15:15 -0400
commit50a9f7905fb3e6ae25e80ba443a14d878caef0c9 (patch)
tree03472d8af217599280bfa5c5a4fbf9c6cf5c0bf6 /sound/pci/hda/hda_codec.c
parent282cd76ffca781013151344c4b0f9229e9ea3c35 (diff)
ALSA: hda: add snd_hda_get_jack* functions
This patch adds snd_hda_get_jack* functions for reporting jack location, device, and connectivity type. Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 9a8adc600a57..eaa8b5676eae 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -107,6 +107,52 @@ static void hda_keep_power_on(struct hda_codec *codec);
107static inline void hda_keep_power_on(struct hda_codec *codec) {} 107static inline void hda_keep_power_on(struct hda_codec *codec) {}
108#endif 108#endif
109 109
110const char *snd_hda_get_jack_location(u32 cfg)
111{
112 static char *bases[7] = {
113 "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
114 };
115 static unsigned char specials_idx[] = {
116 0x07, 0x08,
117 0x17, 0x18, 0x19,
118 0x37, 0x38
119 };
120 static char *specials[] = {
121 "Rear Panel", "Drive Bar",
122 "Riser", "HDMI", "ATAPI",
123 "Mobile-In", "Mobile-Out"
124 };
125 int i;
126 cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
127 if ((cfg & 0x0f) < 7)
128 return bases[cfg & 0x0f];
129 for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
130 if (cfg == specials_idx[i])
131 return specials[i];
132 }
133 return "UNKNOWN";
134}
135
136const char *snd_hda_get_jack_connectivity(u32 cfg)
137{
138 static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
139
140 return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
141}
142
143const char *snd_hda_get_jack_type(u32 cfg)
144{
145 static char *jack_types[16] = {
146 "Line Out", "Speaker", "HP Out", "CD",
147 "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
148 "Line In", "Aux", "Mic", "Telephony",
149 "SPDIF In", "Digitial In", "Reserved", "Other"
150 };
151
152 return jack_types[(cfg & AC_DEFCFG_DEVICE)
153 >> AC_DEFCFG_DEVICE_SHIFT];
154}
155
110/** 156/**
111 * snd_hda_codec_read - send a command and get the response 157 * snd_hda_codec_read - send a command and get the response
112 * @codec: the HDA codec 158 * @codec: the HDA codec