From: ryan@bluewatersys.com (Ryan Mallon)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 2/3] ep93xx i2s core support
Date: Tue, 18 May 2010 16:54:12 +1200 [thread overview]
Message-ID: <4BF21D74.206@bluewatersys.com> (raw)
In-Reply-To: <4BF21B67.8090404@bluewatersys.com>
Add ep93xx core support for i2s audio
Signed-off-by: Ryan Mallon <ryan@bluewatersys.com>
---
diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
index 5f80092..df88233 100644
--- a/arch/arm/mach-ep93xx/clock.c
+++ b/arch/arm/mach-ep93xx/clock.c
@@ -108,6 +108,16 @@ static struct clk clk_video = {
.set_rate = set_div_rate,
};
+static struct clk clk_i2s = {
+ .sw_locked = 1,
+ .enable_reg = EP93XX_SYSCON_I2SCLKDIV,
+ .enable_mask = (EP93XX_SYSCON_CLKDIV_ENABLE |
+ EP93XX_SYSCON_I2SCLKDIV_SENA |
+ EP93XX_SYSCON_I2SCLKDIV_SPOL |
+ EP93XX_SYSCON_I2SCLKDIV_ORIDE),
+ .set_rate = set_div_rate,
+};
+
/* DMA Clocks */
static struct clk clk_m2p0 = {
.parent = &clk_h,
@@ -186,6 +196,7 @@ static struct clk_lookup clocks[] = {
INIT_CK("ep93xx-ohci", NULL, &clk_usb_host),
INIT_CK("ep93xx-keypad", NULL, &clk_keypad),
INIT_CK("ep93xx-fb", NULL, &clk_video),
+ INIT_CK("ep93xx-i2s", NULL, &clk_i2s),
INIT_CK(NULL, "pwm_clk", &clk_pwm),
INIT_CK(NULL, "m2p0", &clk_m2p0),
INIT_CK(NULL, "m2p1", &clk_m2p1),
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index 90fb591..cceeac2 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -617,6 +617,37 @@ void ep93xx_keypad_release_gpio(struct platform_device *pdev)
}
EXPORT_SYMBOL(ep93xx_keypad_release_gpio);
+/*************************************************************************
+ * EP93xx I2S audio peripheral handling
+ *************************************************************************/
+static struct resource ep93xx_i2s_resource[] = {
+ {
+ .start = EP93XX_I2S_PHYS_BASE,
+ .end = EP93XX_I2S_PHYS_BASE + 0x100 - 1,
+ .flags = IORESOURCE_MEM,
+ },
+};
+
+static struct platform_device ep93xx_i2s_device = {
+ .name = "ep93xx-i2s",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(ep93xx_i2s_resource),
+ .resource = ep93xx_i2s_resource,
+};
+
+void __init ep93xx_register_i2s(unsigned pins)
+{
+ if (pins != EP93XX_SYSCON_DEVCFG_I2SONSSP &&
+ pins != EP93XX_SYSCON_DEVCFG_I2SONAC97) {
+ pr_err("Invalid I2S pin configuration - not registering\n");
+ return;
+ }
+
+ ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_I2SONAC97 |
+ EP93XX_SYSCON_DEVCFG_I2SONAC97);
+ ep93xx_devcfg_set_bits(pins);
+ platform_device_register(&ep93xx_i2s_device);
+}
extern void ep93xx_gpio_init(void);
diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
index 93e2ecc..074d99b 100644
--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
@@ -93,6 +93,7 @@
/* APB peripherals */
#define EP93XX_TIMER_BASE EP93XX_APB_IOMEM(0x00010000)
+#define EP93XX_I2S_PHYS_BASE EP93XX_APB_PHYS(0x00020000)
#define EP93XX_I2S_BASE EP93XX_APB_IOMEM(0x00020000)
#define EP93XX_SECURITY_BASE EP93XX_APB_IOMEM(0x00030000)
@@ -193,6 +194,10 @@
#define EP93XX_SYSCON_CLKDIV_ESEL (1<<14)
#define EP93XX_SYSCON_CLKDIV_PSEL (1<<13)
#define EP93XX_SYSCON_CLKDIV_PDIV_SHIFT 8
+#define EP93XX_SYSCON_I2SCLKDIV EP93XX_SYSCON_REG(0x8c)
+#define EP93XX_SYSCON_I2SCLKDIV_SENA (1<<31)
+#define EP93XX_SYSCON_I2SCLKDIV_ORIDE (1<<29)
+#define EP93XX_SYSCON_I2SCLKDIV_SPOL (1<<19)
#define EP93XX_SYSCON_KEYTCHCLKDIV EP93XX_SYSCON_REG(0x90)
#define EP93XX_SYSCON_KEYTCHCLKDIV_TSEN (1<<31)
#define EP93XX_SYSCON_KEYTCHCLKDIV_ADIV (1<<16)
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h
index c6dc14d..9252adf 100644
--- a/arch/arm/mach-ep93xx/include/mach/platform.h
+++ b/arch/arm/mach-ep93xx/include/mach/platform.h
@@ -43,6 +43,7 @@ void ep93xx_pwm_release_gpio(struct platform_device *pdev);
void ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data);
int ep93xx_keypad_acquire_gpio(struct platform_device *pdev);
void ep93xx_keypad_release_gpio(struct platform_device *pdev);
+void ep93xx_register_i2s(unsigned pins);
void ep93xx_init_devices(void);
extern struct sys_timer ep93xx_timer;
next prev parent reply other threads:[~2010-05-18 4:54 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-18 4:45 [RFC PATCH 0/3] ep93xx i2s audio Ryan Mallon
2010-05-18 4:53 ` [RFC PATCH 1/3] ep93xx i2s driver Ryan Mallon
2010-05-18 12:45 ` Chase Douglas
2010-05-18 18:37 ` Mark Brown
2010-05-18 21:21 ` Ryan Mallon
2010-05-18 17:54 ` H Hartley Sweeten
2010-05-18 21:34 ` Ryan Mallon
2010-05-18 18:33 ` Mark Brown
2010-05-18 4:54 ` Ryan Mallon [this message]
2010-05-18 12:46 ` [RFC PATCH 2/3] ep93xx i2s core support Chase Douglas
2010-05-18 21:23 ` Ryan Mallon
2010-05-18 18:26 ` H Hartley Sweeten
2010-05-18 4:55 ` [RFC PATCH 3/3] ep93xx i2s snapper cl15 support Ryan Mallon
2010-05-18 12:46 ` Chase Douglas
2010-05-18 18:37 ` H Hartley Sweeten
2010-05-18 18:44 ` Mark Brown
2010-05-18 12:44 ` [RFC PATCH 0/3] ep93xx i2s audio Chase Douglas
2010-05-18 18:22 ` Mark Brown
2010-05-18 21:06 ` Ryan Mallon
2010-05-18 18:46 ` Mark Brown
2010-05-18 21:04 ` Ryan Mallon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BF21D74.206@bluewatersys.com \
--to=ryan@bluewatersys.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.