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

Commit 04133209 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull sound fixes from Takashi Iwai:
 "This time we got a slightly higher volume than previous times, but all
  device-specific good fixes.  Noticeable changes are fixes in davinci,
  and the removal of open-codes in HD-audio ca0132 driver.  The rest are
  all small fixes and/or quirks"

* tag 'sound-3.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: hda - Enable front audio jacks on one HP desktop model
  ALSA: hda/ca0132 - Fix recording from mode id 0x8
  ALSA: hda/ca0132 - setup/cleanup streams
  ALSA: hda - add headset mic detect quirks for two Dell laptops
  ALSA: usb-audio: work around KEF X300A firmware bug
  ASoC: max98090: make REVISION_ID readable
  ASoC: txx9aclc_ac97: Fix kernel crash on probe
  ASoC: max98090: sync regcache on entering STANDBY
  ASoC: blackfin: Fix machine driver Kconfig dependencies
  ASoC: da9055: Fix device registration of PMIC and CODEC devices
  ASoC: fsl-esai: fix ESAI TDM slot setting
  ASoC: fsl: fix pm support of machine drivers
  ASoC: rt5640: Add ACPI ID for Intel Baytrail
  ASoC: davinci-evm: Add pm callbacks to platform driver
  ASoC: davinci-mcasp: Consolidate pm_runtime_get/put() use in the driver
  ASoC: davinci-mcasp: Configure xxTDM, xxFMT and xxFMCT registers synchronously
  ASoC: davinci-mcasp: Harmonize the sub hw_params function names
  ASoC: samsung: Fix trivial typo
  ASoC: samsung: Remove invalid dependencies
  ASoC: wm8993: drop regulator_bulk_free of devm_ allocated data
parents d158fc7f 1de7ca5e
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -53,17 +53,25 @@ static int da9055_i2c_remove(struct i2c_client *i2c)
	return 0;
	return 0;
}
}


/*
 * DO NOT change the device Ids. The naming is intentionally specific as both
 * the PMIC and CODEC parts of this chip are instantiated separately as I2C
 * devices (both have configurable I2C addresses, and are to all intents and
 * purposes separate). As a result there are specific DA9055 ids for PMIC
 * and CODEC, which must be different to operate together.
 */
static struct i2c_device_id da9055_i2c_id[] = {
static struct i2c_device_id da9055_i2c_id[] = {
	{"da9055", 0},
	{"da9055-pmic", 0},
	{ }
	{ }
};
};
MODULE_DEVICE_TABLE(i2c, da9055_i2c_id);


static struct i2c_driver da9055_i2c_driver = {
static struct i2c_driver da9055_i2c_driver = {
	.probe = da9055_i2c_probe,
	.probe = da9055_i2c_probe,
	.remove = da9055_i2c_remove,
	.remove = da9055_i2c_remove,
	.id_table = da9055_i2c_id,
	.id_table = da9055_i2c_id,
	.driver = {
	.driver = {
		.name = "da9055",
		.name = "da9055-pmic",
		.owner = THIS_MODULE,
		.owner = THIS_MODULE,
	},
	},
};
};
+7 −61
Original line number Original line Diff line number Diff line
@@ -2661,60 +2661,6 @@ static bool dspload_wait_loaded(struct hda_codec *codec)
	return false;
	return false;
}
}


/*
 * PCM stuffs
 */
static void ca0132_setup_stream(struct hda_codec *codec, hda_nid_t nid,
				 u32 stream_tag,
				 int channel_id, int format)
{
	unsigned int oldval, newval;

	if (!nid)
		return;

	snd_printdd(
		   "ca0132_setup_stream: NID=0x%x, stream=0x%x, "
		   "channel=%d, format=0x%x\n",
		   nid, stream_tag, channel_id, format);

	/* update the format-id if changed */
	oldval = snd_hda_codec_read(codec, nid, 0,
				    AC_VERB_GET_STREAM_FORMAT,
				    0);
	if (oldval != format) {
		msleep(20);
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_STREAM_FORMAT,
				    format);
	}

	oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
	newval = (stream_tag << 4) | channel_id;
	if (oldval != newval) {
		snd_hda_codec_write(codec, nid, 0,
				    AC_VERB_SET_CHANNEL_STREAMID,
				    newval);
	}
}

static void ca0132_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
{
	unsigned int val;

	if (!nid)
		return;

	snd_printdd(KERN_INFO "ca0132_cleanup_stream: NID=0x%x\n", nid);

	val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
	if (!val)
		return;

	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
}

/*
/*
 * PCM callbacks
 * PCM callbacks
 */
 */
@@ -2726,7 +2672,7 @@ static int ca0132_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
{
{
	struct ca0132_spec *spec = codec->spec;
	struct ca0132_spec *spec = codec->spec;


	ca0132_setup_stream(codec, spec->dacs[0], stream_tag, 0, format);
	snd_hda_codec_setup_stream(codec, spec->dacs[0], stream_tag, 0, format);


	return 0;
	return 0;
}
}
@@ -2745,7 +2691,7 @@ static int ca0132_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
	if (spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID])
	if (spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID])
		msleep(50);
		msleep(50);


	ca0132_cleanup_stream(codec, spec->dacs[0]);
	snd_hda_codec_cleanup_stream(codec, spec->dacs[0]);


	return 0;
	return 0;
}
}
@@ -2822,9 +2768,7 @@ static int ca0132_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
					unsigned int format,
					unsigned int format,
					struct snd_pcm_substream *substream)
					struct snd_pcm_substream *substream)
{
{
	struct ca0132_spec *spec = codec->spec;
	snd_hda_codec_setup_stream(codec, hinfo->nid,

	ca0132_setup_stream(codec, spec->adcs[substream->number],
				   stream_tag, 0, format);
				   stream_tag, 0, format);


	return 0;
	return 0;
@@ -2839,7 +2783,7 @@ static int ca0132_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
	if (spec->dsp_state == DSP_DOWNLOADING)
	if (spec->dsp_state == DSP_DOWNLOADING)
		return 0;
		return 0;


	ca0132_cleanup_stream(codec, hinfo->nid);
	snd_hda_codec_cleanup_stream(codec, hinfo->nid);
	return 0;
	return 0;
}
}


@@ -4742,6 +4686,8 @@ static int patch_ca0132(struct hda_codec *codec)
		return err;
		return err;


	codec->patch_ops = ca0132_patch_ops;
	codec->patch_ops = ca0132_patch_ops;
	codec->pcm_format_first = 1;
	codec->no_sticky_stream = 1;


	return 0;
	return 0;
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -4308,7 +4308,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
	SND_PCI_QUIRK(0x1028, 0x0651, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0651, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0652, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0652, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0653, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0653, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0657, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0658, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0658, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x065f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0662, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x0662, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
+13 −0
Original line number Original line Diff line number Diff line
@@ -83,6 +83,7 @@ enum {
	STAC_DELL_M6_BOTH,
	STAC_DELL_M6_BOTH,
	STAC_DELL_EQ,
	STAC_DELL_EQ,
	STAC_ALIENWARE_M17X,
	STAC_ALIENWARE_M17X,
	STAC_92HD89XX_HP_FRONT_JACK,
	STAC_92HD73XX_MODELS
	STAC_92HD73XX_MODELS
};
};


@@ -1795,6 +1796,12 @@ static const struct hda_pintbl intel_dg45id_pin_configs[] = {
	{}
	{}
};
};


static const struct hda_pintbl stac92hd89xx_hp_front_jack_pin_configs[] = {
	{ 0x0a, 0x02214030 },
	{ 0x0b, 0x02A19010 },
	{}
};

static void stac92hd73xx_fixup_ref(struct hda_codec *codec,
static void stac92hd73xx_fixup_ref(struct hda_codec *codec,
				   const struct hda_fixup *fix, int action)
				   const struct hda_fixup *fix, int action)
{
{
@@ -1913,6 +1920,10 @@ static const struct hda_fixup stac92hd73xx_fixups[] = {
	[STAC_92HD73XX_NO_JD] = {
	[STAC_92HD73XX_NO_JD] = {
		.type = HDA_FIXUP_FUNC,
		.type = HDA_FIXUP_FUNC,
		.v.func = stac92hd73xx_fixup_no_jd,
		.v.func = stac92hd73xx_fixup_no_jd,
	},
	[STAC_92HD89XX_HP_FRONT_JACK] = {
		.type = HDA_FIXUP_PINS,
		.v.pins = stac92hd89xx_hp_front_jack_pin_configs,
	}
	}
};
};


@@ -1973,6 +1984,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = {
		      "Alienware M17x", STAC_ALIENWARE_M17X),
		      "Alienware M17x", STAC_ALIENWARE_M17X),
	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490,
	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490,
		      "Alienware M17x R3", STAC_DELL_EQ),
		      "Alienware M17x R3", STAC_DELL_EQ),
	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17,
				"unknown HP", STAC_92HD89XX_HP_FRONT_JACK),
	{} /* terminator */
	{} /* terminator */
};
};


+5 −6
Original line number Original line Diff line number Diff line
@@ -11,7 +11,7 @@ config SND_BF5XX_I2S


config SND_BF5XX_SOC_SSM2602
config SND_BF5XX_SOC_SSM2602
	tristate "SoC SSM2602 Audio Codec Add-On Card support"
	tristate "SoC SSM2602 Audio Codec Add-On Card support"
	depends on SND_BF5XX_I2S && (SPI_MASTER || I2C)
	depends on SND_BF5XX_I2S && SND_SOC_I2C_AND_SPI
	select SND_BF5XX_SOC_I2S if !BF60x
	select SND_BF5XX_SOC_I2S if !BF60x
	select SND_BF6XX_SOC_I2S if BF60x
	select SND_BF6XX_SOC_I2S if BF60x
	select SND_SOC_SSM2602
	select SND_SOC_SSM2602
@@ -21,10 +21,9 @@ config SND_BF5XX_SOC_SSM2602


config SND_SOC_BFIN_EVAL_ADAU1701
config SND_SOC_BFIN_EVAL_ADAU1701
	tristate "Support for the EVAL-ADAU1701MINIZ board on Blackfin eval boards"
	tristate "Support for the EVAL-ADAU1701MINIZ board on Blackfin eval boards"
	depends on SND_BF5XX_I2S
	depends on SND_BF5XX_I2S && I2C
	select SND_BF5XX_SOC_I2S
	select SND_BF5XX_SOC_I2S
	select SND_SOC_ADAU1701
	select SND_SOC_ADAU1701
	select I2C
	help
	help
	  Say Y if you want to add support for the Analog Devices EVAL-ADAU1701MINIZ
	  Say Y if you want to add support for the Analog Devices EVAL-ADAU1701MINIZ
	  board connected to one of the Blackfin evaluation boards like the
	  board connected to one of the Blackfin evaluation boards like the
@@ -45,7 +44,7 @@ config SND_SOC_BFIN_EVAL_ADAU1373


config SND_SOC_BFIN_EVAL_ADAV80X
config SND_SOC_BFIN_EVAL_ADAV80X
	tristate "Support for the EVAL-ADAV80X boards on Blackfin eval boards"
	tristate "Support for the EVAL-ADAV80X boards on Blackfin eval boards"
	depends on SND_BF5XX_I2S && (SPI_MASTER || I2C)
	depends on SND_BF5XX_I2S && SND_SOC_I2C_AND_SPI
	select SND_BF5XX_SOC_I2S
	select SND_BF5XX_SOC_I2S
	select SND_SOC_ADAV80X
	select SND_SOC_ADAV80X
	help
	help
@@ -58,7 +57,7 @@ config SND_SOC_BFIN_EVAL_ADAV80X


config SND_BF5XX_SOC_AD1836
config SND_BF5XX_SOC_AD1836
	tristate "SoC AD1836 Audio support for BF5xx"
	tristate "SoC AD1836 Audio support for BF5xx"
	depends on SND_BF5XX_I2S
	depends on SND_BF5XX_I2S && SPI_MASTER
	select SND_BF5XX_SOC_I2S
	select SND_BF5XX_SOC_I2S
	select SND_SOC_AD1836
	select SND_SOC_AD1836
	help
	help
@@ -66,7 +65,7 @@ config SND_BF5XX_SOC_AD1836


config SND_BF5XX_SOC_AD193X
config SND_BF5XX_SOC_AD193X
	tristate "SoC AD193X Audio support for Blackfin"
	tristate "SoC AD193X Audio support for Blackfin"
	depends on SND_BF5XX_I2S
	depends on SND_BF5XX_I2S && SND_SOC_I2C_AND_SPI
	select SND_BF5XX_SOC_I2S
	select SND_BF5XX_SOC_I2S
	select SND_SOC_AD193X
	select SND_SOC_AD193X
	help
	help
Loading