Skip to content

Commit

Permalink
[ALSA] soc - ln2440sbc ac97 support
Browse files Browse the repository at this point in the history
This patch adds ac97 support for ln2440sbc board from LittleChips.
This board is based on s3c2440 SoC + AC97 Realtek ALC650 codec.
Existing s3c2443 implementation is slightly modified because s3c2440
and s3c2443 have different AC97 interrupts.

Signed-off-by: Ivan Kuten <ivan.kuten@promwad.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
  • Loading branch information
Ivan Kuten authored and Jaroslav Kysela committed Jan 31, 2008
1 parent f651b50 commit 040956f
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 2 deletions.
8 changes: 8 additions & 0 deletions sound/soc/s3c24xx/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,12 @@ config SND_S3C24XX_SOC_SMDK2443_WM9710
Say Y if you want to add support for SoC audio on smdk2443
with the WM9710.

config SND_S3C24XX_SOC_LN2440SBC_ALC650
tristate "SoC AC97 Audio support for LN2440SBC - ALC650"
depends on SND_S3C24XX_SOC
select SND_S3C2443_SOC_AC97
select SND_SOC_AC97_CODEC
help
Say Y if you want to add support for SoC audio on ln2440sbc
with the ALC650.

2 changes: 2 additions & 0 deletions sound/soc/s3c24xx/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ obj-$(CONFIG_SND_S3C2443_SOC_AC97) += snd-soc-s3c2443-ac97.o
# S3C24XX Machine Support
snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o
snd-soc-ln2440sbc-alc650-objs := ln2440sbc_alc650.o

obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o
obj-$(CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650) += snd-soc-ln2440sbc-alc650.o
86 changes: 86 additions & 0 deletions sound/soc/s3c24xx/ln2440sbc_alc650.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* SoC audio for ln2440sbc
*
* Copyright 2007 KonekTel, a.s.
* Author: Ivan Kuten
* ivan.kuten@promwad.com
*
* Heavily based on smdk2443_wm9710.c
* Copyright 2007 Wolfson Microelectronics PLC.
* Author: Graeme Gregory
* graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/

#include <linux/module.h>
#include <linux/device.h>
#include <sound/driver.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>

#include "../codecs/ac97.h"
#include "s3c24xx-pcm.h"
#include "s3c24xx-ac97.h"

static struct snd_soc_machine ln2440sbc;

static struct snd_soc_dai_link ln2440sbc_dai[] = {
{
.name = "AC97",
.stream_name = "AC97 HiFi",
.cpu_dai = &s3c2443_ac97_dai[0],
.codec_dai = &ac97_dai,
},
};

static struct snd_soc_machine ln2440sbc = {
.name = "LN2440SBC",
.dai_link = ln2440sbc_dai,
.num_links = ARRAY_SIZE(ln2440sbc_dai),
};

static struct snd_soc_device ln2440sbc_snd_ac97_devdata = {
.machine = &ln2440sbc,
.platform = &s3c24xx_soc_platform,
.codec_dev = &soc_codec_dev_ac97,
};

static struct platform_device *ln2440sbc_snd_ac97_device;

static int __init ln2440sbc_init(void)
{
int ret;

ln2440sbc_snd_ac97_device = platform_device_alloc("soc-audio", -1);
if (!ln2440sbc_snd_ac97_device)
return -ENOMEM;

platform_set_drvdata(ln2440sbc_snd_ac97_device,
&ln2440sbc_snd_ac97_devdata);
ln2440sbc_snd_ac97_devdata.dev = &ln2440sbc_snd_ac97_device->dev;
ret = platform_device_add(ln2440sbc_snd_ac97_device);

if (ret)
platform_device_put(ln2440sbc_snd_ac97_device);

return ret;
}

static void __exit ln2440sbc_exit(void)
{
platform_device_unregister(ln2440sbc_snd_ac97_device);
}

module_init(ln2440sbc_init);
module_exit(ln2440sbc_exit);

/* Module information */
MODULE_AUTHOR("Ivan Kuten");
MODULE_DESCRIPTION("ALSA SoC ALC650 LN2440SBC");
MODULE_LICENSE("GPL");
4 changes: 2 additions & 2 deletions sound/soc/s3c24xx/s3c2443-ac97.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ static int s3c2443_ac97_probe(struct platform_device *pdev)
ac_glbctrl |= S3C_AC97_GLBCTRL_TRANSFERDATAENABLE;
writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);

ret = request_irq(IRQ_S3C2443_AC97, s3c2443_ac97_irq,
ret = request_irq(IRQ_S3C244x_AC97, s3c2443_ac97_irq,
IRQF_DISABLED, "AC97", NULL);
if (ret < 0) {
printk(KERN_ERR "s3c24xx-ac97: interrupt request failed.\n");
Expand All @@ -266,7 +266,7 @@ static int s3c2443_ac97_probe(struct platform_device *pdev)

static void s3c2443_ac97_remove(struct platform_device *pdev)
{
free_irq(IRQ_S3C2443_AC97, NULL);
free_irq(IRQ_S3C244x_AC97, NULL);
clk_disable(s3c24xx_ac97.ac97_clk);
clk_put(s3c24xx_ac97.ac97_clk);
iounmap(s3c24xx_ac97.regs);
Expand Down
6 changes: 6 additions & 0 deletions sound/soc/s3c24xx/s3c24xx-ac97.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
#define AC_CMD_ADDR(x) (x << 16)
#define AC_CMD_DATA(x) (x & 0xffff)

#ifdef CONFIG_CPU_S3C2440
#define IRQ_S3C244x_AC97 IRQ_S3C2440_AC97
#else
#define IRQ_S3C244x_AC97 IRQ_S3C2443_AC97
#endif

extern struct snd_soc_cpu_dai s3c2443_ac97_dai[];

#endif /*S3C24XXAC97_H_*/

0 comments on commit 040956f

Please sign in to comment.