aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-22 13:23:46 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-22 13:23:46 -0400
commit74511020dde10252f8b8e648690d99dba721de14 (patch)
tree04fc22bc7dd5d5b8d9294b2e57985b093858bd84 /sound
parent69266866a5790080d7fe80094b28d670ff8aa765 (diff)
parent3cc4e53f86dab635166929bfa47cc68d59b28c26 (diff)
Merge branch 'for-2.6.34' into for-2.6.35
Diffstat (limited to 'sound')
-rw-r--r--sound/arm/pxa2xx-ac97-lib.c68
-rw-r--r--sound/arm/pxa2xx-pcm-lib.c1
-rw-r--r--sound/isa/opti9xx/opti92x-ad1848.c3
-rw-r--r--sound/oss/sequencer.c2
-rw-r--r--sound/pci/hda/hda_codec.c4
-rw-r--r--sound/pci/hda/hda_intel.c10
-rw-r--r--sound/pci/hda/patch_realtek.c14
-rw-r--r--sound/pci/rme9652/hdspm.c2
-rw-r--r--sound/soc/codecs/wm8990.c2
-rw-r--r--sound/soc/imx/Kconfig2
-rw-r--r--sound/soc/pxa/pxa-ssp.c93
-rw-r--r--sound/soc/s3c24xx/s3c64xx-i2s.c4
12 files changed, 100 insertions, 105 deletions
diff --git a/sound/arm/pxa2xx-ac97-lib.c b/sound/arm/pxa2xx-ac97-lib.c
index 6fdca97186e7..88eec3847df2 100644
--- a/sound/arm/pxa2xx-ac97-lib.c
+++ b/sound/arm/pxa2xx-ac97-lib.c
@@ -22,7 +22,6 @@
22 22
23#include <asm/irq.h> 23#include <asm/irq.h>
24#include <mach/regs-ac97.h> 24#include <mach/regs-ac97.h>
25#include <mach/pxa2xx-gpio.h>
26#include <mach/audio.h> 25#include <mach/audio.h>
27 26
28static DEFINE_MUTEX(car_mutex); 27static DEFINE_MUTEX(car_mutex);
@@ -32,6 +31,8 @@ static struct clk *ac97_clk;
32static struct clk *ac97conf_clk; 31static struct clk *ac97conf_clk;
33static int reset_gpio; 32static int reset_gpio;
34 33
34extern void pxa27x_assert_ac97reset(int reset_gpio, int on);
35
35/* 36/*
36 * Beware PXA27x bugs: 37 * Beware PXA27x bugs:
37 * 38 *
@@ -42,45 +43,6 @@ static int reset_gpio;
42 * 1 jiffy timeout if interrupt never comes). 43 * 1 jiffy timeout if interrupt never comes).
43 */ 44 */
44 45
45enum {
46 RESETGPIO_FORCE_HIGH,
47 RESETGPIO_FORCE_LOW,
48 RESETGPIO_NORMAL_ALTFUNC
49};
50
51/**
52 * set_resetgpio_mode - computes and sets the AC97_RESET gpio mode on PXA
53 * @mode: chosen action
54 *
55 * As the PXA27x CPUs suffer from a AC97 bug, a manual control of the reset line
56 * must be done to insure proper work of AC97 reset line. This function
57 * computes the correct gpio_mode for further use by reset functions, and
58 * applied the change through pxa_gpio_mode.
59 */
60static void set_resetgpio_mode(int resetgpio_action)
61{
62 int mode = 0;
63
64 if (reset_gpio)
65 switch (resetgpio_action) {
66 case RESETGPIO_NORMAL_ALTFUNC:
67 if (reset_gpio == 113)
68 mode = 113 | GPIO_ALT_FN_2_OUT;
69 if (reset_gpio == 95)
70 mode = 95 | GPIO_ALT_FN_1_OUT;
71 break;
72 case RESETGPIO_FORCE_LOW:
73 mode = reset_gpio | GPIO_OUT | GPIO_DFLT_LOW;
74 break;
75 case RESETGPIO_FORCE_HIGH:
76 mode = reset_gpio | GPIO_OUT | GPIO_DFLT_HIGH;
77 break;
78 };
79
80 if (mode)
81 pxa_gpio_mode(mode);
82}
83
84unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg) 46unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
85{ 47{
86 unsigned short val = -1; 48 unsigned short val = -1;
@@ -174,12 +136,11 @@ static inline void pxa_ac97_warm_pxa27x(void)
174{ 136{
175 gsr_bits = 0; 137 gsr_bits = 0;
176 138
177 /* warm reset broken on Bulverde, 139 /* warm reset broken on Bulverde, so manually keep AC97 reset high */
178 so manually keep AC97 reset high */ 140 pxa27x_assert_ac97reset(reset_gpio, 1);
179 set_resetgpio_mode(RESETGPIO_FORCE_HIGH);
180 udelay(10); 141 udelay(10);
181 GCR |= GCR_WARM_RST; 142 GCR |= GCR_WARM_RST;
182 set_resetgpio_mode(RESETGPIO_NORMAL_ALTFUNC); 143 pxa27x_assert_ac97reset(reset_gpio, 0);
183 udelay(500); 144 udelay(500);
184} 145}
185 146
@@ -345,16 +306,6 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_suspend);
345 306
346int pxa2xx_ac97_hw_resume(void) 307int pxa2xx_ac97_hw_resume(void)
347{ 308{
348 if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
349 pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
350 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
351 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
352 pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
353 }
354 if (cpu_is_pxa27x()) {
355 /* Use GPIO 113 or 95 as AC97 Reset on Bulverde */
356 set_resetgpio_mode(RESETGPIO_NORMAL_ALTFUNC);
357 }
358 clk_enable(ac97_clk); 309 clk_enable(ac97_clk);
359 return 0; 310 return 0;
360} 311}
@@ -386,16 +337,9 @@ int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev)
386 reset_gpio = 113; 337 reset_gpio = 113;
387 } 338 }
388 339
389 if (cpu_is_pxa25x() || cpu_is_pxa27x()) {
390 pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
391 pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
392 pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
393 pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
394 }
395
396 if (cpu_is_pxa27x()) { 340 if (cpu_is_pxa27x()) {
397 /* Use GPIO 113 as AC97 Reset on Bulverde */ 341 /* Use GPIO 113 as AC97 Reset on Bulverde */
398 set_resetgpio_mode(RESETGPIO_NORMAL_ALTFUNC); 342 pxa27x_assert_ac97reset(reset_gpio, 0);
399 ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK"); 343 ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK");
400 if (IS_ERR(ac97conf_clk)) { 344 if (IS_ERR(ac97conf_clk)) {
401 ret = PTR_ERR(ac97conf_clk); 345 ret = PTR_ERR(ac97conf_clk);
diff --git a/sound/arm/pxa2xx-pcm-lib.c b/sound/arm/pxa2xx-pcm-lib.c
index 743ac6a29065..fd51fa8b06a1 100644
--- a/sound/arm/pxa2xx-pcm-lib.c
+++ b/sound/arm/pxa2xx-pcm-lib.c
@@ -205,6 +205,7 @@ int __pxa2xx_pcm_open(struct snd_pcm_substream *substream)
205 if (!rtd->dma_desc_array) 205 if (!rtd->dma_desc_array)
206 goto err1; 206 goto err1;
207 207
208 rtd->dma_ch = -1;
208 runtime->private_data = rtd; 209 runtime->private_data = rtd;
209 return 0; 210 return 0;
210 211
diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
index becd90d7536d..4d2d0405bdc7 100644
--- a/sound/isa/opti9xx/opti92x-ad1848.c
+++ b/sound/isa/opti9xx/opti92x-ad1848.c
@@ -217,8 +217,9 @@ static int __devinit snd_opti9xx_init(struct snd_opti9xx *chip,
217 if (isapnp && chip->mc_base) 217 if (isapnp && chip->mc_base)
218 /* PnP resource gives the least 10 bits */ 218 /* PnP resource gives the least 10 bits */
219 chip->mc_base |= 0xc00; 219 chip->mc_base |= 0xc00;
220 else
220#endif /* CONFIG_PNP */ 221#endif /* CONFIG_PNP */
221 else { 222 {
222 chip->mc_base = 0xf8c; 223 chip->mc_base = 0xf8c;
223 chip->mc_base_size = opti9xx_mc_size[hardware]; 224 chip->mc_base_size = opti9xx_mc_size[hardware];
224 } 225 }
diff --git a/sound/oss/sequencer.c b/sound/oss/sequencer.c
index c79874696bec..e85789e53816 100644
--- a/sound/oss/sequencer.c
+++ b/sound/oss/sequencer.c
@@ -1631,8 +1631,6 @@ unsigned long compute_finetune(unsigned long base_freq, int bend, int range,
1631 } 1631 }
1632 1632
1633 semitones = bend / 100; 1633 semitones = bend / 100;
1634 if (semitones > 99)
1635 semitones = 99;
1636 cents = bend % 100; 1634 cents = bend % 100;
1637 1635
1638 amount = (int) (semitone_tuning[semitones] * multiplier * cent_tuning[cents]) / 10000; 1636 amount = (int) (semitone_tuning[semitones] * multiplier * cent_tuning[cents]) / 10000;
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 5bd7cf45f3a5..0e76ac2b2ace 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1806,6 +1806,8 @@ int snd_hda_add_nid(struct hda_codec *codec, struct snd_kcontrol *kctl,
1806 item->nid = nid; 1806 item->nid = nid;
1807 return 0; 1807 return 0;
1808 } 1808 }
1809 printk(KERN_ERR "hda-codec: no NID for mapping control %s:%d:%d\n",
1810 kctl->id.name, kctl->id.index, index);
1809 return -EINVAL; 1811 return -EINVAL;
1810} 1812}
1811EXPORT_SYMBOL_HDA(snd_hda_add_nid); 1813EXPORT_SYMBOL_HDA(snd_hda_add_nid);
@@ -2884,7 +2886,7 @@ int /*__devinit*/ snd_hda_build_controls(struct hda_bus *bus)
2884 list_for_each_entry(codec, &bus->codec_list, list) { 2886 list_for_each_entry(codec, &bus->codec_list, list) {
2885 int err = snd_hda_codec_build_controls(codec); 2887 int err = snd_hda_codec_build_controls(codec);
2886 if (err < 0) { 2888 if (err < 0) {
2887 printk(KERN_ERR "hda_codec: cannot build controls" 2889 printk(KERN_ERR "hda_codec: cannot build controls "
2888 "for #%d (error %d)\n", codec->addr, err); 2890 "for #%d (error %d)\n", codec->addr, err);
2889 err = snd_hda_codec_reset(codec); 2891 err = snd_hda_codec_reset(codec);
2890 if (err < 0) { 2892 if (err < 0) {
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 43b7cfb7cffd..8b2915631cc3 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2271,6 +2271,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
2271 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), 2271 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
2272 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), 2272 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
2273 SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB), 2273 SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB),
2274 SND_PCI_QUIRK(0x8086, 0xd601, "eMachines T5212", POS_FIX_LPIB),
2274 {} 2275 {}
2275}; 2276};
2276 2277
@@ -2358,6 +2359,7 @@ static void __devinit check_probe_mask(struct azx *chip, int dev)
2358static struct snd_pci_quirk msi_black_list[] __devinitdata = { 2359static struct snd_pci_quirk msi_black_list[] __devinitdata = {
2359 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ 2360 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
2360 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */ 2361 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
2362 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
2361 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */ 2363 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
2362 {} 2364 {}
2363}; 2365};
@@ -2377,6 +2379,13 @@ static void __devinit check_msi(struct azx *chip)
2377 "hda_intel: msi for device %04x:%04x set to %d\n", 2379 "hda_intel: msi for device %04x:%04x set to %d\n",
2378 q->subvendor, q->subdevice, q->value); 2380 q->subvendor, q->subdevice, q->value);
2379 chip->msi = q->value; 2381 chip->msi = q->value;
2382 return;
2383 }
2384
2385 /* NVidia chipsets seem to cause troubles with MSI */
2386 if (chip->driver_type == AZX_DRIVER_NVIDIA) {
2387 printk(KERN_INFO "hda_intel: Disable MSI for Nvidia chipset\n");
2388 chip->msi = 0;
2380 } 2389 }
2381} 2390}
2382 2391
@@ -2705,6 +2714,7 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2705 { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, 2714 { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH },
2706 /* PCH */ 2715 /* PCH */
2707 { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH }, 2716 { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH },
2717 { PCI_DEVICE(0x8086, 0x3b57), .driver_data = AZX_DRIVER_ICH },
2708 /* CPT */ 2718 /* CPT */
2709 { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH }, 2719 { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH },
2710 /* SCH */ 2720 /* SCH */
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 5d2fbb87b871..4ec57633af88 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -411,6 +411,8 @@ static int alc_mux_enum_info(struct snd_kcontrol *kcontrol,
411 unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id); 411 unsigned int mux_idx = snd_ctl_get_ioffidx(kcontrol, &uinfo->id);
412 if (mux_idx >= spec->num_mux_defs) 412 if (mux_idx >= spec->num_mux_defs)
413 mux_idx = 0; 413 mux_idx = 0;
414 if (!spec->input_mux[mux_idx].num_items && mux_idx > 0)
415 mux_idx = 0;
414 return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo); 416 return snd_hda_input_mux_info(&spec->input_mux[mux_idx], uinfo);
415} 417}
416 418
@@ -439,6 +441,8 @@ static int alc_mux_enum_put(struct snd_kcontrol *kcontrol,
439 441
440 mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; 442 mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
441 imux = &spec->input_mux[mux_idx]; 443 imux = &spec->input_mux[mux_idx];
444 if (!imux->num_items && mux_idx > 0)
445 imux = &spec->input_mux[0];
442 446
443 type = get_wcaps_type(get_wcaps(codec, nid)); 447 type = get_wcaps_type(get_wcaps(codec, nid));
444 if (type == AC_WID_AUD_MIX) { 448 if (type == AC_WID_AUD_MIX) {
@@ -6473,7 +6477,7 @@ static struct alc_config_preset alc260_presets[] = {
6473 .num_dacs = ARRAY_SIZE(alc260_dac_nids), 6477 .num_dacs = ARRAY_SIZE(alc260_dac_nids),
6474 .dac_nids = alc260_dac_nids, 6478 .dac_nids = alc260_dac_nids,
6475 .num_adc_nids = ARRAY_SIZE(alc260_dual_adc_nids), 6479 .num_adc_nids = ARRAY_SIZE(alc260_dual_adc_nids),
6476 .adc_nids = alc260_adc_nids, 6480 .adc_nids = alc260_dual_adc_nids,
6477 .num_channel_mode = ARRAY_SIZE(alc260_modes), 6481 .num_channel_mode = ARRAY_SIZE(alc260_modes),
6478 .channel_mode = alc260_modes, 6482 .channel_mode = alc260_modes,
6479 .input_mux = &alc260_capture_source, 6483 .input_mux = &alc260_capture_source,
@@ -9191,6 +9195,7 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
9191 SND_PCI_QUIRK(0x1462, 0x4314, "MSI", ALC883_TARGA_DIG), 9195 SND_PCI_QUIRK(0x1462, 0x4314, "MSI", ALC883_TARGA_DIG),
9192 SND_PCI_QUIRK(0x1462, 0x4319, "MSI", ALC883_TARGA_DIG), 9196 SND_PCI_QUIRK(0x1462, 0x4319, "MSI", ALC883_TARGA_DIG),
9193 SND_PCI_QUIRK(0x1462, 0x4324, "MSI", ALC883_TARGA_DIG), 9197 SND_PCI_QUIRK(0x1462, 0x4324, "MSI", ALC883_TARGA_DIG),
9198 SND_PCI_QUIRK(0x1462, 0x4570, "MSI Wind Top AE2220", ALC883_TARGA_DIG),
9194 SND_PCI_QUIRK(0x1462, 0x6510, "MSI GX620", ALC883_TARGA_8ch_DIG), 9199 SND_PCI_QUIRK(0x1462, 0x6510, "MSI GX620", ALC883_TARGA_8ch_DIG),
9195 SND_PCI_QUIRK(0x1462, 0x6668, "MSI", ALC883_6ST_DIG), 9200 SND_PCI_QUIRK(0x1462, 0x6668, "MSI", ALC883_6ST_DIG),
9196 SND_PCI_QUIRK(0x1462, 0x7187, "MSI", ALC883_6ST_DIG), 9201 SND_PCI_QUIRK(0x1462, 0x7187, "MSI", ALC883_6ST_DIG),
@@ -9200,6 +9205,7 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
9200 SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG), 9205 SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG),
9201 SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG), 9206 SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG),
9202 SND_PCI_QUIRK(0x1462, 0x7350, "MSI", ALC883_6ST_DIG), 9207 SND_PCI_QUIRK(0x1462, 0x7350, "MSI", ALC883_6ST_DIG),
9208 SND_PCI_QUIRK(0x1462, 0x7437, "MSI NetOn AP1900", ALC883_TARGA_DIG),
9203 SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG), 9209 SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG),
9204 SND_PCI_QUIRK(0x1462, 0xaa08, "MSI", ALC883_TARGA_2ch_DIG), 9210 SND_PCI_QUIRK(0x1462, 0xaa08, "MSI", ALC883_TARGA_2ch_DIG),
9205 9211
@@ -9231,7 +9237,7 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
9231 SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_INTEL), 9237 SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_INTEL),
9232 SND_PCI_QUIRK(0x8086, 0x0021, "Intel IbexPeak", ALC889A_INTEL), 9238 SND_PCI_QUIRK(0x8086, 0x0021, "Intel IbexPeak", ALC889A_INTEL),
9233 SND_PCI_QUIRK(0x8086, 0x3b56, "Intel IbexPeak", ALC889A_INTEL), 9239 SND_PCI_QUIRK(0x8086, 0x3b56, "Intel IbexPeak", ALC889A_INTEL),
9234 SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch), 9240 SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC882_6ST_DIG),
9235 9241
9236 {} 9242 {}
9237}; 9243};
@@ -10105,6 +10111,8 @@ static void alc882_auto_init_input_src(struct hda_codec *codec)
10105 continue; 10111 continue;
10106 mux_idx = c >= spec->num_mux_defs ? 0 : c; 10112 mux_idx = c >= spec->num_mux_defs ? 0 : c;
10107 imux = &spec->input_mux[mux_idx]; 10113 imux = &spec->input_mux[mux_idx];
10114 if (!imux->num_items && mux_idx > 0)
10115 imux = &spec->input_mux[0];
10108 for (idx = 0; idx < conns; idx++) { 10116 for (idx = 0; idx < conns; idx++) {
10109 /* if the current connection is the selected one, 10117 /* if the current connection is the selected one,
10110 * unmute it as default - otherwise mute it 10118 * unmute it as default - otherwise mute it
@@ -13201,7 +13209,7 @@ static int patch_alc268(struct hda_codec *codec)
13201 13209
13202 if (board_config < 0 || board_config >= ALC268_MODEL_LAST) 13210 if (board_config < 0 || board_config >= ALC268_MODEL_LAST)
13203 board_config = snd_hda_check_board_codec_sid_config(codec, 13211 board_config = snd_hda_check_board_codec_sid_config(codec,
13204 ALC882_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl); 13212 ALC268_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl);
13205 13213
13206 if (board_config < 0 || board_config >= ALC268_MODEL_LAST) { 13214 if (board_config < 0 || board_config >= ALC268_MODEL_LAST) {
13207 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", 13215 printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n",
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index 3d72c1effeef..547b713d7204 100644
--- a/sound/pci/rme9652/hdspm.c
+++ b/sound/pci/rme9652/hdspm.c
@@ -2479,7 +2479,7 @@ static int snd_hdspm_put_qs_wire(struct snd_kcontrol *kcontrol,
2479 on MADICARD 2479 on MADICARD
2480 - playback mixer matrix: [channelout+64] [output] [value] 2480 - playback mixer matrix: [channelout+64] [output] [value]
2481 - input(thru) mixer matrix: [channelin] [output] [value] 2481 - input(thru) mixer matrix: [channelin] [output] [value]
2482 (better do 2 kontrols for seperation ?) 2482 (better do 2 kontrols for separation ?)
2483*/ 2483*/
2484 2484
2485#define HDSPM_MIXER(xname, xindex) \ 2485#define HDSPM_MIXER(xname, xindex) \
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index a54dc77b7f34..056b787b6ee0 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -990,7 +990,7 @@ static int wm8990_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
990 reg = snd_soc_read(codec, WM8990_CLOCKING_2); 990 reg = snd_soc_read(codec, WM8990_CLOCKING_2);
991 snd_soc_write(codec, WM8990_CLOCKING_2, reg | WM8990_SYSCLK_SRC); 991 snd_soc_write(codec, WM8990_CLOCKING_2, reg | WM8990_SYSCLK_SRC);
992 992
993 /* set up N , fractional mode and pre-divisor if neccessary */ 993 /* set up N , fractional mode and pre-divisor if necessary */
994 snd_soc_write(codec, WM8990_PLL1, pll_div.n | WM8990_SDM | 994 snd_soc_write(codec, WM8990_PLL1, pll_div.n | WM8990_SDM |
995 (pll_div.div2?WM8990_PRESCALE:0)); 995 (pll_div.div2?WM8990_PRESCALE:0));
996 snd_soc_write(codec, WM8990_PLL2, (u8)(pll_div.k>>8)); 996 snd_soc_write(codec, WM8990_PLL2, (u8)(pll_div.k>>8));
diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig
index c045da8ff61c..eba9b9d257a1 100644
--- a/sound/soc/imx/Kconfig
+++ b/sound/soc/imx/Kconfig
@@ -1,6 +1,6 @@
1config SND_IMX_SOC 1config SND_IMX_SOC
2 tristate "SoC Audio for Freescale i.MX CPUs" 2 tristate "SoC Audio for Freescale i.MX CPUs"
3 depends on ARCH_MXC && BROKEN 3 depends on ARCH_MXC
4 select SND_PCM 4 select SND_PCM
5 select FIQ 5 select FIQ
6 select SND_SOC_AC97_BUS 6 select SND_SOC_AC97_BUS
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 5d65a00e4bc0..6959c5199160 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -42,11 +42,14 @@
42 * SSP audio private data 42 * SSP audio private data
43 */ 43 */
44struct ssp_priv { 44struct ssp_priv {
45 struct ssp_dev dev; 45 struct ssp_device *ssp;
46 unsigned int sysclk; 46 unsigned int sysclk;
47 int dai_fmt; 47 int dai_fmt;
48#ifdef CONFIG_PM 48#ifdef CONFIG_PM
49 struct ssp_state state; 49 uint32_t cr0;
50 uint32_t cr1;
51 uint32_t to;
52 uint32_t psp;
50#endif 53#endif
51}; 54};
52 55
@@ -61,6 +64,22 @@ static void dump_registers(struct ssp_device *ssp)
61 ssp_read_reg(ssp, SSACD)); 64 ssp_read_reg(ssp, SSACD));
62} 65}
63 66
67static void ssp_enable(struct ssp_device *ssp)
68{
69 uint32_t sscr0;
70
71 sscr0 = __raw_readl(ssp->mmio_base + SSCR0) | SSCR0_SSE;
72 __raw_writel(sscr0, ssp->mmio_base + SSCR0);
73}
74
75static void ssp_disable(struct ssp_device *ssp)
76{
77 uint32_t sscr0;
78
79 sscr0 = __raw_readl(ssp->mmio_base + SSCR0) & ~SSCR0_SSE;
80 __raw_writel(sscr0, ssp->mmio_base + SSCR0);
81}
82
64struct pxa2xx_pcm_dma_data { 83struct pxa2xx_pcm_dma_data {
65 struct pxa2xx_pcm_dma_params params; 84 struct pxa2xx_pcm_dma_params params;
66 char name[20]; 85 char name[20];
@@ -94,13 +113,12 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,
94 struct snd_soc_pcm_runtime *rtd = substream->private_data; 113 struct snd_soc_pcm_runtime *rtd = substream->private_data;
95 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 114 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
96 struct ssp_priv *priv = cpu_dai->private_data; 115 struct ssp_priv *priv = cpu_dai->private_data;
116 struct ssp_device *ssp = priv->ssp;
97 int ret = 0; 117 int ret = 0;
98 118
99 if (!cpu_dai->active) { 119 if (!cpu_dai->active) {
100 priv->dev.port = cpu_dai->id + 1; 120 clk_enable(ssp->clk);
101 priv->dev.irq = NO_IRQ; 121 ssp_disable(ssp);
102 clk_enable(priv->dev.ssp->clk);
103 ssp_disable(&priv->dev);
104 } 122 }
105 123
106 kfree(snd_soc_dai_get_dma_data(cpu_dai, substream)); 124 kfree(snd_soc_dai_get_dma_data(cpu_dai, substream));
@@ -115,10 +133,11 @@ static void pxa_ssp_shutdown(struct snd_pcm_substream *substream,
115 struct snd_soc_pcm_runtime *rtd = substream->private_data; 133 struct snd_soc_pcm_runtime *rtd = substream->private_data;
116 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 134 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
117 struct ssp_priv *priv = cpu_dai->private_data; 135 struct ssp_priv *priv = cpu_dai->private_data;
136 struct ssp_device *ssp = priv->ssp;
118 137
119 if (!cpu_dai->active) { 138 if (!cpu_dai->active) {
120 ssp_disable(&priv->dev); 139 ssp_disable(ssp);
121 clk_disable(priv->dev.ssp->clk); 140 clk_disable(ssp->clk);
122 } 141 }
123 142
124 kfree(snd_soc_dai_get_dma_data(cpu_dai, substream)); 143 kfree(snd_soc_dai_get_dma_data(cpu_dai, substream));
@@ -130,27 +149,39 @@ static void pxa_ssp_shutdown(struct snd_pcm_substream *substream,
130static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai) 149static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai)
131{ 150{
132 struct ssp_priv *priv = cpu_dai->private_data; 151 struct ssp_priv *priv = cpu_dai->private_data;
152 struct ssp_device *ssp = priv->ssp;
133 153
134 if (!cpu_dai->active) 154 if (!cpu_dai->active)
135 clk_enable(priv->dev.ssp->clk); 155 clk_enable(ssp->clk);
136 156
137 ssp_save_state(&priv->dev, &priv->state); 157 priv->cr0 = __raw_readl(ssp->mmio_base + SSCR0);
138 clk_disable(priv->dev.ssp->clk); 158 priv->cr1 = __raw_readl(ssp->mmio_base + SSCR1);
159 priv->to = __raw_readl(ssp->mmio_base + SSTO);
160 priv->psp = __raw_readl(ssp->mmio_base + SSPSP);
139 161
162 ssp_disable(ssp);
163 clk_disable(ssp->clk);
140 return 0; 164 return 0;
141} 165}
142 166
143static int pxa_ssp_resume(struct snd_soc_dai *cpu_dai) 167static int pxa_ssp_resume(struct snd_soc_dai *cpu_dai)
144{ 168{
145 struct ssp_priv *priv = cpu_dai->private_data; 169 struct ssp_priv *priv = cpu_dai->private_data;
170 struct ssp_device *ssp = priv->ssp;
171 uint32_t sssr = SSSR_ROR | SSSR_TUR | SSSR_BCE;
172
173 clk_enable(ssp->clk);
146 174
147 clk_enable(priv->dev.ssp->clk); 175 __raw_writel(sssr, ssp->mmio_base + SSSR);
148 ssp_restore_state(&priv->dev, &priv->state); 176 __raw_writel(priv->cr0 & ~SSCR0_SSE, ssp->mmio_base + SSCR0);
177 __raw_writel(priv->cr1, ssp->mmio_base + SSCR1);
178 __raw_writel(priv->to, ssp->mmio_base + SSTO);
179 __raw_writel(priv->psp, ssp->mmio_base + SSPSP);
149 180
150 if (cpu_dai->active) 181 if (cpu_dai->active)
151 ssp_enable(&priv->dev); 182 ssp_enable(ssp);
152 else 183 else
153 clk_disable(priv->dev.ssp->clk); 184 clk_disable(ssp->clk);
154 185
155 return 0; 186 return 0;
156} 187}
@@ -200,7 +231,7 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
200 int clk_id, unsigned int freq, int dir) 231 int clk_id, unsigned int freq, int dir)
201{ 232{
202 struct ssp_priv *priv = cpu_dai->private_data; 233 struct ssp_priv *priv = cpu_dai->private_data;
203 struct ssp_device *ssp = priv->dev.ssp; 234 struct ssp_device *ssp = priv->ssp;
204 int val; 235 int val;
205 236
206 u32 sscr0 = ssp_read_reg(ssp, SSCR0) & 237 u32 sscr0 = ssp_read_reg(ssp, SSCR0) &
@@ -241,11 +272,11 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
241 /* The SSP clock must be disabled when changing SSP clock mode 272 /* The SSP clock must be disabled when changing SSP clock mode
242 * on PXA2xx. On PXA3xx it must be enabled when doing so. */ 273 * on PXA2xx. On PXA3xx it must be enabled when doing so. */
243 if (!cpu_is_pxa3xx()) 274 if (!cpu_is_pxa3xx())
244 clk_disable(priv->dev.ssp->clk); 275 clk_disable(ssp->clk);
245 val = ssp_read_reg(ssp, SSCR0) | sscr0; 276 val = ssp_read_reg(ssp, SSCR0) | sscr0;
246 ssp_write_reg(ssp, SSCR0, val); 277 ssp_write_reg(ssp, SSCR0, val);
247 if (!cpu_is_pxa3xx()) 278 if (!cpu_is_pxa3xx())
248 clk_enable(priv->dev.ssp->clk); 279 clk_enable(ssp->clk);
249 280
250 return 0; 281 return 0;
251} 282}
@@ -257,7 +288,7 @@ static int pxa_ssp_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
257 int div_id, int div) 288 int div_id, int div)
258{ 289{
259 struct ssp_priv *priv = cpu_dai->private_data; 290 struct ssp_priv *priv = cpu_dai->private_data;
260 struct ssp_device *ssp = priv->dev.ssp; 291 struct ssp_device *ssp = priv->ssp;
261 int val; 292 int val;
262 293
263 switch (div_id) { 294 switch (div_id) {
@@ -308,7 +339,7 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
308 int source, unsigned int freq_in, unsigned int freq_out) 339 int source, unsigned int freq_in, unsigned int freq_out)
309{ 340{
310 struct ssp_priv *priv = cpu_dai->private_data; 341 struct ssp_priv *priv = cpu_dai->private_data;
311 struct ssp_device *ssp = priv->dev.ssp; 342 struct ssp_device *ssp = priv->ssp;
312 u32 ssacd = ssp_read_reg(ssp, SSACD) & ~0x70; 343 u32 ssacd = ssp_read_reg(ssp, SSACD) & ~0x70;
313 344
314#if defined(CONFIG_PXA3xx) 345#if defined(CONFIG_PXA3xx)
@@ -377,7 +408,7 @@ static int pxa_ssp_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
377 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) 408 unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
378{ 409{
379 struct ssp_priv *priv = cpu_dai->private_data; 410 struct ssp_priv *priv = cpu_dai->private_data;
380 struct ssp_device *ssp = priv->dev.ssp; 411 struct ssp_device *ssp = priv->ssp;
381 u32 sscr0; 412 u32 sscr0;
382 413
383 sscr0 = ssp_read_reg(ssp, SSCR0); 414 sscr0 = ssp_read_reg(ssp, SSCR0);
@@ -412,7 +443,7 @@ static int pxa_ssp_set_dai_tristate(struct snd_soc_dai *cpu_dai,
412 int tristate) 443 int tristate)
413{ 444{
414 struct ssp_priv *priv = cpu_dai->private_data; 445 struct ssp_priv *priv = cpu_dai->private_data;
415 struct ssp_device *ssp = priv->dev.ssp; 446 struct ssp_device *ssp = priv->ssp;
416 u32 sscr1; 447 u32 sscr1;
417 448
418 sscr1 = ssp_read_reg(ssp, SSCR1); 449 sscr1 = ssp_read_reg(ssp, SSCR1);
@@ -434,7 +465,7 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
434 unsigned int fmt) 465 unsigned int fmt)
435{ 466{
436 struct ssp_priv *priv = cpu_dai->private_data; 467 struct ssp_priv *priv = cpu_dai->private_data;
437 struct ssp_device *ssp = priv->dev.ssp; 468 struct ssp_device *ssp = priv->ssp;
438 u32 sscr0; 469 u32 sscr0;
439 u32 sscr1; 470 u32 sscr1;
440 u32 sspsp; 471 u32 sspsp;
@@ -529,7 +560,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
529 struct snd_soc_pcm_runtime *rtd = substream->private_data; 560 struct snd_soc_pcm_runtime *rtd = substream->private_data;
530 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 561 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
531 struct ssp_priv *priv = cpu_dai->private_data; 562 struct ssp_priv *priv = cpu_dai->private_data;
532 struct ssp_device *ssp = priv->dev.ssp; 563 struct ssp_device *ssp = priv->ssp;
533 int chn = params_channels(params); 564 int chn = params_channels(params);
534 u32 sscr0; 565 u32 sscr0;
535 u32 sspsp; 566 u32 sspsp;
@@ -643,12 +674,12 @@ static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,
643 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 674 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
644 int ret = 0; 675 int ret = 0;
645 struct ssp_priv *priv = cpu_dai->private_data; 676 struct ssp_priv *priv = cpu_dai->private_data;
646 struct ssp_device *ssp = priv->dev.ssp; 677 struct ssp_device *ssp = priv->ssp;
647 int val; 678 int val;
648 679
649 switch (cmd) { 680 switch (cmd) {
650 case SNDRV_PCM_TRIGGER_RESUME: 681 case SNDRV_PCM_TRIGGER_RESUME:
651 ssp_enable(&priv->dev); 682 ssp_enable(ssp);
652 break; 683 break;
653 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 684 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
654 val = ssp_read_reg(ssp, SSCR1); 685 val = ssp_read_reg(ssp, SSCR1);
@@ -667,7 +698,7 @@ static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,
667 else 698 else
668 val |= SSCR1_RSRE; 699 val |= SSCR1_RSRE;
669 ssp_write_reg(ssp, SSCR1, val); 700 ssp_write_reg(ssp, SSCR1, val);
670 ssp_enable(&priv->dev); 701 ssp_enable(ssp);
671 break; 702 break;
672 case SNDRV_PCM_TRIGGER_STOP: 703 case SNDRV_PCM_TRIGGER_STOP:
673 val = ssp_read_reg(ssp, SSCR1); 704 val = ssp_read_reg(ssp, SSCR1);
@@ -678,7 +709,7 @@ static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,
678 ssp_write_reg(ssp, SSCR1, val); 709 ssp_write_reg(ssp, SSCR1, val);
679 break; 710 break;
680 case SNDRV_PCM_TRIGGER_SUSPEND: 711 case SNDRV_PCM_TRIGGER_SUSPEND:
681 ssp_disable(&priv->dev); 712 ssp_disable(ssp);
682 break; 713 break;
683 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 714 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
684 val = ssp_read_reg(ssp, SSCR1); 715 val = ssp_read_reg(ssp, SSCR1);
@@ -708,8 +739,8 @@ static int pxa_ssp_probe(struct platform_device *pdev,
708 if (!priv) 739 if (!priv)
709 return -ENOMEM; 740 return -ENOMEM;
710 741
711 priv->dev.ssp = ssp_request(dai->id + 1, "SoC audio"); 742 priv->ssp = ssp_request(dai->id + 1, "SoC audio");
712 if (priv->dev.ssp == NULL) { 743 if (priv->ssp == NULL) {
713 ret = -ENODEV; 744 ret = -ENODEV;
714 goto err_priv; 745 goto err_priv;
715 } 746 }
@@ -728,7 +759,7 @@ static void pxa_ssp_remove(struct platform_device *pdev,
728 struct snd_soc_dai *dai) 759 struct snd_soc_dai *dai)
729{ 760{
730 struct ssp_priv *priv = dai->private_data; 761 struct ssp_priv *priv = dai->private_data;
731 ssp_free(priv->dev.ssp); 762 ssp_free(priv->ssp);
732} 763}
733 764
734#define PXA_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ 765#define PXA_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.c b/sound/soc/s3c24xx/s3c64xx-i2s.c
index 65528943579b..ab1fa159d3ae 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.c
@@ -19,8 +19,8 @@
19#include <sound/soc.h> 19#include <sound/soc.h>
20 20
21#include <plat/regs-s3c2412-iis.h> 21#include <plat/regs-s3c2412-iis.h>
22#include <plat/gpio-bank-d.h> 22#include <mach/gpio-bank-d.h>
23#include <plat/gpio-bank-e.h> 23#include <mach/gpio-bank-e.h>
24#include <plat/gpio-cfg.h> 24#include <plat/gpio-cfg.h>
25 25
26#include <mach/map.h> 26#include <mach/map.h>