Commit 9b1be0f976a158590b924ac8789afe69b06dd302
Exists in
master
and in
16 other branches
Merge tag 'sound-3.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "We have a bit more changes than usual in ASoC here, as it was slipped from the previous update. There are one minr ASoC PCM code fix and ASoC dmaengine fix, in addition of a collection of small ASoC driver fixes. The rest are a couple of HD-audio stable fixups, and a long-standing fix for the paused stream handling. So, all commits look not scary (and hopefully won't give you disastrous holiday season)" * tag 'sound-3.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - Add Dell headset detection quirk for one more laptop model ASoC: wm8904: fix DSP mode B configuration ASoC: wm_adsp: Add small delay while polling DSP RAM start ALSA: Add SNDRV_PCM_STATE_PAUSED case in wait_for_avail function ASoC: kirkwood: Fix the CPU DAI rates ASoC: wm5110: Correct HPOUT3 DAPM route typo ALSA: hda - Add Dell headset detection quirk for three laptop models ALSA: hda - Add enable_msi=0 workaround for four HP machines ASoC: don't leak on error in snd_dmaengine_pcm_register ASoC: fsl: imx-wm8962: Don't update bias_level in machine driver ASoC: tegra: fix uninitialized variables in set_fmt ASoC: wm8962: Enable SYSCLK provisonally before fetching generated DSPCLK_DIV ASoC: sam9x5_wm8731: change to work in DSP A mode ASoC: atmel_ssc_dai: add dai trigger ops ASoC: soc-pcm: Use valid condition for snd_soc_dai_digital_mute() in hw_free()
Showing 16 changed files Side-by-side Diff
- sound/core/pcm_lib.c
- sound/pci/hda/hda_intel.c
- sound/pci/hda/patch_realtek.c
- sound/soc/atmel/atmel_ssc_dai.c
- sound/soc/atmel/sam9x5_wm8731.c
- sound/soc/codecs/wm5110.c
- sound/soc/codecs/wm8904.c
- sound/soc/codecs/wm8962.c
- sound/soc/codecs/wm_adsp.c
- sound/soc/fsl/imx-wm8962.c
- sound/soc/kirkwood/kirkwood-i2s.c
- sound/soc/soc-generic-dmaengine-pcm.c
- sound/soc/soc-pcm.c
- sound/soc/tegra/tegra20_i2s.c
- sound/soc/tegra/tegra20_spdif.c
- sound/soc/tegra/tegra30_i2s.c
sound/core/pcm_lib.c
sound/pci/hda/hda_intel.c
... | ... | @@ -3433,6 +3433,10 @@ |
3433 | 3433 | * white/black-list for enable_msi |
3434 | 3434 | */ |
3435 | 3435 | static struct snd_pci_quirk msi_black_list[] = { |
3436 | + SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */ | |
3437 | + SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */ | |
3438 | + SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */ | |
3439 | + SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */ | |
3436 | 3440 | SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ |
3437 | 3441 | SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */ |
3438 | 3442 | SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */ |
sound/pci/hda/patch_realtek.c
... | ... | @@ -4247,12 +4247,16 @@ |
4247 | 4247 | SND_PCI_QUIRK(0x1028, 0x0606, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
4248 | 4248 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
4249 | 4249 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
4250 | + SND_PCI_QUIRK(0x1028, 0x0610, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | |
4250 | 4251 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
4251 | 4252 | SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
4252 | 4253 | SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), |
4253 | 4254 | SND_PCI_QUIRK(0x1028, 0x061f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), |
4255 | + SND_PCI_QUIRK(0x1028, 0x0629, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | |
4254 | 4256 | SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS), |
4257 | + SND_PCI_QUIRK(0x1028, 0x063e, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | |
4255 | 4258 | SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), |
4259 | + SND_PCI_QUIRK(0x1028, 0x0640, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), | |
4256 | 4260 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
4257 | 4261 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
4258 | 4262 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
sound/soc/atmel/atmel_ssc_dai.c
... | ... | @@ -648,7 +648,7 @@ |
648 | 648 | |
649 | 649 | dma_params = ssc_p->dma_params[dir]; |
650 | 650 | |
651 | - ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_enable); | |
651 | + ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_disable); | |
652 | 652 | ssc_writel(ssc_p->ssc->regs, IDR, dma_params->mask->ssc_error); |
653 | 653 | |
654 | 654 | pr_debug("%s enabled SSC_SR=0x%08x\n", |
655 | 655 | |
... | ... | @@ -657,7 +657,34 @@ |
657 | 657 | return 0; |
658 | 658 | } |
659 | 659 | |
660 | +static int atmel_ssc_trigger(struct snd_pcm_substream *substream, | |
661 | + int cmd, struct snd_soc_dai *dai) | |
662 | +{ | |
663 | + struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; | |
664 | + struct atmel_pcm_dma_params *dma_params; | |
665 | + int dir; | |
660 | 666 | |
667 | + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | |
668 | + dir = 0; | |
669 | + else | |
670 | + dir = 1; | |
671 | + | |
672 | + dma_params = ssc_p->dma_params[dir]; | |
673 | + | |
674 | + switch (cmd) { | |
675 | + case SNDRV_PCM_TRIGGER_START: | |
676 | + case SNDRV_PCM_TRIGGER_RESUME: | |
677 | + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: | |
678 | + ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_enable); | |
679 | + break; | |
680 | + default: | |
681 | + ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_disable); | |
682 | + break; | |
683 | + } | |
684 | + | |
685 | + return 0; | |
686 | +} | |
687 | + | |
661 | 688 | #ifdef CONFIG_PM |
662 | 689 | static int atmel_ssc_suspend(struct snd_soc_dai *cpu_dai) |
663 | 690 | { |
... | ... | @@ -731,6 +758,7 @@ |
731 | 758 | .startup = atmel_ssc_startup, |
732 | 759 | .shutdown = atmel_ssc_shutdown, |
733 | 760 | .prepare = atmel_ssc_prepare, |
761 | + .trigger = atmel_ssc_trigger, | |
734 | 762 | .hw_params = atmel_ssc_hw_params, |
735 | 763 | .set_fmt = atmel_ssc_set_dai_fmt, |
736 | 764 | .set_clkdiv = atmel_ssc_set_dai_clkdiv, |
sound/soc/atmel/sam9x5_wm8731.c
... | ... | @@ -109,7 +109,7 @@ |
109 | 109 | dai->stream_name = "WM8731 PCM"; |
110 | 110 | dai->codec_dai_name = "wm8731-hifi"; |
111 | 111 | dai->init = sam9x5_wm8731_init; |
112 | - dai->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |
112 | + dai->dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF | |
113 | 113 | | SND_SOC_DAIFMT_CBM_CFM; |
114 | 114 | |
115 | 115 | ret = snd_soc_of_parse_card_name(card, "atmel,model"); |
sound/soc/codecs/wm5110.c
... | ... | @@ -1012,7 +1012,7 @@ |
1012 | 1012 | { "AEC Loopback", "HPOUT3L", "OUT3L" }, |
1013 | 1013 | { "AEC Loopback", "HPOUT3R", "OUT3R" }, |
1014 | 1014 | { "HPOUT3L", NULL, "OUT3L" }, |
1015 | - { "HPOUT3R", NULL, "OUT3L" }, | |
1015 | + { "HPOUT3R", NULL, "OUT3R" }, | |
1016 | 1016 | |
1017 | 1017 | { "AEC Loopback", "SPKOUTL", "OUT4L" }, |
1018 | 1018 | { "SPKOUTLN", NULL, "OUT4L" }, |
sound/soc/codecs/wm8904.c
sound/soc/codecs/wm8962.c
... | ... | @@ -2439,7 +2439,20 @@ |
2439 | 2439 | snd_soc_update_bits(codec, WM8962_CLOCKING_4, |
2440 | 2440 | WM8962_SYSCLK_RATE_MASK, clocking4); |
2441 | 2441 | |
2442 | + /* DSPCLK_DIV can be only generated correctly after enabling SYSCLK. | |
2443 | + * So we here provisionally enable it and then disable it afterward | |
2444 | + * if current bias_level hasn't reached SND_SOC_BIAS_ON. | |
2445 | + */ | |
2446 | + if (codec->dapm.bias_level != SND_SOC_BIAS_ON) | |
2447 | + snd_soc_update_bits(codec, WM8962_CLOCKING2, | |
2448 | + WM8962_SYSCLK_ENA_MASK, WM8962_SYSCLK_ENA); | |
2449 | + | |
2442 | 2450 | dspclk = snd_soc_read(codec, WM8962_CLOCKING1); |
2451 | + | |
2452 | + if (codec->dapm.bias_level != SND_SOC_BIAS_ON) | |
2453 | + snd_soc_update_bits(codec, WM8962_CLOCKING2, | |
2454 | + WM8962_SYSCLK_ENA_MASK, 0); | |
2455 | + | |
2443 | 2456 | if (dspclk < 0) { |
2444 | 2457 | dev_err(codec->dev, "Failed to read DSPCLK: %d\n", dspclk); |
2445 | 2458 | return; |
sound/soc/codecs/wm_adsp.c
... | ... | @@ -1474,13 +1474,17 @@ |
1474 | 1474 | return ret; |
1475 | 1475 | |
1476 | 1476 | /* Wait for the RAM to start, should be near instantaneous */ |
1477 | - count = 0; | |
1478 | - do { | |
1477 | + for (count = 0; count < 10; ++count) { | |
1479 | 1478 | ret = regmap_read(dsp->regmap, dsp->base + ADSP2_STATUS1, |
1480 | 1479 | &val); |
1481 | 1480 | if (ret != 0) |
1482 | 1481 | return ret; |
1483 | - } while (!(val & ADSP2_RAM_RDY) && ++count < 10); | |
1482 | + | |
1483 | + if (val & ADSP2_RAM_RDY) | |
1484 | + break; | |
1485 | + | |
1486 | + msleep(1); | |
1487 | + } | |
1484 | 1488 | |
1485 | 1489 | if (!(val & ADSP2_RAM_RDY)) { |
1486 | 1490 | adsp_err(dsp, "Failed to start DSP RAM\n"); |
sound/soc/fsl/imx-wm8962.c
sound/soc/kirkwood/kirkwood-i2s.c
... | ... | @@ -473,17 +473,17 @@ |
473 | 473 | .playback = { |
474 | 474 | .channels_min = 1, |
475 | 475 | .channels_max = 2, |
476 | - .rates = SNDRV_PCM_RATE_8000_192000 | | |
477 | - SNDRV_PCM_RATE_CONTINUOUS | | |
478 | - SNDRV_PCM_RATE_KNOT, | |
476 | + .rates = SNDRV_PCM_RATE_CONTINUOUS, | |
477 | + .rate_min = 5512, | |
478 | + .rate_max = 192000, | |
479 | 479 | .formats = KIRKWOOD_I2S_FORMATS, |
480 | 480 | }, |
481 | 481 | .capture = { |
482 | 482 | .channels_min = 1, |
483 | 483 | .channels_max = 2, |
484 | - .rates = SNDRV_PCM_RATE_8000_192000 | | |
485 | - SNDRV_PCM_RATE_CONTINUOUS | | |
486 | - SNDRV_PCM_RATE_KNOT, | |
484 | + .rates = SNDRV_PCM_RATE_CONTINUOUS, | |
485 | + .rate_min = 5512, | |
486 | + .rate_max = 192000, | |
487 | 487 | .formats = KIRKWOOD_I2S_FORMATS, |
488 | 488 | }, |
489 | 489 | .ops = &kirkwood_i2s_dai_ops, |
490 | 490 | |
... | ... | @@ -494,17 +494,17 @@ |
494 | 494 | .playback = { |
495 | 495 | .channels_min = 1, |
496 | 496 | .channels_max = 2, |
497 | - .rates = SNDRV_PCM_RATE_8000_192000 | | |
498 | - SNDRV_PCM_RATE_CONTINUOUS | | |
499 | - SNDRV_PCM_RATE_KNOT, | |
497 | + .rates = SNDRV_PCM_RATE_CONTINUOUS, | |
498 | + .rate_min = 5512, | |
499 | + .rate_max = 192000, | |
500 | 500 | .formats = KIRKWOOD_SPDIF_FORMATS, |
501 | 501 | }, |
502 | 502 | .capture = { |
503 | 503 | .channels_min = 1, |
504 | 504 | .channels_max = 2, |
505 | - .rates = SNDRV_PCM_RATE_8000_192000 | | |
506 | - SNDRV_PCM_RATE_CONTINUOUS | | |
507 | - SNDRV_PCM_RATE_KNOT, | |
505 | + .rates = SNDRV_PCM_RATE_CONTINUOUS, | |
506 | + .rate_min = 5512, | |
507 | + .rate_max = 192000, | |
508 | 508 | .formats = KIRKWOOD_SPDIF_FORMATS, |
509 | 509 | }, |
510 | 510 | .ops = &kirkwood_i2s_dai_ops, |
sound/soc/soc-generic-dmaengine-pcm.c
... | ... | @@ -305,6 +305,20 @@ |
305 | 305 | } |
306 | 306 | } |
307 | 307 | |
308 | +static void dmaengine_pcm_release_chan(struct dmaengine_pcm *pcm) | |
309 | +{ | |
310 | + unsigned int i; | |
311 | + | |
312 | + for (i = SNDRV_PCM_STREAM_PLAYBACK; i <= SNDRV_PCM_STREAM_CAPTURE; | |
313 | + i++) { | |
314 | + if (!pcm->chan[i]) | |
315 | + continue; | |
316 | + dma_release_channel(pcm->chan[i]); | |
317 | + if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX) | |
318 | + break; | |
319 | + } | |
320 | +} | |
321 | + | |
308 | 322 | /** |
309 | 323 | * snd_dmaengine_pcm_register - Register a dmaengine based PCM device |
310 | 324 | * @dev: The parent device for the PCM device |
... | ... | @@ -315,6 +329,7 @@ |
315 | 329 | const struct snd_dmaengine_pcm_config *config, unsigned int flags) |
316 | 330 | { |
317 | 331 | struct dmaengine_pcm *pcm; |
332 | + int ret; | |
318 | 333 | |
319 | 334 | pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); |
320 | 335 | if (!pcm) |
321 | 336 | |
322 | 337 | |
... | ... | @@ -326,11 +341,20 @@ |
326 | 341 | dmaengine_pcm_request_chan_of(pcm, dev); |
327 | 342 | |
328 | 343 | if (flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE) |
329 | - return snd_soc_add_platform(dev, &pcm->platform, | |
344 | + ret = snd_soc_add_platform(dev, &pcm->platform, | |
330 | 345 | &dmaengine_no_residue_pcm_platform); |
331 | 346 | else |
332 | - return snd_soc_add_platform(dev, &pcm->platform, | |
347 | + ret = snd_soc_add_platform(dev, &pcm->platform, | |
333 | 348 | &dmaengine_pcm_platform); |
349 | + if (ret) | |
350 | + goto err_free_dma; | |
351 | + | |
352 | + return 0; | |
353 | + | |
354 | +err_free_dma: | |
355 | + dmaengine_pcm_release_chan(pcm); | |
356 | + kfree(pcm); | |
357 | + return ret; | |
334 | 358 | } |
335 | 359 | EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_register); |
336 | 360 | |
... | ... | @@ -345,7 +369,6 @@ |
345 | 369 | { |
346 | 370 | struct snd_soc_platform *platform; |
347 | 371 | struct dmaengine_pcm *pcm; |
348 | - unsigned int i; | |
349 | 372 | |
350 | 373 | platform = snd_soc_lookup_platform(dev); |
351 | 374 | if (!platform) |
352 | 375 | |
... | ... | @@ -353,15 +376,8 @@ |
353 | 376 | |
354 | 377 | pcm = soc_platform_to_pcm(platform); |
355 | 378 | |
356 | - for (i = SNDRV_PCM_STREAM_PLAYBACK; i <= SNDRV_PCM_STREAM_CAPTURE; i++) { | |
357 | - if (pcm->chan[i]) { | |
358 | - dma_release_channel(pcm->chan[i]); | |
359 | - if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX) | |
360 | - break; | |
361 | - } | |
362 | - } | |
363 | - | |
364 | 379 | snd_soc_remove_platform(platform); |
380 | + dmaengine_pcm_release_chan(pcm); | |
365 | 381 | kfree(pcm); |
366 | 382 | } |
367 | 383 | EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_unregister); |
sound/soc/soc-pcm.c
... | ... | @@ -600,12 +600,13 @@ |
600 | 600 | struct snd_soc_platform *platform = rtd->platform; |
601 | 601 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
602 | 602 | struct snd_soc_dai *codec_dai = rtd->codec_dai; |
603 | - struct snd_soc_codec *codec = rtd->codec; | |
603 | + bool playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; | |
604 | 604 | |
605 | 605 | mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass); |
606 | 606 | |
607 | 607 | /* apply codec digital mute */ |
608 | - if (!codec->active) | |
608 | + if ((playback && codec_dai->playback_active == 1) || | |
609 | + (!playback && codec_dai->capture_active == 1)) | |
609 | 610 | snd_soc_dai_digital_mute(codec_dai, 1, substream->stream); |
610 | 611 | |
611 | 612 | /* free any machine hw params */ |
sound/soc/tegra/tegra20_i2s.c
... | ... | @@ -74,7 +74,7 @@ |
74 | 74 | unsigned int fmt) |
75 | 75 | { |
76 | 76 | struct tegra20_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
77 | - unsigned int mask, val; | |
77 | + unsigned int mask = 0, val = 0; | |
78 | 78 | |
79 | 79 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
80 | 80 | case SND_SOC_DAIFMT_NB_NF: |
81 | 81 | |
... | ... | @@ -83,10 +83,10 @@ |
83 | 83 | return -EINVAL; |
84 | 84 | } |
85 | 85 | |
86 | - mask = TEGRA20_I2S_CTRL_MASTER_ENABLE; | |
86 | + mask |= TEGRA20_I2S_CTRL_MASTER_ENABLE; | |
87 | 87 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { |
88 | 88 | case SND_SOC_DAIFMT_CBS_CFS: |
89 | - val = TEGRA20_I2S_CTRL_MASTER_ENABLE; | |
89 | + val |= TEGRA20_I2S_CTRL_MASTER_ENABLE; | |
90 | 90 | break; |
91 | 91 | case SND_SOC_DAIFMT_CBM_CFM: |
92 | 92 | break; |
sound/soc/tegra/tegra20_spdif.c
... | ... | @@ -67,15 +67,15 @@ |
67 | 67 | { |
68 | 68 | struct device *dev = dai->dev; |
69 | 69 | struct tegra20_spdif *spdif = snd_soc_dai_get_drvdata(dai); |
70 | - unsigned int mask, val; | |
70 | + unsigned int mask = 0, val = 0; | |
71 | 71 | int ret, spdifclock; |
72 | 72 | |
73 | - mask = TEGRA20_SPDIF_CTRL_PACK | | |
74 | - TEGRA20_SPDIF_CTRL_BIT_MODE_MASK; | |
73 | + mask |= TEGRA20_SPDIF_CTRL_PACK | | |
74 | + TEGRA20_SPDIF_CTRL_BIT_MODE_MASK; | |
75 | 75 | switch (params_format(params)) { |
76 | 76 | case SNDRV_PCM_FORMAT_S16_LE: |
77 | - val = TEGRA20_SPDIF_CTRL_PACK | | |
78 | - TEGRA20_SPDIF_CTRL_BIT_MODE_16BIT; | |
77 | + val |= TEGRA20_SPDIF_CTRL_PACK | | |
78 | + TEGRA20_SPDIF_CTRL_BIT_MODE_16BIT; | |
79 | 79 | break; |
80 | 80 | default: |
81 | 81 | return -EINVAL; |
sound/soc/tegra/tegra30_i2s.c
... | ... | @@ -118,7 +118,7 @@ |
118 | 118 | unsigned int fmt) |
119 | 119 | { |
120 | 120 | struct tegra30_i2s *i2s = snd_soc_dai_get_drvdata(dai); |
121 | - unsigned int mask, val; | |
121 | + unsigned int mask = 0, val = 0; | |
122 | 122 | |
123 | 123 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
124 | 124 | case SND_SOC_DAIFMT_NB_NF: |
125 | 125 | |
... | ... | @@ -127,10 +127,10 @@ |
127 | 127 | return -EINVAL; |
128 | 128 | } |
129 | 129 | |
130 | - mask = TEGRA30_I2S_CTRL_MASTER_ENABLE; | |
130 | + mask |= TEGRA30_I2S_CTRL_MASTER_ENABLE; | |
131 | 131 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { |
132 | 132 | case SND_SOC_DAIFMT_CBS_CFS: |
133 | - val = TEGRA30_I2S_CTRL_MASTER_ENABLE; | |
133 | + val |= TEGRA30_I2S_CTRL_MASTER_ENABLE; | |
134 | 134 | break; |
135 | 135 | case SND_SOC_DAIFMT_CBM_CFM: |
136 | 136 | break; |