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

Commit cc1b76ed authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge branch 'for-linus' into for-next



Yet another non-trivial conflicts resolution for the recent HD-audio fix.

Conflicts:
	sound/pci/hda/hda_intel.c

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parents 9e8af74c 535115b5
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -9,6 +9,8 @@
#include <sound/core.h>
#include <sound/core.h>
#include <sound/hdaudio.h>
#include <sound/hdaudio.h>


#define AC_AMP_FAKE_MUTE	0x10	/* fake mute bit set to amp verbs */

int snd_hdac_regmap_init(struct hdac_device *codec);
int snd_hdac_regmap_init(struct hdac_device *codec);
void snd_hdac_regmap_exit(struct hdac_device *codec);
void snd_hdac_regmap_exit(struct hdac_device *codec);
int snd_hdac_regmap_add_vendor_verb(struct hdac_device *codec,
int snd_hdac_regmap_add_vendor_verb(struct hdac_device *codec,
+5 −0
Original line number Original line Diff line number Diff line
@@ -246,6 +246,9 @@ static int hda_reg_read(void *context, unsigned int reg, unsigned int *val)
		return hda_reg_read_stereo_amp(codec, reg, val);
		return hda_reg_read_stereo_amp(codec, reg, val);
	if (verb == AC_VERB_GET_PROC_COEF)
	if (verb == AC_VERB_GET_PROC_COEF)
		return hda_reg_read_coef(codec, reg, val);
		return hda_reg_read_coef(codec, reg, val);
	if ((verb & 0x700) == AC_VERB_SET_AMP_GAIN_MUTE)
		reg &= ~AC_AMP_FAKE_MUTE;

	err = snd_hdac_exec_verb(codec, reg, 0, val);
	err = snd_hdac_exec_verb(codec, reg, 0, val);
	if (err < 0)
	if (err < 0)
		return err;
		return err;
@@ -283,6 +286,8 @@ static int hda_reg_write(void *context, unsigned int reg, unsigned int val)


	switch (verb & 0xf00) {
	switch (verb & 0xf00) {
	case AC_VERB_SET_AMP_GAIN_MUTE:
	case AC_VERB_SET_AMP_GAIN_MUTE:
		if ((reg & AC_AMP_FAKE_MUTE) && (val & AC_AMP_MUTE))
			val = 0;
		verb = AC_VERB_SET_AMP_GAIN_MUTE;
		verb = AC_VERB_SET_AMP_GAIN_MUTE;
		if (reg & AC_AMP_GET_LEFT)
		if (reg & AC_AMP_GET_LEFT)
			verb |= AC_AMP_SET_LEFT >> 8;
			verb |= AC_AMP_SET_LEFT >> 8;
+25 −0
Original line number Original line Diff line number Diff line
@@ -1286,6 +1286,31 @@ int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
}
}
EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);


/**
 * snd_hda_codec_amp_update - update the AMP mono value
 * @codec: HD-audio codec
 * @nid: NID to read the AMP value
 * @ch: channel to update (0 or 1)
 * @dir: #HDA_INPUT or #HDA_OUTPUT
 * @idx: the index value (only for input direction)
 * @mask: bit mask to set
 * @val: the bits value to set
 *
 * Update the AMP values for the given channel, direction and index.
 */
int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid,
			     int ch, int dir, int idx, int mask, int val)
{
	unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx);

	/* enable fake mute if no h/w mute but min=mute */
	if ((query_amp_caps(codec, nid, dir) &
	     (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE)
		cmd |= AC_AMP_FAKE_MUTE;
	return snd_hdac_regmap_update_raw(&codec->core, cmd, mask, val);
}
EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update);

/**
/**
 * snd_hda_codec_amp_stereo - update the AMP stereo values
 * snd_hda_codec_amp_stereo - update the AMP stereo values
 * @codec: HD-audio codec
 * @codec: HD-audio codec
+11 −2
Original line number Original line Diff line number Diff line
@@ -1986,8 +1986,17 @@ static int azx_probe_continue(struct azx *chip)
			hda->need_i915_power = 1;
			hda->need_i915_power = 1;


		err = snd_hdac_i915_init(bus);
		err = snd_hdac_i915_init(bus);
		if (err < 0)
		if (err < 0) {
			/* if the controller is bound only with HDMI/DP
			 * (for HSW and BDW), we need to abort the probe;
			 * for other chips, still continue probing as other
			 * codecs can be on the same link.
			 */
			if (CONTROLLER_IN_GPU(pci))
				goto out_free;
			else
				goto skip_i915;
				goto skip_i915;
		}


		err = snd_hdac_display_power(bus, true);
		err = snd_hdac_display_power(bus, true);
		if (err < 0) {
		if (err < 0) {
+2 −2
Original line number Original line Diff line number Diff line
@@ -129,8 +129,8 @@ int snd_hda_mixer_amp_switch_put_beep(struct snd_kcontrol *kcontrol,
/* lowlevel accessor with caching; use carefully */
/* lowlevel accessor with caching; use carefully */
#define snd_hda_codec_amp_read(codec, nid, ch, dir, idx) \
#define snd_hda_codec_amp_read(codec, nid, ch, dir, idx) \
	snd_hdac_regmap_get_amp(&(codec)->core, nid, ch, dir, idx)
	snd_hdac_regmap_get_amp(&(codec)->core, nid, ch, dir, idx)
#define snd_hda_codec_amp_update(codec, nid, ch, dir, idx, mask, val) \
int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid,
	snd_hdac_regmap_update_amp(&(codec)->core, nid, ch, dir, idx, mask, val)
			     int ch, int dir, int idx, int mask, int val);
int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
int snd_hda_codec_amp_stereo(struct hda_codec *codec, hda_nid_t nid,
			     int dir, int idx, int mask, int val);
			     int dir, int idx, int mask, int val);
int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,
int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,