Commit ccf27795 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  [ALSA] soc - neo1973_wm8753.c add suspend and shutdown hooks for lm4857 chip
  [ALSA] soc - neo1973_wm8753.c change maintainer contact info
  [ALSA] soc - neo1973_wm8753.c cleanup checkpatch issues
  [ALSA] soc - ln2440sbc_alc650 - Fix checkpatch warnings
  [ALSA] soc - s3c24xx-pcm - Fix checkpatch warnings
  [ALSA] soc - s3c2443-ac97 - Fix checkpatch warnings
  [ALSA] soc - wm8753 - Clean up checkpatch warnings
parents 7cece14a fd403dc8
...@@ -150,7 +150,7 @@ static int wm8753_write(struct snd_soc_codec *codec, unsigned int reg, ...@@ -150,7 +150,7 @@ static int wm8753_write(struct snd_soc_codec *codec, unsigned int reg,
data[0] = (reg << 1) | ((value >> 8) & 0x0001); data[0] = (reg << 1) | ((value >> 8) & 0x0001);
data[1] = value & 0x00ff; data[1] = value & 0x00ff;
wm8753_write_reg_cache (codec, reg, value); wm8753_write_reg_cache(codec, reg, value);
if (codec->hw_write(codec->control_data, data, 2) == 2) if (codec->hw_write(codec->control_data, data, 2) == 2)
return 0; return 0;
else else
...@@ -249,7 +249,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol, ...@@ -249,7 +249,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol,
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL); int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
if (((mode &0xc) >> 2) == ucontrol->value.integer.value[0]) if (((mode & 0xc) >> 2) == ucontrol->value.integer.value[0])
return 0; return 0;
mode &= 0xfff3; mode &= 0xfff3;
...@@ -342,7 +342,8 @@ static int wm8753_add_controls(struct snd_soc_codec *codec) ...@@ -342,7 +342,8 @@ static int wm8753_add_controls(struct snd_soc_codec *codec)
for (i = 0; i < ARRAY_SIZE(wm8753_snd_controls); i++) { for (i = 0; i < ARRAY_SIZE(wm8753_snd_controls); i++) {
err = snd_ctl_add(codec->card, err = snd_ctl_add(codec->card,
snd_soc_cnew(&wm8753_snd_controls[i],codec, NULL)); snd_soc_cnew(&wm8753_snd_controls[i],
codec, NULL));
if (err < 0) if (err < 0)
return err; return err;
} }
...@@ -722,7 +723,7 @@ static void pll_factors(struct _pll_div *pll_div, unsigned int target, ...@@ -722,7 +723,7 @@ static void pll_factors(struct _pll_div *pll_div, unsigned int target,
if ((Ndiv < 6) || (Ndiv > 12)) if ((Ndiv < 6) || (Ndiv > 12))
printk(KERN_WARNING printk(KERN_WARNING
"WM8753 N value outwith recommended range! N = %d\n",Ndiv); "wm8753: unsupported N = %d\n", Ndiv);
pll_div->n = Ndiv; pll_div->n = Ndiv;
Nmod = target % source; Nmod = target % source;
...@@ -1300,8 +1301,9 @@ static int wm8753_dapm_event(struct snd_soc_codec *codec, int event) ...@@ -1300,8 +1301,9 @@ static int wm8753_dapm_event(struct snd_soc_codec *codec, int event)
} }
#define WM8753_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\ #define WM8753_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\
SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
#define WM8753_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\ #define WM8753_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE) SNDRV_PCM_FMTBIT_S24_LE)
...@@ -1507,9 +1509,9 @@ static int wm8753_suspend(struct platform_device *pdev, pm_message_t state) ...@@ -1507,9 +1509,9 @@ static int wm8753_suspend(struct platform_device *pdev, pm_message_t state)
struct snd_soc_codec *codec = socdev->codec; struct snd_soc_codec *codec = socdev->codec;
/* we only need to suspend if we are a valid card */ /* we only need to suspend if we are a valid card */
if(!codec->card) if (!codec->card)
return 0; return 0;
wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold); wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
return 0; return 0;
} }
...@@ -1523,7 +1525,7 @@ static int wm8753_resume(struct platform_device *pdev) ...@@ -1523,7 +1525,7 @@ static int wm8753_resume(struct platform_device *pdev)
u16 *cache = codec->reg_cache; u16 *cache = codec->reg_cache;
/* we only need to resume if we are a valid card */ /* we only need to resume if we are a valid card */
if(!codec->card) if (!codec->card)
return 0; return 0;
/* Sync reg_cache with the hardware */ /* Sync reg_cache with the hardware */
...@@ -1613,9 +1615,10 @@ static int wm8753_init(struct snd_soc_device *socdev) ...@@ -1613,9 +1615,10 @@ static int wm8753_init(struct snd_soc_device *socdev)
wm8753_add_widgets(codec); wm8753_add_widgets(codec);
ret = snd_soc_register_card(socdev); ret = snd_soc_register_card(socdev);
if (ret < 0) { if (ret < 0) {
printk(KERN_ERR "wm8753: failed to register card\n"); printk(KERN_ERR "wm8753: failed to register card\n");
goto card_err; goto card_err;
} }
return ret; return ret;
card_err: card_err:
...@@ -1630,7 +1633,7 @@ static int wm8753_init(struct snd_soc_device *socdev) ...@@ -1630,7 +1633,7 @@ static int wm8753_init(struct snd_soc_device *socdev)
around */ around */
static struct snd_soc_device *wm8753_socdev; static struct snd_soc_device *wm8753_socdev;
#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
/* /*
* WM8753 2 wire address is determined by GPIO5 * 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,7 +1664,7 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL){ if (!i2c) {
kfree(codec); kfree(codec);
return -ENOMEM; return -ENOMEM;
} }
...@@ -1749,7 +1752,7 @@ static int wm8753_probe(struct platform_device *pdev) ...@@ -1749,7 +1752,7 @@ static int wm8753_probe(struct platform_device *pdev)
wm8753_socdev = socdev; wm8753_socdev = socdev;
INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work); INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work);
#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
if (setup->i2c_address) { if (setup->i2c_address) {
normal_i2c[0] = setup->i2c_address; normal_i2c[0] = setup->i2c_address;
codec->hw_write = (hw_write_t)i2c_master_send; codec->hw_write = (hw_write_t)i2c_master_send;
...@@ -1793,7 +1796,7 @@ static int wm8753_remove(struct platform_device *pdev) ...@@ -1793,7 +1796,7 @@ static int wm8753_remove(struct platform_device *pdev)
run_delayed_work(&codec->delayed_work); run_delayed_work(&codec->delayed_work);
snd_soc_free_pcms(socdev); snd_soc_free_pcms(socdev);
snd_soc_dapm_free(socdev); snd_soc_dapm_free(socdev);
#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE) #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
i2c_del_driver(&wm8753_i2c_driver); i2c_del_driver(&wm8753_i2c_driver);
#endif #endif
kfree(codec->private_data); kfree(codec->private_data);
...@@ -1808,7 +1811,6 @@ struct snd_soc_codec_device soc_codec_dev_wm8753 = { ...@@ -1808,7 +1811,6 @@ struct snd_soc_codec_device soc_codec_dev_wm8753 = {
.suspend = wm8753_suspend, .suspend = wm8753_suspend,
.resume = wm8753_resume, .resume = wm8753_resume,
}; };
EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753); EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753);
MODULE_DESCRIPTION("ASoC WM8753 driver"); MODULE_DESCRIPTION("ASoC WM8753 driver");
......
/* /*
* SoC audio for ln2440sbc * SoC audio for ln2440sbc
* *
* Copyright 2007 KonekTel, a.s. * Copyright 2007 KonekTel, a.s.
* Author: Ivan Kuten * Author: Ivan Kuten
* ivan.kuten@promwad.com * ivan.kuten@promwad.com
* *
* Heavily based on smdk2443_wm9710.c * Heavily based on smdk2443_wm9710.c
* Copyright 2007 Wolfson Microelectronics PLC. * Copyright 2007 Wolfson Microelectronics PLC.
* Author: Graeme Gregory * Author: Graeme Gregory
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include <asm/arch/regs-gpio.h> #include <asm/arch/regs-gpio.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/arch/audio.h> #include <asm/arch/audio.h>
#include <asm/io.h> #include <linux/io.h>
#include <asm/arch/spi-gpio.h> #include <asm/arch/spi-gpio.h>
#include <asm/plat-s3c24xx/regs-iis.h> #include <asm/plat-s3c24xx/regs-iis.h>
...@@ -122,7 +122,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream, ...@@ -122,7 +122,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
/* set MCLK division for sample rate */ /* set MCLK division for sample rate */
ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK, ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK,
S3C2410_IISMOD_32FS ); S3C2410_IISMOD_32FS);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -133,7 +133,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream, ...@@ -133,7 +133,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
/* set prescaler division for sample rate */ /* set prescaler division for sample rate */
ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER, ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER,
S3C24XX_PRESCALE(4,4)); S3C24XX_PRESCALE(4, 4));
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -222,7 +222,7 @@ static struct snd_soc_ops neo1973_voice_ops = { ...@@ -222,7 +222,7 @@ static struct snd_soc_ops neo1973_voice_ops = {
.hw_free = neo1973_voice_hw_free, .hw_free = neo1973_voice_hw_free,
}; };
static int neo1973_scenario = 0; static int neo1973_scenario;
static int neo1973_get_scenario(struct snd_kcontrol *kcontrol, static int neo1973_get_scenario(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
...@@ -233,7 +233,7 @@ static int neo1973_get_scenario(struct snd_kcontrol *kcontrol, ...@@ -233,7 +233,7 @@ static int neo1973_get_scenario(struct snd_kcontrol *kcontrol,
static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario) static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario)
{ {
switch(neo1973_scenario) { switch (neo1973_scenario) {
case NEO_AUDIO_OFF: case NEO_AUDIO_OFF:
snd_soc_dapm_set_endpoint(codec, "Audio Out", 0); snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0); snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
...@@ -334,7 +334,7 @@ static void lm4857_write_regs(void) ...@@ -334,7 +334,7 @@ static void lm4857_write_regs(void)
static int lm4857_get_reg(struct snd_kcontrol *kcontrol, static int lm4857_get_reg(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
{ {
int reg=kcontrol->private_value & 0xFF; int reg = kcontrol->private_value & 0xFF;
int shift = (kcontrol->private_value >> 8) & 0x0F; int shift = (kcontrol->private_value >> 8) & 0x0F;
int mask = (kcontrol->private_value >> 16) & 0xFF; int mask = (kcontrol->private_value >> 16) & 0xFF;
...@@ -349,11 +349,11 @@ static int lm4857_set_reg(struct snd_kcontrol *kcontrol, ...@@ -349,11 +349,11 @@ static int lm4857_set_reg(struct snd_kcontrol *kcontrol,
int shift = (kcontrol->private_value >> 8) & 0x0F; int shift = (kcontrol->private_value >> 8) & 0x0F;
int mask = (kcontrol->private_value >> 16) & 0xFF; int mask = (kcontrol->private_value >> 16) & 0xFF;
if (((lm4857_regs[reg] >> shift ) & mask) == if (((lm4857_regs[reg] >> shift) & mask) ==
ucontrol->value.integer.value[0]) ucontrol->value.integer.value[0])
return 0; return 0;
lm4857_regs[reg] &= ~ (mask << shift); lm4857_regs[reg] &= ~(mask << shift);
lm4857_regs[reg] |= ucontrol->value.integer.value[0] << shift; lm4857_regs[reg] |= ucontrol->value.integer.value[0] << shift;
lm4857_write_regs(); lm4857_write_regs();
return 1; return 1;
...@@ -398,7 +398,7 @@ static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = { ...@@ -398,7 +398,7 @@ static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
/* example machine audio_mapnections */ /* example machine audio_mapnections */
static const char* audio_map[][3] = { static const char *audio_map[][3] = {
/* Connections to the lm4857 amp */ /* Connections to the lm4857 amp */
{"Audio Out", NULL, "LOUT1"}, {"Audio Out", NULL, "LOUT1"},
...@@ -450,7 +450,7 @@ static const char *neo_scenarios[] = { ...@@ -450,7 +450,7 @@ static const char *neo_scenarios[] = {
}; };
static const struct soc_enum neo_scenario_enum[] = { static const struct soc_enum neo_scenario_enum[] = {
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(neo_scenarios),neo_scenarios), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(neo_scenarios), neo_scenarios),
}; };
static const struct snd_kcontrol_new wm8753_neo1973_controls[] = { static const struct snd_kcontrol_new wm8753_neo1973_controls[] = {
...@@ -521,8 +521,8 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec) ...@@ -521,8 +521,8 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec)
/* /*
* BT Codec DAI * BT Codec DAI
*/ */
static struct snd_soc_cpu_dai bt_dai = static struct snd_soc_cpu_dai bt_dai = {
{ .name = "Bluetooth", .name = "Bluetooth",
.id = 0, .id = 0,
.type = SND_SOC_DAI_PCM, .type = SND_SOC_DAI_PCM,
.playback = { .playback = {
...@@ -616,6 +616,35 @@ static int lm4857_i2c_attach(struct i2c_adapter *adap) ...@@ -616,6 +616,35 @@ static int lm4857_i2c_attach(struct i2c_adapter *adap)
return i2c_probe(adap, &addr_data, lm4857_amp_probe); return i2c_probe(adap, &addr_data, lm4857_amp_probe);
} }
static u8 lm4857_state;
static int lm4857_suspend(struct i2c_client *dev, pm_message_t state)
{
dev_dbg(&dev->dev, "lm4857_suspend\n");
lm4857_state = lm4857_regs[LM4857_CTRL] & 0xf;
if (lm4857_state) {
lm4857_regs[LM4857_CTRL] &= 0xf0;
lm4857_write_regs();
}
return 0;
}
static int lm4857_resume(struct i2c_client *dev)
{
if (lm4857_state) {
lm4857_regs[LM4857_CTRL] |= (lm4857_state & 0x0f);
lm4857_write_regs();
}
return 0;
}
static void lm4857_shutdown(struct i2c_client *dev)
{
dev_dbg(&dev->dev, "lm4857_shutdown\n");
lm4857_regs[LM4857_CTRL] &= 0xf0;
lm4857_write_regs();
}
/* corgi i2c codec control layer */ /* corgi i2c codec control layer */
static struct i2c_driver lm4857_i2c_driver = { static struct i2c_driver lm4857_i2c_driver = {
.driver = { .driver = {
...@@ -623,6 +652,9 @@ static struct i2c_driver lm4857_i2c_driver = { ...@@ -623,6 +652,9 @@ static struct i2c_driver lm4857_i2c_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
.id = I2C_DRIVERID_LM4857, .id = I2C_DRIVERID_LM4857,
.suspend = lm4857_suspend,
.resume = lm4857_resume,
.shutdown = lm4857_shutdown,
.attach_adapter = lm4857_i2c_attach, .attach_adapter = lm4857_i2c_attach,
.detach_client = lm4857_i2c_detach, .detach_client = lm4857_i2c_detach,
.command = NULL, .command = NULL,
...@@ -667,6 +699,6 @@ module_init(neo1973_init); ...@@ -667,6 +699,6 @@ module_init(neo1973_init);
module_exit(neo1973_exit); module_exit(neo1973_exit);
/* Module information */ /* Module information */
MODULE_AUTHOR("Graeme Gregory, graeme.gregory@wolfsonmicro.com, www.wolfsonmicro.com"); MODULE_AUTHOR("Graeme Gregory, graeme@openmoko.org, www.openmoko.org");
MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973"); MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/clk.h> #include <linux/clk.h>
...@@ -30,7 +31,6 @@ ...@@ -30,7 +31,6 @@
#include <sound/soc.h> #include <sound/soc.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h>
#include <asm/plat-s3c/regs-ac97.h> #include <asm/plat-s3c/regs-ac97.h>
#include <asm/arch/regs-gpio.h> #include <asm/arch/regs-gpio.h>
#include <asm/arch/regs-clock.h> #include <asm/arch/regs-clock.h>
...@@ -47,7 +47,7 @@ struct s3c24xx_ac97_info { ...@@ -47,7 +47,7 @@ struct s3c24xx_ac97_info {
}; };
static struct s3c24xx_ac97_info s3c24xx_ac97; static struct s3c24xx_ac97_info s3c24xx_ac97;
DECLARE_COMPLETION(ac97_completion); static DECLARE_COMPLETION(ac97_completion);
static u32 codec_ready; static u32 codec_ready;
static DECLARE_MUTEX(ac97_mutex); static DECLARE_MUTEX(ac97_mutex);
...@@ -290,7 +290,7 @@ static int s3c2443_ac97_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -290,7 +290,7 @@ static int s3c2443_ac97_trigger(struct snd_pcm_substream *substream, int cmd)
u32 ac_glbctrl; u32 ac_glbctrl;
ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
switch(cmd) { switch (cmd) {
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
...@@ -333,7 +333,7 @@ static int s3c2443_ac97_mic_trigger(struct snd_pcm_substream *substream, ...@@ -333,7 +333,7 @@ static int s3c2443_ac97_mic_trigger(struct snd_pcm_substream *substream,
u32 ac_glbctrl; u32 ac_glbctrl;
ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL); ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
switch(cmd) { switch (cmd) {
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
...@@ -391,7 +391,6 @@ struct snd_soc_cpu_dai s3c2443_ac97_dai[] = { ...@@ -391,7 +391,6 @@ struct snd_soc_cpu_dai s3c2443_ac97_dai[] = {
.trigger = s3c2443_ac97_mic_trigger,}, .trigger = s3c2443_ac97_mic_trigger,},
}, },
}; };
EXPORT_SYMBOL_GPL(s3c2443_ac97_dai); EXPORT_SYMBOL_GPL(s3c2443_ac97_dai);
EXPORT_SYMBOL_GPL(soc_ac97_ops); EXPORT_SYMBOL_GPL(soc_ac97_ops);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
...@@ -30,7 +31,6 @@ ...@@ -30,7 +31,6 @@
#include <sound/soc.h> #include <sound/soc.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/io.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/arch/dma.h> #include <asm/arch/dma.h>
#include <asm/arch/audio.h> #include <asm/arch/audio.h>
...@@ -93,7 +93,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream) ...@@ -93,7 +93,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream)
while (prtd->dma_loaded < prtd->dma_limit) { while (prtd->dma_loaded < prtd->dma_limit) {
unsigned long len = prtd->dma_period; unsigned long len = prtd->dma_period;
DBG("dma_loaded: %d\n",prtd->dma_loaded); DBG("dma_loaded: %d\n", prtd->dma_loaded);
if ((pos + len) > prtd->dma_end) { if ((pos + len) > prtd->dma_end) {
len = prtd->dma_end - pos; len = prtd->dma_end - pos;
...@@ -101,7 +101,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream) ...@@ -101,7 +101,7 @@ static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream)
__func__, len); __func__, len);
} }
ret = s3c2410_dma_enqueue(prtd->params->channel, ret = s3c2410_dma_enqueue(prtd->params->channel,
substream, pos, len); substream, pos, len);
if (ret == 0) { if (ret == 0) {
...@@ -129,7 +129,7 @@ static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel, ...@@ -129,7 +129,7 @@ static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
return; return;
prtd = substream->runtime->private_data; prtd = substream->runtime->private_data;
if (substream) if (substream)
snd_pcm_period_elapsed(substream); snd_pcm_period_elapsed(substream);
...@@ -150,7 +150,7 @@ static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream, ...@@ -150,7 +150,7 @@ static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct s3c24xx_pcm_dma_params *dma = rtd->dai->cpu_dai->dma_data; struct s3c24xx_pcm_dma_params *dma = rtd->dai->cpu_dai->dma_data;
unsigned long totbytes = params_buffer_bytes(params); unsigned long totbytes = params_buffer_bytes(params);
int ret=0; int ret = 0;
DBG("Entered %s\n", __func__); DBG("Entered %s\n", __func__);
...@@ -223,7 +223,7 @@ static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream) ...@@ -223,7 +223,7 @@ static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream)
/* return if this is a bufferless transfer e.g. /* return if this is a bufferless transfer e.g.
* codec <--> BT codec or GSM modem -- lg FIXME */ * codec <--> BT codec or GSM modem -- lg FIXME */
if (!prtd->params) if (!prtd->params)
return 0; return 0;
/* channel needs configuring for mem=>device, increment memory addr, /* channel needs configuring for mem=>device, increment memory addr,
* sync to pclk, half-word transfers to the IIS-FIFO. */ * 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,8 +293,8 @@ static int s3c24xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
return ret; return ret;
} }
static snd_pcm_uframes_t static snd_pcm_uframes_t
s3c24xx_pcm_pointer(struct snd_pcm_substream *substream) s3c24xx_pcm_pointer(struct snd_pcm_substream *substream)
{ {
struct snd_pcm_runtime *runtime = substream->runtime; struct snd_pcm_runtime *runtime = substream->runtime;
struct s3c24xx_runtime_data *prtd = runtime->private_data; struct s3c24xx_runtime_data *prtd = runtime->private_data;
...@@ -313,7 +313,7 @@ static snd_pcm_uframes_t ...@@ -313,7 +313,7 @@ static snd_pcm_uframes_t
spin_unlock(&prtd->lock); spin_unlock(&prtd->lock);
DBG("Pointer %x %x\n",src,dst); DBG("Pointer %x %x\n", src, dst);
/* we seem to be getting the odd error from the pcm library due /* we seem to be getting the odd error from the pcm library due
* to out-of-bounds pointers. this is maybe due to the dma engine * 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,11 +355,11 @@ static int s3c24xx_pcm_close(struct snd_pcm_substream *substream)
DBG("Entered %s\n", __func__); DBG("Entered %s\n", __func__);
if (prtd) if (!prtd)
kfree(prtd);
else
DBG("s3c24xx_pcm_close called with prtd == NULL\n"); DBG("s3c24xx_pcm_close called with prtd == NULL\n");
kfree(prtd);
return 0; return 0;
} }
...@@ -371,9 +371,9 @@ static int s3c24xx_pcm_mmap(struct snd_pcm_substream *substream, ...@@ -371,9 +371,9 @@ static int s3c24xx_pcm_mmap(struct snd_pcm_substream *substream,
DBG("Entered %s\n", __func__); DBG("Entered %s\n", __func__);
return dma_mmap_writecombine(substream->pcm->card->dev, vma, return dma_mmap_writecombine(substream->pcm->card->dev, vma,
runtime->dma_area, runtime->dma_area,
runtime->dma_addr, runtime->dma_addr,
runtime->dma_bytes); runtime->dma_bytes);
} }
static struct snd_pcm_ops s3c24xx_pcm_ops = { static struct snd_pcm_ops s3c24xx_pcm_ops = {
...@@ -432,7 +432,7 @@ static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm) ...@@ -432,7 +432,7 @@ static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK; static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK;
static int s3c24xx_pcm_new(struct snd_card *card, static int s3c24xx_pcm_new(struct snd_card *card,
struct snd_soc_codec_dai *dai, struct snd_pcm *pcm) struct snd_soc_codec_dai *dai, struct snd_pcm *pcm)
{ {
int ret = 0; int ret = 0;
...@@ -467,7 +467,6 @@ struct snd_soc_platform s3c24xx_soc_platform = { ...@@ -467,7 +467,6 @@ struct snd_soc_platform s3c24xx_soc_platform = {
.pcm_new = s3c24xx_pcm_new, .pcm_new = s3c24xx_pcm_new,
.pcm_free = s3c24xx_pcm_free_dma_buffers, .pcm_free = s3c24xx_pcm_free_dma_buffers,
}; };
EXPORT_SYMBOL_GPL(s3c24xx_soc_platform); EXPORT_SYMBOL_GPL(s3c24xx_soc_platform);
MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment