diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 22 | 
1 files changed, 16 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a1312a6c8af..a432e6efd19 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1594,12 +1594,22 @@ static void alc_auto_parse_digital(struct hda_codec *codec)  	}  	if (spec->autocfg.dig_in_pin) { -		hda_nid_t dig_nid; -		err = snd_hda_get_connections(codec, -					      spec->autocfg.dig_in_pin, -					      &dig_nid, 1); -		if (err > 0) -			spec->dig_in_nid = dig_nid; +		dig_nid = codec->start_nid; +		for (i = 0; i < codec->num_nodes; i++, dig_nid++) { +			unsigned int wcaps = get_wcaps(codec, dig_nid); +			if (get_wcaps_type(wcaps) != AC_WID_AUD_IN) +				continue; +			if (!(wcaps & AC_WCAP_DIGITAL)) +				continue; +			if (!(wcaps & AC_WCAP_CONN_LIST)) +				continue; +			err = get_connection_index(codec, dig_nid, +						   spec->autocfg.dig_in_pin); +			if (err >= 0) { +				spec->dig_in_nid = dig_nid; +				break; +			} +		}  	}  }  |