ARM: mx23: dynamically allocate mx23 auart device
authorShawn Guo <shawn.guo@freescale.com>
Thu, 17 Feb 2011 06:28:50 +0000 (14:28 +0800)
committerSascha Hauer <s.hauer@pengutronix.de>
Thu, 17 Feb 2011 11:03:10 +0000 (12:03 +0100)
i.MX23 Reference Manaul starts auart index from 1 than 0.  Changing
the index to start from 0 requires corresponding changes on base
address, irq, and iomux definitions, and will probably confuse people
who reads codes and hardware documents together.

This patch introduced the field 'hwid' to distinguish the driver id
and controller id.  These two ids are different on mx23 while
identical on mx28.

Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/mach-mxs/clock-mx23.c
arch/arm/mach-mxs/devices-mx23.h
arch/arm/mach-mxs/devices/platform-auart.c

index ca72a05ed9c112daa9eab1929eac6f467a20183a..7c5dace92b9159b56c59c12ac28fb9bdf150a799 100644 (file)
@@ -442,6 +442,7 @@ static struct clk_lookup lookups[] = {
        _REGISTER_CLOCK("duart", "apb_pclk", xbus_clk)
        /* for amba-pl011 driver */
        _REGISTER_CLOCK("duart", NULL, uart_clk)
+       _REGISTER_CLOCK("mxs-auart.0", NULL, uart_clk)
        _REGISTER_CLOCK("rtc", NULL, rtc_clk)
        _REGISTER_CLOCK(NULL, "hclk", hbus_clk)
        _REGISTER_CLOCK(NULL, "usb", usb_clk)
index 1256788561d0cf01bfebaf588fb362f44d1282fc..c4d4773d3e855892a83f7a11192ac6352084e1c1 100644 (file)
@@ -14,3 +14,8 @@
 extern const struct amba_device mx23_duart_device __initconst;
 #define mx23_add_duart() \
        mxs_add_duart(&mx23_duart_device)
+
+extern const struct mxs_auart_data mx23_auart_data[] __initconst;
+#define mx23_add_auart(id)     mxs_add_auart(&mx23_auart_data[id])
+#define mx23_add_auart0()              mx23_add_auart(0)
+#define mx23_add_auart1()              mx23_add_auart(1)
index f0dbf8a21456fd42430da1084f5d450e189fa205..796606cce0ce233e973d084b53ea7674fb625f28 100644 (file)
@@ -7,23 +7,33 @@
  * Free Software Foundation.
  */
 #include <asm/sizes.h>
+#include <mach/mx23.h>
 #include <mach/mx28.h>
 #include <mach/devices-common.h>
 
-#define mxs_auart_data_entry_single(soc, _id)                          \
+#define mxs_auart_data_entry_single(soc, _id, hwid)                    \
        {                                                               \
                .id = _id,                                              \
-               .iobase = soc ## _AUART ## _id ## _BASE_ADDR,           \
-               .irq = soc ## _INT_AUART ## _id,                        \
+               .iobase = soc ## _AUART ## hwid ## _BASE_ADDR,          \
+               .irq = soc ## _INT_AUART ## hwid,                       \
        }
 
-#define mxs_auart_data_entry(soc, _id)                                 \
-       [_id] = mxs_auart_data_entry_single(soc, _id)
+#define mxs_auart_data_entry(soc, _id, hwid)                           \
+       [_id] = mxs_auart_data_entry_single(soc, _id, hwid)
+
+#ifdef CONFIG_SOC_IMX23
+const struct mxs_auart_data mx23_auart_data[] __initconst = {
+#define mx23_auart_data_entry(_id, hwid)                               \
+       mxs_auart_data_entry(MX23, _id, hwid)
+       mx23_auart_data_entry(0, 1),
+       mx23_auart_data_entry(1, 2),
+};
+#endif
 
 #ifdef CONFIG_SOC_IMX28
 const struct mxs_auart_data mx28_auart_data[] __initconst = {
 #define mx28_auart_data_entry(_id)                                     \
-       mxs_auart_data_entry(MX28, _id)
+       mxs_auart_data_entry(MX28, _id, _id)
        mx28_auart_data_entry(0),
        mx28_auart_data_entry(1),
        mx28_auart_data_entry(2),