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

Commit 4bbba111 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ALSA: HDA: Realtek: Avoid unnecessary volume control index on Surround/Side
  ASoC: Support !REGULATOR build for sgtl5000
  ALSA: hda - VIA: Fix VT1708 can't build up Headphone control issue
  ALSA: hda - VIA: Correct stream names for VT1818S
  ALSA: hda - VIA: Fix codec type for VT1708BCE at the right timing
  ALSA: hda - VIA: Fix invalid A-A path volume adjust issue
  ALSA: hda - VIA: Add missing support for VT1718S in A-A path
  ALSA: hda - VIA: Fix independent headphone no sound issue
  ALSA: hda - VIA: Fix stereo mixer recording no sound issue
  ALSA: hda - Set EAPD for Realtek ALC665
  ALSA: usb - Remove trailing spaces from USB card name strings
  sound: read i_size with i_size_read()
  ASoC: Remove bogus check for register validity in debugfs write
  ASoC: mini2440: Fix uda134x codec problem.
parents 2130781e ce24f58a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -488,6 +488,11 @@ static struct i2c_board_info mini2440_i2c_devs[] __initdata = {
	},
};

static struct platform_device uda1340_codec = {
		.name = "uda134x-codec",
		.id = -1,
};

static struct platform_device *mini2440_devices[] __initdata = {
	&s3c_device_ohci,
	&s3c_device_wdt,
@@ -503,7 +508,9 @@ static struct platform_device *mini2440_devices[] __initdata = {
	&s3c_device_nand,
	&s3c_device_sdi,
	&s3c_device_iis,
	&uda1340_codec,
	&mini2440_audio,
	&samsung_asoc_dma,
};

static void __init mini2440_map_io(void)
+19 −8
Original line number Diff line number Diff line
@@ -1265,6 +1265,7 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
		case 0x10ec0660:
		case 0x10ec0662:
		case 0x10ec0663:
		case 0x10ec0665:
		case 0x10ec0862:
		case 0x10ec0889:
			set_eapd(codec, 0x14, 1);
@@ -4240,6 +4241,7 @@ static void alc_power_eapd(struct hda_codec *codec)
	case 0x10ec0660:
	case 0x10ec0662:
	case 0x10ec0663:
	case 0x10ec0665:
	case 0x10ec0862:
	case 0x10ec0889:
		set_eapd(codec, 0x14, 0);
@@ -16006,9 +16008,12 @@ static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec,
				return err;
		} else {
			const char *name = pfx;
			if (!name)
			int index = i;
			if (!name) {
				name = chname[i];
			err = __alc861_create_out_sw(codec, name, nid, i, 3);
				index = 0;
			}
			err = __alc861_create_out_sw(codec, name, nid, index, 3);
			if (err < 0)
				return err;
		}
@@ -17159,16 +17164,19 @@ static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec,
				return err;
		} else {
			const char *name = pfx;
			if (!name)
			int index = i;
			if (!name) {
				name = chname[i];
				index = 0;
			}
			err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL,
						name, i,
						name, index,
					  HDA_COMPOSE_AMP_VAL(nid_v, 3, 0,
							      HDA_OUTPUT));
			if (err < 0)
				return err;
			err = __add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE,
					       name, i,
					       name, index,
					  HDA_COMPOSE_AMP_VAL(nid_s, 3, 2,
							      HDA_INPUT));
			if (err < 0)
@@ -19217,12 +19225,15 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec,
				return err;
		} else {
			const char *name = pfx;
			if (!name)
			int index = i;
			if (!name) {
				name = chname[i];
			err = __alc662_add_vol_ctl(spec, name, nid, i, 3);
				index = 0;
			}
			err = __alc662_add_vol_ctl(spec, name, nid, index, 3);
			if (err < 0)
				return err;
			err = __alc662_add_sw_ctl(spec, name, mix, i, 3);
			err = __alc662_add_sw_ctl(spec, name, mix, index, 3);
			if (err < 0)
				return err;
		}
+46 −12
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ struct via_spec {
#endif
};

static enum VIA_HDA_CODEC get_codec_type(struct hda_codec *codec);
static struct via_spec * via_new_spec(struct hda_codec *codec)
{
	struct via_spec *spec;
@@ -169,6 +170,10 @@ static struct via_spec * via_new_spec(struct hda_codec *codec)

	codec->spec = spec;
	spec->codec = codec;
	spec->codec_type = get_codec_type(codec);
	/* VT1708BCE & VT1708S are almost same */
	if (spec->codec_type == VT1708BCE)
		spec->codec_type = VT1708S;
	return spec;
}

@@ -1101,6 +1106,7 @@ static int via_mux_enum_put(struct snd_kcontrol *kcontrol,
	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
	struct via_spec *spec = codec->spec;
	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
	int ret;

	if (!spec->mux_nids[adc_idx])
		return -EINVAL;
@@ -1109,12 +1115,14 @@ static int via_mux_enum_put(struct snd_kcontrol *kcontrol,
			       AC_VERB_GET_POWER_STATE, 0x00) != AC_PWRST_D0)
		snd_hda_codec_write(codec, spec->mux_nids[adc_idx], 0,
				    AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
	/* update jack power state */
	set_jack_power_state(codec);

	return snd_hda_input_mux_put(codec, spec->input_mux, ucontrol,
	ret = snd_hda_input_mux_put(codec, spec->input_mux, ucontrol,
				     spec->mux_nids[adc_idx],
				     &spec->cur_mux[adc_idx]);
	/* update jack power state */
	set_jack_power_state(codec);

	return ret;
}

static int via_independent_hp_info(struct snd_kcontrol *kcontrol,
@@ -1188,8 +1196,16 @@ static int via_independent_hp_put(struct snd_kcontrol *kcontrol,
	/* Get Independent Mode index of headphone pin widget */
	spec->hp_independent_mode = spec->hp_independent_mode_index == pinsel
		? 1 : 0;
	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, pinsel);
	if (spec->codec_type == VT1718S)
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_CONNECT_SEL, pinsel ? 2 : 0);
	else
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_CONNECT_SEL, pinsel);

	if (spec->codec_type == VT1812)
		snd_hda_codec_write(codec, 0x35, 0,
				    AC_VERB_SET_CONNECT_SEL, pinsel);
	if (spec->multiout.hp_nid && spec->multiout.hp_nid
	    != spec->multiout.dac_nids[HDA_FRONT])
		snd_hda_codec_setup_stream(codec, spec->multiout.hp_nid,
@@ -1208,6 +1224,8 @@ static int via_independent_hp_put(struct snd_kcontrol *kcontrol,
		activate_ctl(codec, "Headphone Playback Switch",
			     spec->hp_independent_mode);
	}
	/* update jack power state */
	set_jack_power_state(codec);
	return 0;
}

@@ -1248,9 +1266,12 @@ static int via_hp_build(struct hda_codec *codec)
		break;
	}

	nums = snd_hda_get_connections(codec, nid, conn, HDA_MAX_CONNECTIONS);
	if (spec->codec_type != VT1708) {
		nums = snd_hda_get_connections(codec, nid,
					       conn, HDA_MAX_CONNECTIONS);
		if (nums <= 1)
			return 0;
	}

	knew = via_clone_control(spec, &via_hp_mixer[0]);
	if (knew == NULL)
@@ -1310,6 +1331,11 @@ static void mute_aa_path(struct hda_codec *codec, int mute)
		start_idx = 2;
		end_idx = 4;
		break;
	case VT1718S:
		nid_mixer = 0x21;
		start_idx = 1;
		end_idx = 3;
		break;
	default:
		return;
	}
@@ -2185,10 +2211,6 @@ static int via_init(struct hda_codec *codec)
	for (i = 0; i < spec->num_iverbs; i++)
		snd_hda_sequence_write(codec, spec->init_verbs[i]);

	spec->codec_type = get_codec_type(codec);
	if (spec->codec_type == VT1708BCE)
		spec->codec_type = VT1708S; /* VT1708BCE & VT1708S are almost
					       same */
	/* Lydia Add for EAPD enable */
	if (!spec->dig_in_nid) { /* No Digital In connection */
		if (spec->dig_in_pin) {
@@ -2438,7 +2460,14 @@ static int vt_auto_create_analog_input_ctls(struct hda_codec *codec,
		else
			type_idx = 0;
		label = hda_get_autocfg_input_label(codec, cfg, i);
		err = via_new_analog_input(spec, label, type_idx, idx, cap_nid);
		if (spec->codec_type == VT1708S ||
		    spec->codec_type == VT1702 ||
		    spec->codec_type == VT1716S)
			err = via_new_analog_input(spec, label, type_idx,
						   idx+1, cap_nid);
		else
			err = via_new_analog_input(spec, label, type_idx,
						   idx, cap_nid);
		if (err < 0)
			return err;
		snd_hda_add_imux_item(imux, label, idx, NULL);
@@ -4147,6 +4176,11 @@ static int patch_vt1708S(struct hda_codec *codec)
		spec->stream_name_analog = "VT1708BCE Analog";
		spec->stream_name_digital = "VT1708BCE Digital";
	}
	/* correct names for VT1818S */
	if (codec->vendor_id == 0x11060440) {
		spec->stream_name_analog = "VT1818S Analog";
		spec->stream_name_digital = "VT1818S Digital";
	}
	return 0;
}

+14 −0
Original line number Diff line number Diff line
@@ -772,6 +772,7 @@ static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
	return 0;
}

#ifdef CONFIG_REGULATOR
static int ldo_regulator_is_enabled(struct regulator_dev *dev)
{
	struct ldo_regulator *ldo = rdev_get_drvdata(dev);
@@ -901,6 +902,19 @@ static int ldo_regulator_remove(struct snd_soc_codec *codec)

	return 0;
}
#else
static int ldo_regulator_register(struct snd_soc_codec *codec,
				struct regulator_init_data *init_data,
				int voltage)
{
	return -EINVAL;
}

static int ldo_regulator_remove(struct snd_soc_codec *codec)
{
	return 0;
}
#endif

/*
 * set dac bias
+2 −1
Original line number Diff line number Diff line
@@ -486,7 +486,8 @@ static struct snd_soc_dai_driver uda134x_dai = {
static int uda134x_soc_probe(struct snd_soc_codec *codec)
{
	struct uda134x_priv *uda134x;
	struct uda134x_platform_data *pd = dev_get_drvdata(codec->card->dev);
	struct uda134x_platform_data *pd = codec->card->dev->platform_data;

	int ret;

	printk(KERN_INFO "UDA134X SoC Audio Codec\n");
Loading