|
|
@@ -269,6 +269,65 @@ static const char *get_jack_color(u32 cfg)
|
|
|
return "UNKNOWN";
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Parse the pin default config value and returns the string of the
|
|
|
+ * jack location, e.g. "Rear", "Front", etc.
|
|
|
+ */
|
|
|
+static const char *get_jack_location(u32 cfg)
|
|
|
+{
|
|
|
+ static char *bases[7] = {
|
|
|
+ "N/A", "Rear", "Front", "Left", "Right", "Top", "Bottom",
|
|
|
+ };
|
|
|
+ static unsigned char specials_idx[] = {
|
|
|
+ 0x07, 0x08,
|
|
|
+ 0x17, 0x18, 0x19,
|
|
|
+ 0x37, 0x38
|
|
|
+ };
|
|
|
+ static char *specials[] = {
|
|
|
+ "Rear Panel", "Drive Bar",
|
|
|
+ "Riser", "HDMI", "ATAPI",
|
|
|
+ "Mobile-In", "Mobile-Out"
|
|
|
+ };
|
|
|
+ int i;
|
|
|
+
|
|
|
+ cfg = (cfg & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT;
|
|
|
+ if ((cfg & 0x0f) < 7)
|
|
|
+ return bases[cfg & 0x0f];
|
|
|
+ for (i = 0; i < ARRAY_SIZE(specials_idx); i++) {
|
|
|
+ if (cfg == specials_idx[i])
|
|
|
+ return specials[i];
|
|
|
+ }
|
|
|
+ return "UNKNOWN";
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Parse the pin default config value and returns the string of the
|
|
|
+ * jack connectivity, i.e. external or internal connection.
|
|
|
+ */
|
|
|
+static const char *get_jack_connectivity(u32 cfg)
|
|
|
+{
|
|
|
+ static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
|
|
|
+
|
|
|
+ return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Parse the pin default config value and returns the string of the
|
|
|
+ * jack type, i.e. the purpose of the jack, such as Line-Out or CD.
|
|
|
+ */
|
|
|
+static const char *get_jack_type(u32 cfg)
|
|
|
+{
|
|
|
+ static char *jack_types[16] = {
|
|
|
+ "Line Out", "Speaker", "HP Out", "CD",
|
|
|
+ "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand",
|
|
|
+ "Line In", "Aux", "Mic", "Telephony",
|
|
|
+ "SPDIF In", "Digital In", "Reserved", "Other"
|
|
|
+ };
|
|
|
+
|
|
|
+ return jack_types[(cfg & AC_DEFCFG_DEVICE)
|
|
|
+ >> AC_DEFCFG_DEVICE_SHIFT];
|
|
|
+}
|
|
|
+
|
|
|
static void print_pin_caps(struct snd_info_buffer *buffer,
|
|
|
struct hda_codec *codec, hda_nid_t nid,
|
|
|
int *supports_vref)
|
|
|
@@ -340,9 +399,9 @@ static void print_pin_caps(struct snd_info_buffer *buffer,
|
|
|
caps = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONFIG_DEFAULT, 0);
|
|
|
snd_iprintf(buffer, " Pin Default 0x%08x: [%s] %s at %s %s\n", caps,
|
|
|
jack_conns[(caps & AC_DEFCFG_PORT_CONN) >> AC_DEFCFG_PORT_CONN_SHIFT],
|
|
|
- snd_hda_get_jack_type(caps),
|
|
|
- snd_hda_get_jack_connectivity(caps),
|
|
|
- snd_hda_get_jack_location(caps));
|
|
|
+ get_jack_type(caps),
|
|
|
+ get_jack_connectivity(caps),
|
|
|
+ get_jack_location(caps));
|
|
|
snd_iprintf(buffer, " Conn = %s, Color = %s\n",
|
|
|
get_jack_connection(caps),
|
|
|
get_jack_color(caps));
|