mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
sound fixes for v3.10-rc1
This contains small fixes since the previous pull request: - A few regression fixes and small updates of HD-audio - Yet another fix for Haswell HDMI audio - A copule of trivial fixes in ASoC McASP, DPAM and WM8994 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJRjOOfAAoJEGwxgFQ9KSmkzE8P/iX7Tz8F7DCTJnbE6W617fwI z9weFqy7D/f6pTlMZrfzVCFJQBcACYLxN5OxfPDNu4zMao1Cki6ngococ6QBRMl/ bSu02pM3N2EGQQU4emQYfgR6+ZelUlVDS441jmIz6JOQYQql+eZZnO1XxWb0fHQC MtHcxWLMhuXIcgSDeYeg+wQZjM/XxeN/AYA8Lnn8EEwoNV6vrZw4slOm8eC9qQnb uqLjrivhcJpARetl/n5aPdIbtplkUVUAeyZnK6O4NHsN7AqBQ2RXSpPTTj4DV+fN pN0Ah39eDNcF/zM0JqcDheSXP7MkB7s7kRcZOEmPwNSgCXfhjdwPDd4Si2y5tTbI NMIZUawEdx47NkZDmyGRHyOQLixkMC/+qPQcD7cAof5WJAygpBAyU9WlOEVJ9MOZ ytA0S+RWW05+jh5tiYHI+pjVl1TcN/ltgMsyBu+3owI4jQQs9LyIYR+IM4QkhpfE gNDeDV6Do0xL0LSnPfYwgxV+H0oSWrRrUOlgEEeuyXBLcnIqJfUl+Y4n7afwO+xz 04izx1SUdp4dQ9Fo2/jInVn/EhQwwpw361yNUHtozFCh4ETNatBGiXIvWyLSW4FS j9d+aNIZR4CtZ28+wymFSw6yiqLkJArNoUNgcJcKATgeqg6CUa+ZdYi6gkirp+gk sU+bSxrxp4dv5hOj+rIF =DMsb -----END PGP SIGNATURE----- Merge tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "This contains small fixes since the previous pull request: - A few regression fixes and small updates of HD-audio - Yet another fix for Haswell HDMI audio - A copule of trivial fixes in ASoC McASP, DPAM and WM8994" * tag 'sound-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: Revert "ALSA: hda - Don't set up active streams twice" ALSA: Add comment for control TLV API ALSA: hda - Apply pin-enablement workaround to all Haswell HDMI codecs ALSA: HDA: Fix Oops caused by dereference NULL pointer ALSA: mips/sgio2audio: Remove redundant platform_set_drvdata() ALSA: mips/hal2: Remove redundant platform_set_drvdata() ALSA: hda - Fix 3.9 regression of EAPD init on Conexant codecs sound: Fix make allmodconfig on MIPS ALSA: hda - Fix system panic when DMA > 40 bits for Nvidia audio controllers ALSA: atmel: Remove redundant platform_set_drvdata() ASoC: McASP: Fix receive clock polarity in DAIFMT_NB_NF mode. ASoC: wm8994: missing break in wm8994_aif3_hw_params() ASoC: McASP: Add pins output direction for rx clocks when configured in CBS_CFS format ASoC: dapm: use clk_prepare_enable and clk_disable_unprepare
This commit is contained in:
commit
05a88a4360
@ -74,7 +74,11 @@
|
||||
#define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \
|
||||
unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) }
|
||||
|
||||
/* dB range container */
|
||||
/* dB range container:
|
||||
* Items in dB range container must be ordered by their values and by their
|
||||
* dB values. This implies that larger values must correspond with larger
|
||||
* dB values (which is also required for all other mixer controls).
|
||||
*/
|
||||
/* Each item is: <min> <max> <TLV> */
|
||||
#define TLV_DB_RANGE_ITEM(...) \
|
||||
TLV_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
|
||||
|
@ -583,8 +583,6 @@ static int atmel_abdac_remove(struct platform_device *pdev)
|
||||
free_irq(dac->irq, dac);
|
||||
snd_card_free(card);
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1199,8 +1199,6 @@ static int atmel_ac97c_remove(struct platform_device *pdev)
|
||||
snd_card_set_dev(card, NULL);
|
||||
snd_card_free(card);
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -922,7 +922,6 @@ static int hal2_remove(struct platform_device *pdev)
|
||||
struct snd_card *card = platform_get_drvdata(pdev);
|
||||
|
||||
snd_card_free(card);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -963,7 +963,6 @@ static int snd_sgio2audio_remove(struct platform_device *pdev)
|
||||
struct snd_card *card = platform_get_drvdata(pdev);
|
||||
|
||||
snd_card_free(card);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -250,6 +250,7 @@ config MSND_FIFOSIZE
|
||||
menuconfig SOUND_OSS
|
||||
tristate "OSS sound modules"
|
||||
depends on ISA_DMA_API && VIRT_TO_BUS
|
||||
depends on !ISA_DMA_SUPPORT_BROKEN
|
||||
help
|
||||
OSS is the Open Sound System suite of sound card drivers. They make
|
||||
sound programming easier since they provide a common API. Say Y or
|
||||
|
@ -681,6 +681,9 @@ int snd_hda_queue_unsol_event(struct hda_bus *bus, u32 res, u32 res_ex)
|
||||
struct hda_bus_unsolicited *unsol;
|
||||
unsigned int wp;
|
||||
|
||||
if (!bus || !bus->workq)
|
||||
return 0;
|
||||
|
||||
trace_hda_unsol_event(bus, res, res_ex);
|
||||
unsol = bus->unsol;
|
||||
if (!unsol)
|
||||
@ -1580,7 +1583,7 @@ void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid,
|
||||
"NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
|
||||
nid, stream_tag, channel_id, format);
|
||||
p = get_hda_cvt_setup(codec, nid);
|
||||
if (!p || p->active)
|
||||
if (!p)
|
||||
return;
|
||||
|
||||
if (codec->pcm_format_first)
|
||||
@ -1627,7 +1630,7 @@ void __snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid,
|
||||
|
||||
snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid);
|
||||
p = get_hda_cvt_setup(codec, nid);
|
||||
if (p && p->active) {
|
||||
if (p) {
|
||||
/* here we just clear the active flag when do_now isn't set;
|
||||
* actual clean-ups will be done later in
|
||||
* purify_inactive_streams() called from snd_hda_codec_prpapre()
|
||||
|
@ -615,7 +615,7 @@ enum {
|
||||
/* quirks for Nvidia */
|
||||
#define AZX_DCAPS_PRESET_NVIDIA \
|
||||
(AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
|
||||
AZX_DCAPS_ALIGN_BUFSIZE)
|
||||
AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
|
||||
|
||||
#define AZX_DCAPS_PRESET_CTHDA \
|
||||
(AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
|
||||
|
@ -64,6 +64,7 @@ struct conexant_spec {
|
||||
/* extra EAPD pins */
|
||||
unsigned int num_eapds;
|
||||
hda_nid_t eapds[4];
|
||||
bool dynamic_eapd;
|
||||
|
||||
#ifdef ENABLE_CXT_STATIC_QUIRKS
|
||||
const struct snd_kcontrol_new *mixers[5];
|
||||
@ -3155,7 +3156,7 @@ static void cx_auto_parse_eapd(struct hda_codec *codec)
|
||||
* thus it might control over all pins.
|
||||
*/
|
||||
if (spec->num_eapds > 2)
|
||||
spec->gen.own_eapd_ctl = 1;
|
||||
spec->dynamic_eapd = 1;
|
||||
}
|
||||
|
||||
static void cx_auto_turn_eapd(struct hda_codec *codec, int num_pins,
|
||||
@ -3194,10 +3195,19 @@ static int cx_auto_build_controls(struct hda_codec *codec)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx_auto_init(struct hda_codec *codec)
|
||||
{
|
||||
struct conexant_spec *spec = codec->spec;
|
||||
snd_hda_gen_init(codec);
|
||||
if (!spec->dynamic_eapd)
|
||||
cx_auto_turn_eapd(codec, spec->num_eapds, spec->eapds, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct hda_codec_ops cx_auto_patch_ops = {
|
||||
.build_controls = cx_auto_build_controls,
|
||||
.build_pcms = snd_hda_gen_build_pcms,
|
||||
.init = snd_hda_gen_init,
|
||||
.init = cx_auto_init,
|
||||
.free = snd_hda_gen_free,
|
||||
.unsol_event = snd_hda_jack_unsol_event,
|
||||
#ifdef CONFIG_PM
|
||||
@ -3348,7 +3358,8 @@ static int patch_conexant_auto(struct hda_codec *codec)
|
||||
|
||||
cx_auto_parse_beep(codec);
|
||||
cx_auto_parse_eapd(codec);
|
||||
if (spec->gen.own_eapd_ctl)
|
||||
spec->gen.own_eapd_ctl = 1;
|
||||
if (spec->dynamic_eapd)
|
||||
spec->gen.vmaster_mute.hook = cx_auto_vmaster_hook;
|
||||
|
||||
switch (codec->vendor_id) {
|
||||
|
@ -1832,12 +1832,10 @@ static void intel_haswell_fixup_connect_list(struct hda_codec *codec,
|
||||
#define INTEL_EN_ALL_PIN_CVTS 0x01 /* enable 2nd & 3rd pins and convertors */
|
||||
|
||||
static void intel_haswell_enable_all_pins(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
bool update_tree)
|
||||
{
|
||||
unsigned int vendor_param;
|
||||
|
||||
if (action != HDA_FIXUP_ACT_PRE_PROBE)
|
||||
return;
|
||||
vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0,
|
||||
INTEL_GET_VENDOR_VERB, 0);
|
||||
if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS)
|
||||
@ -1849,8 +1847,8 @@ static void intel_haswell_enable_all_pins(struct hda_codec *codec,
|
||||
if (vendor_param == -1)
|
||||
return;
|
||||
|
||||
snd_hda_codec_update_widgets(codec);
|
||||
return;
|
||||
if (update_tree)
|
||||
snd_hda_codec_update_widgets(codec);
|
||||
}
|
||||
|
||||
static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
|
||||
@ -1868,30 +1866,20 @@ static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec)
|
||||
INTEL_SET_VENDOR_VERB, vendor_param);
|
||||
}
|
||||
|
||||
/* Haswell needs to re-issue the vendor-specific verbs before turning to D0.
|
||||
* Otherwise you may get severe h/w communication errors.
|
||||
*/
|
||||
static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
|
||||
unsigned int power_state)
|
||||
{
|
||||
if (power_state == AC_PWRST_D0) {
|
||||
intel_haswell_enable_all_pins(codec, false);
|
||||
intel_haswell_fixup_enable_dp12(codec);
|
||||
}
|
||||
|
||||
|
||||
/* available models for fixup */
|
||||
enum {
|
||||
INTEL_HASWELL,
|
||||
};
|
||||
|
||||
static const struct hda_model_fixup hdmi_models[] = {
|
||||
{.id = INTEL_HASWELL, .name = "Haswell"},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk hdmi_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x8086, 0x2010, "Haswell", INTEL_HASWELL),
|
||||
{} /* terminator */
|
||||
};
|
||||
|
||||
static const struct hda_fixup hdmi_fixups[] = {
|
||||
[INTEL_HASWELL] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = intel_haswell_enable_all_pins,
|
||||
},
|
||||
};
|
||||
|
||||
snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, power_state);
|
||||
snd_hda_codec_set_power_to_all(codec, fg, power_state);
|
||||
}
|
||||
|
||||
static int patch_generic_hdmi(struct hda_codec *codec)
|
||||
{
|
||||
@ -1904,11 +1892,10 @@ static int patch_generic_hdmi(struct hda_codec *codec)
|
||||
codec->spec = spec;
|
||||
hdmi_array_init(spec, 4);
|
||||
|
||||
snd_hda_pick_fixup(codec, hdmi_models, hdmi_fixup_tbl, hdmi_fixups);
|
||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
|
||||
|
||||
if (codec->vendor_id == 0x80862807)
|
||||
if (codec->vendor_id == 0x80862807) {
|
||||
intel_haswell_enable_all_pins(codec, true);
|
||||
intel_haswell_fixup_enable_dp12(codec);
|
||||
}
|
||||
|
||||
if (hdmi_parse_codec(codec) < 0) {
|
||||
codec->spec = NULL;
|
||||
@ -1916,6 +1903,9 @@ static int patch_generic_hdmi(struct hda_codec *codec)
|
||||
return -EINVAL;
|
||||
}
|
||||
codec->patch_ops = generic_hdmi_patch_ops;
|
||||
if (codec->vendor_id == 0x80862807)
|
||||
codec->patch_ops.set_power_state = haswell_set_power_state;
|
||||
|
||||
generic_hdmi_init_per_pins(codec);
|
||||
|
||||
init_channel_allocations();
|
||||
|
@ -2882,6 +2882,7 @@ static int wm8994_aif3_hw_params(struct snd_pcm_substream *substream,
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -505,7 +505,10 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
|
||||
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, ACLKX | AFSX);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||
ACLKX | ACLKR);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||
AFSX | AFSR);
|
||||
break;
|
||||
case SND_SOC_DAIFMT_CBM_CFS:
|
||||
/* codec is clock master and frame slave */
|
||||
@ -565,7 +568,7 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
|
||||
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
|
||||
break;
|
||||
|
||||
|
@ -1095,9 +1095,9 @@ int dapm_clock_event(struct snd_soc_dapm_widget *w,
|
||||
|
||||
#ifdef CONFIG_HAVE_CLK
|
||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||
return clk_enable(w->clk);
|
||||
return clk_prepare_enable(w->clk);
|
||||
} else {
|
||||
clk_disable(w->clk);
|
||||
clk_disable_unprepare(w->clk);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user