Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3303235 authored by Jaroslav Kysela's avatar Jaroslav Kysela Committed by Takashi Iwai
Browse files

ALSA: hda - proc - show which I/O NID is associated to PCM device



Output something like:

Node 0x02 [Audio Output] wcaps 0x11: Stereo
  Device: name="ALC888 Analog", type="Audio", device=0, substream=0
  Converter: stream=0, channel=0
  ...

Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent fb8d1a34
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -2877,14 +2877,15 @@ static int set_pcm_default_values(struct hda_codec *codec,
	return 0;
}

const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
	"Audio", "SPDIF", "HDMI", "Modem"
};

/*
 * get the empty PCM device number to assign
 */
static int get_empty_pcm_device(struct hda_bus *bus, int type)
{
	static const char *dev_name[HDA_PCM_NTYPES] = {
		"Audio", "SPDIF", "HDMI", "Modem"
	};
	/* audio device indices; not linear to keep compatibility */
	static int audio_idx[HDA_PCM_NTYPES][5] = {
		[HDA_PCM_TYPE_AUDIO] = { 0, 2, 4, 5, -1 },
@@ -2903,7 +2904,7 @@ static int get_empty_pcm_device(struct hda_bus *bus, int type)
		if (!test_and_set_bit(audio_idx[type][i], bus->pcm_dev_bits))
			return audio_idx[type][i];

	snd_printk(KERN_WARNING "Too many %s devices\n", dev_name[type]);
	snd_printk(KERN_WARNING "Too many %s devices\n", snd_hda_pcm_type_name[type]);
	return -EAGAIN;
}

+1 −0
Original line number Diff line number Diff line
@@ -894,6 +894,7 @@ int snd_hda_codec_build_controls(struct hda_codec *codec);
/*
 * PCM
 */
extern const char *snd_hda_pcm_type_name[];
int snd_hda_build_pcms(struct hda_bus *bus);
int snd_hda_codec_build_pcms(struct hda_codec *codec);
void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
+15 −1
Original line number Diff line number Diff line
@@ -309,7 +309,21 @@ static void print_audio_io(struct snd_info_buffer *buffer,
			   struct hda_codec *codec, hda_nid_t nid,
			   unsigned int wid_type)
{
	int conv = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
	int pcm, conv;
	for (pcm = 0; pcm < codec->num_pcms; pcm++) {
		int type;
		struct hda_pcm *cpcm = &codec->pcm_info[pcm];
		for (type = 0; type < 2; type++) {
			if (cpcm->stream[type].nid != nid || cpcm->pcm == NULL)
				continue;
			snd_iprintf(buffer, "  Device: name=\"%s\", type=\"%s\", device=%i, substream=%i\n",
				cpcm->name,
				snd_hda_pcm_type_name[cpcm->pcm_type],
				cpcm->pcm->device,
				cpcm->pcm->streams[type].substream->number);
		}
	}
	conv = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
	snd_iprintf(buffer,
		    "  Converter: stream=%d, channel=%d\n",
		    (conv & AC_CONV_STREAM) >> AC_CONV_STREAM_SHIFT,