* [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
@ 2010-09-24 9:15 Benoit Cousson
2010-09-24 9:15 ` [RFC 1/5] OMAP: mux: Add support for control module split in several partitions Benoit Cousson
` (5 more replies)
0 siblings, 6 replies; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap; +Cc: Benoit Cousson
Hi,
Upon popular request, here is the series that apparently some people were
expected for some time :-)
Only ES1 is supported for the moment, ES2 will come soon (if not today, probably on Monday).
95% of the mux is similar but due to the replacement of some IP (unipro),
we do have a couple of differences.
I have added the complete mux dump in sdp4430 board file, just as a starting point,
in order to start getting rid of the X-loader mux settings.
For the moment I2C device init is the only user of the omap_mux_init_signal,
at least on OMAP4.
That removed the warning we have at the moment:
mux: Could not set signal i2c2_scl
mux: Could not set signal i2c2_sda
mux: Could not set signal i2c3_scl
mux: Could not set signal i2c3_sda
mux: Could not set signal i2c4_scl
mux: Could not set signal i2c4_sda
I hope that for long term, driver guys will move that to the proper device init file.
I removed as well the access to low level functions, because even if this
is needed by some driver (TBC), I don't think it is safe to expose such
low level accessor. We should probably add something for driver that
need to dynamically modify the mux settings at runtime. For example,
we can keep the mux data for pins that might be modified later, like
you did for GPIOs.
I tested it on OMAP4430 PAB & SDP and Santosh did some test with omap3_defconfig on
OMAP3430 and OMAP4430 SDP.
patches are based on mainline 2.6.36-rc5 and located here:
git://gitorious.org/omap-pm/linux.git ctrl-wip/mux-omap4
Regards,
Benoit
Benoit Cousson (5):
OMAP: mux: Add support for control module split in several partitions
OMAP: mux: Make low level function private
OMAP4: mux: Add data for OMAP4430 ES1
OMAP4: mux: Select CBL package for SDP4430 with ES1
OMAP4: mux: Temporary initial SDP4430 mux settings
arch/arm/mach-omap2/Kconfig | 4 +
arch/arm/mach-omap2/Makefile | 1 +
arch/arm/mach-omap2/board-4430sdp.c | 389 ++++++++++++++
arch/arm/mach-omap2/mux.c | 133 ++++--
arch/arm/mach-omap2/mux.h | 67 ++-
arch/arm/mach-omap2/mux2420.c | 22 +-
arch/arm/mach-omap2/mux2430.c | 22 +-
arch/arm/mach-omap2/mux34xx.c | 18 +-
arch/arm/mach-omap2/mux44xx.c | 944 +++++++++++++++++++++++++++++++++++
arch/arm/mach-omap2/mux44xx.h | 278 ++++++++++
10 files changed, 1791 insertions(+), 87 deletions(-)
create mode 100644 arch/arm/mach-omap2/mux44xx.c
create mode 100644 arch/arm/mach-omap2/mux44xx.h
^ permalink raw reply [flat|nested] 27+ messages in thread
* [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
@ 2010-09-24 9:15 ` Benoit Cousson
2010-09-25 0:22 ` Tony Lindgren
2010-09-24 9:15 ` [RFC 2/5] OMAP: mux: Make low level function private Benoit Cousson
` (4 subsequent siblings)
5 siblings, 1 reply; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap
Cc: Benoit Cousson, Tony Lindgren, Paul Walmsley, Kevin Hilman,
Santosh Shilimkar
Starting on OMAP4, the pin mux configuration is located in two
different partitions of the control module (CODE_PAD and WKUP_PAD).
The first one is inside the core power domain whereas the second
one is inside the wakeup.
Since each partition has a different physical base address, an
ID is added for each mux entry in order to identify the proper
partition and thus the correct base address.
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
arch/arm/mach-omap2/mux.c | 131 ++++++++++++++++++++++++++--------------
arch/arm/mach-omap2/mux.h | 44 +++++++++++---
arch/arm/mach-omap2/mux2420.c | 22 +++++--
arch/arm/mach-omap2/mux2430.c | 22 +++++--
arch/arm/mach-omap2/mux34xx.c | 18 +++++-
5 files changed, 165 insertions(+), 72 deletions(-)
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 35050d0..83e7686 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -1,10 +1,10 @@
/*
* linux/arch/arm/mach-omap2/mux.c
*
- * OMAP2 and OMAP3 pin multiplexing configurations
+ * OMAP2, OMAP3 and OMAP4 pin multiplexing configurations
*
- * Copyright (C) 2004 - 2008 Texas Instruments Inc.
- * Copyright (C) 2003 - 2008 Nokia Corporation
+ * Copyright (C) 2004 - 2010 Texas Instruments Inc.
+ * Copyright (C) 2003 - 2010 Nokia Corporation
*
* Written by Tony Lindgren
*
@@ -43,26 +43,32 @@
#define OMAP_MUX_BASE_OFFSET 0x30 /* Offset from CTRL_BASE */
#define OMAP_MUX_BASE_SZ 0x5ca
#define MUXABLE_GPIO_MODE3 BIT(0)
+#define MAX_PARTITIONS_NR 2
struct omap_mux_entry {
struct omap_mux mux;
struct list_head node;
};
-static unsigned long mux_phys;
-static void __iomem *mux_base;
static u8 omap_mux_flags;
-u16 omap_mux_read(u16 reg)
+static struct mux_partition mux_partitions[MAX_PARTITIONS_NR];
+static u32 mux_partitions_cnt;
+
+u16 omap_mux_read(u16 reg, u8 id)
{
+ void __iomem *mux_base = mux_partitions[id].base;
+
if (cpu_is_omap24xx())
return __raw_readb(mux_base + reg);
else
return __raw_readw(mux_base + reg);
}
-void omap_mux_write(u16 val, u16 reg)
+void omap_mux_write(u16 val, u16 reg, u8 id)
{
+ void __iomem *mux_base = mux_partitions[id].base;
+
if (cpu_is_omap24xx())
__raw_writeb(val, mux_base + reg);
else
@@ -71,8 +77,9 @@ void omap_mux_write(u16 val, u16 reg)
void omap_mux_write_array(struct omap_board_mux *board_mux)
{
- while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) {
- omap_mux_write(board_mux->value, board_mux->reg_offset);
+ while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) {
+ omap_mux_write(board_mux->value, board_mux->reg_offset,
+ board_mux->id);
board_mux++;
}
}
@@ -114,7 +121,7 @@ int __init omap_mux_init_gpio(int gpio, int val)
return -EINVAL;
}
- old_mode = omap_mux_read(gpio_mux->reg_offset);
+ old_mode = omap_mux_read(gpio_mux->reg_offset, gpio_mux->id);
mux_mode = val & ~(OMAP_MUX_NR_MODES - 1);
if (omap_mux_flags & MUXABLE_GPIO_MODE3)
mux_mode |= OMAP_MUX_MODE3;
@@ -122,7 +129,7 @@ int __init omap_mux_init_gpio(int gpio, int val)
mux_mode |= OMAP_MUX_MODE4;
pr_debug("mux: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n",
gpio_mux->muxnames[0], gpio, old_mode, mux_mode);
- omap_mux_write(mux_mode, gpio_mux->reg_offset);
+ omap_mux_write(mux_mode, gpio_mux->reg_offset, gpio_mux->id);
return 0;
}
@@ -160,12 +167,12 @@ int __init omap_mux_init_signal(char *muxname, int val)
u16 old_mode;
u16 mux_mode;
- old_mode = omap_mux_read(m->reg_offset);
+ old_mode = omap_mux_read(m->reg_offset, m->id);
mux_mode = val | i;
pr_debug("mux: Setting signal "
"%s.%s 0x%04x -> 0x%04x\n",
m0_entry, muxname, old_mode, mux_mode);
- omap_mux_write(mux_mode, m->reg_offset);
+ omap_mux_write(mux_mode, m->reg_offset, m->id);
found++;
}
}
@@ -194,6 +201,17 @@ int __init omap_mux_init_signal(char *muxname, int val)
flags[i] = #mask; \
}
+static void omap_mux_decode_id(struct seq_file *s, u8 id)
+{
+ if (id == PAD_CORE_ID)
+ seq_printf(s, "PAD_CORE_ID");
+ else if (id == PAD_WKUP_ID)
+ seq_printf(s, "PAD_WKUP_ID");
+ else
+ seq_printf(s, "INVALID");
+
+}
+
/* REVISIT: Add checking for non-optimal mux settings */
static inline void omap_mux_decode(struct seq_file *s, u16 val)
{
@@ -249,7 +267,7 @@ static inline void omap_mux_decode(struct seq_file *s, u16 val)
} while (i-- > 0);
}
-#define OMAP_MUX_DEFNAME_LEN 16
+#define OMAP_MUX_DEFNAME_LEN 32
static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)
{
@@ -273,13 +291,18 @@ static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)
}
m0_def[i] = toupper(m0_name[i]);
}
- val = omap_mux_read(m->reg_offset);
+ val = omap_mux_read(m->reg_offset, m->id);
mode = val & OMAP_MUX_MODE7;
-
- seq_printf(s, "OMAP%i_MUX(%s, ",
- cpu_is_omap34xx() ? 3 : 0, m0_def);
+ if (cpu_is_omap44xx()) {
+ seq_printf(s, "OMAP4_MUX(%s, ", m0_def);
+ omap_mux_decode_id(s, m->id);
+ seq_printf(s, ", ");
+ } else {
+ seq_printf(s, "OMAP%i_MUX(%s, ",
+ cpu_is_omap34xx() ? 3 : 0, m0_def);
+ }
omap_mux_decode(s, val);
- seq_printf(s, "),\n");
+ seq_printf(s, "),\t/* %s */\n", m->muxnames[mode]);
}
return 0;
@@ -303,8 +326,9 @@ static int omap_mux_dbg_signal_show(struct seq_file *s, void *unused)
const char *none = "NA";
u16 val;
int mode;
+ unsigned long mux_phys = mux_partitions[m->id].phys;
- val = omap_mux_read(m->reg_offset);
+ val = omap_mux_read(m->reg_offset, m->id);
mode = val & OMAP_MUX_MODE7;
seq_printf(s, "name: %s.%s (0x%08lx/0x%03x = 0x%04x), b %s, t %s\n",
@@ -359,7 +383,7 @@ static ssize_t omap_mux_dbg_signal_write(struct file *file,
seqf = file->private_data;
m = seqf->private;
- omap_mux_write((u16)val, m->reg_offset);
+ omap_mux_write((u16)val, m->reg_offset, m->id);
*ppos += count;
return count;
@@ -426,7 +450,7 @@ static int __init omap_mux_late_init(void)
list_for_each_entry_safe(e, tmp, &muxmodes, node) {
struct omap_mux *m = &e->mux;
- u16 mode = omap_mux_read(m->reg_offset);
+ u16 mode = omap_mux_read(m->reg_offset, m->id);
if (OMAP_MODE_GPIO(mode))
continue;
@@ -593,48 +617,48 @@ free:
#endif /* CONFIG_OMAP_MUX */
-static u16 omap_mux_get_by_gpio(int gpio)
+static struct omap_mux *omap_mux_get_by_gpio(int gpio)
{
struct omap_mux_entry *e;
- u16 offset = OMAP_MUX_TERMINATOR;
+ struct omap_mux *ret = NULL;
list_for_each_entry(e, &muxmodes, node) {
struct omap_mux *m = &e->mux;
if (m->gpio == gpio) {
- offset = m->reg_offset;
+ ret = m;
break;
}
}
- return offset;
+ return ret;
}
/* Needed for dynamic muxing of GPIO pins for off-idle */
u16 omap_mux_get_gpio(int gpio)
{
- u16 offset;
+ struct omap_mux *m;
- offset = omap_mux_get_by_gpio(gpio);
- if (offset == OMAP_MUX_TERMINATOR) {
+ m = omap_mux_get_by_gpio(gpio);
+ if (!m || m->reg_offset == OMAP_MUX_TERMINATOR) {
pr_err("mux: Could not get gpio%i\n", gpio);
- return offset;
+ return OMAP_MUX_TERMINATOR;
}
- return omap_mux_read(offset);
+ return omap_mux_read(m->reg_offset, m->id);
}
/* Needed for dynamic muxing of GPIO pins for off-idle */
void omap_mux_set_gpio(u16 val, int gpio)
{
- u16 offset;
+ struct omap_mux *m;
- offset = omap_mux_get_by_gpio(gpio);
- if (offset == OMAP_MUX_TERMINATOR) {
+ m = omap_mux_get_by_gpio(gpio);
+ if (!m || m->reg_offset == OMAP_MUX_TERMINATOR) {
pr_err("mux: Could not set gpio%i\n", gpio);
return;
}
- omap_mux_write(val, offset);
+ omap_mux_write(val, m->reg_offset, m->id);
}
static struct omap_mux * __init omap_mux_list_add(struct omap_mux *src)
@@ -727,22 +751,31 @@ static void omap_mux_init_signals(struct omap_board_mux *board_mux)
#endif
-int __init omap_mux_init(u32 mux_pbase, u32 mux_size,
- struct omap_mux *superset,
- struct omap_mux *package_subset,
- struct omap_board_mux *board_mux,
- struct omap_ball *package_balls)
+int __init omap_mux_init(struct mux_partition *partitions, u32 partitions_cnt,
+ struct omap_mux *superset,
+ struct omap_mux *package_subset,
+ struct omap_board_mux *board_mux,
+ struct omap_ball *package_balls)
{
- if (mux_base)
+ int i;
+
+ if (partitions_cnt == 0 || partitions_cnt > MAX_PARTITIONS_NR)
return -EBUSY;
- mux_phys = mux_pbase;
- mux_base = ioremap(mux_pbase, mux_size);
- if (!mux_base) {
- pr_err("mux: Could not ioremap\n");
- return -ENODEV;
+ for (i = 0; i < partitions_cnt; i++) {
+ mux_partitions[i].size = partitions[i].size;
+ mux_partitions[i].phys = partitions[i].phys;
+ mux_partitions[i].base = ioremap(partitions[i].phys,
+ partitions[i].size);
+ if (!mux_partitions[i].base) {
+ pr_err("mux: Could not ioremap on partition: "
+ "%d at 0x%08x\n", i, partitions[i].phys);
+ goto unmap;
+ }
}
+ mux_partitions_cnt = partitions_cnt;
+
if (cpu_is_omap24xx())
omap_mux_flags = MUXABLE_GPIO_MODE3;
@@ -751,5 +784,11 @@ int __init omap_mux_init(u32 mux_pbase, u32 mux_size,
omap_mux_init_signals(board_mux);
return 0;
+
+unmap:
+ for (i--; i >= 0; i--)
+ iounmap(mux_partitions[i].base);
+
+ return -ENODEV;
}
diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
index a8e040c..9b28576 100644
--- a/arch/arm/mach-omap2/mux.h
+++ b/arch/arm/mach-omap2/mux.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009 Nokia
- * Copyright (C) 2009 Texas Instruments
+ * Copyright (C) 2009-2010 Texas Instruments
*
* 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
@@ -66,18 +66,24 @@
#define OMAP_PACKAGE_ZAF 1 /* 2420 447-pin SIP */
-#define OMAP_MUX_NR_MODES 8 /* Available modes */
-#define OMAP_MUX_NR_SIDES 2 /* Bottom & top */
+#define OMAP_MUX_NR_MODES 8 /* Available modes */
+#define OMAP_MUX_NR_SIDES 2 /* Bottom & top */
+
+/* identifier of the pad_conf partition introduced in OMAP4 */
+#define PAD_CORE_ID 0
+#define PAD_WKUP_ID 1
/**
* struct omap_mux - data for omap mux register offset and it's value
* @reg_offset: mux register offset from the mux base
* @gpio: GPIO number
+ * @id: Partition identifier
* @muxnames: available signal modes for a ball
*/
struct omap_mux {
u16 reg_offset;
u16 gpio;
+ u8 id;
#ifdef CONFIG_OMAP_MUX
char *muxnames[OMAP_MUX_NR_MODES];
#ifdef CONFIG_DEBUG_FS
@@ -89,10 +95,12 @@ struct omap_mux {
/**
* struct omap_ball - data for balls on omap package
* @reg_offset: mux register offset from the mux base
+ * @id: Partition identifier
* @balls: available balls on the package
*/
struct omap_ball {
u16 reg_offset;
+ u8 id;
char *balls[OMAP_MUX_NR_SIDES];
};
@@ -100,10 +108,24 @@ struct omap_ball {
* struct omap_board_mux - data for initializing mux registers
* @reg_offset: mux register offset from the mux base
* @mux_value: desired mux value to set
+ * @id: Partition identifier
*/
struct omap_board_mux {
u16 reg_offset;
u16 value;
+ u8 id;
+};
+
+/**
+ * struct mux_partition - data containing physical address and partition size
+ * @phys: physical address
+ * @size: partition size
+ * @base: virtual address after ioremap
+ */
+struct mux_partition {
+ u32 phys;
+ u32 size;
+ void __iomem *base;
};
#if defined(CONFIG_OMAP_MUX)
@@ -153,18 +175,20 @@ void omap_mux_set_gpio(u16 val, int gpio);
/**
* omap_mux_read() - read mux register
* @mux_offset: Offset of the mux register
+ * @id: identifier of the control module partition
*
*/
-u16 omap_mux_read(u16 mux_offset);
+u16 omap_mux_read(u16 mux_offset, u8 id);
/**
* omap_mux_write() - write mux register
* @val: New mux register value
* @mux_offset: Offset of the mux register
+ * @id: identifier of the control module partition
*
* This should be only needed for dynamic remuxing of non-gpio signals.
*/
-void omap_mux_write(u16 val, u16 mux_offset);
+void omap_mux_write(u16 val, u16 mux_offset, u8 id);
/**
* omap_mux_write_array() - write an array of mux registers
@@ -198,8 +222,8 @@ int omap3_mux_init(struct omap_board_mux *board_mux, int flags);
/**
* omap_mux_init - private mux init function, do not call
*/
-int omap_mux_init(u32 mux_pbase, u32 mux_size,
- struct omap_mux *superset,
- struct omap_mux *package_subset,
- struct omap_board_mux *board_mux,
- struct omap_ball *package_balls);
+int omap_mux_init(struct mux_partition *partitions, u32 partitions_cnt,
+ struct omap_mux *superset,
+ struct omap_mux *package_subset,
+ struct omap_board_mux *board_mux,
+ struct omap_ball *package_balls);
diff --git a/arch/arm/mach-omap2/mux2420.c b/arch/arm/mach-omap2/mux2420.c
index fdb04a7..5760c53 100644
--- a/arch/arm/mach-omap2/mux2420.c
+++ b/arch/arm/mach-omap2/mux2420.c
@@ -14,19 +14,21 @@
#ifdef CONFIG_OMAP_MUX
-#define _OMAP2420_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+#define _OMAP2420_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
{ \
.reg_offset = (OMAP2420_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
.muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 }, \
+ .id = (PAD_CORE_ID), \
}
#else
-#define _OMAP2420_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+#define _OMAP2420_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
{ \
.reg_offset = (OMAP2420_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
+ .id = (PAD_CORE_ID), \
}
#endif
@@ -35,6 +37,7 @@
{ \
.reg_offset = (OMAP2420_CONTROL_PADCONF_##M0##_OFFSET), \
.balls = { bb, bt }, \
+ .id = (PAD_CORE_ID), \
}
/*
@@ -667,6 +670,13 @@ struct omap_ball __initdata omap2420_pop_ball[] = {
#define omap2420_pop_ball NULL
#endif
+static __initdata struct mux_partition omap2420_mux_partitions[] = {
+ [PAD_CORE_ID] = {
+ .phys = OMAP2420_CONTROL_PADCONF_MUX_PBASE,
+ .size = OMAP2420_CONTROL_PADCONF_MUX_SIZE,
+ },
+};
+
int __init omap2420_mux_init(struct omap_board_mux *board_subset, int flags)
{
struct omap_ball *package_balls = NULL;
@@ -681,8 +691,8 @@ int __init omap2420_mux_init(struct omap_board_mux *board_subset, int flags)
pr_warning("mux: No ball data available for omap2420 package\n");
}
- return omap_mux_init(OMAP2420_CONTROL_PADCONF_MUX_PBASE,
- OMAP2420_CONTROL_PADCONF_MUX_SIZE,
- omap2420_muxmodes, NULL, board_subset,
- package_balls);
+ return omap_mux_init(omap2420_mux_partitions,
+ ARRAY_SIZE(omap2420_mux_partitions),
+ omap2420_muxmodes, NULL, board_subset,
+ package_balls);
}
diff --git a/arch/arm/mach-omap2/mux2430.c b/arch/arm/mach-omap2/mux2430.c
index 7dcaaa8..69fd7b8 100644
--- a/arch/arm/mach-omap2/mux2430.c
+++ b/arch/arm/mach-omap2/mux2430.c
@@ -14,19 +14,21 @@
#ifdef CONFIG_OMAP_MUX
-#define _OMAP2430_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+#define _OMAP2430_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
{ \
.reg_offset = (OMAP2430_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
.muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 }, \
+ .id = (PAD_CORE_ID), \
}
#else
-#define _OMAP2430_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+#define _OMAP2430_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
{ \
.reg_offset = (OMAP2430_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
+ .id = (PAD_CORE_ID), \
}
#endif
@@ -35,6 +37,7 @@
{ \
.reg_offset = (OMAP2430_CONTROL_PADCONF_##M0##_OFFSET), \
.balls = { bb, bt }, \
+ .id = (PAD_CORE_ID), \
}
/*
@@ -772,6 +775,13 @@ struct omap_ball __initdata omap2430_pop_ball[] = {
#define omap2430_pop_ball NULL
#endif
+static __initdata struct mux_partition omap2430_mux_partitions[] = {
+ [PAD_CORE_ID] = {
+ .phys = OMAP2430_CONTROL_PADCONF_MUX_PBASE,
+ .size = OMAP2430_CONTROL_PADCONF_MUX_SIZE,
+ },
+};
+
int __init omap2430_mux_init(struct omap_board_mux *board_subset, int flags)
{
struct omap_ball *package_balls = NULL;
@@ -784,8 +794,8 @@ int __init omap2430_mux_init(struct omap_board_mux *board_subset, int flags)
pr_warning("mux: No ball data available for omap2420 package\n");
}
- return omap_mux_init(OMAP2430_CONTROL_PADCONF_MUX_PBASE,
- OMAP2430_CONTROL_PADCONF_MUX_SIZE,
- omap2430_muxmodes, NULL, board_subset,
- package_balls);
+ return omap_mux_init(omap2430_mux_partitions,
+ ARRAY_SIZE(omap2430_mux_partitions),
+ omap2430_muxmodes, NULL, board_subset,
+ package_balls);
}
diff --git a/arch/arm/mach-omap2/mux34xx.c b/arch/arm/mach-omap2/mux34xx.c
index f64d7ee..7419d2c 100644
--- a/arch/arm/mach-omap2/mux34xx.c
+++ b/arch/arm/mach-omap2/mux34xx.c
@@ -19,6 +19,7 @@
.reg_offset = (OMAP3_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
.muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 }, \
+ .id = (PAD_CORE_ID), \
}
#else
@@ -27,6 +28,7 @@
{ \
.reg_offset = (OMAP3_CONTROL_PADCONF_##M0##_OFFSET), \
.gpio = (g), \
+ .id = (PAD_CORE_ID), \
}
#endif
@@ -35,6 +37,7 @@
{ \
.reg_offset = (OMAP3_CONTROL_PADCONF_##M0##_OFFSET), \
.balls = { bb, bt }, \
+ .id = (PAD_CORE_ID), \
}
/*
@@ -2026,6 +2029,13 @@ struct omap_ball __initdata omap36xx_cbp_ball[] = {
#define omap36xx_cbp_ball NULL
#endif
+static __initdata struct mux_partition omap3_mux_partitions[] = {
+ [PAD_CORE_ID] = {
+ .phys = OMAP3_CONTROL_PADCONF_MUX_PBASE,
+ .size = OMAP3_CONTROL_PADCONF_MUX_SIZE,
+ },
+};
+
int __init omap3_mux_init(struct omap_board_mux *board_subset, int flags)
{
struct omap_mux *package_subset;
@@ -2053,8 +2063,8 @@ int __init omap3_mux_init(struct omap_board_mux *board_subset, int flags)
return -EINVAL;
}
- return omap_mux_init(OMAP3_CONTROL_PADCONF_MUX_PBASE,
- OMAP3_CONTROL_PADCONF_MUX_SIZE,
- omap3_muxmodes, package_subset, board_subset,
- package_balls);
+ return omap_mux_init(omap3_mux_partitions,
+ ARRAY_SIZE(omap3_mux_partitions),
+ omap3_muxmodes, package_subset, board_subset,
+ package_balls);
}
--
1.6.0.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [RFC 2/5] OMAP: mux: Make low level function private
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
2010-09-24 9:15 ` [RFC 1/5] OMAP: mux: Add support for control module split in several partitions Benoit Cousson
@ 2010-09-24 9:15 ` Benoit Cousson
2010-09-24 23:09 ` Gadiyar, Anand
2010-09-24 9:15 ` [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1 Benoit Cousson
` (3 subsequent siblings)
5 siblings, 1 reply; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap; +Cc: Benoit Cousson, Tony Lindgren, Paul Walmsley, Kevin Hilman
omap_mux_read / omap_mux_write should not be accessed directly
outside the mux framework.
Do we really have use case that require dynamic mux change beside
GPIO?
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
---
arch/arm/mach-omap2/mux.c | 4 ++--
arch/arm/mach-omap2/mux.h | 18 ------------------
2 files changed, 2 insertions(+), 20 deletions(-)
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 83e7686..8285cb8 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -55,7 +55,7 @@ static u8 omap_mux_flags;
static struct mux_partition mux_partitions[MAX_PARTITIONS_NR];
static u32 mux_partitions_cnt;
-u16 omap_mux_read(u16 reg, u8 id)
+static u16 omap_mux_read(u16 reg, u8 id)
{
void __iomem *mux_base = mux_partitions[id].base;
@@ -65,7 +65,7 @@ u16 omap_mux_read(u16 reg, u8 id)
return __raw_readw(mux_base + reg);
}
-void omap_mux_write(u16 val, u16 reg, u8 id)
+static void omap_mux_write(u16 val, u16 reg, u8 id)
{
void __iomem *mux_base = mux_partitions[id].base;
diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
index 9b28576..da67501 100644
--- a/arch/arm/mach-omap2/mux.h
+++ b/arch/arm/mach-omap2/mux.h
@@ -173,24 +173,6 @@ u16 omap_mux_get_gpio(int gpio);
void omap_mux_set_gpio(u16 val, int gpio);
/**
- * omap_mux_read() - read mux register
- * @mux_offset: Offset of the mux register
- * @id: identifier of the control module partition
- *
- */
-u16 omap_mux_read(u16 mux_offset, u8 id);
-
-/**
- * omap_mux_write() - write mux register
- * @val: New mux register value
- * @mux_offset: Offset of the mux register
- * @id: identifier of the control module partition
- *
- * This should be only needed for dynamic remuxing of non-gpio signals.
- */
-void omap_mux_write(u16 val, u16 mux_offset, u8 id);
-
-/**
* omap_mux_write_array() - write an array of mux registers
* @board_mux: Array of mux registers terminated by MAP_MUX_TERMINATOR
*
--
1.6.0.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
2010-09-24 9:15 ` [RFC 1/5] OMAP: mux: Add support for control module split in several partitions Benoit Cousson
2010-09-24 9:15 ` [RFC 2/5] OMAP: mux: Make low level function private Benoit Cousson
@ 2010-09-24 9:15 ` Benoit Cousson
2010-09-24 23:18 ` Anand Gadiyar
2010-09-24 9:15 ` [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1 Benoit Cousson
` (2 subsequent siblings)
5 siblings, 1 reply; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap; +Cc: Benoit Cousson, Tony Lindgren, Paul Walmsley, Kevin Hilman
Add data for OMAP4430 generated from HW pinout & register database.
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
---
arch/arm/mach-omap2/Kconfig | 3 +
arch/arm/mach-omap2/Makefile | 1 +
arch/arm/mach-omap2/mux.c | 2 +-
arch/arm/mach-omap2/mux.h | 13 +
arch/arm/mach-omap2/mux44xx.c | 944 +++++++++++++++++++++++++++++++++++++++++
arch/arm/mach-omap2/mux44xx.h | 278 ++++++++++++
6 files changed, 1240 insertions(+), 1 deletions(-)
create mode 100644 arch/arm/mach-omap2/mux44xx.c
create mode 100644 arch/arm/mach-omap2/mux44xx.h
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index b48bacf..6aede64 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -84,6 +84,9 @@ config OMAP_PACKAGE_CUS
config OMAP_PACKAGE_CBP
bool
+config OMAP_PACKAGE_CBL
+ bool
+
comment "OMAP Board Type"
depends on ARCH_OMAP2PLUS
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 88d3a1e..ca34bf2 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -41,6 +41,7 @@ AFLAGS_sram34xx.o :=-Wa,-march=armv7-a
obj-$(CONFIG_ARCH_OMAP2420) += mux2420.o
obj-$(CONFIG_ARCH_OMAP2430) += mux2430.o
obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o
+obj-$(CONFIG_ARCH_OMAP4) += mux44xx.o
# SMS/SDRC
obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 8285cb8..813f034 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -776,7 +776,7 @@ int __init omap_mux_init(struct mux_partition *partitions, u32 partitions_cnt,
mux_partitions_cnt = partitions_cnt;
- if (cpu_is_omap24xx())
+ if (cpu_is_omap24xx() || cpu_is_omap44xx())
omap_mux_flags = MUXABLE_GPIO_MODE3;
omap_mux_init_package(superset, package_subset, package_balls);
diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
index da67501..0445123 100644
--- a/arch/arm/mach-omap2/mux.h
+++ b/arch/arm/mach-omap2/mux.h
@@ -10,6 +10,7 @@
#include "mux2420.h"
#include "mux2430.h"
#include "mux34xx.h"
+#include "mux44xx.h"
#define OMAP_MUX_TERMINATOR 0xffff
@@ -37,6 +38,9 @@
#define OMAP_OFF_PULL_UP (1 << 13)
#define OMAP_WAKEUP_EN (1 << 14)
+/* 44xx specific mux bit defines */
+#define OMAP_WAKEUP_EVENT (1 << 15)
+
/* Active pin states */
#define OMAP_PIN_OUTPUT 0
#define OMAP_PIN_INPUT OMAP_INPUT_EN
@@ -58,6 +62,8 @@
/* Flags for omap_mux_init */
#define OMAP_PACKAGE_MASK 0xffff
+#define OMAP_PACKAGE_CBS 8 /* 547-pin 0.40 0.40 */
+#define OMAP_PACKAGE_CBL 7 /* 547-pin 0.40 0.40 */
#define OMAP_PACKAGE_CBP 6 /* 515-pin 0.40 0.50 */
#define OMAP_PACKAGE_CUS 5 /* 423-pin 0.65 */
#define OMAP_PACKAGE_CBB 4 /* 515-pin 0.40 0.50 */
@@ -202,6 +208,13 @@ int omap2430_mux_init(struct omap_board_mux *board_mux, int flags);
int omap3_mux_init(struct omap_board_mux *board_mux, int flags);
/**
+ * omap4_mux_init() - initialize mux system with board specific set
+ * @board_mux: Board specific mux table
+ * @flags: OMAP package type used for the board
+ */
+int omap4_mux_init(struct omap_board_mux *board_mux, int flags);
+
+/**
* omap_mux_init - private mux init function, do not call
*/
int omap_mux_init(struct mux_partition *partitions, u32 partitions_cnt,
diff --git a/arch/arm/mach-omap2/mux44xx.c b/arch/arm/mach-omap2/mux44xx.c
new file mode 100644
index 0000000..839a905
--- /dev/null
+++ b/arch/arm/mach-omap2/mux44xx.c
@@ -0,0 +1,944 @@
+\
+/*
+ * OMAP44xx ES2.0 pin mux definition
+ *
+ * Copyright (C) 2010 Texas Instruments, Inc.
+ *
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * - Based on mux34xx.c done by Tony Lindgren <tony@atomide.com>
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * 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/init.h>
+
+#include "mux.h"
+
+#ifdef CONFIG_OMAP_MUX
+
+#define _OMAP4_MUXENTRY(M0, i, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+{ \
+ .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
+ .id = (i), \
+ .gpio = (g), \
+ .muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 }, \
+}
+
+#else
+
+#define _OMAP4_MUXENTRY(M0, i, g, m0, m1, m2, m3, m4, m5, m6, m7) \
+{ \
+ .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
+ .id = (i), \
+ .gpio = (g), \
+}
+
+#endif
+
+#define _OMAP4_BALLENTRY(M0, i, bb, bt) \
+{ \
+ .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
+ .id = (i), \
+ .balls = { bb, bt }, \
+}
+
+/*
+ * Superset of all mux modes for omap4
+ */
+static struct omap_mux __initdata omap4_muxmodes[] = {
+ _OMAP4_MUXENTRY(SYS_NRESWARM, PAD_WKUP_ID, 0, "sys_nreswarm", NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(UART3_RX_IRRX, PAD_CORE_ID, 143, "uart3_rx_irrx",
+ "dmtimer8_pwm_evt", NULL, "gpio_143", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_HSIC_STROBE, PAD_CORE_ID, 170,
+ "usbb2_hsic_strobe", NULL, NULL, "gpio_170", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT4, PAD_CORE_ID, 188, "sys_boot4", NULL, NULL,
+ "gpio_188", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UART3_TX_IRTX, PAD_CORE_ID, 144, "uart3_tx_irtx",
+ "dmtimer9_pwm_evt", NULL, "gpio_144", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC5_DAT0, PAD_CORE_ID, 147, "sdmmc5_dat0",
+ "mcspi2_somi", "usbc1_icusb_rcv", "gpio_147", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC5_DAT1, PAD_CORE_ID, 148, "sdmmc5_dat1", NULL,
+ "usbc1_icusb_txen", "gpio_148", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC5_DAT2, PAD_CORE_ID, 149, "sdmmc5_dat2",
+ "mcspi2_cs1", NULL, "gpio_149", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC5_DAT3, PAD_CORE_ID, 150, "sdmmc5_dat3",
+ "mcspi2_cs0", NULL, "gpio_150", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_CLK, PAD_CORE_ID, 157,
+ "usbb2_ulpitll_clk", "usbb2_ulpiphy_clk",
+ "sdmmc4_cmd", "gpio_157", "hsi2_cawake", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SIM_IO, PAD_WKUP_ID, 0, "sim_io", NULL, NULL,
+ "gpio_wk0", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_RX2, PAD_CORE_ID, 0, "unipro_rx2", "kpd_row4",
+ NULL, "gpi_2", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT5, PAD_CORE_ID, 189, "sys_boot5", NULL, NULL,
+ "gpio_189", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_RX0, PAD_CORE_ID, 0, "unipro_rx0", "kpd_row0",
+ NULL, "gpi_175", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_RX1, PAD_CORE_ID, 0, "unipro_rx1", "kpd_row2",
+ NULL, "gpi_177", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI1_CS2, PAD_CORE_ID, 139, "mcspi1_cs2",
+ "uart1_cts", "slimbus2_clock", "gpio_139", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI1_CS3, PAD_CORE_ID, 140, "mcspi1_cs3",
+ "uart1_rts", "slimbus2_data", "gpio_140", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI1_CS0, PAD_CORE_ID, 137, "mcspi1_cs0", NULL,
+ NULL, "gpio_137", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI1_CS1, PAD_CORE_ID, 138, "mcspi1_cs1",
+ "uart1_rx", NULL, "gpio_138", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI4_CS0, PAD_CORE_ID, 154, "mcspi4_cs0",
+ "sdmmc4_dat3", NULL, "gpio_154", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NADV_ALE, PAD_CORE_ID, 56, "gpmc_nadv_ale",
+ "dsi1_te1", NULL, "gpio_56", "sys_ndmareq3", NULL,
+ NULL, NULL),
+ _OMAP4_MUXENTRY(MCSPI4_SIMO, PAD_CORE_ID, 152, "mcspi4_simo",
+ "sdmmc4_cmd", NULL, "gpio_152", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UART3_RTS_SD, PAD_CORE_ID, 142, "uart3_rts_sd", NULL,
+ NULL, "gpio_142", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT2, PAD_CORE_ID, 186, "sys_boot2", NULL, NULL,
+ "gpio_186", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(JTAG_TDI, PAD_WKUP_ID, 0, "jtag_tdi", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(JTAG_TDO, PAD_WKUP_ID, 0, "jtag_tdo", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT1, PAD_CORE_ID, 162,
+ "usbb2_ulpitll_dat1", "usbb2_ulpiphy_dat1",
+ "sdmmc4_dat3", "gpio_162", "hsi2_acdata",
+ "dispc2_data19", NULL, "reserved"),
+ _OMAP4_MUXENTRY(GPMC_A18, PAD_CORE_ID, 42, "gpmc_a18", "kpd_row6",
+ "c2c_datain2", "gpio_42", "venc_656_data2", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A19, PAD_CORE_ID, 43, "gpmc_a19", "kpd_row7",
+ "c2c_datain3", "gpio_43", "venc_656_data3", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A16, PAD_CORE_ID, 40, "gpmc_a16", "kpd_row4",
+ "c2c_datain0", "gpio_40", "venc_656_data0", NULL,
+ NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_A17, PAD_CORE_ID, 41, "gpmc_a17", "kpd_row5",
+ "c2c_datain1", "gpio_41", "venc_656_data1", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_HSIC_DATA, PAD_CORE_ID, 169, "usbb2_hsic_data",
+ NULL, NULL, "gpio_169", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_PWR_REQ, PAD_WKUP_ID, 0, "sys_pwr_req", NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_STP, PAD_CORE_ID, 85,
+ "usbb1_ulpitll_stp", "hsi1_cadata", "mcbsp4_clkr",
+ "gpio_85", "usbb1_ulpiphy_stp", "usbb1_mm_rxdp",
+ "hw_dbg21", "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_PWRON_RESET_OUT, PAD_WKUP_ID, 29,
+ "sys_pwron_reset_out", NULL, NULL, "gpio_wk29", NULL,
+ NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(SDMMC1_CLK, PAD_CORE_ID, 100, "sdmmc1_clk", NULL,
+ "dpm_emu19", "gpio_100", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_NXT, PAD_CORE_ID, 87,
+ "usbb1_ulpitll_nxt", "hsi1_acready", "mcbsp4_fsx",
+ "gpio_87", "usbb1_ulpiphy_nxt", "usbb1_mm_rxdm",
+ "hw_dbg23", "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT7, PAD_CORE_ID, 95,
+ "usbb1_ulpitll_dat7", "dmtimer11_pwm_evt",
+ "abe_mcbsp3_fsx", "gpio_95", "usbb1_ulpiphy_dat7",
+ "abe_dmic_clk3", "hw_dbg31", "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT7, PAD_CORE_ID, 168,
+ "usbb2_ulpitll_dat7", "usbb2_ulpiphy_dat7",
+ "sdmmc3_clk", "gpio_168", "mcspi3_clk",
+ "dispc2_data11", NULL, "reserved"),
+ _OMAP4_MUXENTRY(MCSPI1_CLK, PAD_CORE_ID, 134, "mcspi1_clk", NULL,
+ NULL, "gpio_134", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT5, PAD_CORE_ID, 166,
+ "usbb2_ulpitll_dat5", "usbb2_ulpiphy_dat5",
+ "sdmmc3_dat3", "gpio_166", "mcspi3_cs0",
+ "dispc2_data13", NULL, "reserved"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT4, PAD_CORE_ID, 165,
+ "usbb2_ulpitll_dat4", "usbb2_ulpiphy_dat4",
+ "sdmmc3_dat0", "gpio_165", "mcspi3_somi",
+ "dispc2_data14", NULL, "reserved"),
+ _OMAP4_MUXENTRY(UNIPRO_RY1, PAD_CORE_ID, 0, "unipro_ry1", "kpd_row3",
+ NULL, "gpi_178", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_RY0, PAD_CORE_ID, 0, "unipro_ry0", "kpd_row1",
+ NULL, "gpi_176", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP2_FSX, PAD_CORE_ID, 113, "abe_mcbsp2_fsx",
+ "mcspi2_cs0", "abe_mcasp_afsx", "gpio_113",
+ "usbb2_mm_txen", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NBE1, PAD_CORE_ID, 60, "gpmc_nbe1", NULL,
+ "c2c_dataout5", "gpio_60", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_AD15, PAD_CORE_ID, 39, "gpmc_ad15", "kpd_col3",
+ "c2c_data8", "gpio_39", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD14, PAD_CORE_ID, 38, "gpmc_ad14", "kpd_col2",
+ "c2c_data9", "gpio_38", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD11, PAD_CORE_ID, 35, "gpmc_ad11", "kpd_row3",
+ "c2c_data12", "gpio_35", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD10, PAD_CORE_ID, 34, "gpmc_ad10", "kpd_row2",
+ "c2c_data13", "gpio_34", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD13, PAD_CORE_ID, 37, "gpmc_ad13", "kpd_col1",
+ "c2c_data10", "gpio_37", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD12, PAD_CORE_ID, 36, "gpmc_ad12", "kpd_col0",
+ "c2c_data11", "gpio_36", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(HDQ_SIO, PAD_CORE_ID, 127, "hdq_sio", "i2c3_sccb",
+ "i2c2_sccb", "gpio_127", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(JTAG_TMS_TMSC, PAD_WKUP_ID, 0, "jtag_tms_tmsc", NULL,
+ NULL, NULL, NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UART4_RX, PAD_CORE_ID, 155, "uart4_rx", "sdmmc4_dat2",
+ NULL, "gpio_155", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT3, PAD_CORE_ID, 91,
+ "usbb1_ulpitll_dat3", "hsi1_caready", NULL, "gpio_91",
+ "usbb1_ulpiphy_dat3", "usbb1_mm_txen", "hw_dbg27",
+ "safe_mode"),
+ _OMAP4_MUXENTRY(I2C1_SDA, PAD_CORE_ID, 0, "i2c1_sda", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(ABE_MCBSP1_CLKX, PAD_CORE_ID, 114, "abe_mcbsp1_clkx",
+ "abe_slimbus1_clock", NULL, "gpio_114", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_AD9, PAD_CORE_ID, 33, "gpmc_ad9", "kpd_row1",
+ "c2c_data14", "gpio_33", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD8, PAD_CORE_ID, 32, "gpmc_ad8", "kpd_row0",
+ "c2c_data15", "gpio_32", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD5, PAD_CORE_ID, 0, "gpmc_ad5", "sdmmc2_dat5",
+ "sdmmc2_dir_dat1", NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(FREF_CLK4_OUT, PAD_WKUP_ID, 8, "fref_clk4_out", NULL,
+ NULL, "gpio_wk8", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD7, PAD_CORE_ID, 0, "gpmc_ad7", "sdmmc2_dat7",
+ "sdmmc2_clk_fdbk", NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD1, PAD_CORE_ID, 0, "gpmc_ad1", "sdmmc2_dat1",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD0, PAD_CORE_ID, 0, "gpmc_ad0", "sdmmc2_dat0",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD3, PAD_CORE_ID, 0, "gpmc_ad3", "sdmmc2_dat3",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_AD2, PAD_CORE_ID, 0, "gpmc_ad2", "sdmmc2_dat2",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(USBA0_OTG_CE, PAD_CORE_ID, 0, "usba0_otg_ce", NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(JTAG_TCK, PAD_WKUP_ID, 0, "jtag_tck", NULL, NULL,
+ NULL, NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT0, PAD_CORE_ID, 88,
+ "usbb1_ulpitll_dat0", "hsi1_acwake", "mcbsp4_clkx",
+ "gpio_88", "usbb1_ulpiphy_dat0", "usbb1_mm_rxrcv",
+ "hw_dbg24", "safe_mode"),
+ _OMAP4_MUXENTRY(CSI22_DX1, PAD_CORE_ID, 0, "csi22_dx1", NULL, NULL,
+ "gpi_79", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI22_DX0, PAD_CORE_ID, 0, "csi22_dx0", NULL, NULL,
+ "gpi_77", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C3_SCL, PAD_CORE_ID, 130, "i2c3_scl", NULL, NULL,
+ "gpio_130", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C4_SCL, PAD_CORE_ID, 132, "i2c4_scl", NULL, NULL,
+ "gpio_132", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C3_SDA, PAD_CORE_ID, 131, "i2c3_sda", NULL, NULL,
+ "gpio_131", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI1_SIMO, PAD_CORE_ID, 136, "mcspi1_simo", NULL,
+ NULL, "gpio_136", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_XTAL_IN, PAD_WKUP_ID, 0, "fref_xtal_in", NULL,
+ NULL, NULL, "c2c_wakereqin", NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(SDMMC1_DAT0, PAD_CORE_ID, 102, "sdmmc1_dat0", NULL,
+ "dpm_emu18", "gpio_102", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT1, PAD_CORE_ID, 103, "sdmmc1_dat1", NULL,
+ "dpm_emu17", "gpio_103", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT2, PAD_CORE_ID, 104, "sdmmc1_dat2", NULL,
+ "dpm_emu16", "gpio_104", "jtag_tms_tmsc", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_CLK3_REQ, PAD_WKUP_ID, 30, "fref_clk3_req",
+ "fref_clk1_req", "sys_drm_msecure", "gpio_wk30",
+ "c2c_wakereqin", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT4, PAD_CORE_ID, 106, "sdmmc1_dat4", NULL,
+ NULL, "gpio_106", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT5, PAD_CORE_ID, 107, "sdmmc1_dat5", NULL,
+ NULL, "gpio_107", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT6, PAD_CORE_ID, 108, "sdmmc1_dat6", NULL,
+ NULL, "gpio_108", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT7, PAD_CORE_ID, 109, "sdmmc1_dat7", NULL,
+ NULL, "gpio_109", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CAM_SHUTTER, PAD_CORE_ID, 81, "cam_shutter", NULL,
+ NULL, "gpio_81", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UART2_RX, PAD_CORE_ID, 125, "uart2_rx", "sdmmc3_dat0",
+ NULL, "gpio_125", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT2, PAD_CORE_ID, 163,
+ "usbb2_ulpitll_dat2", "usbb2_ulpiphy_dat2",
+ "sdmmc3_dat2", "gpio_163", "hsi2_acflag",
+ "dispc2_data18", NULL, "reserved"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT1, PAD_CORE_ID, 89,
+ "usbb1_ulpitll_dat1", "hsi1_acdata", "mcbsp4_dx",
+ "gpio_89", "usbb1_ulpiphy_dat1", "usbb1_mm_txse0",
+ "hw_dbg25", "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_CLK3_OUT, PAD_WKUP_ID, 31, "fref_clk3_out",
+ "fref_clk2_req", "sys_secure_indicator", "gpio_wk31",
+ "c2c_wakereqout", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_CLK2_OUT, PAD_CORE_ID, 182, "fref_clk2_out",
+ NULL, NULL, "gpio_182", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UART2_CTS, PAD_CORE_ID, 123, "uart2_cts",
+ "sdmmc3_clk", NULL, "gpio_123", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SIM_PWRCTRL, PAD_WKUP_ID, 4, "sim_pwrctrl", NULL,
+ NULL, "gpio_wk4", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DY3, PAD_CORE_ID, 0, "csi21_dy3", NULL, NULL,
+ "gpi_74", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DY2, PAD_CORE_ID, 0, "csi21_dy2", NULL, NULL,
+ "gpi_72", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DY1, PAD_CORE_ID, 0, "csi21_dy1", NULL, NULL,
+ "gpi_70", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DY0, PAD_CORE_ID, 0, "csi21_dy0", NULL, NULL,
+ "gpi_68", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DY4, PAD_CORE_ID, 0, "csi21_dy4", NULL, NULL,
+ "gpi_76", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI22_DY0, PAD_CORE_ID, 0, "csi22_dy0", NULL, NULL,
+ "gpi_78", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI22_DY1, PAD_CORE_ID, 0, "csi22_dy1", NULL, NULL,
+ "gpi_80", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C4_SDA, PAD_CORE_ID, 133, "i2c4_sda", NULL, NULL,
+ "gpio_133", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_AD6, PAD_CORE_ID, 0, "gpmc_ad6", "sdmmc2_dat6",
+ "sdmmc2_dir_cmd", NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_NWE, PAD_CORE_ID, 0, "gpmc_nwe", "sdmmc2_cmd",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(DPM_EMU15, PAD_CORE_ID, 26, "dpm_emu15",
+ "sys_secure_indicator", NULL, "gpio_26", "rfbi_data4",
+ "dispc2_data4", "hw_dbg15", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU14, PAD_CORE_ID, 25, "dpm_emu14",
+ "sys_drm_msecure", "uart1_rx", "gpio_25",
+ "rfbi_data5", "dispc2_data5", "hw_dbg14", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU17, PAD_CORE_ID, 28, "dpm_emu17",
+ "dmtimer9_pwm_evt", "dsi1_te1", "gpio_28",
+ "rfbi_data2", "dispc2_data2", "hw_dbg17", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU16, PAD_CORE_ID, 27, "dpm_emu16",
+ "dmtimer8_pwm_evt", "dsi1_te0", "gpio_27",
+ "rfbi_data3", "dispc2_data3", "hw_dbg16", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU11, PAD_CORE_ID, 22, "dpm_emu11",
+ "usba0_ulpiphy_dat5", NULL, "gpio_22", "rfbi_data8",
+ "dispc2_data8", "hw_dbg11", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU10, PAD_CORE_ID, 21, "dpm_emu10",
+ "usba0_ulpiphy_dat4", NULL, "gpio_21", "rfbi_a0",
+ "dispc2_de", "hw_dbg10", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU13, PAD_CORE_ID, 24, "dpm_emu13",
+ "usba0_ulpiphy_dat7", NULL, "gpio_24", "rfbi_data6",
+ "dispc2_data6", "hw_dbg13", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU12, PAD_CORE_ID, 23, "dpm_emu12",
+ "usba0_ulpiphy_dat6", NULL, "gpio_23", "rfbi_data7",
+ "dispc2_data7", "hw_dbg12", "reserved"),
+ _OMAP4_MUXENTRY(ABE_CLKS, PAD_CORE_ID, 118, "abe_clks", NULL, NULL,
+ "gpio_118", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP1_DR, PAD_CORE_ID, 115, "abe_mcbsp1_dr",
+ "abe_slimbus1_data", NULL, "gpio_115", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(DPM_EMU19, PAD_CORE_ID, 191, "dpm_emu19",
+ "dmtimer11_pwm_evt", "dsi2_te1", "gpio_191",
+ "rfbi_data0", "dispc2_data0", "hw_dbg19", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU18, PAD_CORE_ID, 190, "dpm_emu18",
+ "dmtimer10_pwm_evt", "dsi2_te0", "gpio_190",
+ "rfbi_data1", "dispc2_data1", "hw_dbg18", "reserved"),
+ _OMAP4_MUXENTRY(GPMC_NWP, PAD_CORE_ID, 54, "gpmc_nwp", "dsi1_te0",
+ NULL, "gpio_54", "sys_ndmareq1", NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(FREF_CLK0_OUT, PAD_WKUP_ID, 6, "fref_clk0_out",
+ "fref_clk1_req", "sys_drm_msecure", "gpio_wk6", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_NRESPWRON, PAD_WKUP_ID, 0, "sys_nrespwron", NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(CAM_GLOBALRESET, PAD_CORE_ID, 83, "cam_globalreset",
+ NULL, NULL, "gpio_83", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C1_SCL, PAD_CORE_ID, 0, "i2c1_scl", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(CSI21_DX4, PAD_CORE_ID, 0, "csi21_dx4", NULL, NULL,
+ "gpi_75", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(JTAG_NTRST, PAD_WKUP_ID, 0, "jtag_ntrst", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(CSI21_DX0, PAD_CORE_ID, 0, "csi21_dx0", NULL, NULL,
+ "gpi_67", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DX1, PAD_CORE_ID, 0, "csi21_dx1", NULL, NULL,
+ "gpi_69", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DX2, PAD_CORE_ID, 0, "csi21_dx2", NULL, NULL,
+ "gpi_71", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(CSI21_DX3, PAD_CORE_ID, 0, "csi21_dx3", NULL, NULL,
+ "gpi_73", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_CMD, PAD_CORE_ID, 101, "sdmmc1_cmd", NULL,
+ "uart1_rx", "gpio_101", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_CLK_IOREQ, PAD_WKUP_ID, 0, "fref_clk_ioreq",
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(SR_SCL, PAD_WKUP_ID, 0, "sr_scl", NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(ABE_MCBSP2_DX, PAD_CORE_ID, 112, "abe_mcbsp2_dx",
+ "mcspi2_simo", "abe_mcasp_amute", "gpio_112",
+ "usbb2_mm_rxrcv", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP2_DR, PAD_CORE_ID, 111, "abe_mcbsp2_dr",
+ "mcspi2_somi", "abe_mcasp_axr", "gpio_111",
+ "usbb2_mm_rxdp", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_PDM_DL_DATA, PAD_CORE_ID, 0, "abe_pdm_dl_data",
+ "abe_mcbsp3_dx", NULL, NULL, NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_NIRQ2, PAD_CORE_ID, 183, "sys_nirq2", NULL, NULL,
+ "gpio_183", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC5_CLK, PAD_CORE_ID, 145, "sdmmc5_clk",
+ "mcspi2_clk", "usbc1_icusb_dp", "gpio_145", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI4_SOMI, PAD_CORE_ID, 153, "mcspi4_somi",
+ "sdmmc4_dat0", NULL, "gpio_153", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_NXT, PAD_CORE_ID, 160,
+ "usbb2_ulpitll_nxt", "usbb2_ulpiphy_nxt",
+ "sdmmc4_dat1", "gpio_160", "hsi2_acready",
+ "dispc2_data21", NULL, "reserved"),
+ _OMAP4_MUXENTRY(ABE_DMIC_DIN1, PAD_CORE_ID, 120, "abe_dmic_din1",
+ NULL, NULL, "gpio_120", "usbb2_mm_txdat", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(CAM_STROBE, PAD_CORE_ID, 82, "cam_strobe", NULL, NULL,
+ "gpio_82", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_DMIC_DIN3, PAD_CORE_ID, 122, "abe_dmic_din3",
+ "slimbus2_data", "abe_dmic_clk2", "gpio_122", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_DMIC_DIN2, PAD_CORE_ID, 121, "abe_dmic_din2",
+ "slimbus2_clock", NULL, "gpio_121", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(HDMI_CEC, PAD_CORE_ID, 64, "hdmi_cec", NULL, NULL,
+ "gpio_64", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP2_CLKX, PAD_CORE_ID, 110, "abe_mcbsp2_clkx",
+ "mcspi2_clk", "abe_mcasp_ahclkx", "gpio_110",
+ "usbb2_mm_rxdm", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_PDM_LB_CLK, PAD_CORE_ID, 0, "abe_pdm_lb_clk",
+ "abe_mcbsp3_fsx", NULL, NULL, NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UART2_RTS, PAD_CORE_ID, 124, "uart2_rts",
+ "sdmmc3_cmd", NULL, "gpio_124", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(DPM_EMU9, PAD_CORE_ID, 20, "dpm_emu9",
+ "usba0_ulpiphy_dat3", "uart3_cts_rctx", "gpio_20",
+ "rfbi_we", "dispc2_vsync", "hw_dbg9", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU8, PAD_CORE_ID, 19, "dpm_emu8",
+ "usba0_ulpiphy_dat2", "uart3_rts_sd", "gpio_19",
+ "rfbi_re", "dispc2_pclk", "hw_dbg8", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU5, PAD_CORE_ID, 16, "dpm_emu5",
+ "usba0_ulpiphy_nxt", NULL, "gpio_16",
+ "rfbi_te_vsync0", "dispc2_data16", "hw_dbg5",
+ "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU4, PAD_CORE_ID, 15, "dpm_emu4",
+ "usba0_ulpiphy_dir", NULL, "gpio_15", NULL,
+ "dispc2_data9", "hw_dbg4", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU7, PAD_CORE_ID, 18, "dpm_emu7",
+ "usba0_ulpiphy_dat1", "uart3_rx_irrx", "gpio_18",
+ "rfbi_cs0", "dispc2_hsync", "hw_dbg7", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU6, PAD_CORE_ID, 17, "dpm_emu6",
+ "usba0_ulpiphy_dat0", "uart3_tx_irtx", "gpio_17",
+ "rfbi_hsync0", "dispc2_data17", "hw_dbg6",
+ "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU1, PAD_CORE_ID, 12, "dpm_emu1", NULL, NULL,
+ "gpio_12", NULL, NULL, "hw_dbg1", "safe_mode"),
+ _OMAP4_MUXENTRY(DPM_EMU0, PAD_CORE_ID, 11, "dpm_emu0", NULL, NULL,
+ "gpio_11", NULL, NULL, "hw_dbg0", "safe_mode"),
+ _OMAP4_MUXENTRY(DPM_EMU3, PAD_CORE_ID, 14, "dpm_emu3",
+ "usba0_ulpiphy_stp", NULL, "gpio_14", NULL,
+ "dispc2_data10", "hw_dbg3", "reserved"),
+ _OMAP4_MUXENTRY(DPM_EMU2, PAD_CORE_ID, 13, "dpm_emu2",
+ "usba0_ulpiphy_clk", NULL, "gpio_13", NULL,
+ "dispc2_fid", "hw_dbg2", "reserved"),
+ _OMAP4_MUXENTRY(SYS_NIRQ1, PAD_CORE_ID, 0, "sys_nirq1", NULL, NULL,
+ NULL, NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_DMIC_CLK1, PAD_CORE_ID, 119, "abe_dmic_clk1",
+ NULL, NULL, "gpio_119", "usbb2_mm_txse0", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UART2_TX, PAD_CORE_ID, 126, "uart2_tx", "sdmmc3_dat1",
+ NULL, "gpio_126", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT7, PAD_WKUP_ID, 10, "sys_boot7", "dpm_emu19",
+ NULL, "gpio_wk10", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT6, PAD_WKUP_ID, 9, "sys_boot6", "dpm_emu18",
+ NULL, "gpio_wk9", "c2c_wakereqout", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_CLK, PAD_CORE_ID, 55, "gpmc_clk", NULL, NULL,
+ "gpio_55", "sys_ndmareq2", NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(SYS_BOOT1, PAD_CORE_ID, 185, "sys_boot1", NULL, NULL,
+ "gpio_185", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT0, PAD_CORE_ID, 184, "sys_boot0", NULL, NULL,
+ "gpio_184", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_SLICER_IN, PAD_WKUP_ID, 0, "fref_slicer_in",
+ NULL, NULL, "gpi_wk5", "c2c_wakereqin", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DIR, PAD_CORE_ID, 86,
+ "usbb1_ulpitll_dir", "hsi1_caflag", "mcbsp4_fsr",
+ "gpio_86", "usbb1_ulpiphy_dir", NULL, "hw_dbg22",
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_RY2, PAD_CORE_ID, 0, "unipro_ry2", "kpd_row5",
+ NULL, "gpi_3", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(HDMI_HPD, PAD_CORE_ID, 63, "hdmi_hpd", NULL, NULL,
+ "gpio_63", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SYS_BOOT3, PAD_CORE_ID, 187, "sys_boot3", NULL, NULL,
+ "gpio_187", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(SIM_CD, PAD_WKUP_ID, 3, "sim_cd", NULL, NULL,
+ "gpio_wk3", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TX0, PAD_CORE_ID, 171, "unipro_tx0",
+ "kpd_col0", NULL, "gpio_171", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TX1, PAD_CORE_ID, 173, "unipro_tx1",
+ "kpd_col2", NULL, "gpio_173", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SR_SDA, PAD_WKUP_ID, 0, "sr_sda", NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(SDMMC5_CMD, PAD_CORE_ID, 146, "sdmmc5_cmd",
+ "mcspi2_simo", "usbc1_icusb_dm", "gpio_146", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(HDMI_DDC_SDA, PAD_CORE_ID, 66, "hdmi_ddc_sda", NULL,
+ NULL, "gpio_66", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(I2C2_SDA, PAD_CORE_ID, 129, "i2c2_sda", "uart1_tx",
+ NULL, "gpio_129", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT6, PAD_CORE_ID, 167,
+ "usbb2_ulpitll_dat6", "usbb2_ulpiphy_dat6",
+ "sdmmc3_cmd", "gpio_167", "mcspi3_simo",
+ "dispc2_data12", NULL, "reserved"),
+ _OMAP4_MUXENTRY(SYS_32K, PAD_WKUP_ID, 0, "sys_32k", NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(USBC1_ICUSB_DM, PAD_CORE_ID, 99, "usbc1_icusb_dm",
+ NULL, NULL, "gpio_99", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBA0_OTG_DM, PAD_CORE_ID, 180, "usba0_otg_dm",
+ "uart3_tx_irtx", "uart2_tx", "gpio_180", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBC1_ICUSB_DP, PAD_CORE_ID, 98, "usbc1_icusb_dp",
+ NULL, NULL, "gpio_98", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UART3_CTS_RCTX, PAD_CORE_ID, 141, "uart3_cts_rctx",
+ "uart1_tx", NULL, "gpio_141", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_HSIC_STROBE, PAD_CORE_ID, 97,
+ "usbb1_hsic_strobe", NULL, NULL, "gpio_97", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(JTAG_RTCK, PAD_WKUP_ID, 0, "jtag_rtck", NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(MCSPI1_SOMI, PAD_CORE_ID, 135, "mcspi1_somi", NULL,
+ NULL, "gpio_135", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(HDMI_DDC_SCL, PAD_CORE_ID, 65, "hdmi_ddc_scl", NULL,
+ NULL, "gpio_65", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP1_DX, PAD_CORE_ID, 116, "abe_mcbsp1_dx",
+ "sdmmc3_dat2", "abe_mcasp_aclkx", "gpio_116", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(C2C_DATA14, PAD_CORE_ID, 103, "c2c_data14",
+ "dsi2_te0", "c2c_dataout0", "gpio_103",
+ "sys_ndmareq3", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(C2C_DATA15, PAD_CORE_ID, 104, "c2c_data15",
+ "dsi2_te1", "c2c_dataout1", "gpio_104", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(C2C_DATA11, PAD_CORE_ID, 100, "c2c_data11",
+ "usbc1_icusb_txen", "c2c_dataout3", "gpio_100",
+ "sys_ndmareq0", NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(C2C_DATA12, PAD_CORE_ID, 101, "c2c_data12",
+ "dsi1_te0", "c2c_clkin0", "gpio_101", "sys_ndmareq1",
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(C2C_DATA13, PAD_CORE_ID, 102, "c2c_data13",
+ "dsi1_te1", "c2c_clkin1", "gpio_102", "sys_ndmareq2",
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NCS1, PAD_CORE_ID, 51, "gpmc_ncs1", NULL,
+ "c2c_dataout6", "gpio_51", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NCS0, PAD_CORE_ID, 50, "gpmc_ncs0", NULL, NULL,
+ "gpio_50", "sys_ndmareq0", NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_NCS3, PAD_CORE_ID, 53, "gpmc_ncs3", "gpmc_dir",
+ "c2c_dataout4", "gpio_53", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NCS2, PAD_CORE_ID, 52, "gpmc_ncs2", NULL,
+ "c2c_dataout7", "gpio_52", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT6, PAD_CORE_ID, 94,
+ "usbb1_ulpitll_dat6", "dmtimer10_pwm_evt",
+ "abe_mcbsp3_clkx", "gpio_94", "usbb1_ulpiphy_dat6",
+ "abe_dmic_din3", "hw_dbg30", "safe_mode"),
+ _OMAP4_MUXENTRY(MCSPI4_CLK, PAD_CORE_ID, 151, "mcspi4_clk",
+ "sdmmc4_clk", NULL, "gpio_151", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT4, PAD_CORE_ID, 92,
+ "usbb1_ulpitll_dat4", "dmtimer8_pwm_evt",
+ "abe_mcbsp3_dr", "gpio_92", "usbb1_ulpiphy_dat4",
+ NULL, "hw_dbg28", "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT5, PAD_CORE_ID, 93,
+ "usbb1_ulpitll_dat5", "dmtimer9_pwm_evt",
+ "abe_mcbsp3_dx", "gpio_93", "usbb1_ulpiphy_dat5",
+ NULL, "hw_dbg29", "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT2, PAD_CORE_ID, 90,
+ "usbb1_ulpitll_dat2", "hsi1_acflag", "mcbsp4_dr",
+ "gpio_90", "usbb1_ulpiphy_dat2", "usbb1_mm_txdat",
+ "hw_dbg26", "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TY2, PAD_CORE_ID, 1, "unipro_ty2", "kpd_col5",
+ NULL, "gpio_1", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TY1, PAD_CORE_ID, 174, "unipro_ty1",
+ "kpd_col3", NULL, "gpio_174", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TY0, PAD_CORE_ID, 172, "unipro_ty0",
+ "kpd_col1", NULL, "gpio_172", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT0, PAD_CORE_ID, 161,
+ "usbb2_ulpitll_dat0", "usbb2_ulpiphy_dat0",
+ "sdmmc4_dat2", "gpio_161", "hsi2_acwake",
+ "dispc2_data20", NULL, "reserved"),
+ _OMAP4_MUXENTRY(I2C2_SCL, PAD_CORE_ID, 128, "i2c2_scl", "uart1_rx",
+ NULL, "gpio_128", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_PDM_UL_DATA, PAD_CORE_ID, 0, "abe_pdm_ul_data",
+ "abe_mcbsp3_dr", NULL, NULL, NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(FREF_CLK1_OUT, PAD_CORE_ID, 181, "fref_clk1_out",
+ NULL, NULL, "gpio_181", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SDMMC1_DAT3, PAD_CORE_ID, 105, "sdmmc1_dat3", NULL,
+ "dpm_emu15", "gpio_105", "jtag_tck", NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(SIM_RESET, PAD_WKUP_ID, 2, "sim_reset", NULL, NULL,
+ "gpio_wk2", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(USBB1_HSIC_DATA, PAD_CORE_ID, 96, "usbb1_hsic_data",
+ NULL, NULL, "gpio_96", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_AD4, PAD_CORE_ID, 0, "gpmc_ad4", "sdmmc2_dat4",
+ "sdmmc2_dir_dat0", NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(FREF_CLK4_REQ, PAD_WKUP_ID, 7, "fref_clk4_req",
+ "fref_clk5_out", NULL, "gpio_wk7", NULL, NULL, NULL,
+ NULL),
+ _OMAP4_MUXENTRY(SIM_CLK, PAD_WKUP_ID, 1, "sim_clk", NULL, NULL,
+ "gpio_wk1", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_WAIT1, PAD_CORE_ID, 62, "gpmc_wait1", NULL,
+ "c2c_dataout2", "gpio_62", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_STP, PAD_CORE_ID, 158,
+ "usbb2_ulpitll_stp", "usbb2_ulpiphy_stp",
+ "sdmmc4_clk", "gpio_158", "hsi2_cadata",
+ "dispc2_data23", NULL, "reserved"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT3, PAD_CORE_ID, 164,
+ "usbb2_ulpitll_dat3", "usbb2_ulpiphy_dat3",
+ "sdmmc3_dat1", "gpio_164", "hsi2_caready",
+ "dispc2_data15", NULL, "reserved"),
+ _OMAP4_MUXENTRY(USBB2_ULPITLL_DIR, PAD_CORE_ID, 159,
+ "usbb2_ulpitll_dir", "usbb2_ulpiphy_dir",
+ "sdmmc4_dat0", "gpio_159", "hsi2_caflag",
+ "dispc2_data22", NULL, "reserved"),
+ _OMAP4_MUXENTRY(USBB1_ULPITLL_CLK, PAD_CORE_ID, 84,
+ "usbb1_ulpitll_clk", "hsi1_cawake", NULL, "gpio_84",
+ "usbb1_ulpiphy_clk", NULL, "hw_dbg20", "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_WAIT0, PAD_CORE_ID, 61, "gpmc_wait0", "dsi2_te1",
+ NULL, "gpio_61", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(USBA0_OTG_DP, PAD_CORE_ID, 179, "usba0_otg_dp",
+ "uart3_rx_irrx", "uart2_rx", "gpio_179", NULL, NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NOE, PAD_CORE_ID, 0, "gpmc_noe", "sdmmc2_clk",
+ NULL, NULL, NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(ABE_PDM_FRAME, PAD_CORE_ID, 0, "abe_pdm_frame",
+ "abe_mcbsp3_clkx", NULL, NULL, NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(ABE_MCBSP1_FSX, PAD_CORE_ID, 117, "abe_mcbsp1_fsx",
+ "sdmmc3_dat3", "abe_mcasp_amutein", "gpio_117", NULL,
+ NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UART4_TX, PAD_CORE_ID, 156, "uart4_tx", "sdmmc4_dat1",
+ NULL, "gpio_156", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_NBE0_CLE, PAD_CORE_ID, 59, "gpmc_nbe0_cle",
+ "dsi2_te0", NULL, "gpio_59", NULL, NULL, NULL, NULL),
+ _OMAP4_MUXENTRY(GPMC_A23, PAD_CORE_ID, 47, "gpmc_a23", "kpd_col7",
+ "c2c_datain7", "gpio_47", "venc_656_data7", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A22, PAD_CORE_ID, 46, "gpmc_a22", "kpd_col6",
+ "c2c_datain6", "gpio_46", "venc_656_data6", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A21, PAD_CORE_ID, 45, "gpmc_a21", "kpd_col5",
+ "c2c_datain5", "gpio_45", "venc_656_data5", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A20, PAD_CORE_ID, 44, "gpmc_a20", "kpd_col4",
+ "c2c_datain4", "gpio_44", "venc_656_data4", NULL,
+ NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(UNIPRO_TX2, PAD_CORE_ID, 0, "unipro_tx2", "kpd_col4",
+ NULL, "gpio_0", NULL, NULL, NULL, "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A25, PAD_CORE_ID, 49, "gpmc_a25", NULL,
+ "c2c_clkout1", "gpio_49", NULL, NULL, NULL,
+ "safe_mode"),
+ _OMAP4_MUXENTRY(GPMC_A24, PAD_CORE_ID, 48, "gpmc_a24", NULL,
+ "c2c_clkout0", "gpio_48", NULL, NULL, NULL,
+ "safe_mode"),
+ { .reg_offset = OMAP_MUX_TERMINATOR },
+};
+
+/*
+ * Balls for 44XX CBL package
+ * 547-pin CBL ES1.0 S-FPGA-N547, 0.40mm Ball Pitch (Top),
+ * 0.40mm Ball Pitch (Bottom)
+ */
+#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
+ && defined (CONFIG_OMAP_PACKAGE_CBL)
+struct omap_ball __initdata omap4_cbl_ball[] = {
+ _OMAP4_BALLENTRY(SYS_NRESWARM, PAD_WKUP_ID, "af7", NULL),
+ _OMAP4_BALLENTRY(UART3_RX_IRRX, PAD_CORE_ID, "g27", NULL),
+ _OMAP4_BALLENTRY(USBB2_HSIC_STROBE, PAD_CORE_ID, "ae13", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT4, PAD_CORE_ID, "d28", NULL),
+ _OMAP4_BALLENTRY(UART3_TX_IRTX, PAD_CORE_ID, "g28", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_DAT0, PAD_CORE_ID, "ae4", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_DAT1, PAD_CORE_ID, "af4", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_DAT2, PAD_CORE_ID, "ag3", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_DAT3, PAD_CORE_ID, "af3", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_CLK, PAD_CORE_ID, "ag12", NULL),
+ _OMAP4_BALLENTRY(SIM_IO, PAD_WKUP_ID, "h4", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RX2, PAD_CORE_ID, "l27", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT5, PAD_CORE_ID, "d27", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RX0, PAD_CORE_ID, "j26", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RX1, PAD_CORE_ID, "k26", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_CS2, PAD_CORE_ID, "ag23", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_CS3, PAD_CORE_ID, "ah23", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_CS0, PAD_CORE_ID, "ae23", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_CS1, PAD_CORE_ID, "af23", NULL),
+ _OMAP4_BALLENTRY(MCSPI4_CS0, PAD_CORE_ID, "ae20", NULL),
+ _OMAP4_BALLENTRY(GPMC_NADV_ALE, PAD_CORE_ID, "d25", NULL),
+ _OMAP4_BALLENTRY(MCSPI4_SIMO, PAD_CORE_ID, "af20", NULL),
+ _OMAP4_BALLENTRY(UART3_RTS_SD, PAD_CORE_ID, "f28", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT2, PAD_CORE_ID, "e26", NULL),
+ _OMAP4_BALLENTRY(JTAG_TDI, PAD_WKUP_ID, "ae1", NULL),
+ _OMAP4_BALLENTRY(JTAG_TDO, PAD_WKUP_ID, "ae2", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT1, PAD_CORE_ID, "af11", NULL),
+ _OMAP4_BALLENTRY(GPMC_A18, PAD_CORE_ID, "b18", NULL),
+ _OMAP4_BALLENTRY(GPMC_A19, PAD_CORE_ID, "a19", NULL),
+ _OMAP4_BALLENTRY(GPMC_A16, PAD_CORE_ID, "b17", NULL),
+ _OMAP4_BALLENTRY(GPMC_A17, PAD_CORE_ID, "a18", NULL),
+ _OMAP4_BALLENTRY(USBB2_HSIC_DATA, PAD_CORE_ID, "af13", NULL),
+ _OMAP4_BALLENTRY(SYS_PWR_REQ, PAD_WKUP_ID, "ah7", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_STP, PAD_CORE_ID, "ag19", NULL),
+ _OMAP4_BALLENTRY(SYS_PWRON_RESET_OUT, PAD_WKUP_ID, "ag6", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_CLK, PAD_CORE_ID, "d2", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_NXT, PAD_CORE_ID, "ae19", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT7, PAD_CORE_ID, "ag16", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT7, PAD_CORE_ID, "ae9", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_CLK, PAD_CORE_ID, "af22", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT5, PAD_CORE_ID, "af10", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT4, PAD_CORE_ID, "ae10", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RY1, PAD_CORE_ID, "k25", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RY0, PAD_CORE_ID, "j25", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP2_FSX, PAD_CORE_ID, "ac28", NULL),
+ _OMAP4_BALLENTRY(GPMC_NBE1, PAD_CORE_ID, "d22", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD15, PAD_CORE_ID, "d19", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD14, PAD_CORE_ID, "c19", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD11, PAD_CORE_ID, "d17", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD10, PAD_CORE_ID, "c17", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD13, PAD_CORE_ID, "d18", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD12, PAD_CORE_ID, "c18", NULL),
+ _OMAP4_BALLENTRY(HDQ_SIO, PAD_CORE_ID, "aa27", NULL),
+ _OMAP4_BALLENTRY(JTAG_TMS_TMSC, PAD_WKUP_ID, "ah1", NULL),
+ _OMAP4_BALLENTRY(UART4_RX, PAD_CORE_ID, "ag20", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT3, PAD_CORE_ID, "af17", NULL),
+ _OMAP4_BALLENTRY(I2C1_SDA, PAD_CORE_ID, "ae26", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP1_CLKX, PAD_CORE_ID, "ac26", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD9, PAD_CORE_ID, "d16", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD8, PAD_CORE_ID, "c16", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD5, PAD_CORE_ID, "d15", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK4_OUT, PAD_WKUP_ID, "ac3", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD7, PAD_CORE_ID, "b16", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD1, PAD_CORE_ID, "d12", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD0, PAD_CORE_ID, "c12", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD3, PAD_CORE_ID, "d13", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD2, PAD_CORE_ID, "c13", NULL),
+ _OMAP4_BALLENTRY(USBA0_OTG_CE, PAD_CORE_ID, "c3", NULL),
+ _OMAP4_BALLENTRY(JTAG_TCK, PAD_WKUP_ID, "ag1", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT0, PAD_CORE_ID, "af18", NULL),
+ _OMAP4_BALLENTRY(CSI22_DX1, PAD_CORE_ID, "n26", NULL),
+ _OMAP4_BALLENTRY(CSI22_DX0, PAD_CORE_ID, "m26", NULL),
+ _OMAP4_BALLENTRY(I2C3_SCL, PAD_CORE_ID, "w27", NULL),
+ _OMAP4_BALLENTRY(I2C4_SCL, PAD_CORE_ID, "ag21", NULL),
+ _OMAP4_BALLENTRY(I2C3_SDA, PAD_CORE_ID, "y27", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_SIMO, PAD_CORE_ID, "ag22", NULL),
+ _OMAP4_BALLENTRY(FREF_XTAL_IN, PAD_WKUP_ID, "ah6", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT0, PAD_CORE_ID, "e4", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT1, PAD_CORE_ID, "e2", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT2, PAD_CORE_ID, "e1", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK3_REQ, PAD_WKUP_ID, "ad3", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT4, PAD_CORE_ID, "f3", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT5, PAD_CORE_ID, "f1", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT6, PAD_CORE_ID, "g4", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT7, PAD_CORE_ID, "g3", NULL),
+ _OMAP4_BALLENTRY(CAM_SHUTTER, PAD_CORE_ID, "t27", NULL),
+ _OMAP4_BALLENTRY(UART2_RX, PAD_CORE_ID, "aa25", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT2, PAD_CORE_ID, "ag11", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT1, PAD_CORE_ID, "ag18", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK3_OUT, PAD_WKUP_ID, "ad4", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK2_OUT, PAD_CORE_ID, "y28", NULL),
+ _OMAP4_BALLENTRY(UART2_CTS, PAD_CORE_ID, "ab26", NULL),
+ _OMAP4_BALLENTRY(SIM_PWRCTRL, PAD_WKUP_ID, "k1", NULL),
+ _OMAP4_BALLENTRY(CSI21_DY3, PAD_CORE_ID, "v25", NULL),
+ _OMAP4_BALLENTRY(CSI21_DY2, PAD_CORE_ID, "u25", NULL),
+ _OMAP4_BALLENTRY(CSI21_DY1, PAD_CORE_ID, "t25", NULL),
+ _OMAP4_BALLENTRY(CSI21_DY0, PAD_CORE_ID, "r25", NULL),
+ _OMAP4_BALLENTRY(CSI21_DY4, PAD_CORE_ID, "w25", NULL),
+ _OMAP4_BALLENTRY(CSI22_DY0, PAD_CORE_ID, "m25", NULL),
+ _OMAP4_BALLENTRY(CSI22_DY1, PAD_CORE_ID, "n25", NULL),
+ _OMAP4_BALLENTRY(I2C4_SDA, PAD_CORE_ID, "ah22", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD6, PAD_CORE_ID, "a16", NULL),
+ _OMAP4_BALLENTRY(GPMC_NWE, PAD_CORE_ID, "b12", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU15, PAD_CORE_ID, "aa4", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU14, PAD_CORE_ID, "aa3", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU17, PAD_CORE_ID, "ab3", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU16, PAD_CORE_ID, "ab2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU11, PAD_CORE_ID, "y4", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU10, PAD_CORE_ID, "y3", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU13, PAD_CORE_ID, "aa2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU12, PAD_CORE_ID, "aa1", NULL),
+ _OMAP4_BALLENTRY(ABE_CLKS, PAD_CORE_ID, "ah26", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP1_DR, PAD_CORE_ID, "ac25", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU19, PAD_CORE_ID, "ac4", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU18, PAD_CORE_ID, "ab4", NULL),
+ _OMAP4_BALLENTRY(GPMC_NWP, PAD_CORE_ID, "c25", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK0_OUT, PAD_WKUP_ID, "ad2", NULL),
+ _OMAP4_BALLENTRY(SYS_NRESPWRON, PAD_WKUP_ID, "ae7", NULL),
+ _OMAP4_BALLENTRY(CAM_GLOBALRESET, PAD_CORE_ID, "v27", NULL),
+ _OMAP4_BALLENTRY(I2C1_SCL, PAD_CORE_ID, "ae28", NULL),
+ _OMAP4_BALLENTRY(CSI21_DX4, PAD_CORE_ID, "w26", NULL),
+ _OMAP4_BALLENTRY(JTAG_NTRST, PAD_WKUP_ID, "ah2", NULL),
+ _OMAP4_BALLENTRY(CSI21_DX0, PAD_CORE_ID, "r26", NULL),
+ _OMAP4_BALLENTRY(CSI21_DX1, PAD_CORE_ID, "t26", NULL),
+ _OMAP4_BALLENTRY(CSI21_DX2, PAD_CORE_ID, "u26", NULL),
+ _OMAP4_BALLENTRY(CSI21_DX3, PAD_CORE_ID, "v26", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_CMD, PAD_CORE_ID, "e3", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK_IOREQ, PAD_WKUP_ID, "ad1", NULL),
+ _OMAP4_BALLENTRY(SR_SCL, PAD_WKUP_ID, "ag9", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP2_DX, PAD_CORE_ID, "ad25", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP2_DR, PAD_CORE_ID, "ad26", NULL),
+ _OMAP4_BALLENTRY(ABE_PDM_DL_DATA, PAD_CORE_ID, "af25", NULL),
+ _OMAP4_BALLENTRY(SYS_NIRQ2, PAD_CORE_ID, "af6", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_CLK, PAD_CORE_ID, "ae5", NULL),
+ _OMAP4_BALLENTRY(MCSPI4_SOMI, PAD_CORE_ID, "af21", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_NXT, PAD_CORE_ID, "ag13", NULL),
+ _OMAP4_BALLENTRY(ABE_DMIC_DIN1, PAD_CORE_ID, "af24", NULL),
+ _OMAP4_BALLENTRY(CAM_STROBE, PAD_CORE_ID, "u27", NULL),
+ _OMAP4_BALLENTRY(ABE_DMIC_DIN3, PAD_CORE_ID, "ah24", NULL),
+ _OMAP4_BALLENTRY(ABE_DMIC_DIN2, PAD_CORE_ID, "ag24", NULL),
+ _OMAP4_BALLENTRY(HDMI_CEC, PAD_CORE_ID, "b10", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP2_CLKX, PAD_CORE_ID, "ad27", NULL),
+ _OMAP4_BALLENTRY(ABE_PDM_LB_CLK, PAD_CORE_ID, "af26", NULL),
+ _OMAP4_BALLENTRY(UART2_RTS, PAD_CORE_ID, "ab27", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU9, PAD_CORE_ID, "y2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU8, PAD_CORE_ID, "w4", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU5, PAD_CORE_ID, "w1", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU4, PAD_CORE_ID, "v2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU7, PAD_CORE_ID, "w3", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU6, PAD_CORE_ID, "w2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU1, PAD_CORE_ID, "n2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU0, PAD_CORE_ID, "m2", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU3, PAD_CORE_ID, "v1", NULL),
+ _OMAP4_BALLENTRY(DPM_EMU2, PAD_CORE_ID, "p2", NULL),
+ _OMAP4_BALLENTRY(SYS_NIRQ1, PAD_CORE_ID, "ae6", NULL),
+ _OMAP4_BALLENTRY(ABE_DMIC_CLK1, PAD_CORE_ID, "ae24", NULL),
+ _OMAP4_BALLENTRY(UART2_TX, PAD_CORE_ID, "aa26", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT7, PAD_WKUP_ID, "ae8", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT6, PAD_WKUP_ID, "af8", NULL),
+ _OMAP4_BALLENTRY(GPMC_CLK, PAD_CORE_ID, "b22", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT1, PAD_CORE_ID, "e27", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT0, PAD_CORE_ID, "f26", NULL),
+ _OMAP4_BALLENTRY(FREF_SLICER_IN, PAD_WKUP_ID, "ag8", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DIR, PAD_CORE_ID, "af19", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_RY2, PAD_CORE_ID, "k27", NULL),
+ _OMAP4_BALLENTRY(HDMI_HPD, PAD_CORE_ID, "b9", NULL),
+ _OMAP4_BALLENTRY(SYS_BOOT3, PAD_CORE_ID, "e25", NULL),
+ _OMAP4_BALLENTRY(SIM_CD, PAD_WKUP_ID, "j1", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TX0, PAD_CORE_ID, "g26", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TX1, PAD_CORE_ID, "h26", NULL),
+ _OMAP4_BALLENTRY(SR_SDA, PAD_WKUP_ID, "af9", NULL),
+ _OMAP4_BALLENTRY(SDMMC5_CMD, PAD_CORE_ID, "af5", NULL),
+ _OMAP4_BALLENTRY(HDMI_DDC_SDA, PAD_CORE_ID, "b8", NULL),
+ _OMAP4_BALLENTRY(I2C2_SDA, PAD_CORE_ID, "d26", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT6, PAD_CORE_ID, "ag10", NULL),
+ _OMAP4_BALLENTRY(SYS_32K, PAD_WKUP_ID, "ag7", NULL),
+ _OMAP4_BALLENTRY(USBC1_ICUSB_DM, PAD_CORE_ID, "h3", NULL),
+ _OMAP4_BALLENTRY(USBA0_OTG_DM, PAD_CORE_ID, "b4", NULL),
+ _OMAP4_BALLENTRY(USBC1_ICUSB_DP, PAD_CORE_ID, "h2", NULL),
+ _OMAP4_BALLENTRY(UART3_CTS_RCTX, PAD_CORE_ID, "f27", NULL),
+ _OMAP4_BALLENTRY(USBB1_HSIC_STROBE, PAD_CORE_ID, "ae14", NULL),
+ _OMAP4_BALLENTRY(JTAG_RTCK, PAD_WKUP_ID, "ae3", NULL),
+ _OMAP4_BALLENTRY(MCSPI1_SOMI, PAD_CORE_ID, "ae22", NULL),
+ _OMAP4_BALLENTRY(HDMI_DDC_SCL, PAD_CORE_ID, "a8", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP1_DX, PAD_CORE_ID, "ab25", NULL),
+ _OMAP4_BALLENTRY(C2C_DATA14, PAD_CORE_ID, "c24", NULL),
+ _OMAP4_BALLENTRY(C2C_DATA15, PAD_CORE_ID, "d24", NULL),
+ _OMAP4_BALLENTRY(C2C_DATA11, PAD_CORE_ID, "d23", NULL),
+ _OMAP4_BALLENTRY(C2C_DATA12, PAD_CORE_ID, "a24", NULL),
+ _OMAP4_BALLENTRY(C2C_DATA13, PAD_CORE_ID, "b24", NULL),
+ _OMAP4_BALLENTRY(GPMC_NCS1, PAD_CORE_ID, "c21", NULL),
+ _OMAP4_BALLENTRY(GPMC_NCS0, PAD_CORE_ID, "b25", NULL),
+ _OMAP4_BALLENTRY(GPMC_NCS3, PAD_CORE_ID, "c22", NULL),
+ _OMAP4_BALLENTRY(GPMC_NCS2, PAD_CORE_ID, "d21", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT6, PAD_CORE_ID, "af16", NULL),
+ _OMAP4_BALLENTRY(MCSPI4_CLK, PAD_CORE_ID, "ae21", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT4, PAD_CORE_ID, "ah17", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT5, PAD_CORE_ID, "ae16", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT2, PAD_CORE_ID, "ae17", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TY2, PAD_CORE_ID, "h27", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TY1, PAD_CORE_ID, "h25", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TY0, PAD_CORE_ID, "g25", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT0, PAD_CORE_ID, "ae11", NULL),
+ _OMAP4_BALLENTRY(I2C2_SCL, PAD_CORE_ID, "c26", NULL),
+ _OMAP4_BALLENTRY(ABE_PDM_UL_DATA, PAD_CORE_ID, "ag25", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK1_OUT, PAD_CORE_ID, "aa28", NULL),
+ _OMAP4_BALLENTRY(SDMMC1_DAT3, PAD_CORE_ID, "f4", NULL),
+ _OMAP4_BALLENTRY(SIM_RESET, PAD_WKUP_ID, "g2", NULL),
+ _OMAP4_BALLENTRY(USBB1_HSIC_DATA, PAD_CORE_ID, "af14", NULL),
+ _OMAP4_BALLENTRY(GPMC_AD4, PAD_CORE_ID, "c15", NULL),
+ _OMAP4_BALLENTRY(FREF_CLK4_REQ, PAD_WKUP_ID, "ac2", NULL),
+ _OMAP4_BALLENTRY(SIM_CLK, PAD_WKUP_ID, "j2", NULL),
+ _OMAP4_BALLENTRY(GPMC_WAIT1, PAD_CORE_ID, "b23", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_STP, PAD_CORE_ID, "af12", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT3, PAD_CORE_ID, "ah11", NULL),
+ _OMAP4_BALLENTRY(USBB2_ULPITLL_DIR, PAD_CORE_ID, "ae12", NULL),
+ _OMAP4_BALLENTRY(USBB1_ULPITLL_CLK, PAD_CORE_ID, "ae18", NULL),
+ _OMAP4_BALLENTRY(GPMC_WAIT0, PAD_CORE_ID, "b26", NULL),
+ _OMAP4_BALLENTRY(USBA0_OTG_DP, PAD_CORE_ID, "b5", NULL),
+ _OMAP4_BALLENTRY(GPMC_NOE, PAD_CORE_ID, "b11", NULL),
+ _OMAP4_BALLENTRY(ABE_PDM_FRAME, PAD_CORE_ID, "ae25", NULL),
+ _OMAP4_BALLENTRY(ABE_MCBSP1_FSX, PAD_CORE_ID, "ac27", NULL),
+ _OMAP4_BALLENTRY(UART4_TX, PAD_CORE_ID, "ah19", NULL),
+ _OMAP4_BALLENTRY(GPMC_NBE0_CLE, PAD_CORE_ID, "c23", NULL),
+ _OMAP4_BALLENTRY(GPMC_A23, PAD_CORE_ID, "b21", NULL),
+ _OMAP4_BALLENTRY(GPMC_A22, PAD_CORE_ID, "a21", NULL),
+ _OMAP4_BALLENTRY(GPMC_A21, PAD_CORE_ID, "b20", NULL),
+ _OMAP4_BALLENTRY(GPMC_A20, PAD_CORE_ID, "b19", NULL),
+ _OMAP4_BALLENTRY(UNIPRO_TX2, PAD_CORE_ID, "j27", NULL),
+ _OMAP4_BALLENTRY(GPMC_A25, PAD_CORE_ID, "d20", NULL),
+ _OMAP4_BALLENTRY(GPMC_A24, PAD_CORE_ID, "c20", NULL),
+ { .reg_offset = OMAP_MUX_TERMINATOR },
+};
+#else
+#define omap4_cbl_ball NULL
+#endif
+
+static __initdata struct mux_partition omap4_mux_partitions[] = {
+ [PAD_CORE_ID] = {
+ .phys = OMAP4_CTRL_MODULE_PAD_CORE_MUX_PBASE,
+ .size = OMAP4_CTRL_MODULE_PAD_CORE_MUX_SIZE,
+ },
+ [PAD_WKUP_ID] = {
+ .phys = OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE,
+ .size = OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE,
+ },
+};
+
+int __init omap4_mux_init(struct omap_board_mux *board_subset, int flags)
+{
+ struct omap_ball *package_balls;
+
+ switch (flags & OMAP_PACKAGE_MASK) {
+ case OMAP_PACKAGE_CBL:
+ package_balls = omap4_cbl_ball;
+ break;
+ default:
+ pr_err("mux: Unknown omap package, mux disabled\n");
+ return -EINVAL;
+ }
+
+ return omap_mux_init(omap4_mux_partitions,
+ ARRAY_SIZE(omap4_mux_partitions),
+ omap4_muxmodes, NULL, board_subset,
+ package_balls);
+}
+
diff --git a/arch/arm/mach-omap2/mux44xx.h b/arch/arm/mach-omap2/mux44xx.h
new file mode 100644
index 0000000..217758a
--- /dev/null
+++ b/arch/arm/mach-omap2/mux44xx.h
@@ -0,0 +1,278 @@
+/*
+ * OMAP44xx MUX registers and bitfields
+ *
+ * Copyright (C) 2009-2010 Texas Instruments, Inc.
+ *
+ * Benoit Cousson (b-cousson@ti.com)
+ *
+ * This file is automatically generated from the OMAP hardware databases.
+ * We respectfully ask that any modifications to this file be coordinated
+ * with the public linux-omap@vger.kernel.org mailing list and the
+ * authors above to ensure that the autogeneration scripts are kept
+ * up-to-date with the file contents.
+ *
+ * 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.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_MUX_44XX_H
+#define __ARCH_ARM_MACH_OMAP2_MUX_44XX_H
+
+#define OMAP4_MUX(M0, i, mux_value) \
+{ \
+ .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
+ .id = (i), \
+ .value = (mux_value), \
+}
+
+/* ctrl_module_pad_core base address*/
+#define OMAP4_CTRL_MODULE_PAD_CORE_MUX_PBASE 0x4a100000
+
+/* ctrl_module_pad_core registers offset*/
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD0_OFFSET 0x0040
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD1_OFFSET 0x0042
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD2_OFFSET 0x0044
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD3_OFFSET 0x0046
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD4_OFFSET 0x0048
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD5_OFFSET 0x004a
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD6_OFFSET 0x004c
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD7_OFFSET 0x004e
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD8_OFFSET 0x0050
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD9_OFFSET 0x0052
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD10_OFFSET 0x0054
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD11_OFFSET 0x0056
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD12_OFFSET 0x0058
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD13_OFFSET 0x005a
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD14_OFFSET 0x005c
+#define OMAP4_CTRL_MODULE_PAD_GPMC_AD15_OFFSET 0x005e
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A16_OFFSET 0x0060
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A17_OFFSET 0x0062
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A18_OFFSET 0x0064
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A19_OFFSET 0x0066
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A20_OFFSET 0x0068
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A21_OFFSET 0x006a
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A22_OFFSET 0x006c
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A23_OFFSET 0x006e
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A24_OFFSET 0x0070
+#define OMAP4_CTRL_MODULE_PAD_GPMC_A25_OFFSET 0x0072
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS0_OFFSET 0x0074
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS1_OFFSET 0x0076
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS2_OFFSET 0x0078
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS3_OFFSET 0x007a
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NWP_OFFSET 0x007c
+#define OMAP4_CTRL_MODULE_PAD_GPMC_CLK_OFFSET 0x007e
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NADV_ALE_OFFSET 0x0080
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NOE_OFFSET 0x0082
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NWE_OFFSET 0x0084
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NBE0_CLE_OFFSET 0x0086
+#define OMAP4_CTRL_MODULE_PAD_GPMC_NBE1_OFFSET 0x0088
+#define OMAP4_CTRL_MODULE_PAD_GPMC_WAIT0_OFFSET 0x008a
+#define OMAP4_CTRL_MODULE_PAD_GPMC_WAIT1_OFFSET 0x008c
+#define OMAP4_CTRL_MODULE_PAD_C2C_DATA11_OFFSET 0x008e
+#define OMAP4_CTRL_MODULE_PAD_C2C_DATA12_OFFSET 0x0090
+#define OMAP4_CTRL_MODULE_PAD_C2C_DATA13_OFFSET 0x0092
+#define OMAP4_CTRL_MODULE_PAD_C2C_DATA14_OFFSET 0x0094
+#define OMAP4_CTRL_MODULE_PAD_C2C_DATA15_OFFSET 0x0096
+#define OMAP4_CTRL_MODULE_PAD_HDMI_HPD_OFFSET 0x0098
+#define OMAP4_CTRL_MODULE_PAD_HDMI_CEC_OFFSET 0x009a
+#define OMAP4_CTRL_MODULE_PAD_HDMI_DDC_SCL_OFFSET 0x009c
+#define OMAP4_CTRL_MODULE_PAD_HDMI_DDC_SDA_OFFSET 0x009e
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DX0_OFFSET 0x00a0
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DY0_OFFSET 0x00a2
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DX1_OFFSET 0x00a4
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DY1_OFFSET 0x00a6
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DX2_OFFSET 0x00a8
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DY2_OFFSET 0x00aa
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DX3_OFFSET 0x00ac
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DY3_OFFSET 0x00ae
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DX4_OFFSET 0x00b0
+#define OMAP4_CTRL_MODULE_PAD_CSI21_DY4_OFFSET 0x00b2
+#define OMAP4_CTRL_MODULE_PAD_CSI22_DX0_OFFSET 0x00b4
+#define OMAP4_CTRL_MODULE_PAD_CSI22_DY0_OFFSET 0x00b6
+#define OMAP4_CTRL_MODULE_PAD_CSI22_DX1_OFFSET 0x00b8
+#define OMAP4_CTRL_MODULE_PAD_CSI22_DY1_OFFSET 0x00ba
+#define OMAP4_CTRL_MODULE_PAD_CAM_SHUTTER_OFFSET 0x00bc
+#define OMAP4_CTRL_MODULE_PAD_CAM_STROBE_OFFSET 0x00be
+#define OMAP4_CTRL_MODULE_PAD_CAM_GLOBALRESET_OFFSET 0x00c0
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_CLK_OFFSET 0x00c2
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_STP_OFFSET 0x00c4
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DIR_OFFSET 0x00c6
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_NXT_OFFSET 0x00c8
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT0_OFFSET 0x00ca
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT1_OFFSET 0x00cc
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT2_OFFSET 0x00ce
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT3_OFFSET 0x00d0
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT4_OFFSET 0x00d2
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT5_OFFSET 0x00d4
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT6_OFFSET 0x00d6
+#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT7_OFFSET 0x00d8
+#define OMAP4_CTRL_MODULE_PAD_USBB1_HSIC_DATA_OFFSET 0x00da
+#define OMAP4_CTRL_MODULE_PAD_USBB1_HSIC_STROBE_OFFSET 0x00dc
+#define OMAP4_CTRL_MODULE_PAD_USBC1_ICUSB_DP_OFFSET 0x00de
+#define OMAP4_CTRL_MODULE_PAD_USBC1_ICUSB_DM_OFFSET 0x00e0
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_CLK_OFFSET 0x00e2
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_CMD_OFFSET 0x00e4
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT0_OFFSET 0x00e6
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT1_OFFSET 0x00e8
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT2_OFFSET 0x00ea
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT3_OFFSET 0x00ec
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT4_OFFSET 0x00ee
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT5_OFFSET 0x00f0
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT6_OFFSET 0x00f2
+#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT7_OFFSET 0x00f4
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_CLKX_OFFSET 0x00f6
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_DR_OFFSET 0x00f8
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_DX_OFFSET 0x00fa
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_FSX_OFFSET 0x00fc
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_CLKX_OFFSET 0x00fe
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_DR_OFFSET 0x0100
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_DX_OFFSET 0x0102
+#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_FSX_OFFSET 0x0104
+#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_UL_DATA_OFFSET 0x0106
+#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_DL_DATA_OFFSET 0x0108
+#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_FRAME_OFFSET 0x010a
+#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_LB_CLK_OFFSET 0x010c
+#define OMAP4_CTRL_MODULE_PAD_ABE_CLKS_OFFSET 0x010e
+#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_CLK1_OFFSET 0x0110
+#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN1_OFFSET 0x0112
+#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN2_OFFSET 0x0114
+#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN3_OFFSET 0x0116
+#define OMAP4_CTRL_MODULE_PAD_UART2_CTS_OFFSET 0x0118
+#define OMAP4_CTRL_MODULE_PAD_UART2_RTS_OFFSET 0x011a
+#define OMAP4_CTRL_MODULE_PAD_UART2_RX_OFFSET 0x011c
+#define OMAP4_CTRL_MODULE_PAD_UART2_TX_OFFSET 0x011e
+#define OMAP4_CTRL_MODULE_PAD_HDQ_SIO_OFFSET 0x0120
+#define OMAP4_CTRL_MODULE_PAD_I2C1_SCL_OFFSET 0x0122
+#define OMAP4_CTRL_MODULE_PAD_I2C1_SDA_OFFSET 0x0124
+#define OMAP4_CTRL_MODULE_PAD_I2C2_SCL_OFFSET 0x0126
+#define OMAP4_CTRL_MODULE_PAD_I2C2_SDA_OFFSET 0x0128
+#define OMAP4_CTRL_MODULE_PAD_I2C3_SCL_OFFSET 0x012a
+#define OMAP4_CTRL_MODULE_PAD_I2C3_SDA_OFFSET 0x012c
+#define OMAP4_CTRL_MODULE_PAD_I2C4_SCL_OFFSET 0x012e
+#define OMAP4_CTRL_MODULE_PAD_I2C4_SDA_OFFSET 0x0130
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CLK_OFFSET 0x0132
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_SOMI_OFFSET 0x0134
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_SIMO_OFFSET 0x0136
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS0_OFFSET 0x0138
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS1_OFFSET 0x013a
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS2_OFFSET 0x013c
+#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS3_OFFSET 0x013e
+#define OMAP4_CTRL_MODULE_PAD_UART3_CTS_RCTX_OFFSET 0x0140
+#define OMAP4_CTRL_MODULE_PAD_UART3_RTS_SD_OFFSET 0x0142
+#define OMAP4_CTRL_MODULE_PAD_UART3_RX_IRRX_OFFSET 0x0144
+#define OMAP4_CTRL_MODULE_PAD_UART3_TX_IRTX_OFFSET 0x0146
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_CLK_OFFSET 0x0148
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_CMD_OFFSET 0x014a
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT0_OFFSET 0x014c
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT1_OFFSET 0x014e
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT2_OFFSET 0x0150
+#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT3_OFFSET 0x0152
+#define OMAP4_CTRL_MODULE_PAD_MCSPI4_CLK_OFFSET 0x0154
+#define OMAP4_CTRL_MODULE_PAD_MCSPI4_SIMO_OFFSET 0x0156
+#define OMAP4_CTRL_MODULE_PAD_MCSPI4_SOMI_OFFSET 0x0158
+#define OMAP4_CTRL_MODULE_PAD_MCSPI4_CS0_OFFSET 0x015a
+#define OMAP4_CTRL_MODULE_PAD_UART4_RX_OFFSET 0x015c
+#define OMAP4_CTRL_MODULE_PAD_UART4_TX_OFFSET 0x015e
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_CLK_OFFSET 0x0160
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_STP_OFFSET 0x0162
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DIR_OFFSET 0x0164
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_NXT_OFFSET 0x0166
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT0_OFFSET 0x0168
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT1_OFFSET 0x016a
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT2_OFFSET 0x016c
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT3_OFFSET 0x016e
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT4_OFFSET 0x0170
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT5_OFFSET 0x0172
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT6_OFFSET 0x0174
+#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT7_OFFSET 0x0176
+#define OMAP4_CTRL_MODULE_PAD_USBB2_HSIC_DATA_OFFSET 0x0178
+#define OMAP4_CTRL_MODULE_PAD_USBB2_HSIC_STROBE_OFFSET 0x017a
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX0_OFFSET 0x017c
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY0_OFFSET 0x017e
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX1_OFFSET 0x0180
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY1_OFFSET 0x0182
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX2_OFFSET 0x0184
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY2_OFFSET 0x0186
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX0_OFFSET 0x0188
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY0_OFFSET 0x018a
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX1_OFFSET 0x018c
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY1_OFFSET 0x018e
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX2_OFFSET 0x0190
+#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY2_OFFSET 0x0192
+#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_CE_OFFSET 0x0194
+#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_DP_OFFSET 0x0196
+#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_DM_OFFSET 0x0198
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK1_OUT_OFFSET 0x019a
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK2_OUT_OFFSET 0x019c
+#define OMAP4_CTRL_MODULE_PAD_SYS_NIRQ1_OFFSET 0x019e
+#define OMAP4_CTRL_MODULE_PAD_SYS_NIRQ2_OFFSET 0x01a0
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT0_OFFSET 0x01a2
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT1_OFFSET 0x01a4
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT2_OFFSET 0x01a6
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT3_OFFSET 0x01a8
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT4_OFFSET 0x01aa
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT5_OFFSET 0x01ac
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU0_OFFSET 0x01ae
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU1_OFFSET 0x01b0
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU2_OFFSET 0x01b2
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU3_OFFSET 0x01b4
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU4_OFFSET 0x01b6
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU5_OFFSET 0x01b8
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU6_OFFSET 0x01ba
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU7_OFFSET 0x01bc
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU8_OFFSET 0x01be
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU9_OFFSET 0x01c0
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU10_OFFSET 0x01c2
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU11_OFFSET 0x01c4
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU12_OFFSET 0x01c6
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU13_OFFSET 0x01c8
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU14_OFFSET 0x01ca
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU15_OFFSET 0x01cc
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU16_OFFSET 0x01ce
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU17_OFFSET 0x01d0
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU18_OFFSET 0x01d2
+#define OMAP4_CTRL_MODULE_PAD_DPM_EMU19_OFFSET 0x01d4
+
+#define OMAP4_CTRL_MODULE_PAD_CORE_MUX_SIZE \
+ (OMAP4_CTRL_MODULE_PAD_DPM_EMU19_OFFSET \
+ - OMAP4_CTRL_MODULE_PAD_GPMC_AD0_OFFSET + 2)
+
+/* ctrl_module_pad_wkup base address*/
+#define OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE 0x4a31e000
+
+/* ctrl_module_pad_wkup registers offset*/
+#define OMAP4_CTRL_MODULE_PAD_SIM_IO_OFFSET 0x0040
+#define OMAP4_CTRL_MODULE_PAD_SIM_CLK_OFFSET 0x0042
+#define OMAP4_CTRL_MODULE_PAD_SIM_RESET_OFFSET 0x0044
+#define OMAP4_CTRL_MODULE_PAD_SIM_CD_OFFSET 0x0046
+#define OMAP4_CTRL_MODULE_PAD_SIM_PWRCTRL_OFFSET 0x0048
+#define OMAP4_CTRL_MODULE_PAD_SR_SCL_OFFSET 0x004a
+#define OMAP4_CTRL_MODULE_PAD_SR_SDA_OFFSET 0x004c
+#define OMAP4_CTRL_MODULE_PAD_FREF_XTAL_IN_OFFSET 0x004e
+#define OMAP4_CTRL_MODULE_PAD_FREF_SLICER_IN_OFFSET 0x0050
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK_IOREQ_OFFSET 0x0052
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK0_OUT_OFFSET 0x0054
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK3_REQ_OFFSET 0x0056
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK3_OUT_OFFSET 0x0058
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK4_REQ_OFFSET 0x005a
+#define OMAP4_CTRL_MODULE_PAD_FREF_CLK4_OUT_OFFSET 0x005c
+#define OMAP4_CTRL_MODULE_PAD_SYS_32K_OFFSET 0x005e
+#define OMAP4_CTRL_MODULE_PAD_SYS_NRESPWRON_OFFSET 0x0060
+#define OMAP4_CTRL_MODULE_PAD_SYS_NRESWARM_OFFSET 0x0062
+#define OMAP4_CTRL_MODULE_PAD_SYS_PWR_REQ_OFFSET 0x0064
+#define OMAP4_CTRL_MODULE_PAD_SYS_PWRON_RESET_OUT_OFFSET 0x0066
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT6_OFFSET 0x0068
+#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT7_OFFSET 0x006a
+#define OMAP4_CTRL_MODULE_PAD_JTAG_NTRST_OFFSET 0x006c
+#define OMAP4_CTRL_MODULE_PAD_JTAG_TCK_OFFSET 0x006e
+#define OMAP4_CTRL_MODULE_PAD_JTAG_RTCK_OFFSET 0x0070
+#define OMAP4_CTRL_MODULE_PAD_JTAG_TMS_TMSC_OFFSET 0x0072
+#define OMAP4_CTRL_MODULE_PAD_JTAG_TDI_OFFSET 0x0074
+#define OMAP4_CTRL_MODULE_PAD_JTAG_TDO_OFFSET 0x0076
+
+#define OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE \
+ (OMAP4_CTRL_MODULE_PAD_JTAG_TDO_OFFSET \
+ - OMAP4_CTRL_MODULE_PAD_SIM_IO_OFFSET + 2)
+
+#endif
--
1.6.0.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
` (2 preceding siblings ...)
2010-09-24 9:15 ` [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1 Benoit Cousson
@ 2010-09-24 9:15 ` Benoit Cousson
2010-09-24 23:14 ` Anand Gadiyar
2010-09-24 9:15 ` [RFC 5/5] OMAP4: mux: Temporary initial SDP4430 mux settings Benoit Cousson
2010-10-18 18:09 ` [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Menon, Nishanth
5 siblings, 1 reply; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap; +Cc: Benoit Cousson, Tony Lindgren, Paul Walmsley, Kevin Hilman
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
---
arch/arm/mach-omap2/Kconfig | 1 +
arch/arm/mach-omap2/board-4430sdp.c | 12 ++++++++++++
2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 6aede64..4a8f897 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -240,6 +240,7 @@ config MACH_OMAP_4430SDP
bool "OMAP 4430 SDP board"
default y
depends on ARCH_OMAP4
+ select OMAP_PACKAGE_CBL
config MACH_OMAP4_PANDA
bool "OMAP4 Panda Board"
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 9447644..d087712 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -35,6 +35,8 @@
#include <plat/timer-gp.h>
#include <plat/usb.h>
#include <plat/mmc.h>
+
+#include "mux.h"
#include "hsmmc.h"
#define ETH_KS8851_IRQ 34
@@ -426,10 +428,20 @@ static int __init omap4_i2c_init(void)
omap_register_i2c_bus(4, 400, NULL, 0);
return 0;
}
+
+#ifdef CONFIG_OMAP_MUX
+static struct omap_board_mux board_mux[] __initdata = {
+ { .reg_offset = OMAP_MUX_TERMINATOR },
+};
+#else
+#define board_mux NULL
+#endif
+
static void __init omap_4430sdp_init(void)
{
int status;
+ omap4_mux_init(board_mux, OMAP_PACKAGE_CBL);
omap4_i2c_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
omap_serial_init();
--
1.6.0.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [RFC 5/5] OMAP4: mux: Temporary initial SDP4430 mux settings
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
` (3 preceding siblings ...)
2010-09-24 9:15 ` [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1 Benoit Cousson
@ 2010-09-24 9:15 ` Benoit Cousson
2010-10-18 18:09 ` [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Menon, Nishanth
5 siblings, 0 replies; 27+ messages in thread
From: Benoit Cousson @ 2010-09-24 9:15 UTC (permalink / raw)
To: linux-omap
Cc: Benoit Cousson, Tony Lindgren, Paul Walmsley, Kevin Hilman,
Santosh Shilimkar
Mux settings will have to go in per device init file for the
long term. Until someone does it, apply the same mux settings
than X-loader, minus the OFF mode.
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Kevin Hilman <khilman@deeprootsystems.com>
Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
arch/arm/mach-omap2/board-4430sdp.c | 377 +++++++++++++++++++++++++++++++++++
1 files changed, 377 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index d087712..8bf026a 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -431,6 +431,383 @@ static int __init omap4_i2c_init(void)
#ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = {
+ /* Audio backend settings */
+ OMAP4_MUX(ABE_CLKS, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_DMIC_CLK1, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_DMIC_DIN1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_DMIC_DIN2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_DMIC_DIN3, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ /* abe_slimbus1_clock */
+ OMAP4_MUX(ABE_MCBSP1_CLKX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE1),
+ /* abe_slimbus1_data */
+ OMAP4_MUX(ABE_MCBSP1_DR, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE1),
+ OMAP4_MUX(ABE_MCBSP1_DX, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_MCBSP1_FSX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_MCBSP2_CLKX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_MCBSP2_DR, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_MCBSP2_DX, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_MCBSP2_FSX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_PDM_DL_DATA, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_PDM_FRAME, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_PDM_LB_CLK, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(ABE_PDM_UL_DATA, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+
+ OMAP4_MUX(CAM_SHUTTER, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CAM_STROBE, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI21_DX0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI21_DX1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI21_DX2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ /* safe_mode */
+ OMAP4_MUX(CSI21_DX3, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE7),
+ /* safe_mode */
+ OMAP4_MUX(CSI21_DX4, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE7),
+ OMAP4_MUX(CSI21_DY0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI21_DY1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI21_DY2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ /* safe_mode */
+ OMAP4_MUX(CSI21_DY3, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE7),
+ /* safe_mode */
+ OMAP4_MUX(CSI21_DY4, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE7),
+ OMAP4_MUX(CSI22_DX0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI22_DX1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI22_DY0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(CSI22_DY1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+/*
+ * OMAP4_MUX(DPM_EMU0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(DPM_EMU1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(DPM_EMU2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ */
+ /* dsi1_te0 */
+ OMAP4_MUX(C2C_DATA12, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* dsi2_te0 */
+ OMAP4_MUX(C2C_DATA14, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* dispc2_data10 */
+ OMAP4_MUX(DPM_EMU3, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data9 */
+ OMAP4_MUX(DPM_EMU4, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data16 */
+ OMAP4_MUX(DPM_EMU5, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data17 */
+ OMAP4_MUX(DPM_EMU6, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_hsync */
+ OMAP4_MUX(DPM_EMU7, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_pclk */
+ OMAP4_MUX(DPM_EMU8, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_vsync */
+ OMAP4_MUX(DPM_EMU9, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_de */
+ OMAP4_MUX(DPM_EMU10, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data8 */
+ OMAP4_MUX(DPM_EMU11, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data7 */
+ OMAP4_MUX(DPM_EMU12, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data6 */
+ OMAP4_MUX(DPM_EMU13, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data5 */
+ OMAP4_MUX(DPM_EMU14, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data4 */
+ OMAP4_MUX(DPM_EMU15, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data3 */
+ OMAP4_MUX(DPM_EMU16, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data2 */
+ OMAP4_MUX(DPM_EMU17, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data1 */
+ OMAP4_MUX(DPM_EMU18, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data0 */
+ OMAP4_MUX(DPM_EMU19, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data20 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data19 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data18 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data15 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT3, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data14 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT4, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data13 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT5, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data12 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT6, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data11 */
+ OMAP4_MUX(USBB2_ULPITLL_DAT7, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data22 */
+ OMAP4_MUX(USBB2_ULPITLL_DIR, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data21 */
+ OMAP4_MUX(USBB2_ULPITLL_NXT, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+ /* dispc2_data23 */
+ OMAP4_MUX(USBB2_ULPITLL_STP, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE5),
+
+ /* sys_drm_msecure */
+ OMAP4_MUX(FREF_CLK0_OUT, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE2),
+/*
+ * OMAP4_MUX(FREF_CLK1_OUT, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK2_OUT, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK3_OUT, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK3_REQ, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK4_OUT, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK4_REQ, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_CLK_IOREQ, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_SLICER_IN, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(FREF_XTAL_IN, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ */
+ /* sdmmc2_dat0 */
+ OMAP4_MUX(GPMC_AD0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat1 */
+ OMAP4_MUX(GPMC_AD1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat2 */
+ OMAP4_MUX(GPMC_AD2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat3 */
+ OMAP4_MUX(GPMC_AD3, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat4 */
+ OMAP4_MUX(GPMC_AD4, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat5 */
+ OMAP4_MUX(GPMC_AD5, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat6 */
+ OMAP4_MUX(GPMC_AD6, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_dat7 */
+ OMAP4_MUX(GPMC_AD7, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_clk */
+ OMAP4_MUX(GPMC_NOE, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* sdmmc2_cmd */
+ OMAP4_MUX(GPMC_NWE, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+
+ /* gpio_32 */
+ OMAP4_MUX(GPMC_AD8, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_33 */
+ OMAP4_MUX(GPMC_AD9, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_55 */
+ OMAP4_MUX(GPMC_CLK, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_56 */
+ OMAP4_MUX(GPMC_NADV_ALE, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_59 */
+ OMAP4_MUX(GPMC_NBE0_CLE, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3),
+ /* gpio_60 */
+ OMAP4_MUX(GPMC_NBE1, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_50 */
+ OMAP4_MUX(GPMC_NCS0, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_51 */
+ OMAP4_MUX(GPMC_NCS1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_52 */
+ OMAP4_MUX(GPMC_NCS2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_53 */
+ OMAP4_MUX(GPMC_NCS3, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_54 */
+ OMAP4_MUX(GPMC_NWP, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_61 */
+ OMAP4_MUX(GPMC_WAIT0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_62 */
+ OMAP4_MUX(GPMC_WAIT1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_83 */
+ OMAP4_MUX(CAM_GLOBALRESET, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_100 */
+ OMAP4_MUX(C2C_DATA11, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_102 */
+ OMAP4_MUX(C2C_DATA13, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_104 */
+ OMAP4_MUX(C2C_DATA15, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+
+ OMAP4_MUX(HDMI_CEC, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(HDMI_DDC_SCL, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(HDMI_DDC_SDA, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(HDMI_HPD, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+/*
+ * Done during device init
+ *
+ * OMAP4_MUX(I2C1_SCL, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C1_SDA, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C2_SCL, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C2_SDA, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C3_SCL, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C3_SDA, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C4_SCL, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(I2C4_SDA, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ */
+
+/*
+ * Don't touch the JTAG pins
+ *
+ * OMAP4_MUX(JTAG_NTRST, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0),
+ * OMAP4_MUX(JTAG_RTCK, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(JTAG_TCK, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0),
+ * OMAP4_MUX(JTAG_TDI, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ * OMAP4_MUX(JTAG_TDO, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ * OMAP4_MUX(JTAG_TMS_TMSC, PAD_WKUP_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ */
+ OMAP4_MUX(MCSPI1_CLK, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI1_CS0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI1_CS1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI1_SIMO, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI1_SOMI, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI4_CLK, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI4_CS0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI4_SIMO, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(MCSPI4_SOMI, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+
+ OMAP4_MUX(SDMMC1_CLK, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_CMD, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT3, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT4, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT5, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT6, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC1_DAT7, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_CLK, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_CMD, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_DAT0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_DAT1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_DAT2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SDMMC5_DAT3, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+
+ OMAP4_MUX(SIM_CD, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SIM_CLK, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SIM_IO, PAD_WKUP_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SIM_PWRCTRL, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SIM_RESET, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+
+ OMAP4_MUX(SR_SCL, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SR_SDA, PAD_WKUP_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SYS_32K, PAD_WKUP_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+
+ /* gpio_34 */
+ OMAP4_MUX(GPMC_AD10, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_35 */
+ OMAP4_MUX(GPMC_AD11, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_36 */
+ OMAP4_MUX(GPMC_AD12, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_37 */
+ OMAP4_MUX(GPMC_AD13, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_38 */
+ OMAP4_MUX(GPMC_AD14, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_39 */
+ OMAP4_MUX(GPMC_AD15, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_40 */
+ OMAP4_MUX(GPMC_A16, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_41 */
+ OMAP4_MUX(GPMC_A17, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_44 */
+ OMAP4_MUX(GPMC_A20, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_45 */
+ OMAP4_MUX(GPMC_A21, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_48 */
+ OMAP4_MUX(GPMC_A24, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_49 */
+ OMAP4_MUX(GPMC_A25, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_127 */
+ OMAP4_MUX(HDQ_SIO, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_139 */
+ OMAP4_MUX(MCSPI1_CS2, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_140 */
+ OMAP4_MUX(MCSPI1_CS3, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE3),
+ /* gpio_157 */
+ OMAP4_MUX(USBB2_ULPITLL_CLK, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_169 */
+ OMAP4_MUX(USBB2_HSIC_DATA, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_170 */
+ OMAP4_MUX(USBB2_HSIC_STROBE, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_184 */
+ OMAP4_MUX(SYS_BOOT0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3),
+ /* gpio_185 */
+ OMAP4_MUX(SYS_BOOT1, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_186 */
+ OMAP4_MUX(SYS_BOOT2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3),
+ /* gpio_187 */
+ OMAP4_MUX(SYS_BOOT3, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_188 */
+ OMAP4_MUX(SYS_BOOT4, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+ /* gpio_189 */
+ OMAP4_MUX(SYS_BOOT5, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE3),
+ /* gpio_wk9 */
+ OMAP4_MUX(SYS_BOOT6, PAD_WKUP_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_wk10 */
+ OMAP4_MUX(SYS_BOOT7, PAD_WKUP_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE3),
+ /* gpio_wk29 */
+ OMAP4_MUX(SYS_PWRON_RESET_OUT, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
+
+ OMAP4_MUX(SYS_NIRQ1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SYS_NIRQ2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(SYS_NRESPWRON, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SYS_NRESWARM, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(SYS_PWR_REQ, PAD_WKUP_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+
+ OMAP4_MUX(UART2_CTS, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART2_RTS, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART2_RX, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART2_TX, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART3_CTS_RCTX, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART3_RTS_SD, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART3_RX_IRRX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART3_TX_IRTX, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART4_RX, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(UART4_TX, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+
+ /* kpd_row0 */
+ OMAP4_MUX(UNIPRO_RX0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row2 */
+ OMAP4_MUX(UNIPRO_RX1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row4 */
+ OMAP4_MUX(UNIPRO_RX2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row1 */
+ OMAP4_MUX(UNIPRO_RY0, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row3 */
+ OMAP4_MUX(UNIPRO_RY1, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row5 */
+ OMAP4_MUX(UNIPRO_RY2, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_col0 */
+ OMAP4_MUX(UNIPRO_TX0, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col2 */
+ OMAP4_MUX(UNIPRO_TX1, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col4 */
+ OMAP4_MUX(UNIPRO_TX2, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col1 */
+ OMAP4_MUX(UNIPRO_TY0, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col3 */
+ OMAP4_MUX(UNIPRO_TY1, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col5 */
+ OMAP4_MUX(UNIPRO_TY2, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_row6 */
+ OMAP4_MUX(GPMC_A18, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_row7 */
+ OMAP4_MUX(GPMC_A19, PAD_CORE_ID, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE1),
+ /* kpd_col6 */
+ OMAP4_MUX(GPMC_A22, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+ /* kpd_col7 */
+ OMAP4_MUX(GPMC_A23, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE1),
+
+ OMAP4_MUX(USBA0_OTG_CE, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(USBA0_OTG_DM, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(USBA0_OTG_DP, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(USBB1_HSIC_DATA, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(USBB1_HSIC_STROBE, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
+ /* usbb1_ulpiphy_clk */
+ OMAP4_MUX(USBB1_ULPITLL_CLK, PAD_CORE_ID, OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat0 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT0, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat1 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT1, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat2 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT2, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat3 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT3, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat4 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT4, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat5 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT5, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat6 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT6, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dat7 */
+ OMAP4_MUX(USBB1_ULPITLL_DAT7, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_dir */
+ OMAP4_MUX(USBB1_ULPITLL_DIR, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_nxt */
+ OMAP4_MUX(USBB1_ULPITLL_NXT, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE4),
+ /* usbb1_ulpiphy_stp */
+ OMAP4_MUX(USBB1_ULPITLL_STP, PAD_CORE_ID, OMAP_PIN_OUTPUT | OMAP_MUX_MODE4),
+ OMAP4_MUX(USBC1_ICUSB_DM, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+ OMAP4_MUX(USBC1_ICUSB_DP, PAD_CORE_ID, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
+
{ .reg_offset = OMAP_MUX_TERMINATOR },
};
#else
--
1.6.0.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [RFC 2/5] OMAP: mux: Make low level function private
2010-09-24 9:15 ` [RFC 2/5] OMAP: mux: Make low level function private Benoit Cousson
@ 2010-09-24 23:09 ` Gadiyar, Anand
2010-09-24 23:50 ` Tim Nordell
0 siblings, 1 reply; 27+ messages in thread
From: Gadiyar, Anand @ 2010-09-24 23:09 UTC (permalink / raw)
To: Benoit Cousson; +Cc: linux-omap, Tony Lindgren, Paul Walmsley, Kevin Hilman
On Fri, Sep 24, 2010 at 2:45 PM, Benoit Cousson <b-cousson@ti.com> wrote:
> omap_mux_read / omap_mux_write should not be accessed directly
> outside the mux framework.
> Do we really have use case that require dynamic mux change beside
> GPIO?
>
Only case I can think of is for any workarounds for issues that turn up.
No such cases exist today on OMAP3 at least, and none are likely to
appear in future (I hope). So your assumption is valid.
- Anand
> Signed-off-by: Benoit Cousson <b-cousson@ti.com>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Paul Walmsley <paul@pwsan.com>
> Cc: Kevin Hilman <khilman@deeprootsystems.com>
> ---
> arch/arm/mach-omap2/mux.c | 4 ++--
> arch/arm/mach-omap2/mux.h | 18 ------------------
> 2 files changed, 2 insertions(+), 20 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
> index 83e7686..8285cb8 100644
> --- a/arch/arm/mach-omap2/mux.c
> +++ b/arch/arm/mach-omap2/mux.c
> @@ -55,7 +55,7 @@ static u8 omap_mux_flags;
> static struct mux_partition mux_partitions[MAX_PARTITIONS_NR];
> static u32 mux_partitions_cnt;
>
> -u16 omap_mux_read(u16 reg, u8 id)
> +static u16 omap_mux_read(u16 reg, u8 id)
> {
> void __iomem *mux_base = mux_partitions[id].base;
>
> @@ -65,7 +65,7 @@ u16 omap_mux_read(u16 reg, u8 id)
> return __raw_readw(mux_base + reg);
> }
>
> -void omap_mux_write(u16 val, u16 reg, u8 id)
> +static void omap_mux_write(u16 val, u16 reg, u8 id)
> {
> void __iomem *mux_base = mux_partitions[id].base;
>
> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
> index 9b28576..da67501 100644
> --- a/arch/arm/mach-omap2/mux.h
> +++ b/arch/arm/mach-omap2/mux.h
> @@ -173,24 +173,6 @@ u16 omap_mux_get_gpio(int gpio);
> void omap_mux_set_gpio(u16 val, int gpio);
>
> /**
> - * omap_mux_read() - read mux register
> - * @mux_offset: Offset of the mux register
> - * @id: identifier of the control module partition
> - *
> - */
> -u16 omap_mux_read(u16 mux_offset, u8 id);
> -
> -/**
> - * omap_mux_write() - write mux register
> - * @val: New mux register value
> - * @mux_offset: Offset of the mux register
> - * @id: identifier of the control module partition
> - *
> - * This should be only needed for dynamic remuxing of non-gpio signals.
> - */
> -void omap_mux_write(u16 val, u16 mux_offset, u8 id);
> -
> -/**
> * omap_mux_write_array() - write an array of mux registers
> * @board_mux: Array of mux registers terminated by MAP_MUX_TERMINATOR
> *
> --
> 1.6.0.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1
2010-09-24 9:15 ` [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1 Benoit Cousson
@ 2010-09-24 23:14 ` Anand Gadiyar
2010-09-27 7:24 ` Cousson, Benoit
0 siblings, 1 reply; 27+ messages in thread
From: Anand Gadiyar @ 2010-09-24 23:14 UTC (permalink / raw)
To: Benoit Cousson, linux-omap; +Cc: Tony Lindgren, Paul Walmsley, Kevin Hilman
Benoit Cousson wrote:
> Signed-off-by: Benoit Cousson <b-cousson@ti.com>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Paul Walmsley <paul@pwsan.com>
> Cc: Kevin Hilman <khilman@deeprootsystems.com>
> ---
> arch/arm/mach-omap2/Kconfig | 1 +
> arch/arm/mach-omap2/board-4430sdp.c | 12 ++++++++++++
> 2 files changed, 13 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 6aede64..4a8f897 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -240,6 +240,7 @@ config MACH_OMAP_4430SDP
> bool "OMAP 4430 SDP board"
> default y
> depends on ARCH_OMAP4
> + select OMAP_PACKAGE_CBL
>
> config MACH_OMAP4_PANDA
> bool "OMAP4 Panda Board"
> diff --git a/arch/arm/mach-omap2/board-4430sdp.c
b/arch/arm/mach-omap2/board-4430sdp.c
> index 9447644..d087712 100644
> --- a/arch/arm/mach-omap2/board-4430sdp.c
> +++ b/arch/arm/mach-omap2/board-4430sdp.c
> @@ -35,6 +35,8 @@
> #include <plat/timer-gp.h>
> #include <plat/usb.h>
> #include <plat/mmc.h>
> +
> +#include "mux.h"
> #include "hsmmc.h"
>
> #define ETH_KS8851_IRQ 34
> @@ -426,10 +428,20 @@ static int __init omap4_i2c_init(void)
> omap_register_i2c_bus(4, 400, NULL, 0);
> return 0;
> }
> +
> +#ifdef CONFIG_OMAP_MUX
> +static struct omap_board_mux board_mux[] __initdata = {
> + { .reg_offset = OMAP_MUX_TERMINATOR },
> +};
> +#else
> +#define board_mux NULL
> +#endif
> +
> static void __init omap_4430sdp_init(void)
> {
> int status;
>
> + omap4_mux_init(board_mux, OMAP_PACKAGE_CBL);
> omap4_i2c_init();
> platform_add_devices(sdp4430_devices,
ARRAY_SIZE(sdp4430_devices));
> omap_serial_init();
Panda uses the same package I believe - I'll double check and update
that board file. I'll test this series tomorrow on both boards.
- Anand
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1
2010-09-24 9:15 ` [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1 Benoit Cousson
@ 2010-09-24 23:18 ` Anand Gadiyar
2010-09-27 9:31 ` Cousson, Benoit
0 siblings, 1 reply; 27+ messages in thread
From: Anand Gadiyar @ 2010-09-24 23:18 UTC (permalink / raw)
To: Benoit Cousson, linux-omap; +Cc: Tony Lindgren, Paul Walmsley, Kevin Hilman
> diff --git a/arch/arm/mach-omap2/mux44xx.c
b/arch/arm/mach-omap2/mux44xx.c
> new file mode 100644
> index 0000000..839a905
> --- /dev/null
> +++ b/arch/arm/mach-omap2/mux44xx.c
> @@ -0,0 +1,944 @@
> +\
Stray change?
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 2/5] OMAP: mux: Make low level function private
2010-09-24 23:09 ` Gadiyar, Anand
@ 2010-09-24 23:50 ` Tim Nordell
2010-09-25 0:07 ` Anand Gadiyar
0 siblings, 1 reply; 27+ messages in thread
From: Tim Nordell @ 2010-09-24 23:50 UTC (permalink / raw)
To: Gadiyar, Anand
Cc: Benoit Cousson, linux-omap, Tony Lindgren, Paul Walmsley,
Kevin Hilman
On 09/24/10 18:09, Gadiyar, Anand wrote:
> On Fri, Sep 24, 2010 at 2:45 PM, Benoit Cousson <b-cousson@ti.com> wrote:
>> omap_mux_read / omap_mux_write should not be accessed directly
>> outside the mux framework.
>> Do we really have use case that require dynamic mux change beside
>> GPIO?
>>
>
> Only case I can think of is for any workarounds for issues that turn up.
> No such cases exist today on OMAP3 at least, and none are likely to
> appear in future (I hope). So your assumption is valid.
>
We have a use-case here - granted the code currently is a complete hack
and not something clean enough for the mainline kernel.
We recently rediscovered the USB3320 PHY suspend issue that is in the
errata on the OMAP35x platform (Advisory 3.1.1.193) and we came up with
a workaround for it (despite the errata saying there isn't any) where
essentially we do:
1) Allow the EHCI controller to suspend the PHY as normal
2) Cut the power to the USB host controller using power domains. This
resets the logic states in the USB host controller so that it is usable
again.
3) Remux all the pins talking to the PHY into GPIO mode
4) Monitor said pins for changes in status to know when a remote wakeup
request occurs
5) Remux pins back to USB PHY mode
6) Reenable power to the USB host controller and reinitialize registers
- Tim
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 2/5] OMAP: mux: Make low level function private
2010-09-24 23:50 ` Tim Nordell
@ 2010-09-25 0:07 ` Anand Gadiyar
2010-09-25 6:48 ` Tim Nordell
0 siblings, 1 reply; 27+ messages in thread
From: Anand Gadiyar @ 2010-09-25 0:07 UTC (permalink / raw)
To: Tim Nordell
Cc: Benoit Cousson, linux-omap, Tony Lindgren, Paul Walmsley,
Kevin Hilman
> -----Original Message-----
> From: Tim Nordell [mailto:tim.nordell@logicpd.com]
> Sent: Saturday, September 25, 2010 5:20 AM
> To: Gadiyar, Anand
> Cc: Benoit Cousson; linux-omap@vger.kernel.org; Tony
> Lindgren; Paul Walmsley; Kevin Hilman
> Subject: Re: [RFC 2/5] OMAP: mux: Make low level function private
>
> On 09/24/10 18:09, Gadiyar, Anand wrote:
> > On Fri, Sep 24, 2010 at 2:45 PM, Benoit Cousson
> <b-cousson@ti.com> wrote:
> >> omap_mux_read / omap_mux_write should not be accessed directly
> >> outside the mux framework.
> >> Do we really have use case that require dynamic mux change beside
> >> GPIO?
> >>
> >
> > Only case I can think of is for any workarounds for issues
> that turn up.
> > No such cases exist today on OMAP3 at least, and none are likely to
> > appear in future (I hope). So your assumption is valid.
> >
>
> We have a use-case here - granted the code currently is a complete hack
> and not something clean enough for the mainline kernel.
>
> We recently rediscovered the USB3320 PHY suspend issue that is in the
> errata on the OMAP35x platform (Advisory 3.1.1.193) and we came up with
> a workaround for it (despite the errata saying there isn't any) where
> essentially we do:
>
> 1) Allow the EHCI controller to suspend the PHY as normal
> 2) Cut the power to the USB host controller using power domains. This
> resets the logic states in the USB host controller so that it is usable
> again.
> 3) Remux all the pins talking to the PHY into GPIO mode
> 4) Monitor said pins for changes in status to know when a remote wakeup
> request occurs
> 5) Remux pins back to USB PHY mode
> 6) Reenable power to the USB host controller and reinitialize registers
We've tried this technique before - you still need to re-enumerate after
the resume, right? So you might as well just power down the PHY and
you should be able to recover.
Ajay Gupta did a lot of work on this - not sure if this worked well. We
basically gave up on this interoperability issue and decided to work
around it in newer silicon. 3630 ES1.1 and later has suspend-resume
working with the SMSC PHY.
- Anand
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-24 9:15 ` [RFC 1/5] OMAP: mux: Add support for control module split in several partitions Benoit Cousson
@ 2010-09-25 0:22 ` Tony Lindgren
2010-09-27 15:46 ` Tony Lindgren
0 siblings, 1 reply; 27+ messages in thread
From: Tony Lindgren @ 2010-09-25 0:22 UTC (permalink / raw)
To: Benoit Cousson; +Cc: linux-omap, Paul Walmsley, Kevin Hilman, Santosh Shilimkar
Hi Benoit,
* Benoit Cousson <b-cousson@ti.com> [100924 02:07]:
> Starting on OMAP4, the pin mux configuration is located in two
> different partitions of the control module (CODE_PAD and WKUP_PAD).
> The first one is inside the core power domain whereas the second
> one is inside the wakeup.
> Since each partition has a different physical base address, an
> ID is added for each mux entry in order to identify the proper
> partition and thus the correct base address.
Few comments below..
> /**
> * struct omap_mux - data for omap mux register offset and it's value
> * @reg_offset: mux register offset from the mux base
> * @gpio: GPIO number
> + * @id: Partition identifier
> * @muxnames: available signal modes for a ball
> */
> struct omap_mux {
> u16 reg_offset;
> u16 gpio;
> + u8 id;
> #ifdef CONFIG_OMAP_MUX
> char *muxnames[OMAP_MUX_NR_MODES];
> #ifdef CONFIG_DEBUG_FS
We might want to think a bit more how we want to handle the various
partitions for registers.
What do you think of the following:
We could convert u16 reg_offset into u32 reg_phys, and build the ioremap
areas based on those ranges.
After ioremap we're copying the data for used pins anyways, so we could
write them as virtual addresses.
struct omap_mux {
union mux_reg_union {
u32 reg_phys;
void __iomem *reg_virt;
};
u16 gpio;
#ifdef CONFIG_OMAP_MUX
char *muxnames[OMAP_MUX_NR_MODES];
#ifdef CONFIG_DEBUG_FS
char *balls[OMAP_MUX_NR_SIDES];
#endif
#endif
};
This would make the code more generic and simplify some parts of the
code. Muxing signals based on the signal name or gpio number would
work transparently
Then omapX_mux_init(board_mux, OMAP_PACKAGE_XYZ) would work
in a transparent way, but would have to figure out the partition
from the define.
If we wanted to use only the offset in the data, we could initialize
the various sections separately. But then omapX_mux_init() would have
to know the partition number somehow..
Regards,
Tony
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 2/5] OMAP: mux: Make low level function private
2010-09-25 0:07 ` Anand Gadiyar
@ 2010-09-25 6:48 ` Tim Nordell
0 siblings, 0 replies; 27+ messages in thread
From: Tim Nordell @ 2010-09-25 6:48 UTC (permalink / raw)
To: linux-omap
On 09/24/10 19:07, Anand Gadiyar wrote:
>> -----Original Message-----
>> From: Tim Nordell [mailto:tim.nordell@logicpd.com]
>> Sent: Saturday, September 25, 2010 5:20 AM
>> To: Gadiyar, Anand
>> Cc: Benoit Cousson; linux-omap@vger.kernel.org; Tony
>> Lindgren; Paul Walmsley; Kevin Hilman
>> Subject: Re: [RFC 2/5] OMAP: mux: Make low level function private
>>
>> On 09/24/10 18:09, Gadiyar, Anand wrote:
>>> On Fri, Sep 24, 2010 at 2:45 PM, Benoit Cousson
>> <b-cousson@ti.com> wrote:
>>>> omap_mux_read / omap_mux_write should not be accessed directly
>>>> outside the mux framework.
>>>> Do we really have use case that require dynamic mux change beside
>>>> GPIO?
>>>>
>>>
>>> Only case I can think of is for any workarounds for issues
>> that turn up.
>>> No such cases exist today on OMAP3 at least, and none are likely to
>>> appear in future (I hope). So your assumption is valid.
>>>
>>
>> We have a use-case here - granted the code currently is a complete hack
>> and not something clean enough for the mainline kernel.
>>
>> We recently rediscovered the USB3320 PHY suspend issue that is in the
>> errata on the OMAP35x platform (Advisory 3.1.1.193) and we came up with
>> a workaround for it (despite the errata saying there isn't any) where
>> essentially we do:
>>
>> 1) Allow the EHCI controller to suspend the PHY as normal
>> 2) Cut the power to the USB host controller using power domains. This
>> resets the logic states in the USB host controller so that it is usable
>> again.
>> 3) Remux all the pins talking to the PHY into GPIO mode
>> 4) Monitor said pins for changes in status to know when a remote wakeup
>> request occurs
>> 5) Remux pins back to USB PHY mode
>> 6) Reenable power to the USB host controller and reinitialize registers
>
> We've tried this technique before - you still need to re-enumerate after
> the resume, right? So you might as well just power down the PHY and
> you should be able to recover.
>
> Ajay Gupta did a lot of work on this - not sure if this worked well. We
> basically gave up on this interoperability issue and decided to work
> around it in newer silicon. 3630 ES1.1 and later has suspend-resume
> working with the SMSC PHY.
So, currently our patch to our local kernel essentially the downstream
device is reset-resumed. We needed to be able to support USB suspend
with it waking up when a device is plugged into our USB port. Since we
allow the PHY to suspend (rather than holding it in reset) and we're
monitoring the PHY pins via GPIO we can wake up the USB subsystem when
device is plugged into the system.
It works well enough that the USB subsystem comes up immediately after
we plug in a device, and that it supports suspension without a device.
I've even done some tests where I did a remote wakeup with a HID device
(mouse button clicks) and some of the time the device would end up being
reenumerated, and sometimes a reset-resume, so our current hack isn't
perfect, but it does allow what we were mainly aiming for - being able
to wake up the USB subsystem when a device is plugged in. That actually
is working quite well with our current hack. I should note that our
hardware has a permanent hub downstream of the USB3320 phy - not sure if
this makes any difference in terms of the behavior of the PHY and doing
GPIO against it.
And yes, you're right that newer silicon might work better with the PHY,
but we also had hardware that was designed with the problematic PHY
before we were aware of the errata. Having something that performs the
minimum functionality we needed is better than nothing.
- Tim
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1
2010-09-24 23:14 ` Anand Gadiyar
@ 2010-09-27 7:24 ` Cousson, Benoit
0 siblings, 0 replies; 27+ messages in thread
From: Cousson, Benoit @ 2010-09-27 7:24 UTC (permalink / raw)
To: Anand Gadiyar
Cc: linux-omap@vger.kernel.org, Tony Lindgren, Paul Walmsley,
Kevin Hilman
On 9/25/2010 1:14 AM, Anand Gadiyar wrote:
> Benoit Cousson wrote:
>
>> Signed-off-by: Benoit Cousson<b-cousson@ti.com>
>> Cc: Tony Lindgren<tony@atomide.com>
>> Cc: Paul Walmsley<paul@pwsan.com>
>> Cc: Kevin Hilman<khilman@deeprootsystems.com>
>> ---
>> arch/arm/mach-omap2/Kconfig | 1 +
>> arch/arm/mach-omap2/board-4430sdp.c | 12 ++++++++++++
>> 2 files changed, 13 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
>> index 6aede64..4a8f897 100644
>> --- a/arch/arm/mach-omap2/Kconfig
>> +++ b/arch/arm/mach-omap2/Kconfig
>> @@ -240,6 +240,7 @@ config MACH_OMAP_4430SDP
>> bool "OMAP 4430 SDP board"
>> default y
>> depends on ARCH_OMAP4
>> + select OMAP_PACKAGE_CBL
>>
>> config MACH_OMAP4_PANDA
>> bool "OMAP4 Panda Board"
>> diff --git a/arch/arm/mach-omap2/board-4430sdp.c
> b/arch/arm/mach-omap2/board-4430sdp.c
>> index 9447644..d087712 100644
>> --- a/arch/arm/mach-omap2/board-4430sdp.c
>> +++ b/arch/arm/mach-omap2/board-4430sdp.c
>> @@ -35,6 +35,8 @@
>> #include<plat/timer-gp.h>
>> #include<plat/usb.h>
>> #include<plat/mmc.h>
>> +
>> +#include "mux.h"
>> #include "hsmmc.h"
>>
>> #define ETH_KS8851_IRQ 34
>> @@ -426,10 +428,20 @@ static int __init omap4_i2c_init(void)
>> omap_register_i2c_bus(4, 400, NULL, 0);
>> return 0;
>> }
>> +
>> +#ifdef CONFIG_OMAP_MUX
>> +static struct omap_board_mux board_mux[] __initdata = {
>> + { .reg_offset = OMAP_MUX_TERMINATOR },
>> +};
>> +#else
>> +#define board_mux NULL
>> +#endif
>> +
>> static void __init omap_4430sdp_init(void)
>> {
>> int status;
>>
>> + omap4_mux_init(board_mux, OMAP_PACKAGE_CBL);
>> omap4_i2c_init();
>> platform_add_devices(sdp4430_devices,
> ARRAY_SIZE(sdp4430_devices));
>> omap_serial_init();
>
>
> Panda uses the same package I believe - I'll double check and update
> that board file. I'll test this series tomorrow on both boards.
Probably, please note that there is a new CBS package for ES2.0.
I've just generated the data, I'll send you that ASAP, since I do not
have ES2 board to check that anyway :-(
Thanks,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1
2010-09-24 23:18 ` Anand Gadiyar
@ 2010-09-27 9:31 ` Cousson, Benoit
0 siblings, 0 replies; 27+ messages in thread
From: Cousson, Benoit @ 2010-09-27 9:31 UTC (permalink / raw)
To: Gadiyar, Anand
Cc: linux-omap@vger.kernel.org, Tony Lindgren, Paul Walmsley,
Kevin Hilman
On 9/25/2010 1:18 AM, Gadiyar, Anand wrote:
>> diff --git a/arch/arm/mach-omap2/mux44xx.c
> b/arch/arm/mach-omap2/mux44xx.c
>> new file mode 100644
>> index 0000000..839a905
>> --- /dev/null
>> +++ b/arch/arm/mach-omap2/mux44xx.c
>> @@ -0,0 +1,944 @@
>> +\
>
> Stray change?
Yes, indeed.
Thanks,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-25 0:22 ` Tony Lindgren
@ 2010-09-27 15:46 ` Tony Lindgren
2010-09-27 17:24 ` Cousson, Benoit
0 siblings, 1 reply; 27+ messages in thread
From: Tony Lindgren @ 2010-09-27 15:46 UTC (permalink / raw)
To: Benoit Cousson; +Cc: linux-omap, Paul Walmsley, Kevin Hilman, Santosh Shilimkar
* Tony Lindgren <tony@atomide.com> [100924 17:14]:
>
> * Benoit Cousson <b-cousson@ti.com> [100924 02:07]:
>
> If we wanted to use only the offset in the data, we could initialize
> the various sections separately. But then omapX_mux_init() would have
> to know the partition number somehow..
After thinking about this a bit more, to me it seems like this is
the best way to go. Then there's no need to repeat the partition data
for each entry. How about this:
Earlier defines stay the same:
#define OMAP3_MUX(mode0, mux_value) \
{ \
.reg_offset = (OMAP3_CONTROL_PADCONF_##mode0##_OFFSET), \
.value = (mux_value), \
}
Then for omap4, we need to add a separate board mux table for each
partition:
#define OMAP4_MUX_PARTXXX(mode0, mux_value) \
{ \
.reg_offset = (OMAP4_PART_XXX_PADCONF_##mode0##_OFFSET), \
.value = (mux_value), \
}
#define OMAP4_MUX_PARTYYY(mode0, mux_value) \
{ \
.reg_offset = (OMAP4_PARTYYY_PADCONF_##mode0##_OFFSET), \
.value = (mux_value), \
}
...
For omap2 and 3, we just call omap_mux_init once with the mux_pbase
as we currently already do. Then for omap4, we call omap_mux_init for
each partition.
We also need to change omap_mux_read/write to allow specifying the
partition base address:
u16 omap_mux_read(void __iomem *base, u16 offset)
{
if (cpu_is_omap24xx())
return __raw_readb(base + offset);
else
return __raw_readw(base + offset);
}
All the other mux interface functions can stay the same, we just need
to modify the mux.c code to look for signal names or GPIO number in
each registered partition.
Regards,
Tony
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-27 15:46 ` Tony Lindgren
@ 2010-09-27 17:24 ` Cousson, Benoit
2010-09-27 17:36 ` Tony Lindgren
0 siblings, 1 reply; 27+ messages in thread
From: Cousson, Benoit @ 2010-09-27 17:24 UTC (permalink / raw)
To: Tony Lindgren
Cc: linux-omap@vger.kernel.org, Paul Walmsley, Kevin Hilman,
Shilimkar, Santosh
Hi Tony,
On 9/27/2010 5:46 PM, Tony Lindgren wrote:
> * Tony Lindgren<tony@atomide.com> [100924 17:14]:
>>
>> * Benoit Cousson<b-cousson@ti.com> [100924 02:07]:
>>
>> If we wanted to use only the offset in the data, we could initialize
>> the various sections separately. But then omapX_mux_init() would have
>> to know the partition number somehow..
>
> After thinking about this a bit more, to me it seems like this is
> the best way to go. Then there's no need to repeat the partition data
> for each entry. How about this:
>
> Earlier defines stay the same:
>
> #define OMAP3_MUX(mode0, mux_value) \
> { \
> .reg_offset = (OMAP3_CONTROL_PADCONF_##mode0##_OFFSET), \
> .value = (mux_value), \
> }
>
> Then for omap4, we need to add a separate board mux table for each
> partition:
>
> #define OMAP4_MUX_PARTXXX(mode0, mux_value) \
> { \
> .reg_offset = (OMAP4_PART_XXX_PADCONF_##mode0##_OFFSET), \
> .value = (mux_value), \
> }
>
> #define OMAP4_MUX_PARTYYY(mode0, mux_value) \
> { \
> .reg_offset = (OMAP4_PARTYYY_PADCONF_##mode0##_OFFSET), \
> .value = (mux_value), \
> }
OK for that one, that will save the extra id to store the partition in
each static data, but then you will still have to store it during the init?
> ...
> For omap2 and 3, we just call omap_mux_init once with the mux_pbase
> as we currently already do. Then for omap4, we call omap_mux_init for
> each partition.
>
> We also need to change omap_mux_read/write to allow specifying the
> partition base address:
Then you need somehow a partition information from somewhere.
I don't see how we can avoid the id at that point? We can store the base
address instead, but then every mux entries will have it.
The caller of the omap_mux_read still have to figure out what base
address it has to use.
That move the issue to the upper layer, but we still need that.
>
> u16 omap_mux_read(void __iomem *base, u16 offset)
> {
> if (cpu_is_omap24xx())
> return __raw_readb(base + offset);
> else
> return __raw_readw(base + offset);
> }
>
> All the other mux interface functions can stay the same, we just need
> to modify the mux.c code to look for signal names or GPIO number in
> each registered partition.
OK, now I think I understand your point... Please ignore the previous
comments :-)
You will guess the partition by trying each array at a time, and the
first one will win.
That seems pretty good in fact.
I just have to do it now...
Thanks,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-27 17:24 ` Cousson, Benoit
@ 2010-09-27 17:36 ` Tony Lindgren
2010-09-27 20:03 ` Cousson, Benoit
0 siblings, 1 reply; 27+ messages in thread
From: Tony Lindgren @ 2010-09-27 17:36 UTC (permalink / raw)
To: Cousson, Benoit
Cc: linux-omap@vger.kernel.org, Paul Walmsley, Kevin Hilman,
Shilimkar, Santosh
* Cousson, Benoit <b-cousson@ti.com> [100927 10:15]:
>
> OK for that one, that will save the extra id to store the partition
> in each static data, but then you will still have to store it during
> the init?
For mux.c internal data, we can have an array of struct omap_mux_partition
that contains the mux array for that partition:
struct omap_mux_partition {
void __iomem *base; /* Partition virt base */
struct omap_mux *mux; /* Partition specific mux array */
};
> >...
> >For omap2 and 3, we just call omap_mux_init once with the mux_pbase
> >as we currently already do. Then for omap4, we call omap_mux_init for
> >each partition.
> >
> >We also need to change omap_mux_read/write to allow specifying the
> >partition base address:
>
> Then you need somehow a partition information from somewhere.
> I don't see how we can avoid the id at that point? We can store the
> base address instead, but then every mux entries will have it.
That should only need to be stored once for each partition in the
struct omap_mux_partition?
> The caller of the omap_mux_read still have to figure out what base
> address it has to use.
> That move the issue to the upper layer, but we still need that.
For the mux.c internal code, we can search through the array
of struct omap_mux_partition and the mux entries in each partition
for signal name or GPIO number.
> >All the other mux interface functions can stay the same, we just need
> >to modify the mux.c code to look for signal names or GPIO number in
> >each registered partition.
>
> OK, now I think I understand your point... Please ignore the
> previous comments :-)
>
> You will guess the partition by trying each array at a time, and the
> first one will win.
>
> That seems pretty good in fact.
>
> I just have to do it now...
OK cool, let me know if I can help with something.
Tony
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-27 17:36 ` Tony Lindgren
@ 2010-09-27 20:03 ` Cousson, Benoit
2010-09-27 20:06 ` Tony Lindgren
0 siblings, 1 reply; 27+ messages in thread
From: Cousson, Benoit @ 2010-09-27 20:03 UTC (permalink / raw)
To: Tony Lindgren
Cc: linux-omap@vger.kernel.org, Paul Walmsley, Kevin Hilman,
Shilimkar, Santosh
On 9/27/2010 7:36 PM, Tony Lindgren wrote:
> * Cousson, Benoit<b-cousson@ti.com> [100927 10:15]:
>>
>> OK for that one, that will save the extra id to store the partition
>> in each static data, but then you will still have to store it during
>> the init?
>
> For mux.c internal data, we can have an array of struct omap_mux_partition
> that contains the mux array for that partition:
>
> struct omap_mux_partition {
> void __iomem *base; /* Partition virt base */
> struct omap_mux *mux; /* Partition specific mux array */
> };
>
>>> ...
>>> For omap2 and 3, we just call omap_mux_init once with the mux_pbase
>>> as we currently already do. Then for omap4, we call omap_mux_init for
>>> each partition.
>>>
>>> We also need to change omap_mux_read/write to allow specifying the
>>> partition base address:
>>
>> Then you need somehow a partition information from somewhere.
>> I don't see how we can avoid the id at that point? We can store the
>> base address instead, but then every mux entries will have it.
>
> That should only need to be stored once for each partition in the
> struct omap_mux_partition?
>
>> The caller of the omap_mux_read still have to figure out what base
>> address it has to use.
>> That move the issue to the upper layer, but we still need that.
>
> For the mux.c internal code, we can search through the array
> of struct omap_mux_partition and the mux entries in each partition
> for signal name or GPIO number.
>
>>> All the other mux interface functions can stay the same, we just need
>>> to modify the mux.c code to look for signal names or GPIO number in
>>> each registered partition.
>>
>> OK, now I think I understand your point... Please ignore the
>> previous comments :-)
>>
>> You will guess the partition by trying each array at a time, and the
>> first one will win.
>>
>> That seems pretty good in fact.
>>
>> I just have to do it now...
>
> OK cool, let me know if I can help with something.
Thanks, but that should be fine for moment. I think I should have the
updated version before the end of the week.
Just one clarification, I don't think we have to use two different
macros in that case. The names are already unique across partition
today, so we can use only macro like for previous OMAP.
I'm just glad I don't have to re-write these 231 entries per ES manually :-)
I'll give it a try, and keep you inform if I have any un-expected issue
with that approach.
Thanks,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 1/5] OMAP: mux: Add support for control module split in several partitions
2010-09-27 20:03 ` Cousson, Benoit
@ 2010-09-27 20:06 ` Tony Lindgren
0 siblings, 0 replies; 27+ messages in thread
From: Tony Lindgren @ 2010-09-27 20:06 UTC (permalink / raw)
To: Cousson, Benoit
Cc: linux-omap@vger.kernel.org, Paul Walmsley, Kevin Hilman,
Shilimkar, Santosh
* Cousson, Benoit <b-cousson@ti.com> [100927 12:54]:
>
> >OK cool, let me know if I can help with something.
>
> Thanks, but that should be fine for moment. I think I should have
> the updated version before the end of the week.
OK
> Just one clarification, I don't think we have to use two different
> macros in that case. The names are already unique across partition
> today, so we can use only macro like for previous OMAP.
OK
> I'm just glad I don't have to re-write these 231 entries per ES manually :-)
:)
> I'll give it a try, and keep you inform if I have any un-expected
> issue with that approach.
OK
Tony
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
` (4 preceding siblings ...)
2010-09-24 9:15 ` [RFC 5/5] OMAP4: mux: Temporary initial SDP4430 mux settings Benoit Cousson
@ 2010-10-18 18:09 ` Menon, Nishanth
2010-10-18 20:51 ` Cousson, Benoit
5 siblings, 1 reply; 27+ messages in thread
From: Menon, Nishanth @ 2010-10-18 18:09 UTC (permalink / raw)
To: Cousson, Benoit; +Cc: linux-omap@vger.kernel.org
> -----Original Message-----
> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> owner@vger.kernel.org] On Behalf Of Benoit Cousson
> Sent: Friday, September 24, 2010 4:16 AM
> To: linux-omap@vger.kernel.org
> Cc: Cousson, Benoit
> Subject: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
>
Ping? Is there a possibility for a v2 non-rfc ES2 support?
Regards,
Nishanth Menon
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 18:09 ` [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Menon, Nishanth
@ 2010-10-18 20:51 ` Cousson, Benoit
2010-10-18 20:53 ` Menon, Nishanth
2010-10-18 23:00 ` Tony Lindgren
0 siblings, 2 replies; 27+ messages in thread
From: Cousson, Benoit @ 2010-10-18 20:51 UTC (permalink / raw)
To: Menon, Nishanth; +Cc: linux-omap@vger.kernel.org
Hi Nishanth,
On 10/18/2010 8:09 PM, Menon, Nishanth wrote:
>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>> owner@vger.kernel.org] On Behalf Of Benoit Cousson
>>
> Ping? Is there a possibility for a v2 non-rfc ES2 support?
And what about a RFC v2? With ES2 support of course :-)
The changes I have done are breaking RX51 support due to the usage of
low-level API from the mux code.
For the moment I just disabled that code from the RX51, so there is no
way I send that except in a RFC form :-(
Regards,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 20:51 ` Cousson, Benoit
@ 2010-10-18 20:53 ` Menon, Nishanth
2010-10-18 20:57 ` Cousson, Benoit
2010-10-18 23:00 ` Tony Lindgren
1 sibling, 1 reply; 27+ messages in thread
From: Menon, Nishanth @ 2010-10-18 20:53 UTC (permalink / raw)
To: Cousson, Benoit; +Cc: linux-omap@vger.kernel.org
> -----Original Message-----
> From: Cousson, Benoit
> Sent: Monday, October 18, 2010 3:52 PM
>
>
> On 10/18/2010 8:09 PM, Menon, Nishanth wrote:
> >> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> >> owner@vger.kernel.org] On Behalf Of Benoit Cousson
> >>
> > Ping? Is there a possibility for a v2 non-rfc ES2 support?
>
> And what about a RFC v2? With ES2 support of course :-)
>
> The changes I have done are breaking RX51 support due to the usage of
> low-level API from the mux code.
>
> For the moment I just disabled that code from the RX51, so there is no
> way I send that except in a RFC form :-(
It'd be good to evolve this further.. looks like there is a bunch of
Drivers pending posting due to "lack of mux framework"..
Regards,
Nishanth Menon
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 20:53 ` Menon, Nishanth
@ 2010-10-18 20:57 ` Cousson, Benoit
2010-10-18 21:08 ` Menon, Nishanth
0 siblings, 1 reply; 27+ messages in thread
From: Cousson, Benoit @ 2010-10-18 20:57 UTC (permalink / raw)
To: Menon, Nishanth; +Cc: linux-omap@vger.kernel.org
On 10/18/2010 10:53 PM, Menon, Nishanth wrote:
>> From: Cousson, Benoit
>> Sent: Monday, October 18, 2010 3:52 PM
>>
>
>>
>> On 10/18/2010 8:09 PM, Menon, Nishanth wrote:
>>>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>>>> owner@vger.kernel.org] On Behalf Of Benoit Cousson
>>>>
>>> Ping? Is there a possibility for a v2 non-rfc ES2 support?
>>
>> And what about a RFC v2? With ES2 support of course :-)
>>
>> The changes I have done are breaking RX51 support due to the usage of
>> low-level API from the mux code.
>>
>> For the moment I just disabled that code from the RX51, so there is no
>> way I send that except in a RFC form :-(
> It'd be good to evolve this further.. looks like there is a bunch of
> Drivers pending posting due to "lack of mux framework"..
I guess that the current code should be good enough for that, isn't it?
The main API will not change. Only the low API will become forbidden.
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 20:57 ` Cousson, Benoit
@ 2010-10-18 21:08 ` Menon, Nishanth
0 siblings, 0 replies; 27+ messages in thread
From: Menon, Nishanth @ 2010-10-18 21:08 UTC (permalink / raw)
To: Cousson, Benoit; +Cc: linux-omap@vger.kernel.org
> -----Original Message-----
> From: Cousson, Benoit
> Sent: Monday, October 18, 2010 3:57 PM
> >>>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> >>>> owner@vger.kernel.org] On Behalf Of Benoit Cousson
> >>>>
> >>> Ping? Is there a possibility for a v2 non-rfc ES2 support?
> >>
> >> And what about a RFC v2? With ES2 support of course :-)
> >>
> >> The changes I have done are breaking RX51 support due to the usage of
> >> low-level API from the mux code.
> >>
> >> For the moment I just disabled that code from the RX51, so there is no
> >> way I send that except in a RFC form :-(
> > It'd be good to evolve this further.. looks like there is a bunch of
> > Drivers pending posting due to "lack of mux framework"..
>
> I guess that the current code should be good enough for that, isn't it?
> The main API will not change. Only the low API will become forbidden.
Unfortunately, not in l-o or kernel.org means not upstreamed solution :(
That is not a codebase for any driver developer to build on unfortunately :(.
Regards,
Nishanth Menon
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 20:51 ` Cousson, Benoit
2010-10-18 20:53 ` Menon, Nishanth
@ 2010-10-18 23:00 ` Tony Lindgren
2010-10-18 23:12 ` Cousson, Benoit
1 sibling, 1 reply; 27+ messages in thread
From: Tony Lindgren @ 2010-10-18 23:00 UTC (permalink / raw)
To: Cousson, Benoit; +Cc: Menon, Nishanth, linux-omap@vger.kernel.org
* Cousson, Benoit <b-cousson@ti.com> [101018 13:42]:
> Hi Nishanth,
>
> On 10/18/2010 8:09 PM, Menon, Nishanth wrote:
> >>From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
> >>owner@vger.kernel.org] On Behalf Of Benoit Cousson
> >>
> >Ping? Is there a possibility for a v2 non-rfc ES2 support?
>
> And what about a RFC v2? With ES2 support of course :-)
>
> The changes I have done are breaking RX51 support due to the usage
> of low-level API from the mux code.
>
> For the moment I just disabled that code from the RX51, so there is
> no way I send that except in a RFC form :-(
I have some ideas on doing the board specific runtime remuxing.
That should also solve the rx51 emmc remuxing.
Let's plan on merging your patches first after the merge window,
then I'll do my patches on top of yours to avoid rebasing.
Regards,
Tony
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support
2010-10-18 23:00 ` Tony Lindgren
@ 2010-10-18 23:12 ` Cousson, Benoit
0 siblings, 0 replies; 27+ messages in thread
From: Cousson, Benoit @ 2010-10-18 23:12 UTC (permalink / raw)
To: Tony Lindgren; +Cc: Menon, Nishanth, linux-omap@vger.kernel.org
Hi Tony,
On 10/19/2010 1:00 AM, Tony Lindgren wrote:
> * Cousson, Benoit<b-cousson@ti.com> [101018 13:42]:
>> Hi Nishanth,
>>
>> On 10/18/2010 8:09 PM, Menon, Nishanth wrote:
>>>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>>>> owner@vger.kernel.org] On Behalf Of Benoit Cousson
>>>>
>>> Ping? Is there a possibility for a v2 non-rfc ES2 support?
>>
>> And what about a RFC v2? With ES2 support of course :-)
>>
>> The changes I have done are breaking RX51 support due to the usage
>> of low-level API from the mux code.
>>
>> For the moment I just disabled that code from the RX51, so there is
>> no way I send that except in a RFC form :-(
>
> I have some ideas on doing the board specific runtime remuxing.
> That should also solve the rx51 emmc remuxing.
That's cool, I had some poor ideas as well, but I was not sure you will
like them :-)
> Let's plan on merging your patches first after the merge window,
> then I'll do my patches on top of yours to avoid rebasing.
Great, I'll send that when I will have the time to test that on an ES2.0
at least...
Just FYI, the wip code is there:
git://gitorious.org/omap-pm/linux.git ctrl-wip/mux-omap4-v2
Thanks,
Benoit
^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2010-10-18 23:12 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-24 9:15 [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Benoit Cousson
2010-09-24 9:15 ` [RFC 1/5] OMAP: mux: Add support for control module split in several partitions Benoit Cousson
2010-09-25 0:22 ` Tony Lindgren
2010-09-27 15:46 ` Tony Lindgren
2010-09-27 17:24 ` Cousson, Benoit
2010-09-27 17:36 ` Tony Lindgren
2010-09-27 20:03 ` Cousson, Benoit
2010-09-27 20:06 ` Tony Lindgren
2010-09-24 9:15 ` [RFC 2/5] OMAP: mux: Make low level function private Benoit Cousson
2010-09-24 23:09 ` Gadiyar, Anand
2010-09-24 23:50 ` Tim Nordell
2010-09-25 0:07 ` Anand Gadiyar
2010-09-25 6:48 ` Tim Nordell
2010-09-24 9:15 ` [RFC 3/5] OMAP4: mux: Add data for OMAP4430 ES1 Benoit Cousson
2010-09-24 23:18 ` Anand Gadiyar
2010-09-27 9:31 ` Cousson, Benoit
2010-09-24 9:15 ` [RFC 4/5] OMAP4: mux: Select CBL package for SDP4430 with ES1 Benoit Cousson
2010-09-24 23:14 ` Anand Gadiyar
2010-09-27 7:24 ` Cousson, Benoit
2010-09-24 9:15 ` [RFC 5/5] OMAP4: mux: Temporary initial SDP4430 mux settings Benoit Cousson
2010-10-18 18:09 ` [RFC 0/5] OMAP4: mux: Add the OMAP4430 ES1 support Menon, Nishanth
2010-10-18 20:51 ` Cousson, Benoit
2010-10-18 20:53 ` Menon, Nishanth
2010-10-18 20:57 ` Cousson, Benoit
2010-10-18 21:08 ` Menon, Nishanth
2010-10-18 23:00 ` Tony Lindgren
2010-10-18 23:12 ` Cousson, Benoit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).