aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorArnaud Patard (Rtp) <arnaud.patard@rtp-net.org>2010-10-27 08:40:46 -0400
committerSascha Hauer <s.hauer@pengutronix.de>2010-11-24 03:57:06 -0500
commitf1dd361b679977d449b7d10ddc9b5fcdfa8c0ca9 (patch)
treed5d7905e95c5015d95b30ef82b8d2173dfc95ee9 /arch
parentbd02a9e5eee6335f23f1fff52a1e5c8e1783c49e (diff)
efikamx: read board id
read board id value from the GPIO3_16/17/11 Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-mx5/board-mx51_efikamx.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/arch/arm/mach-mx5/board-mx51_efikamx.c b/arch/arm/mach-mx5/board-mx51_efikamx.c
index 1b1d4f14d486..057f9f437359 100644
--- a/arch/arm/mach-mx5/board-mx51_efikamx.c
+++ b/arch/arm/mach-mx5/board-mx51_efikamx.c
@@ -39,12 +39,25 @@
39 39
40#define MX51_USB_PLL_DIV_24_MHZ 0x01 40#define MX51_USB_PLL_DIV_24_MHZ 0x01
41 41
42#define EFIKAMX_PCBID0 (2*32 + 16)
43#define EFIKAMX_PCBID1 (2*32 + 17)
44#define EFIKAMX_PCBID2 (2*32 + 11)
45
46/* the pci ids pin have pull up. they're driven low according to board id */
47#define MX51_PAD_PCBID0 IOMUX_PAD(0x518, 0x130, 3, 0x0, 0, PAD_CTL_PUS_100K_UP)
48#define MX51_PAD_PCBID1 IOMUX_PAD(0x51C, 0x134, 3, 0x0, 0, PAD_CTL_PUS_100K_UP)
49#define MX51_PAD_PCBID2 IOMUX_PAD(0x504, 0x128, 3, 0x0, 0, PAD_CTL_PUS_100K_UP)
50
42static iomux_v3_cfg_t mx51efikamx_pads[] = { 51static iomux_v3_cfg_t mx51efikamx_pads[] = {
43 /* UART1 */ 52 /* UART1 */
44 MX51_PAD_UART1_RXD__UART1_RXD, 53 MX51_PAD_UART1_RXD__UART1_RXD,
45 MX51_PAD_UART1_TXD__UART1_TXD, 54 MX51_PAD_UART1_TXD__UART1_TXD,
46 MX51_PAD_UART1_RTS__UART1_RTS, 55 MX51_PAD_UART1_RTS__UART1_RTS,
47 MX51_PAD_UART1_CTS__UART1_CTS, 56 MX51_PAD_UART1_CTS__UART1_CTS,
57 /* board id */
58 MX51_PAD_PCBID0,
59 MX51_PAD_PCBID1,
60 MX51_PAD_PCBID2,
48}; 61};
49 62
50/* Serial ports */ 63/* Serial ports */
@@ -92,10 +105,62 @@ static struct mxc_usbh_platform_data dr_utmi_config = {
92 .flags = MXC_EHCI_INTERNAL_PHY, 105 .flags = MXC_EHCI_INTERNAL_PHY,
93}; 106};
94 107
108/* PCBID2 PCBID1 PCBID0 STATE
109 1 1 1 ER1:rev1.1
110 1 1 0 ER2:rev1.2
111 1 0 1 ER3:rev1.3
112 1 0 0 ER4:rev1.4
113*/
114static void __init mx51_efikamx_board_id(void)
115{
116 int id;
117
118 /* things are taking time to settle */
119 msleep(150);
120
121 gpio_request(EFIKAMX_PCBID0, "pcbid0");
122 gpio_direction_input(EFIKAMX_PCBID0);
123 gpio_request(EFIKAMX_PCBID1, "pcbid1");
124 gpio_direction_input(EFIKAMX_PCBID1);
125 gpio_request(EFIKAMX_PCBID2, "pcbid2");
126 gpio_direction_input(EFIKAMX_PCBID2);
127
128 id = gpio_get_value(EFIKAMX_PCBID0);
129 id |= gpio_get_value(EFIKAMX_PCBID1) << 1;
130 id |= gpio_get_value(EFIKAMX_PCBID2) << 2;
131
132 switch (id) {
133 case 7:
134 system_rev = 0x11;
135 break;
136 case 6:
137 system_rev = 0x12;
138 break;
139 case 5:
140 system_rev = 0x13;
141 break;
142 case 4:
143 system_rev = 0x14;
144 break;
145 default:
146 system_rev = 0x10;
147 break;
148 }
149
150 if ((system_rev == 0x10)
151 || (system_rev == 0x12)
152 || (system_rev == 0x14)) {
153 printk(KERN_WARNING
154 "EfikaMX: Unsupported board revision 1.%u!\n",
155 system_rev & 0xf);
156 }
157}
158
95static void __init mxc_board_init(void) 159static void __init mxc_board_init(void)
96{ 160{
97 mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads, 161 mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads,
98 ARRAY_SIZE(mx51efikamx_pads)); 162 ARRAY_SIZE(mx51efikamx_pads));
163 mx51_efikamx_board_id();
99 mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); 164 mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config);
100 mxc_init_imx_uart(); 165 mxc_init_imx_uart();
101} 166}