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>
This commit is contained in:
parent
282cd76ffc
commit
50a9f7905f
@ -107,6 +107,52 @@ static void hda_keep_power_on(struct hda_codec *codec);
|
|||||||
static inline void hda_keep_power_on(struct hda_codec *codec) {}
|
static inline void hda_keep_power_on(struct hda_codec *codec) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *snd_hda_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";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *snd_hda_get_jack_connectivity(u32 cfg)
|
||||||
|
{
|
||||||
|
static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
|
||||||
|
|
||||||
|
return jack_locations[(cfg >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *snd_hda_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", "Digitial In", "Reserved", "Other"
|
||||||
|
};
|
||||||
|
|
||||||
|
return jack_types[(cfg & AC_DEFCFG_DEVICE)
|
||||||
|
>> AC_DEFCFG_DEVICE_SHIFT];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* snd_hda_codec_read - send a command and get the response
|
* snd_hda_codec_read - send a command and get the response
|
||||||
* @codec: the HDA codec
|
* @codec: the HDA codec
|
||||||
|
@ -859,6 +859,13 @@ int snd_hda_suspend(struct hda_bus *bus, pm_message_t state);
|
|||||||
int snd_hda_resume(struct hda_bus *bus);
|
int snd_hda_resume(struct hda_bus *bus);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get widget information
|
||||||
|
*/
|
||||||
|
const char *snd_hda_get_jack_connectivity(u32 cfg);
|
||||||
|
const char *snd_hda_get_jack_type(u32 cfg);
|
||||||
|
const char *snd_hda_get_jack_location(u32 cfg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* power saving
|
* power saving
|
||||||
*/
|
*/
|
||||||
|
@ -145,32 +145,6 @@ static void print_pcm_caps(struct snd_info_buffer *buffer,
|
|||||||
print_pcm_formats(buffer, stream);
|
print_pcm_formats(buffer, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *get_jack_connection(u32 cfg)
|
static const char *get_jack_connection(u32 cfg)
|
||||||
{
|
{
|
||||||
static char *names[16] = {
|
static char *names[16] = {
|
||||||
@ -206,13 +180,6 @@ static void print_pin_caps(struct snd_info_buffer *buffer,
|
|||||||
int *supports_vref)
|
int *supports_vref)
|
||||||
{
|
{
|
||||||
static char *jack_conns[4] = { "Jack", "N/A", "Fixed", "Both" };
|
static char *jack_conns[4] = { "Jack", "N/A", "Fixed", "Both" };
|
||||||
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", "Digitial In", "Reserved", "Other"
|
|
||||||
};
|
|
||||||
static char *jack_locations[4] = { "Ext", "Int", "Sep", "Oth" };
|
|
||||||
unsigned int caps, val;
|
unsigned int caps, val;
|
||||||
|
|
||||||
caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
|
caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
|
||||||
@ -274,9 +241,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);
|
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,
|
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],
|
jack_conns[(caps & AC_DEFCFG_PORT_CONN) >> AC_DEFCFG_PORT_CONN_SHIFT],
|
||||||
jack_types[(caps & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT],
|
snd_hda_get_jack_type(caps),
|
||||||
jack_locations[(caps >> (AC_DEFCFG_LOCATION_SHIFT + 4)) & 3],
|
snd_hda_get_jack_connectivity(caps),
|
||||||
get_jack_location(caps));
|
snd_hda_get_jack_location(caps));
|
||||||
snd_iprintf(buffer, " Conn = %s, Color = %s\n",
|
snd_iprintf(buffer, " Conn = %s, Color = %s\n",
|
||||||
get_jack_connection(caps),
|
get_jack_connection(caps),
|
||||||
get_jack_color(caps));
|
get_jack_color(caps));
|
||||||
|
Loading…
Reference in New Issue
Block a user