Skip to content

Commit 60b5f90

Browse files
committed
Merge tag 'sound-3.15-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Unfortunately this update became bigger than previous pull requests, which is almost a pattern in rc5-6. But, the only obvious big changes are for the new Intel DSP ASoC drivers, so the impact must be fairly limited. Other than that, usual small fixes in various fields: HD-audio, ASoC core and ASoC fsl and codec drivers" * tag 'sound-3.15-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (26 commits) ALSA: sb_mixer: missing return statement ASoC: wm8962: Update register CLASS_D_CONTROL_1 to be non-volatile ASoC: Intel: Fix Baytrail SST DSP firmware loading ALSA: hda - mask buggy stream DMA0 for Broadwell display controller ALSA: hda - Add new GPU codec ID to snd-hda ASoC: fsl_esai: Set PCRC and PRRC registers at the end of hw_params() ASoC: fsl_esai: Only bypass sck_div for EXTAL source ASoC: fsl_esai: Fix incorrect condition within ratio range check for FP ASoC: dapm: Fix SUSPEND -> OFF bias sequence ASoC: dapm: Skip CODEC<->CODEC links in connect_dai_link_widgets() ASoC: pcm: Fix incorrect condition check for case SNDRV_PCM_TRIGGER_SUSPEND ALSA: hda - add headset mic detect quirks for three Dell laptops ASoC: Update Cirrus Logic CODEC maintainers. ASoC: Intel: Fix block offset calculations. ASoC: Intel: Fix check for pdata usage before dereference. ASoC: Intel: Fix stream position pointer. ASoC: Intel: Fix allow hw_params to be called more than once. ASoC: Intel: Fix Audio DSP usage when IOMMU is enabled. ASoC: Intel: Fix Haswell/Broadwell DSP page table creation. ASoC: Intel: Fix allocated block list usage when adding blocks. ...
2 parents c7d6891 + 665ebe9 commit 60b5f90

24 files changed

+190
-92
lines changed

MAINTAINERS

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2246,12 +2246,6 @@ L: linux-usb@vger.kernel.org
22462246
S: Maintained
22472247
F: drivers/usb/host/ohci-ep93xx.c
22482248

2249-
CIRRUS LOGIC CS4270 SOUND DRIVER
2250-
M: Timur Tabi <timur@tabi.org>
2251-
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
2252-
S: Odd Fixes
2253-
F: sound/soc/codecs/cs4270*
2254-
22552249
CIRRUS LOGIC AUDIO CODEC DRIVERS
22562250
M: Brian Austin <brian.austin@cirrus.com>
22572251
M: Paul Handrigan <Paul.Handrigan@cirrus.com>

sound/isa/sb/sb_mixer.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -818,12 +818,14 @@ int snd_sbmixer_new(struct snd_sb *chip)
818818
return err;
819819
break;
820820
case SB_HW_DT019X:
821-
if ((err = snd_sbmixer_init(chip,
822-
snd_dt019x_controls,
823-
ARRAY_SIZE(snd_dt019x_controls),
824-
snd_dt019x_init_values,
825-
ARRAY_SIZE(snd_dt019x_init_values),
826-
"DT019X")) < 0)
821+
err = snd_sbmixer_init(chip,
822+
snd_dt019x_controls,
823+
ARRAY_SIZE(snd_dt019x_controls),
824+
snd_dt019x_init_values,
825+
ARRAY_SIZE(snd_dt019x_init_values),
826+
"DT019X");
827+
if (err < 0)
828+
return err;
827829
break;
828830
default:
829831
strcpy(card->mixername, "???");

sound/pci/hda/hda_intel.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,12 @@ static int azx_first_init(struct azx *chip)
13671367
/* initialize streams */
13681368
azx_init_stream(chip);
13691369

1370+
/* workaround for Broadwell HDMI: the first stream is broken,
1371+
* so mask it by keeping it as if opened
1372+
*/
1373+
if (pci->vendor == 0x8086 && pci->device == 0x160c)
1374+
chip->azx_dev[0].opened = 1;
1375+
13701376
/* initialize chip */
13711377
azx_init_pci(chip);
13721378
azx_init_chip(chip, (probe_only[dev] & 2) == 0);

sound/pci/hda/patch_hdmi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3332,6 +3332,7 @@ static const struct hda_codec_preset snd_hda_preset_hdmi[] = {
33323332
{ .id = 0x10de0051, .name = "GPU 51 HDMI/DP", .patch = patch_nvhdmi },
33333333
{ .id = 0x10de0060, .name = "GPU 60 HDMI/DP", .patch = patch_nvhdmi },
33343334
{ .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
3335+
{ .id = 0x10de0071, .name = "GPU 71 HDMI/DP", .patch = patch_nvhdmi },
33353336
{ .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
33363337
{ .id = 0x11069f80, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi },
33373338
{ .id = 0x11069f81, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi },
@@ -3387,6 +3388,7 @@ MODULE_ALIAS("snd-hda-codec-id:10de0044");
33873388
MODULE_ALIAS("snd-hda-codec-id:10de0051");
33883389
MODULE_ALIAS("snd-hda-codec-id:10de0060");
33893390
MODULE_ALIAS("snd-hda-codec-id:10de0067");
3391+
MODULE_ALIAS("snd-hda-codec-id:10de0071");
33903392
MODULE_ALIAS("snd-hda-codec-id:10de8001");
33913393
MODULE_ALIAS("snd-hda-codec-id:11069f80");
33923394
MODULE_ALIAS("snd-hda-codec-id:11069f81");

sound/pci/hda/patch_realtek.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4616,6 +4616,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
46164616
SND_PCI_QUIRK(0x1028, 0x0653, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46174617
SND_PCI_QUIRK(0x1028, 0x0657, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46184618
SND_PCI_QUIRK(0x1028, 0x0658, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4619+
SND_PCI_QUIRK(0x1028, 0x065c, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46194620
SND_PCI_QUIRK(0x1028, 0x065f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46204621
SND_PCI_QUIRK(0x1028, 0x0662, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46214622
SND_PCI_QUIRK(0x1028, 0x0667, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -4624,6 +4625,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
46244625
SND_PCI_QUIRK(0x1028, 0x0674, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46254626
SND_PCI_QUIRK(0x1028, 0x067e, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
46264627
SND_PCI_QUIRK(0x1028, 0x067f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4628+
SND_PCI_QUIRK(0x1028, 0x0680, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4629+
SND_PCI_QUIRK(0x1028, 0x0684, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
46274630
SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
46284631
SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
46294632
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),

sound/soc/codecs/tlv320aic31xx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ static int aic31xx_dapm_power_event(struct snd_soc_dapm_widget *w,
376376
reg = AIC31XX_ADCFLAG;
377377
break;
378378
default:
379-
dev_err(w->codec->dev, "Unknown widget '%s' calling %s/n",
379+
dev_err(w->codec->dev, "Unknown widget '%s' calling %s\n",
380380
w->name, __func__);
381381
return -EINVAL;
382382
}

sound/soc/codecs/wm8962.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ static struct reg_default wm8962_reg[] = {
154154
{ 40, 0x0000 }, /* R40 - SPKOUTL volume */
155155
{ 41, 0x0000 }, /* R41 - SPKOUTR volume */
156156

157+
{ 49, 0x0010 }, /* R49 - Class D Control 1 */
157158
{ 51, 0x0003 }, /* R51 - Class D Control 2 */
158159

159160
{ 56, 0x0506 }, /* R56 - Clocking 4 */
@@ -795,7 +796,6 @@ static bool wm8962_volatile_register(struct device *dev, unsigned int reg)
795796
case WM8962_ALC2:
796797
case WM8962_THERMAL_SHUTDOWN_STATUS:
797798
case WM8962_ADDITIONAL_CONTROL_4:
798-
case WM8962_CLASS_D_CONTROL_1:
799799
case WM8962_DC_SERVO_6:
800800
case WM8962_INTERRUPT_STATUS_1:
801801
case WM8962_INTERRUPT_STATUS_2:
@@ -2929,13 +2929,22 @@ static int wm8962_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
29292929
static int wm8962_mute(struct snd_soc_dai *dai, int mute)
29302930
{
29312931
struct snd_soc_codec *codec = dai->codec;
2932-
int val;
2932+
int val, ret;
29332933

29342934
if (mute)
2935-
val = WM8962_DAC_MUTE;
2935+
val = WM8962_DAC_MUTE | WM8962_DAC_MUTE_ALT;
29362936
else
29372937
val = 0;
29382938

2939+
/**
2940+
* The DAC mute bit is mirrored in two registers, update both to keep
2941+
* the register cache consistent.
2942+
*/
2943+
ret = snd_soc_update_bits(codec, WM8962_CLASS_D_CONTROL_1,
2944+
WM8962_DAC_MUTE_ALT, val);
2945+
if (ret < 0)
2946+
return ret;
2947+
29392948
return snd_soc_update_bits(codec, WM8962_ADC_DAC_CONTROL_1,
29402949
WM8962_DAC_MUTE, val);
29412950
}

sound/soc/codecs/wm8962.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1954,6 +1954,10 @@
19541954
#define WM8962_SPKOUTL_ENA_MASK 0x0040 /* SPKOUTL_ENA */
19551955
#define WM8962_SPKOUTL_ENA_SHIFT 6 /* SPKOUTL_ENA */
19561956
#define WM8962_SPKOUTL_ENA_WIDTH 1 /* SPKOUTL_ENA */
1957+
#define WM8962_DAC_MUTE_ALT 0x0010 /* DAC_MUTE */
1958+
#define WM8962_DAC_MUTE_ALT_MASK 0x0010 /* DAC_MUTE */
1959+
#define WM8962_DAC_MUTE_ALT_SHIFT 4 /* DAC_MUTE */
1960+
#define WM8962_DAC_MUTE_ALT_WIDTH 1 /* DAC_MUTE */
19571961
#define WM8962_SPKOUTL_PGA_MUTE 0x0002 /* SPKOUTL_PGA_MUTE */
19581962
#define WM8962_SPKOUTL_PGA_MUTE_MASK 0x0002 /* SPKOUTL_PGA_MUTE */
19591963
#define WM8962_SPKOUTL_PGA_MUTE_SHIFT 1 /* SPKOUTL_PGA_MUTE */

sound/soc/fsl/fsl_esai.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,16 @@ static int fsl_esai_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
258258
return -EINVAL;
259259
}
260260

261-
if (ratio == 1) {
261+
/* Only EXTAL source can be output directly without using PSR and PM */
262+
if (ratio == 1 && clksrc == esai_priv->extalclk) {
262263
/* Bypass all the dividers if not being needed */
263264
ecr |= tx ? ESAI_ECR_ETO : ESAI_ECR_ERO;
264265
goto out;
266+
} else if (ratio < 2) {
267+
/* The ratio should be no less than 2 if using other sources */
268+
dev_err(dai->dev, "failed to derive required HCK%c rate\n",
269+
tx ? 'T' : 'R');
270+
return -EINVAL;
265271
}
266272

267273
ret = fsl_esai_divisor_cal(dai, tx, ratio, false, 0);
@@ -307,7 +313,8 @@ static int fsl_esai_set_bclk(struct snd_soc_dai *dai, bool tx, u32 freq)
307313
return -EINVAL;
308314
}
309315

310-
if (esai_priv->sck_div[tx] && (ratio > 16 || ratio == 0)) {
316+
/* The ratio should be contented by FP alone if bypassing PM and PSR */
317+
if (!esai_priv->sck_div[tx] && (ratio > 16 || ratio == 0)) {
311318
dev_err(dai->dev, "the ratio is out of range (1 ~ 16)\n");
312319
return -EINVAL;
313320
}
@@ -454,12 +461,6 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,
454461
}
455462

456463
if (!dai->active) {
457-
/* Reset Port C */
458-
regmap_update_bits(esai_priv->regmap, REG_ESAI_PRRC,
459-
ESAI_PRRC_PDC_MASK, ESAI_PRRC_PDC(ESAI_GPIO));
460-
regmap_update_bits(esai_priv->regmap, REG_ESAI_PCRC,
461-
ESAI_PCRC_PC_MASK, ESAI_PCRC_PC(ESAI_GPIO));
462-
463464
/* Set synchronous mode */
464465
regmap_update_bits(esai_priv->regmap, REG_ESAI_SAICR,
465466
ESAI_SAICR_SYNC, esai_priv->synchronous ?
@@ -519,6 +520,11 @@ static int fsl_esai_hw_params(struct snd_pcm_substream *substream,
519520

520521
regmap_update_bits(esai_priv->regmap, REG_ESAI_xCR(tx), mask, val);
521522

523+
/* Remove ESAI personal reset by configuring ESAI_PCRC and ESAI_PRRC */
524+
regmap_update_bits(esai_priv->regmap, REG_ESAI_PRRC,
525+
ESAI_PRRC_PDC_MASK, ESAI_PRRC_PDC(ESAI_GPIO));
526+
regmap_update_bits(esai_priv->regmap, REG_ESAI_PCRC,
527+
ESAI_PCRC_PC_MASK, ESAI_PCRC_PC(ESAI_GPIO));
522528
return 0;
523529
}
524530

sound/soc/fsl/imx-audmux.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ static const struct file_operations audmux_debugfs_fops = {
145145
.llseek = default_llseek,
146146
};
147147

148-
static void __init audmux_debugfs_init(void)
148+
static void audmux_debugfs_init(void)
149149
{
150150
int i;
151151
char buf[20];

0 commit comments

Comments
 (0)