* [RFC] omap4: Add board_data and initialise the serial pads
@ 2011-01-18 15:15 sricharan
2011-01-20 17:33 ` Tony Lindgren
0 siblings, 1 reply; 2+ messages in thread
From: sricharan @ 2011-01-18 15:15 UTC (permalink / raw)
To: r.sricharan, linux-omap; +Cc: tony, paul, santosh.shilimkar
Pass the board specific serial pad mux data
to the platform level init code.
Signed-off-by: sricharan <r.sricharan@ti.com>
---
This is a test patch and not intended for a specific use case.
1) The support to add the pad data to the device hwmod entry and to use
it to dynamically configure the pads based on the state of the
hwmod is already present.
2) But using that for pads that requires only initialisation and not
dynamic remux, brings in a overhead to iterate over all the
hwmod signals of the device for every device enable/idle transitions.
3) To avoid 2)
(i) Initialise the pads that do not require remux by setting
the pads in board_mux array. But this would make the common
pads across boards also to be present in the board file, which
is not favoured.
(ii) Pass the data to the platform init code. If a pad requires
remux add it to the hwmod data,Otherwise set the pin mux during
the init itself.
arch/arm/mach-omap2/board-4430sdp.c | 73 ++++++++++++++++++++++++++++++++++-
arch/arm/mach-omap2/serial.c | 11 ++++-
2 files changed, 81 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 1cb208b..a61b59e 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -537,8 +537,79 @@ static void __init omap_sfh7741prox_init(void)
static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR },
};
+
+static struct omap_device_pad serial2_pads[] __initdata = {
+ { .name = "uart2_cts.uart2_cts",
+ .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+ .flags = OMAP_DEVICE_PAD_REMUX,
+ .idle = OMAP_MUX_MODE7,
+ },
+ { .name = "uart2_rts.uart2_rts",
+ .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+ },
+ { .name = "uart2_rx.uart2_rx",
+ .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+ },
+ { .name = "uart2_tx.uart2_tx",
+ .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+ },
+};
+
+static struct omap_device_pad serial3_pads[] __initdata = {
+ { .name = "uart3_cts_rctx.uart3_cts_rctx",
+ .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+ },
+ { .name = "uart3_rts_sd.uart3_rts_sd",
+ .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+ },
+ { .name = "uart3_rx_irrx.uart3_rx_irrx",
+ .enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+ },
+ { .name = "uart3_tx_irtx.uart3_tx_irtx",
+ .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+ },
+};
+
+static struct omap_device_pad serial4_pads[] __initdata = {
+ { .name = "uart4_rx.uart4_rx",
+ .enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+ },
+ { .name = "uart4_tx.uart4_tx",
+ .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+ },
+};
+
+static struct omap_board_data serial2_data = {
+ .id = 1,
+ .pads = serial2_pads,
+ .pads_cnt = ARRAY_SIZE(serial2_pads),
+};
+
+static struct omap_board_data serial3_data = {
+ .id = 2,
+ .pads = serial3_pads,
+ .pads_cnt = ARRAY_SIZE(serial3_pads),
+};
+
+static struct omap_board_data serial4_data = {
+ .id = 3,
+ .pads = serial4_pads,
+ .pads_cnt = ARRAY_SIZE(serial4_pads),
+};
+
+static inline void board_serial_init(void)
+{
+ omap_serial_init_port(&serial2_data);
+ omap_serial_init_port(&serial3_data);
+ omap_serial_init_port(&serial4_data);
+}
#else
#define board_mux NULL
+
+static inline void board_serial_init(void)
+{
+ omap_serial_init();
+}
#endif
static void __init omap_4430sdp_init(void)
@@ -553,7 +624,7 @@ static void __init omap_4430sdp_init(void)
omap4_i2c_init();
omap_sfh7741prox_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
- omap_serial_init();
+ board_serial_init();
omap4_twl6030_hsmmc_init(mmc);
/* OMAP4 SDP uses internal transceiver so register nop transceiver */
usb_nop_xceiv_register();
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index c645788..a12f3d6 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -711,6 +711,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)
struct omap_device *od;
void *pdata = NULL;
u32 pdata_size = 0;
+ int i;
char *name;
#ifndef CONFIG_SERIAL_OMAP
struct plat_serial8250_port ports[2] = {
@@ -802,8 +803,14 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)
WARN(IS_ERR(od), "Could not build omap_device for %s: %s.\n",
name, oh->name);
- oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
-
+ for (i = 0 ; i < bdata->pads_cnt ; i++) {
+ if ((bdata->pads[i].flags) & (OMAP_DEVICE_PAD_REMUX)) {
+ oh->mux = omap_hwmod_mux_init(&bdata->pads[i] , 1);
+ } else {
+ omap_mux_init_signal(bdata->pads[i].name,
+ bdata->pads[i].enable);
+ }
+ }
uart->irq = oh->mpu_irqs[0].irq;
uart->regshift = 2;
uart->mapbase = oh->slaves[0]->addr->pa_start;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [RFC] omap4: Add board_data and initialise the serial pads
2011-01-18 15:15 [RFC] omap4: Add board_data and initialise the serial pads sricharan
@ 2011-01-20 17:33 ` Tony Lindgren
0 siblings, 0 replies; 2+ messages in thread
From: Tony Lindgren @ 2011-01-20 17:33 UTC (permalink / raw)
To: sricharan; +Cc: linux-omap, paul, santosh.shilimkar
Hi,
* sricharan <r.sricharan@ti.com> [110118 07:11]:
> Pass the board specific serial pad mux data
> to the platform level init code.
>
> Signed-off-by: sricharan <r.sricharan@ti.com>
> ---
> This is a test patch and not intended for a specific use case.
>
> 1) The support to add the pad data to the device hwmod entry and to use
> it to dynamically configure the pads based on the state of the
> hwmod is already present.
>
> 2) But using that for pads that requires only initialisation and not
> dynamic remux, brings in a overhead to iterate over all the
> hwmod signals of the device for every device enable/idle transitions.
The right fix for this problem is to change the mux code to keep a separate
list for dynamic pads and static pads. That way all the static pads can
be skipped, and the dynamic list is empty in most cases.
Regards,
Tony
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-01-20 17:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-18 15:15 [RFC] omap4: Add board_data and initialise the serial pads sricharan
2011-01-20 17:33 ` Tony Lindgren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox