diff options
-rw-r--r-- | sound/soc/codecs/wm8753.c | 34 | ||||
-rw-r--r-- | sound/soc/s3c24xx/ln2440sbc_alc650.c | 4 | ||||
-rw-r--r-- | sound/soc/s3c24xx/neo1973_wm8753.c | 58 | ||||
-rw-r--r-- | sound/soc/s3c24xx/s3c2443-ac97.c | 9 | ||||
-rw-r--r-- | sound/soc/s3c24xx/s3c24xx-pcm.c | 33 |
5 files changed, 85 insertions, 53 deletions
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index 76a5c7b05dfb..fb41826c4c4c 100644 --- a/sound/soc/codecs/wm8753.c +++ b/sound/soc/codecs/wm8753.c | |||
@@ -150,7 +150,7 @@ static int wm8753_write(struct snd_soc_codec *codec, unsigned int reg, | |||
150 | data[0] = (reg << 1) | ((value >> 8) & 0x0001); | 150 | data[0] = (reg << 1) | ((value >> 8) & 0x0001); |
151 | data[1] = value & 0x00ff; | 151 | data[1] = value & 0x00ff; |
152 | 152 | ||
153 | wm8753_write_reg_cache (codec, reg, value); | 153 | wm8753_write_reg_cache(codec, reg, value); |
154 | if (codec->hw_write(codec->control_data, data, 2) == 2) | 154 | if (codec->hw_write(codec->control_data, data, 2) == 2) |
155 | return 0; | 155 | return 0; |
156 | else | 156 | else |
@@ -249,7 +249,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol, | |||
249 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 249 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); |
250 | int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL); | 250 | int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL); |
251 | 251 | ||
252 | if (((mode &0xc) >> 2) == ucontrol->value.integer.value[0]) | 252 | if (((mode & 0xc) >> 2) == ucontrol->value.integer.value[0]) |
253 | return 0; | 253 | return 0; |
254 | 254 | ||
255 | mode &= 0xfff3; | 255 | mode &= 0xfff3; |
@@ -342,7 +342,8 @@ static int wm8753_add_controls(struct snd_soc_codec *codec) | |||
342 | 342 | ||
343 | for (i = 0; i < ARRAY_SIZE(wm8753_snd_controls); i++) { | 343 | for (i = 0; i < ARRAY_SIZE(wm8753_snd_controls); i++) { |
344 | err = snd_ctl_add(codec->card, | 344 | err = snd_ctl_add(codec->card, |
345 | snd_soc_cnew(&wm8753_snd_controls[i],codec, NULL)); | 345 | snd_soc_cnew(&wm8753_snd_controls[i], |
346 | codec, NULL)); | ||
346 | if (err < 0) | 347 | if (err < 0) |
347 | return err; | 348 | return err; |
348 | } | 349 | } |
@@ -722,7 +723,7 @@ static void pll_factors(struct _pll_div *pll_div, unsigned int target, | |||
722 | 723 | ||
723 | if ((Ndiv < 6) || (Ndiv > 12)) | 724 | if ((Ndiv < 6) || (Ndiv > 12)) |
724 | printk(KERN_WARNING | 725 | printk(KERN_WARNING |
725 | "WM8753 N value outwith recommended range! N = %d\n",Ndiv); | 726 | "wm8753: unsupported N = %d\n", Ndiv); |
726 | 727 | ||
727 | pll_div->n = Ndiv; | 728 | pll_div->n = Ndiv; |
728 | Nmod = target % source; | 729 | Nmod = target % source; |
@@ -1300,8 +1301,9 @@ static int wm8753_dapm_event(struct snd_soc_codec *codec, int event) | |||
1300 | } | 1301 | } |
1301 | 1302 | ||
1302 | #define WM8753_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ | 1303 | #define WM8753_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ |
1303 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \ | 1304 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\ |
1304 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) | 1305 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\ |
1306 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) | ||
1305 | 1307 | ||
1306 | #define WM8753_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\ | 1308 | #define WM8753_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\ |
1307 | SNDRV_PCM_FMTBIT_S24_LE) | 1309 | SNDRV_PCM_FMTBIT_S24_LE) |
@@ -1507,9 +1509,9 @@ static int wm8753_suspend(struct platform_device *pdev, pm_message_t state) | |||
1507 | struct snd_soc_codec *codec = socdev->codec; | 1509 | struct snd_soc_codec *codec = socdev->codec; |
1508 | 1510 | ||
1509 | /* we only need to suspend if we are a valid card */ | 1511 | /* we only need to suspend if we are a valid card */ |
1510 | if(!codec->card) | 1512 | if (!codec->card) |
1511 | return 0; | 1513 | return 0; |
1512 | 1514 | ||
1513 | wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold); | 1515 | wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold); |
1514 | return 0; | 1516 | return 0; |
1515 | } | 1517 | } |
@@ -1523,7 +1525,7 @@ static int wm8753_resume(struct platform_device *pdev) | |||
1523 | u16 *cache = codec->reg_cache; | 1525 | u16 *cache = codec->reg_cache; |
1524 | 1526 | ||
1525 | /* we only need to resume if we are a valid card */ | 1527 | /* we only need to resume if we are a valid card */ |
1526 | if(!codec->card) | 1528 | if (!codec->card) |
1527 | return 0; | 1529 | return 0; |
1528 | 1530 | ||
1529 | /* Sync reg_cache with the hardware */ | 1531 | /* Sync reg_cache with the hardware */ |
@@ -1613,9 +1615,10 @@ static int wm8753_init(struct snd_soc_device *socdev) | |||
1613 | wm8753_add_widgets(codec); | 1615 | wm8753_add_widgets(codec); |
1614 | ret = snd_soc_register_card(socdev); | 1616 | ret = snd_soc_register_card(socdev); |
1615 | if (ret < 0) { | 1617 | if (ret < 0) { |
1616 | printk(KERN_ERR "wm8753: failed to register card\n"); | 1618 | printk(KERN_ERR "wm8753: failed to register card\n"); |
1617 | goto card_err; | 1619 | goto card_err; |
1618 | } | 1620 | } |
1621 | |||
1619 | return ret; | 1622 | return ret; |
1620 | 1623 | ||
1621 | card_err: | 1624 | card_err: |
@@ -1630,7 +1633,7 @@ pcm_err: | |||
1630 | around */ | 1633 | around */ |
1631 | static struct snd_soc_device *wm8753_socdev; | 1634 | static struct snd_soc_device *wm8753_socdev; |
1632 | 1635 | ||
1633 | #if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) | 1636 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
1634 | 1637 | ||
1635 | /* | 1638 | /* |
1636 | * WM8753 2 wire address is determined by GPIO5 | 1639 | * WM8753 2 wire address is determined by GPIO5 |
@@ -1661,7 +1664,7 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind) | |||
1661 | client_template.addr = addr; | 1664 | client_template.addr = addr; |
1662 | 1665 | ||
1663 | i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); | 1666 | i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); |
1664 | if (i2c == NULL){ | 1667 | if (!i2c) { |
1665 | kfree(codec); | 1668 | kfree(codec); |
1666 | return -ENOMEM; | 1669 | return -ENOMEM; |
1667 | } | 1670 | } |
@@ -1749,7 +1752,7 @@ static int wm8753_probe(struct platform_device *pdev) | |||
1749 | wm8753_socdev = socdev; | 1752 | wm8753_socdev = socdev; |
1750 | INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work); | 1753 | INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work); |
1751 | 1754 | ||
1752 | #if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) | 1755 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
1753 | if (setup->i2c_address) { | 1756 | if (setup->i2c_address) { |
1754 | normal_i2c[0] = setup->i2c_address; | 1757 | normal_i2c[0] = setup->i2c_address; |
1755 | codec->hw_write = (hw_write_t)i2c_master_send; | 1758 | codec->hw_write = (hw_write_t)i2c_master_send; |
@@ -1793,7 +1796,7 @@ static int wm8753_remove(struct platform_device *pdev) | |||
1793 | run_delayed_work(&codec->delayed_work); | 1796 | run_delayed_work(&codec->delayed_work); |
1794 | snd_soc_free_pcms(socdev); | 1797 | snd_soc_free_pcms(socdev); |
1795 | snd_soc_dapm_free(socdev); | 1798 | snd_soc_dapm_free(socdev); |
1796 | #if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) | 1799 | #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) |
1797 | i2c_del_driver(&wm8753_i2c_driver); | 1800 | i2c_del_driver(&wm8753_i2c_driver); |
1798 | #endif | 1801 | #endif |
1799 | kfree(codec->private_data); | 1802 | kfree(codec->private_data); |
@@ -1808,7 +1811,6 @@ struct snd_soc_codec_device soc_codec_dev_wm8753 = { | |||
1808 | .suspend = wm8753_suspend, | 1811 | .suspend = wm8753_suspend, |
1809 | .resume = wm8753_resume, | 1812 | .resume = wm8753_resume, |
1810 | }; | 1813 | }; |
1811 | |||
1812 | EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753); | 1814 | EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753); |
1813 | 1815 | ||
1814 | MODULE_DESCRIPTION("ASoC WM8753 driver"); | 1816 | MODULE_DESCRIPTION("ASoC WM8753 driver"); |
diff --git a/sound/soc/s3c24xx/ln2440sbc_alc650.c b/sound/soc/s3c24xx/ln2440sbc_alc650.c index 9ed8f2e8da10..4eab2c19c454 100644 --- a/sound/soc/s3c24xx/ln2440sbc_alc650.c +++ b/sound/soc/s3c24xx/ln2440sbc_alc650.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * SoC audio for ln2440sbc | 2 | * SoC audio for ln2440sbc |
3 | * | 3 | * |
4 | * Copyright 2007 KonekTel, a.s. | 4 | * Copyright 2007 KonekTel, a.s. |
5 | * Author: Ivan Kuten | 5 | * Author: Ivan Kuten |
6 | * ivan.kuten@promwad.com | 6 | * ivan.kuten@promwad.com |
7 | * | 7 | * |
8 | * Heavily based on smdk2443_wm9710.c | 8 | * Heavily based on smdk2443_wm9710.c |
9 | * Copyright 2007 Wolfson Microelectronics PLC. | 9 | * Copyright 2007 Wolfson Microelectronics PLC. |
10 | * Author: Graeme Gregory | 10 | * Author: Graeme Gregory |
diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c index 962cc20b1af5..0e9d1c5f2484 100644 --- a/sound/soc/s3c24xx/neo1973_wm8753.c +++ b/sound/soc/s3c24xx/neo1973_wm8753.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <asm/arch/regs-gpio.h> | 33 | #include <asm/arch/regs-gpio.h> |
34 | #include <asm/hardware.h> | 34 | #include <asm/hardware.h> |
35 | #include <asm/arch/audio.h> | 35 | #include <asm/arch/audio.h> |
36 | #include <asm/io.h> | 36 | #include <linux/io.h> |
37 | #include <asm/arch/spi-gpio.h> | 37 | #include <asm/arch/spi-gpio.h> |
38 | 38 | ||
39 | #include <asm/plat-s3c24xx/regs-iis.h> | 39 | #include <asm/plat-s3c24xx/regs-iis.h> |
@@ -122,7 +122,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream, | |||
122 | 122 | ||
123 | /* set MCLK division for sample rate */ | 123 | /* set MCLK division for sample rate */ |
124 | ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK, | 124 | ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK, |
125 | S3C2410_IISMOD_32FS ); | 125 | S3C2410_IISMOD_32FS); |
126 | if (ret < 0) | 126 | if (ret < 0) |
127 | return ret; | 127 | return ret; |
128 | 128 | ||
@@ -133,7 +133,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream, | |||
133 | 133 | ||
134 | /* set prescaler division for sample rate */ | 134 | /* set prescaler division for sample rate */ |
135 | ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER, | 135 | ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER, |
136 | S3C24XX_PRESCALE(4,4)); | 136 | S3C24XX_PRESCALE(4, 4)); |
137 | if (ret < 0) | 137 | if (ret < 0) |
138 | return ret; | 138 | return ret; |
139 | 139 | ||
@@ -222,7 +222,7 @@ static struct snd_soc_ops neo1973_voice_ops = { | |||
222 | .hw_free = neo1973_voice_hw_free, | 222 | .hw_free = neo1973_voice_hw_free, |
223 | }; | 223 | }; |
224 | 224 | ||
225 | static int neo1973_scenario = 0; | 225 | static int neo1973_scenario; |
226 | 226 | ||
227 | static int neo1973_get_scenario(struct snd_kcontrol *kcontrol, | 227 | static int neo1973_get_scenario(struct snd_kcontrol *kcontrol, |
228 | struct snd_ctl_elem_value *ucontrol) | 228 | struct snd_ctl_elem_value *ucontrol) |
@@ -233,7 +233,7 @@ static int neo1973_get_scenario(struct snd_kcontrol *kcontrol, | |||
233 | 233 | ||
234 | static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario) | 234 | static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario) |
235 | { | 235 | { |
236 | switch(neo1973_scenario) { | 236 | switch (neo1973_scenario) { |
237 | case NEO_AUDIO_OFF: | 237 | case NEO_AUDIO_OFF: |
238 | snd_soc_dapm_set_endpoint(codec, "Audio Out", 0); | 238 | snd_soc_dapm_set_endpoint(codec, "Audio Out", 0); |
239 | snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0); | 239 | snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0); |
@@ -334,7 +334,7 @@ static void lm4857_write_regs(void) | |||
334 | static int lm4857_get_reg(struct snd_kcontrol *kcontrol, | 334 | static int lm4857_get_reg(struct snd_kcontrol *kcontrol, |
335 | struct snd_ctl_elem_value *ucontrol) | 335 | struct snd_ctl_elem_value *ucontrol) |
336 | { | 336 | { |
337 | int reg=kcontrol->private_value & 0xFF; | 337 | int reg = kcontrol->private_value & 0xFF; |
338 | int shift = (kcontrol->private_value >> 8) & 0x0F; | 338 | int shift = (kcontrol->private_value >> 8) & 0x0F; |
339 | int mask = (kcontrol->private_value >> 16) & 0xFF; | 339 | int mask = (kcontrol->private_value >> 16) & 0xFF; |
340 | 340 | ||
@@ -349,11 +349,11 @@ static int lm4857_set_reg(struct snd_kcontrol *kcontrol, | |||
349 | int shift = (kcontrol->private_value >> 8) & 0x0F; | 349 | int shift = (kcontrol->private_value >> 8) & 0x0F; |
350 | int mask = (kcontrol->private_value >> 16) & 0xFF; | 350 | int mask = (kcontrol->private_value >> 16) & 0xFF; |
351 | 351 | ||
352 | if (((lm4857_regs[reg] >> shift ) & mask) == | 352 | if (((lm4857_regs[reg] >> shift) & mask) == |
353 | ucontrol->value.integer.value[0]) | 353 | ucontrol->value.integer.value[0]) |
354 | return 0; | 354 | return 0; |
355 | 355 | ||
356 | lm4857_regs[reg] &= ~ (mask << shift); | 356 | lm4857_regs[reg] &= ~(mask << shift); |
357 | lm4857_regs[reg] |= ucontrol->value.integer.value[0] << shift; | 357 | lm4857_regs[reg] |= ucontrol->value.integer.value[0] << shift; |
358 | lm4857_write_regs(); | 358 | lm4857_write_regs(); |
359 | return 1; | 359 | return 1; |
@@ -398,7 +398,7 @@ static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = { | |||
398 | 398 | ||
399 | 399 | ||
400 | /* example machine audio_mapnections */ | 400 | /* example machine audio_mapnections */ |
401 | static const char* audio_map[][3] = { | 401 | static const char *audio_map[][3] = { |
402 | 402 | ||
403 | /* Connections to the lm4857 amp */ | 403 | /* Connections to the lm4857 amp */ |
404 | {"Audio Out", NULL, "LOUT1"}, | 404 | {"Audio Out", NULL, "LOUT1"}, |
@@ -450,7 +450,7 @@ static const char *neo_scenarios[] = { | |||
450 | }; | 450 | }; |
451 | 451 | ||
452 | static const struct soc_enum neo_scenario_enum[] = { | 452 | static const struct soc_enum neo_scenario_enum[] = { |
453 | SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(neo_scenarios),neo_scenarios), | 453 | SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(neo_scenarios), neo_scenarios), |
454 | }; | 454 | }; |
455 | 455 | ||
456 | static const struct snd_kcontrol_new wm8753_neo1973_controls[] = { | 456 | static const struct snd_kcontrol_new wm8753_neo1973_controls[] = { |
@@ -521,8 +521,8 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec) | |||
521 | /* | 521 | /* |
522 | * BT Codec DAI | 522 | * BT Codec DAI |
523 | */ | 523 | */ |
524 | static struct snd_soc_cpu_dai bt_dai = | 524 | static struct snd_soc_cpu_dai bt_dai = { |
525 | { .name = "Bluetooth", | 525 | .name = "Bluetooth", |
526 | .id = 0, | 526 | .id = 0, |
527 | .type = SND_SOC_DAI_PCM, | 527 | .type = SND_SOC_DAI_PCM, |
528 | .playback = { | 528 | .playback = { |
@@ -616,6 +616,35 @@ static int lm4857_i2c_attach(struct i2c_adapter *adap) | |||
616 | return i2c_probe(adap, &addr_data, lm4857_amp_probe); | 616 | return i2c_probe(adap, &addr_data, lm4857_amp_probe); |
617 | } | 617 | } |
618 | 618 | ||
619 | static u8 lm4857_state; | ||
620 | |||
621 | static int lm4857_suspend(struct i2c_client *dev, pm_message_t state) | ||
622 | { | ||
623 | dev_dbg(&dev->dev, "lm4857_suspend\n"); | ||
624 | lm4857_state = lm4857_regs[LM4857_CTRL] & 0xf; | ||
625 | if (lm4857_state) { | ||
626 | lm4857_regs[LM4857_CTRL] &= 0xf0; | ||
627 | lm4857_write_regs(); | ||
628 | } | ||
629 | return 0; | ||
630 | } | ||
631 | |||
632 | static int lm4857_resume(struct i2c_client *dev) | ||
633 | { | ||
634 | if (lm4857_state) { | ||
635 | lm4857_regs[LM4857_CTRL] |= (lm4857_state & 0x0f); | ||
636 | lm4857_write_regs(); | ||
637 | } | ||
638 | return 0; | ||
639 | } | ||
640 | |||
641 | static void lm4857_shutdown(struct i2c_client *dev) | ||
642 | { | ||
643 | dev_dbg(&dev->dev, "lm4857_shutdown\n"); | ||
644 | lm4857_regs[LM4857_CTRL] &= 0xf0; | ||
645 | lm4857_write_regs(); | ||
646 | } | ||
647 | |||
619 | /* corgi i2c codec control layer */ | 648 | /* corgi i2c codec control layer */ |
620 | static struct i2c_driver lm4857_i2c_driver = { | 649 | static struct i2c_driver lm4857_i2c_driver = { |
621 | .driver = { | 650 | .driver = { |
@@ -623,6 +652,9 @@ static struct i2c_driver lm4857_i2c_driver = { | |||
623 | .owner = THIS_MODULE, | 652 | .owner = THIS_MODULE, |
624 | }, | 653 | }, |
625 | .id = I2C_DRIVERID_LM4857, | 654 | .id = I2C_DRIVERID_LM4857, |
655 | .suspend = lm4857_suspend, | ||
656 | .resume = lm4857_resume, | ||
657 | .shutdown = lm4857_shutdown, | ||
626 | .attach_adapter = lm4857_i2c_attach, | 658 | .attach_adapter = lm4857_i2c_attach, |
627 | .detach_client = lm4857_i2c_detach, | 659 | .detach_client = lm4857_i2c_detach, |
628 | .command = NULL, | 660 | .command = NULL, |
@@ -667,6 +699,6 @@ module_init(neo1973_init); | |||
667 | module_exit(neo1973_exit); | 699 | module_exit(neo1973_exit); |
668 | 700 | ||
669 | /* Module information */ | 701 | /* Module information */ |
670 | MODULE_AUTHOR("Graeme Gregory, graeme.gregory@wolfsonmicro.com, www.wolfsonmicro.com"); | 702 | MODULE_AUTHOR("Graeme Gregory, graeme@openmoko.org, www.openmoko.org"); |
671 | MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973"); | 703 | MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973"); |
672 | MODULE_LICENSE("GPL"); | 704 | MODULE_LICENSE("GPL"); |
diff --git a/sound/soc/s3c24xx/s3c2443-ac97.c b/sound/soc/s3c24xx/s3c2443-ac97.c index 1c1ddbf7f3c0..e81d9a6c83da 100644 --- a/sound/soc/s3c24xx/s3c2443-ac97.c +++ b/sound/soc/s3c24xx/s3c2443-ac97.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/io.h> | ||
22 | #include <linux/wait.h> | 23 | #include <linux/wait.h> |
23 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
24 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
@@ -30,7 +31,6 @@ | |||
30 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
31 | 32 | ||
32 | #include <asm/hardware.h> | 33 | #include <asm/hardware.h> |
33 | #include <asm/io.h> | ||
34 | #include <asm/plat-s3c/regs-ac97.h> | 34 | #include <asm/plat-s3c/regs-ac97.h> |
35 | #include <asm/arch/regs-gpio.h> | 35 | #include <asm/arch/regs-gpio.h> |
36 | #include <asm/arch/regs-clock.h> | 36 | #include <asm/arch/regs-clock.h> |
@@ -47,7 +47,7 @@ struct s3c24xx_ac97_info { | |||
47 | }; | 47 | }; |
48 | static struct s3c24xx_ac97_info s3c24xx_ac97; | 48 | static struct s3c24xx_ac97_info s3c24xx_ac97; |
49 | 49 | ||
50 | DECLARE_COMPLETION(ac97_completion); | 50 | static DECLARE_COMPLETION(ac97_completion); |
51 | static u32 codec_ready; | 51 | static u32 codec_ready; |
52 | static DECLARE_MUTEX(ac97_mutex); | 52 | static DECLARE_MUTEX(ac97_mutex); |
53 | 53 | ||
@@ -290,7 +290,7 @@ static int s3c2443_ac97_trigger(struct snd_pcm_substream *substream, int cmd) | |||
290 | u32 ac_glbctrl; | 290 | u32 ac_glbctrl; |
291 | 291 | ||
292 | ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); | 292 | ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); |
293 | switch(cmd) { | 293 | switch (cmd) { |
294 | case SNDRV_PCM_TRIGGER_START: | 294 | case SNDRV_PCM_TRIGGER_START: |
295 | case SNDRV_PCM_TRIGGER_RESUME: | 295 | case SNDRV_PCM_TRIGGER_RESUME: |
296 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: | 296 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
@@ -333,7 +333,7 @@ static int s3c2443_ac97_mic_trigger(struct snd_pcm_substream *substream, | |||
333 | u32 ac_glbctrl; | 333 | u32 ac_glbctrl; |
334 | 334 | ||
335 | ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); | 335 | ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); |
336 | switch(cmd) { | 336 | switch (cmd) { |
337 | case SNDRV_PCM_TRIGGER_START: | 337 | case SNDRV_PCM_TRIGGER_START: |
338 | case SNDRV_PCM_TRIGGER_RESUME: | 338 | case SNDRV_PCM_TRIGGER_RESUME: |
339 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: | 339 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: |
@@ -391,7 +391,6 @@ struct snd_soc_cpu_dai s3c2443_ac97_dai[] = { | |||
391 | .trigger = s3c2443_ac97_mic_trigger,}, | 391 | .trigger = s3c2443_ac97_mic_trigger,}, |
392 | }, | 392 | }, |
393 | }; | 393 | }; |
394 | |||
395 | EXPORT_SYMBOL_GPL(s3c2443_ac97_dai); | 394 | EXPORT_SYMBOL_GPL(s3c2443_ac97_dai); |
396 | EXPORT_SYMBOL_GPL(soc_ac97_ops); | 395 | EXPORT_SYMBOL_GPL(soc_ac97_ops); |
397 | 396 | ||
diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c index 49580fb481d5..6c70a81c730c 100644 --- a/sound/soc/s3c24xx/s3c24xx-pcm.c +++ b/sound/soc/s3c24xx/s3c24xx-pcm.c | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/io.h> | ||
23 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
24 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
25 | #include <linux/dma-mapping.h> | 26 | #include <linux/dma-mapping.h> |
@@ -30,7 +31,6 @@ | |||
30 | #include <sound/soc.h> | 31 | #include <sound/soc.h> |
31 | 32 | ||
32 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
33 | #include <asm/io.h> | ||
34 | #include <asm/hardware.h> | 34 | #include <asm/hardware.h> |
35 | #include <asm/arch/dma.h> | 35 | #include <asm/arch/dma.h> |
36 | #include <asm/arch/audio.h> | 36 | #include <asm/arch/audio.h> |
@@ -93,7 +93,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream) | |||
93 | while (prtd->dma_loaded < prtd->dma_limit) { | 93 | while (prtd->dma_loaded < prtd->dma_limit) { |
94 | unsigned long len = prtd->dma_period; | 94 | unsigned long len = prtd->dma_period; |
95 | 95 | ||
96 | DBG("dma_loaded: %d\n",prtd->dma_loaded); | 96 | DBG("dma_loaded: %d\n", prtd->dma_loaded); |
97 | 97 | ||
98 | if ((pos + len) > prtd->dma_end) { | 98 | if ((pos + len) > prtd->dma_end) { |
99 | len = prtd->dma_end - pos; | 99 | len = prtd->dma_end - pos; |
@@ -101,7 +101,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream) | |||
101 | __func__, len); | 101 | __func__, len); |
102 | } | 102 | } |
103 | 103 | ||
104 | ret = s3c2410_dma_enqueue(prtd->params->channel, | 104 | ret = s3c2410_dma_enqueue(prtd->params->channel, |
105 | substream, pos, len); | 105 | substream, pos, len); |
106 | 106 | ||
107 | if (ret == 0) { | 107 | if (ret == 0) { |
@@ -129,7 +129,7 @@ static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel, | |||
129 | return; | 129 | return; |
130 | 130 | ||
131 | prtd = substream->runtime->private_data; | 131 | prtd = substream->runtime->private_data; |
132 | 132 | ||
133 | if (substream) | 133 | if (substream) |
134 | snd_pcm_period_elapsed(substream); | 134 | snd_pcm_period_elapsed(substream); |
135 | 135 | ||
@@ -150,7 +150,7 @@ static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream, | |||
150 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 150 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
151 | struct s3c24xx_pcm_dma_params *dma = rtd->dai->cpu_dai->dma_data; | 151 | struct s3c24xx_pcm_dma_params *dma = rtd->dai->cpu_dai->dma_data; |
152 | unsigned long totbytes = params_buffer_bytes(params); | 152 | unsigned long totbytes = params_buffer_bytes(params); |
153 | int ret=0; | 153 | int ret = 0; |
154 | 154 | ||
155 | DBG("Entered %s\n", __func__); | 155 | DBG("Entered %s\n", __func__); |
156 | 156 | ||
@@ -223,7 +223,7 @@ static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream) | |||
223 | /* return if this is a bufferless transfer e.g. | 223 | /* return if this is a bufferless transfer e.g. |
224 | * codec <--> BT codec or GSM modem -- lg FIXME */ | 224 | * codec <--> BT codec or GSM modem -- lg FIXME */ |
225 | if (!prtd->params) | 225 | if (!prtd->params) |
226 | return 0; | 226 | return 0; |
227 | 227 | ||
228 | /* channel needs configuring for mem=>device, increment memory addr, | 228 | /* channel needs configuring for mem=>device, increment memory addr, |
229 | * sync to pclk, half-word transfers to the IIS-FIFO. */ | 229 | * sync to pclk, half-word transfers to the IIS-FIFO. */ |
@@ -293,8 +293,8 @@ static int s3c24xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | |||
293 | return ret; | 293 | return ret; |
294 | } | 294 | } |
295 | 295 | ||
296 | static snd_pcm_uframes_t | 296 | static snd_pcm_uframes_t |
297 | s3c24xx_pcm_pointer(struct snd_pcm_substream *substream) | 297 | s3c24xx_pcm_pointer(struct snd_pcm_substream *substream) |
298 | { | 298 | { |
299 | struct snd_pcm_runtime *runtime = substream->runtime; | 299 | struct snd_pcm_runtime *runtime = substream->runtime; |
300 | struct s3c24xx_runtime_data *prtd = runtime->private_data; | 300 | struct s3c24xx_runtime_data *prtd = runtime->private_data; |
@@ -313,7 +313,7 @@ static snd_pcm_uframes_t | |||
313 | 313 | ||
314 | spin_unlock(&prtd->lock); | 314 | spin_unlock(&prtd->lock); |
315 | 315 | ||
316 | DBG("Pointer %x %x\n",src,dst); | 316 | DBG("Pointer %x %x\n", src, dst); |
317 | 317 | ||
318 | /* we seem to be getting the odd error from the pcm library due | 318 | /* we seem to be getting the odd error from the pcm library due |
319 | * to out-of-bounds pointers. this is maybe due to the dma engine | 319 | * to out-of-bounds pointers. this is maybe due to the dma engine |
@@ -355,11 +355,11 @@ static int s3c24xx_pcm_close(struct snd_pcm_substream *substream) | |||
355 | 355 | ||
356 | DBG("Entered %s\n", __func__); | 356 | DBG("Entered %s\n", __func__); |
357 | 357 | ||
358 | if (prtd) | 358 | if (!prtd) |
359 | kfree(prtd); | ||
360 | else | ||
361 | DBG("s3c24xx_pcm_close called with prtd == NULL\n"); | 359 | DBG("s3c24xx_pcm_close called with prtd == NULL\n"); |
362 | 360 | ||
361 | kfree(prtd); | ||
362 | |||
363 | return 0; | 363 | return 0; |
364 | } | 364 | } |
365 | 365 | ||
@@ -371,9 +371,9 @@ static int s3c24xx_pcm_mmap(struct snd_pcm_substream *substream, | |||
371 | DBG("Entered %s\n", __func__); | 371 | DBG("Entered %s\n", __func__); |
372 | 372 | ||
373 | return dma_mmap_writecombine(substream->pcm->card->dev, vma, | 373 | return dma_mmap_writecombine(substream->pcm->card->dev, vma, |
374 | runtime->dma_area, | 374 | runtime->dma_area, |
375 | runtime->dma_addr, | 375 | runtime->dma_addr, |
376 | runtime->dma_bytes); | 376 | runtime->dma_bytes); |
377 | } | 377 | } |
378 | 378 | ||
379 | static struct snd_pcm_ops s3c24xx_pcm_ops = { | 379 | static struct snd_pcm_ops s3c24xx_pcm_ops = { |
@@ -432,7 +432,7 @@ static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm) | |||
432 | 432 | ||
433 | static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK; | 433 | static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK; |
434 | 434 | ||
435 | static int s3c24xx_pcm_new(struct snd_card *card, | 435 | static int s3c24xx_pcm_new(struct snd_card *card, |
436 | struct snd_soc_codec_dai *dai, struct snd_pcm *pcm) | 436 | struct snd_soc_codec_dai *dai, struct snd_pcm *pcm) |
437 | { | 437 | { |
438 | int ret = 0; | 438 | int ret = 0; |
@@ -467,7 +467,6 @@ struct snd_soc_platform s3c24xx_soc_platform = { | |||
467 | .pcm_new = s3c24xx_pcm_new, | 467 | .pcm_new = s3c24xx_pcm_new, |
468 | .pcm_free = s3c24xx_pcm_free_dma_buffers, | 468 | .pcm_free = s3c24xx_pcm_free_dma_buffers, |
469 | }; | 469 | }; |
470 | |||
471 | EXPORT_SYMBOL_GPL(s3c24xx_soc_platform); | 470 | EXPORT_SYMBOL_GPL(s3c24xx_soc_platform); |
472 | 471 | ||
473 | MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); | 472 | MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); |