]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: OMAP2+: UART: Add default mux for all uarts.
authorGovindraj.R <govindraj.raja@ti.com>
Mon, 7 Nov 2011 13:25:05 +0000 (18:55 +0530)
committerKevin Hilman <khilman@ti.com>
Wed, 14 Dec 2011 23:49:02 +0000 (15:49 -0800)
Padconf wakeup is used to wakeup uart after uart fclks/iclks are gated.
Rx-Pad wakeup was done by writing to rx-pad offset value populated in
serial.c idle_init. Remove the direct reading and writing into rx pad.
Remove the padconf field part of omap_uart_state struct and pad offsets
populated.

Now with mux framework support we can use mux_utilities
along with hmwod framework to handle io-pad configuration and enable rx-pad
wake-up mechanism.

To avoid breaking any board support add default mux data for all uart's
if mux info is not passed from board file.
With the default pads populated in serial.c wakeup capability for
rx pads is set, this can be used to enable uart_rx io-pad wakeup from
hwmod framework. The pad values in 3430sdp/4430sdp/omap4panda board file
are same as the default pad values populated in serial.c. Remove pad values
from 3430sdp/4430sdp/omap4panda board file and use the default pads
from serial.c file.

Signed-off-by: Govindraj.R <govindraj.raja@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-omap2/board-3430sdp.c
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/serial.c

index 83126368ed99f2bf0d32679c0ec1e2cb265a5516..109b434159f566ef7856d135ba342cc6a7fa8267 100644 (file)
@@ -475,106 +475,8 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 static struct omap_board_mux board_mux[] __initdata = {
        { .reg_offset = OMAP_MUX_TERMINATOR },
 };
-
-static struct omap_device_pad serial1_pads[] __initdata = {
-       /*
-        * Note that off output enable is an active low
-        * signal. So setting this means pin is a
-        * input enabled in off mode
-        */
-       OMAP_MUX_STATIC("uart1_cts.uart1_cts",
-                        OMAP_PIN_INPUT |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart1_rts.uart1_rts",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart1_rx.uart1_rx",
-                        OMAP_PIN_INPUT |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart1_tx.uart1_tx",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial2_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
-                        OMAP_PIN_INPUT_PULLUP |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
-                        OMAP_PIN_INPUT |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial3_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
-                        OMAP_PIN_INPUT_PULLDOWN |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
-                        OMAP_PIN_INPUT |
-                        OMAP_PIN_OFF_INPUT_PULLDOWN |
-                        OMAP_OFFOUT_EN |
-                        OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
-                        OMAP_PIN_OUTPUT |
-                        OMAP_OFF_EN |
-                        OMAP_MUX_MODE0),
-};
-
-static struct omap_board_data serial1_data __initdata = {
-       .id             = 0,
-       .pads           = serial1_pads,
-       .pads_cnt       = ARRAY_SIZE(serial1_pads),
-};
-
-static struct omap_board_data serial2_data __initdata = {
-       .id             = 1,
-       .pads           = serial2_pads,
-       .pads_cnt       = ARRAY_SIZE(serial2_pads),
-};
-
-static struct omap_board_data serial3_data __initdata = {
-       .id             = 2,
-       .pads           = serial3_pads,
-       .pads_cnt       = ARRAY_SIZE(serial3_pads),
-};
-
-static inline void board_serial_init(void)
-{
-       omap_serial_init_port(&serial1_data);
-       omap_serial_init_port(&serial2_data);
-       omap_serial_init_port(&serial3_data);
-}
 #else
 #define board_mux      NULL
-
-static inline void board_serial_init(void)
-{
-       omap_serial_init();
-}
 #endif
 
 /*
@@ -711,7 +613,7 @@ static void __init omap_3430sdp_init(void)
        else
                gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1;
        omap_ads7846_init(1, gpio_pendown, 310, NULL);
-       board_serial_init();
+       omap_serial_init();
        omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL);
        usb_musb_init(NULL);
        board_smc91x_init();
index ef2bbc09428a2e29b2786bbeb623ac307e1d1ed8..5f264fad69bc3197f22739af5ab6fc0bd387244b 100644 (file)
@@ -837,74 +837,8 @@ static struct omap_board_mux board_mux[] __initdata = {
        { .reg_offset = OMAP_MUX_TERMINATOR },
 };
 
-static struct omap_device_pad serial2_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial3_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
-                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial4_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart4_rx.uart4_rx",
-                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart4_tx.uart4_tx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_board_data serial2_data __initdata = {
-       .id             = 1,
-       .pads           = serial2_pads,
-       .pads_cnt       = ARRAY_SIZE(serial2_pads),
-};
-
-static struct omap_board_data serial3_data __initdata = {
-       .id             = 2,
-       .pads           = serial3_pads,
-       .pads_cnt       = ARRAY_SIZE(serial3_pads),
-};
-
-static struct omap_board_data serial4_data __initdata = {
-       .id             = 3,
-       .pads           = serial4_pads,
-       .pads_cnt       = ARRAY_SIZE(serial4_pads),
-};
-
-static inline void board_serial_init(void)
-{
-       struct omap_board_data bdata;
-       bdata.flags     = 0;
-       bdata.pads      = NULL;
-       bdata.pads_cnt  = 0;
-       bdata.id        = 0;
-       /* pass dummy data for UART1 */
-       omap_serial_init_port(&bdata);
-
-       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 omap4_sdp4430_wifi_mux_init(void)
@@ -954,7 +888,7 @@ static void __init omap_4430sdp_init(void)
        omap4_i2c_init();
        omap_sfh7741prox_init();
        platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
-       board_serial_init();
+       omap_serial_init();
        omap_sdrc_init(NULL, NULL);
        omap4_sdp4430_wifi_init();
        omap4_twl6030_hsmmc_init(mmc);
index b6f114436dbc74bb93d09300deef50db59b57c52..ea45f5835103395a2825134e5406c73448ec1bd3 100644 (file)
@@ -364,74 +364,8 @@ static struct omap_board_mux board_mux[] __initdata = {
        { .reg_offset = OMAP_MUX_TERMINATOR },
 };
 
-static struct omap_device_pad serial2_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart2_cts.uart2_cts",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rts.uart2_rts",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_rx.uart2_rx",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart2_tx.uart2_tx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial3_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
-                        OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
-                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_device_pad serial4_pads[] __initdata = {
-       OMAP_MUX_STATIC("uart4_rx.uart4_rx",
-                        OMAP_PIN_INPUT | OMAP_MUX_MODE0),
-       OMAP_MUX_STATIC("uart4_tx.uart4_tx",
-                        OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
-};
-
-static struct omap_board_data serial2_data __initdata = {
-       .id             = 1,
-       .pads           = serial2_pads,
-       .pads_cnt       = ARRAY_SIZE(serial2_pads),
-};
-
-static struct omap_board_data serial3_data __initdata = {
-       .id             = 2,
-       .pads           = serial3_pads,
-       .pads_cnt       = ARRAY_SIZE(serial3_pads),
-};
-
-static struct omap_board_data serial4_data __initdata = {
-       .id             = 3,
-       .pads           = serial4_pads,
-       .pads_cnt       = ARRAY_SIZE(serial4_pads),
-};
-
-static inline void board_serial_init(void)
-{
-       struct omap_board_data bdata;
-       bdata.flags     = 0;
-       bdata.pads      = NULL;
-       bdata.pads_cnt  = 0;
-       bdata.id        = 0;
-       /* pass dummy data for UART1 */
-       omap_serial_init_port(&bdata);
-
-       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
 
 /* Display DVI */
@@ -562,7 +496,7 @@ static void __init omap4_panda_init(void)
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
        platform_device_register(&omap_vwlan_device);
-       board_serial_init();
+       omap_serial_init();
        omap_sdrc_init(NULL, NULL);
        omap4_twl6030_hsmmc_init(mmc);
        omap4_ehci_init();
index 5bdbc42e42a6f345fe247ece62b8553f49369525..77feaab78059540fa418c1782ff23c41cf899da7 100644 (file)
@@ -62,7 +62,6 @@ struct omap_uart_state {
        void __iomem *wk_st;
        void __iomem *wk_en;
        u32 wk_mask;
-       u32 padconf;
        u32 dma_enabled;
 
        int clocked;
@@ -272,13 +271,6 @@ static void omap_uart_enable_wakeup(struct omap_uart_state *uart)
                v |= uart->wk_mask;
                __raw_writel(v, uart->wk_en);
        }
-
-       /* Ensure IOPAD wake-enables are set */
-       if (cpu_is_omap34xx() && uart->padconf) {
-               u16 v = omap_ctrl_readw(uart->padconf);
-               v |= OMAP3_PADCONF_WAKEUPENABLE0;
-               omap_ctrl_writew(v, uart->padconf);
-       }
 }
 
 static void omap_uart_disable_wakeup(struct omap_uart_state *uart)
@@ -289,13 +281,6 @@ static void omap_uart_disable_wakeup(struct omap_uart_state *uart)
                v &= ~uart->wk_mask;
                __raw_writel(v, uart->wk_en);
        }
-
-       /* Ensure IOPAD wake-enables are cleared */
-       if (cpu_is_omap34xx() && uart->padconf) {
-               u16 v = omap_ctrl_readw(uart->padconf);
-               v &= ~OMAP3_PADCONF_WAKEUPENABLE0;
-               omap_ctrl_writew(v, uart->padconf);
-       }
 }
 
 static void omap_uart_smart_idle_enable(struct omap_uart_state *uart,
@@ -358,7 +343,6 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
        if (cpu_is_omap34xx() && !(cpu_is_ti81xx() || cpu_is_am33xx())) {
                u32 mod = (uart->num > 1) ? OMAP3430_PER_MOD : CORE_MOD;
                u32 wk_mask = 0;
-               u32 padconf = 0;
 
                /* XXX These PRM accesses do not belong here */
                uart->wk_en = OMAP34XX_PRM_REGADDR(mod, PM_WKEN1);
@@ -366,23 +350,18 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
                switch (uart->num) {
                case 0:
                        wk_mask = OMAP3430_ST_UART1_MASK;
-                       padconf = 0x182;
                        break;
                case 1:
                        wk_mask = OMAP3430_ST_UART2_MASK;
-                       padconf = 0x17a;
                        break;
                case 2:
                        wk_mask = OMAP3430_ST_UART3_MASK;
-                       padconf = 0x19e;
                        break;
                case 3:
                        wk_mask = OMAP3630_ST_UART4_MASK;
-                       padconf = 0x0d2;
                        break;
                }
                uart->wk_mask = wk_mask;
-               uart->padconf = padconf;
        } else if (cpu_is_omap24xx()) {
                u32 wk_mask = 0;
                u32 wk_en = PM_WKEN1, wk_st = PM_WKST1;
@@ -412,12 +391,10 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
                uart->wk_en = NULL;
                uart->wk_st = NULL;
                uart->wk_mask = 0;
-               uart->padconf = 0;
        }
 }
 
 #else
-static inline void omap_uart_idle_init(struct omap_uart_state *uart) {}
 static void omap_uart_block_sleep(struct omap_uart_state *uart)
 {
        /* Needed to enable UART clocks when built without CONFIG_PM */
@@ -425,6 +402,130 @@ static void omap_uart_block_sleep(struct omap_uart_state *uart)
 }
 #endif /* CONFIG_PM */
 
+#ifdef CONFIG_OMAP_MUX
+static struct omap_device_pad default_uart1_pads[] __initdata = {
+       {
+               .name   = "uart1_cts.uart1_cts",
+               .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart1_rts.uart1_rts",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart1_tx.uart1_tx",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart1_rx.uart1_rx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+               .idle   = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+       },
+};
+
+static struct omap_device_pad default_uart2_pads[] __initdata = {
+       {
+               .name   = "uart2_cts.uart2_cts",
+               .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart2_rts.uart2_rts",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart2_tx.uart2_tx",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart2_rx.uart2_rx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+               .idle   = OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0,
+       },
+};
+
+static struct omap_device_pad default_uart3_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_tx_irtx.uart3_tx_irtx",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart3_rx_irrx.uart3_rx_irrx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+               .idle   = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+       },
+};
+
+static struct omap_device_pad default_omap36xx_uart4_pads[] __initdata = {
+       {
+               .name   = "gpmc_wait2.uart4_tx",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "gpmc_wait3.uart4_rx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_PIN_INPUT | OMAP_MUX_MODE2,
+               .idle   = OMAP_PIN_INPUT | OMAP_MUX_MODE2,
+       },
+};
+
+static struct omap_device_pad default_omap4_uart4_pads[] __initdata = {
+       {
+               .name   = "uart4_tx.uart4_tx",
+               .enable = OMAP_PIN_OUTPUT | OMAP_MUX_MODE0,
+       },
+       {
+               .name   = "uart4_rx.uart4_rx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+               .idle   = OMAP_PIN_INPUT | OMAP_MUX_MODE0,
+       },
+};
+
+static void omap_serial_fill_default_pads(struct omap_board_data *bdata)
+{
+       switch (bdata->id) {
+       case 0:
+               bdata->pads = default_uart1_pads;
+               bdata->pads_cnt = ARRAY_SIZE(default_uart1_pads);
+               break;
+       case 1:
+               bdata->pads = default_uart2_pads;
+               bdata->pads_cnt = ARRAY_SIZE(default_uart2_pads);
+               break;
+       case 2:
+               bdata->pads = default_uart3_pads;
+               bdata->pads_cnt = ARRAY_SIZE(default_uart3_pads);
+               break;
+       case 3:
+               if (cpu_is_omap44xx()) {
+                       bdata->pads = default_omap4_uart4_pads;
+                       bdata->pads_cnt =
+                               ARRAY_SIZE(default_omap4_uart4_pads);
+               } else if (cpu_is_omap3630()) {
+                       bdata->pads = default_omap36xx_uart4_pads;
+                       bdata->pads_cnt =
+                               ARRAY_SIZE(default_omap36xx_uart4_pads);
+               }
+               break;
+       default:
+               break;
+       }
+}
+#else
+static void omap_serial_fill_default_pads(struct omap_board_data *bdata) {}
+#endif
+
 static int __init omap_serial_early_init(void)
 {
        int i = 0;
@@ -547,8 +648,8 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)
        omap_uart_block_sleep(uart);
        console_unlock();
 
-       if ((cpu_is_omap34xx() && uart->padconf) ||
-           (uart->wk_en && uart->wk_mask))
+       if (((cpu_is_omap34xx() || cpu_is_omap44xx()) && bdata->pads) ||
+               (pdata->wk_en && pdata->wk_mask))
                device_init_wakeup(&pdev->dev, true);
 
        /* Enable the MDR1 errata for OMAP3 */
@@ -573,6 +674,10 @@ void __init omap_serial_init(void)
                bdata.flags = 0;
                bdata.pads = NULL;
                bdata.pads_cnt = 0;
+
+               if (cpu_is_omap44xx() || cpu_is_omap34xx())
+                       omap_serial_fill_default_pads(&bdata);
+
                omap_serial_init_port(&bdata);
 
        }