diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-10-09 20:56:00 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-10-09 20:56:00 -0400 |
| commit | f4ba1cf8a40bc9f136f8e050e79a81112bf02ccd (patch) | |
| tree | f395defb3ba00155fa5e9d44a7f427fa17b7c11e | |
| parent | fe621fdead1165599a7422821a2923953fa1f8de (diff) | |
| parent | 601d62959d08a450d4666c728ddd2f47c5ba1cfe (diff) | |
Merge tag 'sound-4.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"We see various small fixes, but nothing looks too scary, all are small
gentle bug fixes:
- Most of changes are for ASoC codecs: Realtek, SGTL5000, TAS2552,
TLV320, WM8962
- A couple of dwc and imx-ssi fixes
- Usual oneliner HD-audio quirks
- An old emux synth code fix"
* tag 'sound-4.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
MAINTAINERS: Remove wm97xx entry
ASoC: tas2552: fix dBscale-min declaration
ALSA: synth: Fix conflicting OSS device registration on AWE32
ALSA: hda - Disable power_save_node for IDT 92HD73xx chips
ALSA: hda - Apply SPDIF pin ctl to MacBookPro 12,1
ALSA: hda: Add dock support for ThinkPad T550
ASoC: dwc: fix dma stop transferring issue
ASoC: dwc: correct irq clear method
ASoC: tlv320aic3x: Prevent writing reserved registers on tlv320aic3104 CODECs
ASoC: rt5645: Correct the naming and setting of ADC Boost Volume Control
ASoC: sgtl5000: fix wrong register MIC_BIAS_VOLTAGE setup on probe
ASoC: wm8962: balance pm_runtime_enable
ASoC: imx-ssi: Fix DAI hardware signal inversions
ASoC: sgtl5000: fix error message output for MicBias voltage
ASoC: db1200: Fix DAI link format for db1300 and db1550
| -rw-r--r-- | MAINTAINERS | 9 | ||||
| -rw-r--r-- | sound/pci/hda/patch_cirrus.c | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 6 | ||||
| -rw-r--r-- | sound/soc/au1x/db1200.c | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5645.c | 6 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5645.h | 16 | ||||
| -rw-r--r-- | sound/soc/codecs/sgtl5000.c | 6 | ||||
| -rw-r--r-- | sound/soc/codecs/tas2552.c | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/tlv320aic3x.c | 19 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8962.c | 5 | ||||
| -rw-r--r-- | sound/soc/dwc/designware_i2s.c | 19 | ||||
| -rw-r--r-- | sound/soc/fsl/imx-ssi.c | 19 | ||||
| -rw-r--r-- | sound/synth/emux/emux_oss.c | 3 |
14 files changed, 67 insertions, 49 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 797236befd27..60aacd88bd7f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -11378,15 +11378,6 @@ W: http://oops.ghostprotocols.net:81/blog | |||
| 11378 | S: Maintained | 11378 | S: Maintained |
| 11379 | F: drivers/net/wireless/wl3501* | 11379 | F: drivers/net/wireless/wl3501* |
| 11380 | 11380 | ||
| 11381 | WM97XX TOUCHSCREEN DRIVERS | ||
| 11382 | M: Mark Brown <broonie@kernel.org> | ||
| 11383 | M: Liam Girdwood <lrg@slimlogic.co.uk> | ||
| 11384 | L: linux-input@vger.kernel.org | ||
| 11385 | W: https://github.com/CirrusLogic/linux-drivers/wiki | ||
| 11386 | S: Supported | ||
| 11387 | F: drivers/input/touchscreen/*wm97* | ||
| 11388 | F: include/linux/wm97xx.h | ||
| 11389 | |||
| 11390 | WOLFSON MICROELECTRONICS DRIVERS | 11381 | WOLFSON MICROELECTRONICS DRIVERS |
| 11391 | L: patches@opensource.wolfsonmicro.com | 11382 | L: patches@opensource.wolfsonmicro.com |
| 11392 | T: git https://github.com/CirrusLogic/linux-drivers.git | 11383 | T: git https://github.com/CirrusLogic/linux-drivers.git |
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index 584a0343ab0c..85813de26da8 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
| @@ -633,6 +633,7 @@ static const struct snd_pci_quirk cs4208_mac_fixup_tbl[] = { | |||
| 633 | SND_PCI_QUIRK(0x106b, 0x5e00, "MacBookPro 11,2", CS4208_MBP11), | 633 | SND_PCI_QUIRK(0x106b, 0x5e00, "MacBookPro 11,2", CS4208_MBP11), |
| 634 | SND_PCI_QUIRK(0x106b, 0x7100, "MacBookAir 6,1", CS4208_MBA6), | 634 | SND_PCI_QUIRK(0x106b, 0x7100, "MacBookAir 6,1", CS4208_MBA6), |
| 635 | SND_PCI_QUIRK(0x106b, 0x7200, "MacBookAir 6,2", CS4208_MBA6), | 635 | SND_PCI_QUIRK(0x106b, 0x7200, "MacBookAir 6,2", CS4208_MBA6), |
| 636 | SND_PCI_QUIRK(0x106b, 0x7b00, "MacBookPro 12,1", CS4208_MBP11), | ||
| 636 | {} /* terminator */ | 637 | {} /* terminator */ |
| 637 | }; | 638 | }; |
| 638 | 639 | ||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index afec6dc9f91f..16b8dcba5c12 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -5306,6 +5306,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 5306 | SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK), | 5306 | SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK), |
| 5307 | SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK), | 5307 | SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK), |
| 5308 | SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 5308 | SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
| 5309 | SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK), | ||
| 5309 | SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), | 5310 | SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK), |
| 5310 | SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), | 5311 | SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), |
| 5311 | SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP), | 5312 | SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP), |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 9d947aef2c8b..def5cc8dff02 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -4520,7 +4520,11 @@ static int patch_stac92hd73xx(struct hda_codec *codec) | |||
| 4520 | return err; | 4520 | return err; |
| 4521 | 4521 | ||
| 4522 | spec = codec->spec; | 4522 | spec = codec->spec; |
| 4523 | codec->power_save_node = 1; | 4523 | /* enable power_save_node only for new 92HD89xx chips, as it causes |
| 4524 | * click noises on old 92HD73xx chips. | ||
| 4525 | */ | ||
| 4526 | if ((codec->core.vendor_id & 0xfffffff0) != 0x111d7670) | ||
| 4527 | codec->power_save_node = 1; | ||
| 4524 | spec->linear_tone_beep = 0; | 4528 | spec->linear_tone_beep = 0; |
| 4525 | spec->gen.mixer_nid = 0x1d; | 4529 | spec->gen.mixer_nid = 0x1d; |
| 4526 | spec->have_spdif_mux = 1; | 4530 | spec->have_spdif_mux = 1; |
diff --git a/sound/soc/au1x/db1200.c b/sound/soc/au1x/db1200.c index 58c3164802b8..8c907ebea189 100644 --- a/sound/soc/au1x/db1200.c +++ b/sound/soc/au1x/db1200.c | |||
| @@ -129,6 +129,8 @@ static struct snd_soc_dai_link db1300_i2s_dai = { | |||
| 129 | .cpu_dai_name = "au1xpsc_i2s.2", | 129 | .cpu_dai_name = "au1xpsc_i2s.2", |
| 130 | .platform_name = "au1xpsc-pcm.2", | 130 | .platform_name = "au1xpsc-pcm.2", |
| 131 | .codec_name = "wm8731.0-001b", | 131 | .codec_name = "wm8731.0-001b", |
| 132 | .dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF | | ||
| 133 | SND_SOC_DAIFMT_CBM_CFM, | ||
| 132 | .ops = &db1200_i2s_wm8731_ops, | 134 | .ops = &db1200_i2s_wm8731_ops, |
| 133 | }; | 135 | }; |
| 134 | 136 | ||
| @@ -146,6 +148,8 @@ static struct snd_soc_dai_link db1550_i2s_dai = { | |||
| 146 | .cpu_dai_name = "au1xpsc_i2s.3", | 148 | .cpu_dai_name = "au1xpsc_i2s.3", |
| 147 | .platform_name = "au1xpsc-pcm.3", | 149 | .platform_name = "au1xpsc-pcm.3", |
| 148 | .codec_name = "wm8731.0-001b", | 150 | .codec_name = "wm8731.0-001b", |
| 151 | .dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF | | ||
| 152 | SND_SOC_DAIFMT_CBM_CFM, | ||
| 149 | .ops = &db1200_i2s_wm8731_ops, | 153 | .ops = &db1200_i2s_wm8731_ops, |
| 150 | }; | 154 | }; |
| 151 | 155 | ||
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c index 268a28bd1df4..5c101af0ac63 100644 --- a/sound/soc/codecs/rt5645.c +++ b/sound/soc/codecs/rt5645.c | |||
| @@ -519,11 +519,11 @@ static const struct snd_kcontrol_new rt5645_snd_controls[] = { | |||
| 519 | RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv), | 519 | RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv), |
| 520 | 520 | ||
| 521 | /* ADC Boost Volume Control */ | 521 | /* ADC Boost Volume Control */ |
| 522 | SOC_DOUBLE_TLV("STO1 ADC Boost Gain", RT5645_ADC_BST_VOL1, | 522 | SOC_DOUBLE_TLV("ADC Boost Capture Volume", RT5645_ADC_BST_VOL1, |
| 523 | RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0, | 523 | RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0, |
| 524 | adc_bst_tlv), | 524 | adc_bst_tlv), |
| 525 | SOC_DOUBLE_TLV("STO2 ADC Boost Gain", RT5645_ADC_BST_VOL1, | 525 | SOC_DOUBLE_TLV("Mono ADC Boost Capture Volume", RT5645_ADC_BST_VOL2, |
| 526 | RT5645_STO2_ADC_L_BST_SFT, RT5645_STO2_ADC_R_BST_SFT, 3, 0, | 526 | RT5645_MONO_ADC_L_BST_SFT, RT5645_MONO_ADC_R_BST_SFT, 3, 0, |
| 527 | adc_bst_tlv), | 527 | adc_bst_tlv), |
| 528 | 528 | ||
| 529 | /* I2S2 function select */ | 529 | /* I2S2 function select */ |
diff --git a/sound/soc/codecs/rt5645.h b/sound/soc/codecs/rt5645.h index 0e4cfc6ac649..8c964cfb120d 100644 --- a/sound/soc/codecs/rt5645.h +++ b/sound/soc/codecs/rt5645.h | |||
| @@ -39,8 +39,8 @@ | |||
| 39 | #define RT5645_STO1_ADC_DIG_VOL 0x1c | 39 | #define RT5645_STO1_ADC_DIG_VOL 0x1c |
| 40 | #define RT5645_MONO_ADC_DIG_VOL 0x1d | 40 | #define RT5645_MONO_ADC_DIG_VOL 0x1d |
| 41 | #define RT5645_ADC_BST_VOL1 0x1e | 41 | #define RT5645_ADC_BST_VOL1 0x1e |
| 42 | /* Mixer - D-D */ | ||
| 43 | #define RT5645_ADC_BST_VOL2 0x20 | 42 | #define RT5645_ADC_BST_VOL2 0x20 |
| 43 | /* Mixer - D-D */ | ||
| 44 | #define RT5645_STO1_ADC_MIXER 0x27 | 44 | #define RT5645_STO1_ADC_MIXER 0x27 |
| 45 | #define RT5645_MONO_ADC_MIXER 0x28 | 45 | #define RT5645_MONO_ADC_MIXER 0x28 |
| 46 | #define RT5645_AD_DA_MIXER 0x29 | 46 | #define RT5645_AD_DA_MIXER 0x29 |
| @@ -315,12 +315,14 @@ | |||
| 315 | #define RT5645_STO1_ADC_R_BST_SFT 12 | 315 | #define RT5645_STO1_ADC_R_BST_SFT 12 |
| 316 | #define RT5645_STO1_ADC_COMP_MASK (0x3 << 10) | 316 | #define RT5645_STO1_ADC_COMP_MASK (0x3 << 10) |
| 317 | #define RT5645_STO1_ADC_COMP_SFT 10 | 317 | #define RT5645_STO1_ADC_COMP_SFT 10 |
| 318 | #define RT5645_STO2_ADC_L_BST_MASK (0x3 << 8) | 318 | |
| 319 | #define RT5645_STO2_ADC_L_BST_SFT 8 | 319 | /* ADC Boost Volume Control (0x20) */ |
| 320 | #define RT5645_STO2_ADC_R_BST_MASK (0x3 << 6) | 320 | #define RT5645_MONO_ADC_L_BST_MASK (0x3 << 14) |
| 321 | #define RT5645_STO2_ADC_R_BST_SFT 6 | 321 | #define RT5645_MONO_ADC_L_BST_SFT 14 |
| 322 | #define RT5645_STO2_ADC_COMP_MASK (0x3 << 4) | 322 | #define RT5645_MONO_ADC_R_BST_MASK (0x3 << 12) |
| 323 | #define RT5645_STO2_ADC_COMP_SFT 4 | 323 | #define RT5645_MONO_ADC_R_BST_SFT 12 |
| 324 | #define RT5645_MONO_ADC_COMP_MASK (0x3 << 10) | ||
| 325 | #define RT5645_MONO_ADC_COMP_SFT 10 | ||
| 324 | 326 | ||
| 325 | /* Stereo2 ADC Mixer Control (0x26) */ | 327 | /* Stereo2 ADC Mixer Control (0x26) */ |
| 326 | #define RT5645_STO2_ADC_SRC_MASK (0x1 << 15) | 328 | #define RT5645_STO2_ADC_SRC_MASK (0x1 << 15) |
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index bfda25ef0dd4..f540f82b1f27 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c | |||
| @@ -1376,8 +1376,8 @@ static int sgtl5000_probe(struct snd_soc_codec *codec) | |||
| 1376 | sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT); | 1376 | sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT); |
| 1377 | 1377 | ||
| 1378 | snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL, | 1378 | snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL, |
| 1379 | SGTL5000_BIAS_R_MASK, | 1379 | SGTL5000_BIAS_VOLT_MASK, |
| 1380 | sgtl5000->micbias_voltage << SGTL5000_BIAS_R_SHIFT); | 1380 | sgtl5000->micbias_voltage << SGTL5000_BIAS_VOLT_SHIFT); |
| 1381 | /* | 1381 | /* |
| 1382 | * disable DAP | 1382 | * disable DAP |
| 1383 | * TODO: | 1383 | * TODO: |
| @@ -1549,7 +1549,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client, | |||
| 1549 | else { | 1549 | else { |
| 1550 | sgtl5000->micbias_voltage = 0; | 1550 | sgtl5000->micbias_voltage = 0; |
| 1551 | dev_err(&client->dev, | 1551 | dev_err(&client->dev, |
| 1552 | "Unsuitable MicBias resistor\n"); | 1552 | "Unsuitable MicBias voltage\n"); |
| 1553 | } | 1553 | } |
| 1554 | } else { | 1554 | } else { |
| 1555 | sgtl5000->micbias_voltage = 0; | 1555 | sgtl5000->micbias_voltage = 0; |
diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c index e3a0bca28bcf..cc1d3981fa4b 100644 --- a/sound/soc/codecs/tas2552.c +++ b/sound/soc/codecs/tas2552.c | |||
| @@ -549,7 +549,7 @@ static struct snd_soc_dai_driver tas2552_dai[] = { | |||
| 549 | /* | 549 | /* |
| 550 | * DAC digital volumes. From -7 to 24 dB in 1 dB steps | 550 | * DAC digital volumes. From -7 to 24 dB in 1 dB steps |
| 551 | */ | 551 | */ |
| 552 | static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 0); | 552 | static DECLARE_TLV_DB_SCALE(dac_tlv, -700, 100, 0); |
| 553 | 553 | ||
| 554 | static const char * const tas2552_din_source_select[] = { | 554 | static const char * const tas2552_din_source_select[] = { |
| 555 | "Muted", | 555 | "Muted", |
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index 1a82b19b2644..8739126a1f6f 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
| @@ -1509,14 +1509,17 @@ static int aic3x_init(struct snd_soc_codec *codec) | |||
| 1509 | snd_soc_write(codec, PGAL_2_LLOPM_VOL, DEFAULT_VOL); | 1509 | snd_soc_write(codec, PGAL_2_LLOPM_VOL, DEFAULT_VOL); |
| 1510 | snd_soc_write(codec, PGAR_2_RLOPM_VOL, DEFAULT_VOL); | 1510 | snd_soc_write(codec, PGAR_2_RLOPM_VOL, DEFAULT_VOL); |
| 1511 | 1511 | ||
| 1512 | /* Line2 to HP Bypass default volume, disconnect from Output Mixer */ | 1512 | /* On tlv320aic3104, these registers are reserved and must not be written */ |
| 1513 | snd_soc_write(codec, LINE2L_2_HPLOUT_VOL, DEFAULT_VOL); | 1513 | if (aic3x->model != AIC3X_MODEL_3104) { |
| 1514 | snd_soc_write(codec, LINE2R_2_HPROUT_VOL, DEFAULT_VOL); | 1514 | /* Line2 to HP Bypass default volume, disconnect from Output Mixer */ |
| 1515 | snd_soc_write(codec, LINE2L_2_HPLCOM_VOL, DEFAULT_VOL); | 1515 | snd_soc_write(codec, LINE2L_2_HPLOUT_VOL, DEFAULT_VOL); |
| 1516 | snd_soc_write(codec, LINE2R_2_HPRCOM_VOL, DEFAULT_VOL); | 1516 | snd_soc_write(codec, LINE2R_2_HPROUT_VOL, DEFAULT_VOL); |
| 1517 | /* Line2 Line Out default volume, disconnect from Output Mixer */ | 1517 | snd_soc_write(codec, LINE2L_2_HPLCOM_VOL, DEFAULT_VOL); |
| 1518 | snd_soc_write(codec, LINE2L_2_LLOPM_VOL, DEFAULT_VOL); | 1518 | snd_soc_write(codec, LINE2R_2_HPRCOM_VOL, DEFAULT_VOL); |
| 1519 | snd_soc_write(codec, LINE2R_2_RLOPM_VOL, DEFAULT_VOL); | 1519 | /* Line2 Line Out default volume, disconnect from Output Mixer */ |
| 1520 | snd_soc_write(codec, LINE2L_2_LLOPM_VOL, DEFAULT_VOL); | ||
| 1521 | snd_soc_write(codec, LINE2R_2_RLOPM_VOL, DEFAULT_VOL); | ||
| 1522 | } | ||
| 1520 | 1523 | ||
| 1521 | switch (aic3x->model) { | 1524 | switch (aic3x->model) { |
| 1522 | case AIC3X_MODEL_3X: | 1525 | case AIC3X_MODEL_3X: |
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index 293e47a6ff59..2fbc6ef8cbdb 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c | |||
| @@ -3760,7 +3760,7 @@ static int wm8962_i2c_probe(struct i2c_client *i2c, | |||
| 3760 | ret = snd_soc_register_codec(&i2c->dev, | 3760 | ret = snd_soc_register_codec(&i2c->dev, |
| 3761 | &soc_codec_dev_wm8962, &wm8962_dai, 1); | 3761 | &soc_codec_dev_wm8962, &wm8962_dai, 1); |
| 3762 | if (ret < 0) | 3762 | if (ret < 0) |
| 3763 | goto err_enable; | 3763 | goto err_pm_runtime; |
| 3764 | 3764 | ||
| 3765 | regcache_cache_only(wm8962->regmap, true); | 3765 | regcache_cache_only(wm8962->regmap, true); |
| 3766 | 3766 | ||
| @@ -3769,6 +3769,8 @@ static int wm8962_i2c_probe(struct i2c_client *i2c, | |||
| 3769 | 3769 | ||
| 3770 | return 0; | 3770 | return 0; |
| 3771 | 3771 | ||
| 3772 | err_pm_runtime: | ||
| 3773 | pm_runtime_disable(&i2c->dev); | ||
| 3772 | err_enable: | 3774 | err_enable: |
| 3773 | regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies); | 3775 | regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies); |
| 3774 | err: | 3776 | err: |
| @@ -3778,6 +3780,7 @@ err: | |||
| 3778 | static int wm8962_i2c_remove(struct i2c_client *client) | 3780 | static int wm8962_i2c_remove(struct i2c_client *client) |
| 3779 | { | 3781 | { |
| 3780 | snd_soc_unregister_codec(&client->dev); | 3782 | snd_soc_unregister_codec(&client->dev); |
| 3783 | pm_runtime_disable(&client->dev); | ||
| 3781 | return 0; | 3784 | return 0; |
| 3782 | } | 3785 | } |
| 3783 | 3786 | ||
diff --git a/sound/soc/dwc/designware_i2s.c b/sound/soc/dwc/designware_i2s.c index a3e97b46b64e..ba34252b7bba 100644 --- a/sound/soc/dwc/designware_i2s.c +++ b/sound/soc/dwc/designware_i2s.c | |||
| @@ -131,23 +131,32 @@ static inline void i2s_clear_irqs(struct dw_i2s_dev *dev, u32 stream) | |||
| 131 | 131 | ||
| 132 | if (stream == SNDRV_PCM_STREAM_PLAYBACK) { | 132 | if (stream == SNDRV_PCM_STREAM_PLAYBACK) { |
| 133 | for (i = 0; i < 4; i++) | 133 | for (i = 0; i < 4; i++) |
| 134 | i2s_write_reg(dev->i2s_base, TOR(i), 0); | 134 | i2s_read_reg(dev->i2s_base, TOR(i)); |
| 135 | } else { | 135 | } else { |
| 136 | for (i = 0; i < 4; i++) | 136 | for (i = 0; i < 4; i++) |
| 137 | i2s_write_reg(dev->i2s_base, ROR(i), 0); | 137 | i2s_read_reg(dev->i2s_base, ROR(i)); |
| 138 | } | 138 | } |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | static void i2s_start(struct dw_i2s_dev *dev, | 141 | static void i2s_start(struct dw_i2s_dev *dev, |
| 142 | struct snd_pcm_substream *substream) | 142 | struct snd_pcm_substream *substream) |
| 143 | { | 143 | { |
| 144 | 144 | u32 i, irq; | |
| 145 | i2s_write_reg(dev->i2s_base, IER, 1); | 145 | i2s_write_reg(dev->i2s_base, IER, 1); |
| 146 | 146 | ||
| 147 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | 147 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
| 148 | for (i = 0; i < 4; i++) { | ||
| 149 | irq = i2s_read_reg(dev->i2s_base, IMR(i)); | ||
| 150 | i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x30); | ||
| 151 | } | ||
| 148 | i2s_write_reg(dev->i2s_base, ITER, 1); | 152 | i2s_write_reg(dev->i2s_base, ITER, 1); |
| 149 | else | 153 | } else { |
| 154 | for (i = 0; i < 4; i++) { | ||
| 155 | irq = i2s_read_reg(dev->i2s_base, IMR(i)); | ||
| 156 | i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x03); | ||
| 157 | } | ||
| 150 | i2s_write_reg(dev->i2s_base, IRER, 1); | 158 | i2s_write_reg(dev->i2s_base, IRER, 1); |
| 159 | } | ||
| 151 | 160 | ||
| 152 | i2s_write_reg(dev->i2s_base, CER, 1); | 161 | i2s_write_reg(dev->i2s_base, CER, 1); |
| 153 | } | 162 | } |
diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c index 48b2d24dd1f0..b95132e2f9dc 100644 --- a/sound/soc/fsl/imx-ssi.c +++ b/sound/soc/fsl/imx-ssi.c | |||
| @@ -95,7 +95,8 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | |||
| 95 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 95 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
| 96 | case SND_SOC_DAIFMT_I2S: | 96 | case SND_SOC_DAIFMT_I2S: |
| 97 | /* data on rising edge of bclk, frame low 1clk before data */ | 97 | /* data on rising edge of bclk, frame low 1clk before data */ |
| 98 | strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0; | 98 | strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSI | |
| 99 | SSI_STCR_TEFS; | ||
| 99 | scr |= SSI_SCR_NET; | 100 | scr |= SSI_SCR_NET; |
| 100 | if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) { | 101 | if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) { |
| 101 | scr &= ~SSI_I2S_MODE_MASK; | 102 | scr &= ~SSI_I2S_MODE_MASK; |
| @@ -104,33 +105,31 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) | |||
| 104 | break; | 105 | break; |
| 105 | case SND_SOC_DAIFMT_LEFT_J: | 106 | case SND_SOC_DAIFMT_LEFT_J: |
| 106 | /* data on rising edge of bclk, frame high with data */ | 107 | /* data on rising edge of bclk, frame high with data */ |
| 107 | strcr |= SSI_STCR_TXBIT0; | 108 | strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP; |
| 108 | break; | 109 | break; |
| 109 | case SND_SOC_DAIFMT_DSP_B: | 110 | case SND_SOC_DAIFMT_DSP_B: |
| 110 | /* data on rising edge of bclk, frame high with data */ | 111 | /* data on rising edge of bclk, frame high with data */ |
| 111 | strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0; | 112 | strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL; |
| 112 | break; | 113 | break; |
| 113 | case SND_SOC_DAIFMT_DSP_A: | 114 | case SND_SOC_DAIFMT_DSP_A: |
| 114 | /* data on rising edge of bclk, frame high 1clk before data */ | 115 | /* data on rising edge of bclk, frame high 1clk before data */ |
| 115 | strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0 | SSI_STCR_TEFS; | 116 | strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL | |
| 117 | SSI_STCR_TEFS; | ||
| 116 | break; | 118 | break; |
| 117 | } | 119 | } |
| 118 | 120 | ||
| 119 | /* DAI clock inversion */ | 121 | /* DAI clock inversion */ |
| 120 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | 122 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
| 121 | case SND_SOC_DAIFMT_IB_IF: | 123 | case SND_SOC_DAIFMT_IB_IF: |
| 122 | strcr |= SSI_STCR_TFSI; | 124 | strcr ^= SSI_STCR_TSCKP | SSI_STCR_TFSI; |
| 123 | strcr &= ~SSI_STCR_TSCKP; | ||
| 124 | break; | 125 | break; |
| 125 | case SND_SOC_DAIFMT_IB_NF: | 126 | case SND_SOC_DAIFMT_IB_NF: |
| 126 | strcr &= ~(SSI_STCR_TSCKP | SSI_STCR_TFSI); | 127 | strcr ^= SSI_STCR_TSCKP; |
| 127 | break; | 128 | break; |
| 128 | case SND_SOC_DAIFMT_NB_IF: | 129 | case SND_SOC_DAIFMT_NB_IF: |
| 129 | strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP; | 130 | strcr ^= SSI_STCR_TFSI; |
| 130 | break; | 131 | break; |
| 131 | case SND_SOC_DAIFMT_NB_NF: | 132 | case SND_SOC_DAIFMT_NB_NF: |
| 132 | strcr &= ~SSI_STCR_TFSI; | ||
| 133 | strcr |= SSI_STCR_TSCKP; | ||
| 134 | break; | 133 | break; |
| 135 | } | 134 | } |
| 136 | 135 | ||
diff --git a/sound/synth/emux/emux_oss.c b/sound/synth/emux/emux_oss.c index 82e350e9501c..ac75816ada7c 100644 --- a/sound/synth/emux/emux_oss.c +++ b/sound/synth/emux/emux_oss.c | |||
| @@ -69,7 +69,8 @@ snd_emux_init_seq_oss(struct snd_emux *emu) | |||
| 69 | struct snd_seq_oss_reg *arg; | 69 | struct snd_seq_oss_reg *arg; |
| 70 | struct snd_seq_device *dev; | 70 | struct snd_seq_device *dev; |
| 71 | 71 | ||
| 72 | if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS, | 72 | /* using device#1 here for avoiding conflicts with OPL3 */ |
| 73 | if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS, | ||
| 73 | sizeof(struct snd_seq_oss_reg), &dev) < 0) | 74 | sizeof(struct snd_seq_oss_reg), &dev) < 0) |
| 74 | return; | 75 | return; |
| 75 | 76 | ||
