diff options
author | Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org> | 2010-10-27 08:40:46 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-11-24 03:57:06 -0500 |
commit | f1dd361b679977d449b7d10ddc9b5fcdfa8c0ca9 (patch) | |
tree | d5d7905e95c5015d95b30ef82b8d2173dfc95ee9 /arch | |
parent | bd02a9e5eee6335f23f1fff52a1e5c8e1783c49e (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.c | 65 |
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 | |||
42 | static iomux_v3_cfg_t mx51efikamx_pads[] = { | 51 | static 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 | */ | ||
114 | static 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 | |||
95 | static void __init mxc_board_init(void) | 159 | static 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 | } |