Commit d5720d33bc7c434f9a023dbb62c795538f976b7a
1 parent
97bdb69b0e
Exists in
v3.2_SMARCT335xPSP_04.06.00.11
and in
3 other branches
ARM: OMAP2+: AM335x: update OPP50 handling
Recent commit from Greg (OPP Table fix for 720MHZ and ZCE support) added OPP120 support for PG 2.x. OPP120 support needs to be disabled when the board is booted and running at OPP50. This is as per the Advisory 1.0.15 (ARM Cortex-A8: OPP50 Operation on MPU Domain Not Supported) Voltage checked here are Core Voltage and not MPU. Hence, When here correct the preprocessors to indicate correct voltages. As per Sitara AM335x ARM Cortex -A8 Microprocessors (MPUs) data sheet (SPRS717F) APRIL 2013 available at http://www.ti.com/lit/ds/symlink/am3359.pdf Table 3-7 and 3-9 has been updated to show the defined OPPs on ZCZ and ZCE packages respectively Signed-off-by: Hebbar Gururaja <gururaja.hebbar@ti.com>
Showing 1 changed file with 12 additions and 6 deletions Inline Diff
arch/arm/mach-omap2/board-am335xevm.c
1 | /* | 1 | /* |
2 | * Code for AM335X EVM. | 2 | * Code for AM335X EVM. |
3 | * | 3 | * |
4 | * Copyright (C) 2011 Texas Instruments, Inc. - http://www.ti.com/ | 4 | * Copyright (C) 2011 Texas Instruments, Inc. - http://www.ti.com/ |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU General Public License as | 7 | * modify it under the terms of the GNU General Public License as |
8 | * published by the Free Software Foundation version 2. | 8 | * published by the Free Software Foundation version 2. |
9 | * | 9 | * |
10 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | 10 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any |
11 | * kind, whether express or implied; without even the implied warranty | 11 | * kind, whether express or implied; without even the implied warranty |
12 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. | 13 | * GNU General Public License for more details. |
14 | */ | 14 | */ |
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/i2c.h> | 17 | #include <linux/i2c.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/i2c/at24.h> | 19 | #include <linux/i2c/at24.h> |
20 | #include <linux/phy.h> | 20 | #include <linux/phy.h> |
21 | #include <linux/gpio.h> | 21 | #include <linux/gpio.h> |
22 | #include <linux/spi/spi.h> | 22 | #include <linux/spi/spi.h> |
23 | #include <linux/spi/flash.h> | 23 | #include <linux/spi/flash.h> |
24 | #include <linux/gpio_keys.h> | 24 | #include <linux/gpio_keys.h> |
25 | #include <linux/input.h> | 25 | #include <linux/input.h> |
26 | #include <linux/input/matrix_keypad.h> | 26 | #include <linux/input/matrix_keypad.h> |
27 | #include <linux/mtd/mtd.h> | 27 | #include <linux/mtd/mtd.h> |
28 | #include <linux/mtd/nand.h> | 28 | #include <linux/mtd/nand.h> |
29 | #include <linux/mtd/partitions.h> | 29 | #include <linux/mtd/partitions.h> |
30 | #include <linux/platform_device.h> | 30 | #include <linux/platform_device.h> |
31 | #include <linux/clk.h> | 31 | #include <linux/clk.h> |
32 | #include <linux/err.h> | 32 | #include <linux/err.h> |
33 | #include <linux/export.h> | 33 | #include <linux/export.h> |
34 | #include <linux/wl12xx.h> | 34 | #include <linux/wl12xx.h> |
35 | #include <linux/ethtool.h> | 35 | #include <linux/ethtool.h> |
36 | #include <linux/mfd/tps65910.h> | 36 | #include <linux/mfd/tps65910.h> |
37 | #include <linux/mfd/tps65217.h> | 37 | #include <linux/mfd/tps65217.h> |
38 | #include <linux/pwm_backlight.h> | 38 | #include <linux/pwm_backlight.h> |
39 | #include <linux/input/ti_tsc.h> | 39 | #include <linux/input/ti_tsc.h> |
40 | #include <linux/platform_data/ti_adc.h> | 40 | #include <linux/platform_data/ti_adc.h> |
41 | #include <linux/mfd/ti_tscadc.h> | 41 | #include <linux/mfd/ti_tscadc.h> |
42 | #include <linux/reboot.h> | 42 | #include <linux/reboot.h> |
43 | #include <linux/pwm/pwm.h> | 43 | #include <linux/pwm/pwm.h> |
44 | #include <linux/rtc/rtc-omap.h> | 44 | #include <linux/rtc/rtc-omap.h> |
45 | #include <linux/opp.h> | 45 | #include <linux/opp.h> |
46 | 46 | ||
47 | /* LCD controller is similar to DA850 */ | 47 | /* LCD controller is similar to DA850 */ |
48 | #include <video/da8xx-fb.h> | 48 | #include <video/da8xx-fb.h> |
49 | 49 | ||
50 | #include <mach/hardware.h> | 50 | #include <mach/hardware.h> |
51 | #include <mach/board-am335xevm.h> | 51 | #include <mach/board-am335xevm.h> |
52 | 52 | ||
53 | #include <asm/mach-types.h> | 53 | #include <asm/mach-types.h> |
54 | #include <asm/mach/arch.h> | 54 | #include <asm/mach/arch.h> |
55 | #include <asm/mach/map.h> | 55 | #include <asm/mach/map.h> |
56 | #include <asm/hardware/asp.h> | 56 | #include <asm/hardware/asp.h> |
57 | 57 | ||
58 | #include <plat/omap_device.h> | 58 | #include <plat/omap_device.h> |
59 | #include <plat/omap-pm.h> | 59 | #include <plat/omap-pm.h> |
60 | #include <plat/irqs.h> | 60 | #include <plat/irqs.h> |
61 | #include <plat/board.h> | 61 | #include <plat/board.h> |
62 | #include <plat/common.h> | 62 | #include <plat/common.h> |
63 | #include <plat/lcdc.h> | 63 | #include <plat/lcdc.h> |
64 | #include <plat/usb.h> | 64 | #include <plat/usb.h> |
65 | #include <plat/mmc.h> | 65 | #include <plat/mmc.h> |
66 | #include <plat/emif.h> | 66 | #include <plat/emif.h> |
67 | #include <plat/nand.h> | 67 | #include <plat/nand.h> |
68 | 68 | ||
69 | #include "board-flash.h" | 69 | #include "board-flash.h" |
70 | #include "cpuidle33xx.h" | 70 | #include "cpuidle33xx.h" |
71 | #include "mux.h" | 71 | #include "mux.h" |
72 | #include "devices.h" | 72 | #include "devices.h" |
73 | #include "hsmmc.h" | 73 | #include "hsmmc.h" |
74 | 74 | ||
75 | /* Convert GPIO signal to GPIO pin number */ | 75 | /* Convert GPIO signal to GPIO pin number */ |
76 | #define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio)) | 76 | #define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio)) |
77 | 77 | ||
78 | /* BBB PHY IDs */ | 78 | /* BBB PHY IDs */ |
79 | #define BBB_PHY_ID 0x7c0f1 | 79 | #define BBB_PHY_ID 0x7c0f1 |
80 | #define BBB_PHY_MASK 0xfffffffe | 80 | #define BBB_PHY_MASK 0xfffffffe |
81 | 81 | ||
82 | /* AM335X EVM Phy ID and Debug Registers */ | 82 | /* AM335X EVM Phy ID and Debug Registers */ |
83 | #define AM335X_EVM_PHY_ID 0x4dd074 | 83 | #define AM335X_EVM_PHY_ID 0x4dd074 |
84 | #define AM335X_EVM_PHY_MASK 0xfffffffe | 84 | #define AM335X_EVM_PHY_MASK 0xfffffffe |
85 | #define AR8051_PHY_DEBUG_ADDR_REG 0x1d | 85 | #define AR8051_PHY_DEBUG_ADDR_REG 0x1d |
86 | #define AR8051_PHY_DEBUG_DATA_REG 0x1e | 86 | #define AR8051_PHY_DEBUG_DATA_REG 0x1e |
87 | #define AR8051_DEBUG_RGMII_CLK_DLY_REG 0x5 | 87 | #define AR8051_DEBUG_RGMII_CLK_DLY_REG 0x5 |
88 | #define AR8051_RGMII_TX_CLK_DLY BIT(8) | 88 | #define AR8051_RGMII_TX_CLK_DLY BIT(8) |
89 | 89 | ||
90 | static const struct display_panel disp_panel = { | 90 | static const struct display_panel disp_panel = { |
91 | WVGA, | 91 | WVGA, |
92 | 32, | 92 | 32, |
93 | 32, | 93 | 32, |
94 | COLOR_ACTIVE, | 94 | COLOR_ACTIVE, |
95 | }; | 95 | }; |
96 | 96 | ||
97 | /* LCD backlight platform Data */ | 97 | /* LCD backlight platform Data */ |
98 | #define AM335X_BACKLIGHT_MAX_BRIGHTNESS 100 | 98 | #define AM335X_BACKLIGHT_MAX_BRIGHTNESS 100 |
99 | #define AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS 100 | 99 | #define AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS 100 |
100 | #define AM335X_PWM_PERIOD_NANO_SECONDS (5000 * 10) | 100 | #define AM335X_PWM_PERIOD_NANO_SECONDS (5000 * 10) |
101 | 101 | ||
102 | static struct platform_pwm_backlight_data am335x_backlight_data0 = { | 102 | static struct platform_pwm_backlight_data am335x_backlight_data0 = { |
103 | .pwm_id = "ecap.0", | 103 | .pwm_id = "ecap.0", |
104 | .ch = -1, | 104 | .ch = -1, |
105 | .lth_brightness = 21, | 105 | .lth_brightness = 21, |
106 | .max_brightness = AM335X_BACKLIGHT_MAX_BRIGHTNESS, | 106 | .max_brightness = AM335X_BACKLIGHT_MAX_BRIGHTNESS, |
107 | .dft_brightness = AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS, | 107 | .dft_brightness = AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS, |
108 | .pwm_period_ns = AM335X_PWM_PERIOD_NANO_SECONDS, | 108 | .pwm_period_ns = AM335X_PWM_PERIOD_NANO_SECONDS, |
109 | }; | 109 | }; |
110 | 110 | ||
111 | static struct platform_pwm_backlight_data am335x_backlight_data2 = { | 111 | static struct platform_pwm_backlight_data am335x_backlight_data2 = { |
112 | .pwm_id = "ecap.2", | 112 | .pwm_id = "ecap.2", |
113 | .ch = -1, | 113 | .ch = -1, |
114 | .lth_brightness = 21, | 114 | .lth_brightness = 21, |
115 | .max_brightness = AM335X_BACKLIGHT_MAX_BRIGHTNESS, | 115 | .max_brightness = AM335X_BACKLIGHT_MAX_BRIGHTNESS, |
116 | .dft_brightness = AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS, | 116 | .dft_brightness = AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS, |
117 | .pwm_period_ns = AM335X_PWM_PERIOD_NANO_SECONDS, | 117 | .pwm_period_ns = AM335X_PWM_PERIOD_NANO_SECONDS, |
118 | }; | 118 | }; |
119 | 119 | ||
120 | static struct lcd_ctrl_config lcd_cfg = { | 120 | static struct lcd_ctrl_config lcd_cfg = { |
121 | &disp_panel, | 121 | &disp_panel, |
122 | .ac_bias = 255, | 122 | .ac_bias = 255, |
123 | .ac_bias_intrpt = 0, | 123 | .ac_bias_intrpt = 0, |
124 | .dma_burst_sz = 16, | 124 | .dma_burst_sz = 16, |
125 | .bpp = 32, | 125 | .bpp = 32, |
126 | .fdd = 0x80, | 126 | .fdd = 0x80, |
127 | .tft_alt_mode = 0, | 127 | .tft_alt_mode = 0, |
128 | .stn_565_mode = 0, | 128 | .stn_565_mode = 0, |
129 | .mono_8bit_mode = 0, | 129 | .mono_8bit_mode = 0, |
130 | .invert_line_clock = 1, | 130 | .invert_line_clock = 1, |
131 | .invert_frm_clock = 1, | 131 | .invert_frm_clock = 1, |
132 | .sync_edge = 0, | 132 | .sync_edge = 0, |
133 | .sync_ctrl = 1, | 133 | .sync_ctrl = 1, |
134 | .raster_order = 0, | 134 | .raster_order = 0, |
135 | }; | 135 | }; |
136 | 136 | ||
137 | struct da8xx_lcdc_platform_data TFC_S9700RTWV35TR_01B_pdata = { | 137 | struct da8xx_lcdc_platform_data TFC_S9700RTWV35TR_01B_pdata = { |
138 | .manu_name = "ThreeFive", | 138 | .manu_name = "ThreeFive", |
139 | .controller_data = &lcd_cfg, | 139 | .controller_data = &lcd_cfg, |
140 | .type = "TFC_S9700RTWV35TR_01B", | 140 | .type = "TFC_S9700RTWV35TR_01B", |
141 | }; | 141 | }; |
142 | 142 | ||
143 | struct da8xx_lcdc_platform_data NHD_480272MF_ATXI_pdata = { | 143 | struct da8xx_lcdc_platform_data NHD_480272MF_ATXI_pdata = { |
144 | .manu_name = "NHD", | 144 | .manu_name = "NHD", |
145 | .controller_data = &lcd_cfg, | 145 | .controller_data = &lcd_cfg, |
146 | .type = "NHD-4.3-ATXI#-T-1", | 146 | .type = "NHD-4.3-ATXI#-T-1", |
147 | }; | 147 | }; |
148 | 148 | ||
149 | #include "common.h" | 149 | #include "common.h" |
150 | 150 | ||
151 | #include <linux/lis3lv02d.h> | 151 | #include <linux/lis3lv02d.h> |
152 | 152 | ||
153 | /* TSc controller */ | 153 | /* TSc controller */ |
154 | static struct tsc_data am335x_touchscreen_data = { | 154 | static struct tsc_data am335x_touchscreen_data = { |
155 | .wires = 4, | 155 | .wires = 4, |
156 | .x_plate_resistance = 200, | 156 | .x_plate_resistance = 200, |
157 | .steps_to_configure = 5, | 157 | .steps_to_configure = 5, |
158 | }; | 158 | }; |
159 | 159 | ||
160 | static struct adc_data am335x_adc_data = { | 160 | static struct adc_data am335x_adc_data = { |
161 | .adc_channels = 4, | 161 | .adc_channels = 4, |
162 | }; | 162 | }; |
163 | 163 | ||
164 | static struct mfd_tscadc_board tscadc = { | 164 | static struct mfd_tscadc_board tscadc = { |
165 | .tsc_init = &am335x_touchscreen_data, | 165 | .tsc_init = &am335x_touchscreen_data, |
166 | .adc_init = &am335x_adc_data, | 166 | .adc_init = &am335x_adc_data, |
167 | }; | 167 | }; |
168 | 168 | ||
169 | static u8 am335x_iis_serializer_direction1[] = { | 169 | static u8 am335x_iis_serializer_direction1[] = { |
170 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, RX_MODE, | 170 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, RX_MODE, |
171 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 171 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
172 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 172 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
173 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 173 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static struct snd_platform_data am335x_evm_snd_data1 = { | 176 | static struct snd_platform_data am335x_evm_snd_data1 = { |
177 | .tx_dma_offset = 0x46400000, /* McASP1 */ | 177 | .tx_dma_offset = 0x46400000, /* McASP1 */ |
178 | .rx_dma_offset = 0x46400000, | 178 | .rx_dma_offset = 0x46400000, |
179 | .op_mode = DAVINCI_MCASP_IIS_MODE, | 179 | .op_mode = DAVINCI_MCASP_IIS_MODE, |
180 | .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction1), | 180 | .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction1), |
181 | .tdm_slots = 2, | 181 | .tdm_slots = 2, |
182 | .serial_dir = am335x_iis_serializer_direction1, | 182 | .serial_dir = am335x_iis_serializer_direction1, |
183 | .asp_chan_q = EVENTQ_2, | 183 | .asp_chan_q = EVENTQ_2, |
184 | .version = MCASP_VERSION_3, | 184 | .version = MCASP_VERSION_3, |
185 | .txnumevt = 32, | 185 | .txnumevt = 32, |
186 | .rxnumevt = 32, | 186 | .rxnumevt = 32, |
187 | .get_context_loss_count = | 187 | .get_context_loss_count = |
188 | omap_pm_get_dev_context_loss_count, | 188 | omap_pm_get_dev_context_loss_count, |
189 | }; | 189 | }; |
190 | 190 | ||
191 | static u8 am335x_evm_sk_iis_serializer_direction1[] = { | 191 | static u8 am335x_evm_sk_iis_serializer_direction1[] = { |
192 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, INACTIVE_MODE, | 192 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, INACTIVE_MODE, |
193 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 193 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
194 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 194 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
195 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 195 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
196 | }; | 196 | }; |
197 | 197 | ||
198 | static struct snd_platform_data am335x_evm_sk_snd_data1 = { | 198 | static struct snd_platform_data am335x_evm_sk_snd_data1 = { |
199 | .tx_dma_offset = 0x46400000, /* McASP1 */ | 199 | .tx_dma_offset = 0x46400000, /* McASP1 */ |
200 | /*.rx_dma_offset = 0x46400000,*/ | 200 | /*.rx_dma_offset = 0x46400000,*/ |
201 | .op_mode = DAVINCI_MCASP_IIS_MODE, | 201 | .op_mode = DAVINCI_MCASP_IIS_MODE, |
202 | .num_serializer = ARRAY_SIZE(am335x_evm_sk_iis_serializer_direction1), | 202 | .num_serializer = ARRAY_SIZE(am335x_evm_sk_iis_serializer_direction1), |
203 | .tdm_slots = 2, | 203 | .tdm_slots = 2, |
204 | .serial_dir = am335x_evm_sk_iis_serializer_direction1, | 204 | .serial_dir = am335x_evm_sk_iis_serializer_direction1, |
205 | .asp_chan_q = EVENTQ_2, | 205 | .asp_chan_q = EVENTQ_2, |
206 | .version = MCASP_VERSION_3, | 206 | .version = MCASP_VERSION_3, |
207 | .txnumevt = 32, | 207 | .txnumevt = 32, |
208 | .get_context_loss_count = | 208 | .get_context_loss_count = |
209 | omap_pm_get_dev_context_loss_count, | 209 | omap_pm_get_dev_context_loss_count, |
210 | }; | 210 | }; |
211 | 211 | ||
212 | static struct omap2_hsmmc_info am335x_mmc[] __initdata = { | 212 | static struct omap2_hsmmc_info am335x_mmc[] __initdata = { |
213 | { | 213 | { |
214 | .mmc = 1, | 214 | .mmc = 1, |
215 | .caps = MMC_CAP_4_BIT_DATA, | 215 | .caps = MMC_CAP_4_BIT_DATA, |
216 | .gpio_cd = GPIO_TO_PIN(0, 6), | 216 | .gpio_cd = GPIO_TO_PIN(0, 6), |
217 | .gpio_wp = GPIO_TO_PIN(3, 18), | 217 | .gpio_wp = GPIO_TO_PIN(3, 18), |
218 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */ | 218 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */ |
219 | }, | 219 | }, |
220 | { | 220 | { |
221 | .mmc = 0, /* will be set at runtime */ | 221 | .mmc = 0, /* will be set at runtime */ |
222 | }, | 222 | }, |
223 | { | 223 | { |
224 | .mmc = 0, /* will be set at runtime */ | 224 | .mmc = 0, /* will be set at runtime */ |
225 | }, | 225 | }, |
226 | {} /* Terminator */ | 226 | {} /* Terminator */ |
227 | }; | 227 | }; |
228 | 228 | ||
229 | 229 | ||
230 | #ifdef CONFIG_OMAP_MUX | 230 | #ifdef CONFIG_OMAP_MUX |
231 | static struct omap_board_mux board_mux[] __initdata = { | 231 | static struct omap_board_mux board_mux[] __initdata = { |
232 | /* | 232 | /* |
233 | * Setting SYSBOOT[5] should set xdma_event_intr0 pin to mode 3 thereby | 233 | * Setting SYSBOOT[5] should set xdma_event_intr0 pin to mode 3 thereby |
234 | * allowing clkout1 to be available on xdma_event_intr0. | 234 | * allowing clkout1 to be available on xdma_event_intr0. |
235 | * However, on some boards (like EVM-SK), SYSBOOT[5] isn't properly | 235 | * However, on some boards (like EVM-SK), SYSBOOT[5] isn't properly |
236 | * latched. | 236 | * latched. |
237 | * To be extra cautious, setup the pin-mux manually. | 237 | * To be extra cautious, setup the pin-mux manually. |
238 | * If any modules/usecase requries it in different mode, then subsequent | 238 | * If any modules/usecase requries it in different mode, then subsequent |
239 | * module init call will change the mux accordingly. | 239 | * module init call will change the mux accordingly. |
240 | */ | 240 | */ |
241 | AM33XX_MUX(XDMA_EVENT_INTR0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT), | 241 | AM33XX_MUX(XDMA_EVENT_INTR0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT), |
242 | AM33XX_MUX(I2C0_SDA, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | | 242 | AM33XX_MUX(I2C0_SDA, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | |
243 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), | 243 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), |
244 | AM33XX_MUX(I2C0_SCL, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | | 244 | AM33XX_MUX(I2C0_SCL, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | |
245 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), | 245 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), |
246 | { .reg_offset = OMAP_MUX_TERMINATOR }, | 246 | { .reg_offset = OMAP_MUX_TERMINATOR }, |
247 | }; | 247 | }; |
248 | #else | 248 | #else |
249 | #define board_mux NULL | 249 | #define board_mux NULL |
250 | #endif | 250 | #endif |
251 | 251 | ||
252 | /* module pin mux structure */ | 252 | /* module pin mux structure */ |
253 | struct pinmux_config { | 253 | struct pinmux_config { |
254 | const char *string_name; /* signal name format */ | 254 | const char *string_name; /* signal name format */ |
255 | int val; /* Options for the mux register value */ | 255 | int val; /* Options for the mux register value */ |
256 | }; | 256 | }; |
257 | 257 | ||
258 | struct evm_dev_cfg { | 258 | struct evm_dev_cfg { |
259 | void (*device_init)(int evm_id, int profile); | 259 | void (*device_init)(int evm_id, int profile); |
260 | 260 | ||
261 | /* | 261 | /* |
262 | * If the device is required on both baseboard & daughter board (ex i2c), | 262 | * If the device is required on both baseboard & daughter board (ex i2c), |
263 | * specify DEV_ON_BASEBOARD | 263 | * specify DEV_ON_BASEBOARD |
264 | */ | 264 | */ |
265 | #define DEV_ON_BASEBOARD 0 | 265 | #define DEV_ON_BASEBOARD 0 |
266 | #define DEV_ON_DGHTR_BRD 1 | 266 | #define DEV_ON_DGHTR_BRD 1 |
267 | u32 device_on; | 267 | u32 device_on; |
268 | 268 | ||
269 | u32 profile; /* Profiles (0-7) in which the module is present */ | 269 | u32 profile; /* Profiles (0-7) in which the module is present */ |
270 | }; | 270 | }; |
271 | 271 | ||
272 | /* AM335X - CPLD Register Offsets */ | 272 | /* AM335X - CPLD Register Offsets */ |
273 | #define CPLD_DEVICE_HDR 0x00 /* CPLD Header */ | 273 | #define CPLD_DEVICE_HDR 0x00 /* CPLD Header */ |
274 | #define CPLD_DEVICE_ID 0x04 /* CPLD identification */ | 274 | #define CPLD_DEVICE_ID 0x04 /* CPLD identification */ |
275 | #define CPLD_DEVICE_REV 0x0C /* Revision of the CPLD code */ | 275 | #define CPLD_DEVICE_REV 0x0C /* Revision of the CPLD code */ |
276 | #define CPLD_CFG_REG 0x10 /* Configuration Register */ | 276 | #define CPLD_CFG_REG 0x10 /* Configuration Register */ |
277 | 277 | ||
278 | static struct i2c_client *cpld_client; | 278 | static struct i2c_client *cpld_client; |
279 | static u32 am335x_evm_id; | 279 | static u32 am335x_evm_id; |
280 | static struct omap_board_config_kernel am335x_evm_config[] __initdata = { | 280 | static struct omap_board_config_kernel am335x_evm_config[] __initdata = { |
281 | }; | 281 | }; |
282 | 282 | ||
283 | /* | 283 | /* |
284 | * EVM Config held in On-Board eeprom device. | 284 | * EVM Config held in On-Board eeprom device. |
285 | * | 285 | * |
286 | * Header Format | 286 | * Header Format |
287 | * | 287 | * |
288 | * Name Size Contents | 288 | * Name Size Contents |
289 | * (Bytes) | 289 | * (Bytes) |
290 | *------------------------------------------------------------- | 290 | *------------------------------------------------------------- |
291 | * Header 4 0xAA, 0x55, 0x33, 0xEE | 291 | * Header 4 0xAA, 0x55, 0x33, 0xEE |
292 | * | 292 | * |
293 | * Board Name 8 Name for board in ASCII. | 293 | * Board Name 8 Name for board in ASCII. |
294 | * Example "A33515BB" = "AM335x 15x15 Base Board" | 294 | * Example "A33515BB" = "AM335x 15x15 Base Board" |
295 | * | 295 | * |
296 | * Version 4 Hardware version code for board in ASCII. | 296 | * Version 4 Hardware version code for board in ASCII. |
297 | * "1.0A" = rev.01.0A | 297 | * "1.0A" = rev.01.0A |
298 | * | 298 | * |
299 | * Serial Number 12 Serial number of the board. This is a 12 | 299 | * Serial Number 12 Serial number of the board. This is a 12 |
300 | * character string which is WWYY4P16nnnn, where | 300 | * character string which is WWYY4P16nnnn, where |
301 | * WW = 2 digit week of the year of production | 301 | * WW = 2 digit week of the year of production |
302 | * YY = 2 digit year of production | 302 | * YY = 2 digit year of production |
303 | * nnnn = incrementing board number | 303 | * nnnn = incrementing board number |
304 | * | 304 | * |
305 | * Configuration option 32 Codes(TBD) to show the configuration | 305 | * Configuration option 32 Codes(TBD) to show the configuration |
306 | * setup on this board. | 306 | * setup on this board. |
307 | * | 307 | * |
308 | * Available 32720 Available space for other non-volatile data. | 308 | * Available 32720 Available space for other non-volatile data. |
309 | */ | 309 | */ |
310 | struct am335x_evm_eeprom_config { | 310 | struct am335x_evm_eeprom_config { |
311 | u32 header; | 311 | u32 header; |
312 | u8 name[8]; | 312 | u8 name[8]; |
313 | char version[4]; | 313 | char version[4]; |
314 | u8 serial[12]; | 314 | u8 serial[12]; |
315 | u8 opt[32]; | 315 | u8 opt[32]; |
316 | }; | 316 | }; |
317 | 317 | ||
318 | /* | 318 | /* |
319 | * EVM Config held in daughter board eeprom device. | 319 | * EVM Config held in daughter board eeprom device. |
320 | * | 320 | * |
321 | * Header Format | 321 | * Header Format |
322 | * | 322 | * |
323 | * Name Size Contents | 323 | * Name Size Contents |
324 | * (Bytes) | 324 | * (Bytes) |
325 | *------------------------------------------------------------- | 325 | *------------------------------------------------------------- |
326 | * Header 4 0xAA, 0x55, 0x33, 0xEE | 326 | * Header 4 0xAA, 0x55, 0x33, 0xEE |
327 | * | 327 | * |
328 | * Board Name 8 Name for board in ASCII. | 328 | * Board Name 8 Name for board in ASCII. |
329 | * example "A335GPBD" = "AM335x | 329 | * example "A335GPBD" = "AM335x |
330 | * General Purpose Daughterboard" | 330 | * General Purpose Daughterboard" |
331 | * | 331 | * |
332 | * Version 4 Hardware version code for board in | 332 | * Version 4 Hardware version code for board in |
333 | * in ASCII. "1.0A" = rev.01.0A | 333 | * in ASCII. "1.0A" = rev.01.0A |
334 | * Serial Number 12 Serial number of the board. This is a 12 | 334 | * Serial Number 12 Serial number of the board. This is a 12 |
335 | * character string which is: WWYY4P13nnnn, where | 335 | * character string which is: WWYY4P13nnnn, where |
336 | * WW = 2 digit week of the year of production | 336 | * WW = 2 digit week of the year of production |
337 | * YY = 2 digit year of production | 337 | * YY = 2 digit year of production |
338 | * nnnn = incrementing board number | 338 | * nnnn = incrementing board number |
339 | * Configuration Option 32 Codes to show the configuration | 339 | * Configuration Option 32 Codes to show the configuration |
340 | * setup on this board. | 340 | * setup on this board. |
341 | * CPLD Version 8 CPLD code version for board in ASCII | 341 | * CPLD Version 8 CPLD code version for board in ASCII |
342 | * "CPLD1.0A" = rev. 01.0A of the CPLD | 342 | * "CPLD1.0A" = rev. 01.0A of the CPLD |
343 | * Available 32700 Available space for other non-volatile | 343 | * Available 32700 Available space for other non-volatile |
344 | * codes/data | 344 | * codes/data |
345 | */ | 345 | */ |
346 | 346 | ||
347 | struct am335x_eeprom_config1 { | 347 | struct am335x_eeprom_config1 { |
348 | u32 header; | 348 | u32 header; |
349 | u8 name[8]; | 349 | u8 name[8]; |
350 | char version[4]; | 350 | char version[4]; |
351 | u8 serial[12]; | 351 | u8 serial[12]; |
352 | u8 opt[32]; | 352 | u8 opt[32]; |
353 | u8 cpld_ver[8]; | 353 | u8 cpld_ver[8]; |
354 | }; | 354 | }; |
355 | 355 | ||
356 | static struct am335x_evm_eeprom_config config; | 356 | static struct am335x_evm_eeprom_config config; |
357 | static struct am335x_eeprom_config1 config1; | 357 | static struct am335x_eeprom_config1 config1; |
358 | static bool daughter_brd_detected; | 358 | static bool daughter_brd_detected; |
359 | 359 | ||
360 | #define EEPROM_MAC_ADDRESS_OFFSET 60 /* 4+8+4+12+32 */ | 360 | #define EEPROM_MAC_ADDRESS_OFFSET 60 /* 4+8+4+12+32 */ |
361 | #define EEPROM_NO_OF_MAC_ADDR 3 | 361 | #define EEPROM_NO_OF_MAC_ADDR 3 |
362 | static char am335x_mac_addr[EEPROM_NO_OF_MAC_ADDR][ETH_ALEN]; | 362 | static char am335x_mac_addr[EEPROM_NO_OF_MAC_ADDR][ETH_ALEN]; |
363 | 363 | ||
364 | #define AM335X_EEPROM_HEADER 0xEE3355AA | 364 | #define AM335X_EEPROM_HEADER 0xEE3355AA |
365 | 365 | ||
366 | static int am33xx_evmid = -EINVAL; | 366 | static int am33xx_evmid = -EINVAL; |
367 | 367 | ||
368 | /* | 368 | /* |
369 | * am335x_evm_set_id - set up board evmid | 369 | * am335x_evm_set_id - set up board evmid |
370 | * @evmid - evm id which needs to be configured | 370 | * @evmid - evm id which needs to be configured |
371 | * | 371 | * |
372 | * This function is called to configure board evm id. | 372 | * This function is called to configure board evm id. |
373 | */ | 373 | */ |
374 | void am335x_evm_set_id(unsigned int evmid) | 374 | void am335x_evm_set_id(unsigned int evmid) |
375 | { | 375 | { |
376 | am33xx_evmid = evmid; | 376 | am33xx_evmid = evmid; |
377 | return; | 377 | return; |
378 | } | 378 | } |
379 | 379 | ||
380 | /* | 380 | /* |
381 | * am335x_evm_get_id - returns Board Type (EVM/BB/EVM-SK ...) | 381 | * am335x_evm_get_id - returns Board Type (EVM/BB/EVM-SK ...) |
382 | * | 382 | * |
383 | * Note: | 383 | * Note: |
384 | * returns -EINVAL if Board detection hasn't happened yet. | 384 | * returns -EINVAL if Board detection hasn't happened yet. |
385 | */ | 385 | */ |
386 | int am335x_evm_get_id(void) | 386 | int am335x_evm_get_id(void) |
387 | { | 387 | { |
388 | return am33xx_evmid; | 388 | return am33xx_evmid; |
389 | } | 389 | } |
390 | EXPORT_SYMBOL(am335x_evm_get_id); | 390 | EXPORT_SYMBOL(am335x_evm_get_id); |
391 | 391 | ||
392 | /* current profile if exists else PROFILE_0 on error */ | 392 | /* current profile if exists else PROFILE_0 on error */ |
393 | static u32 am335x_get_profile_selection(void) | 393 | static u32 am335x_get_profile_selection(void) |
394 | { | 394 | { |
395 | int val = 0; | 395 | int val = 0; |
396 | 396 | ||
397 | if (!cpld_client) | 397 | if (!cpld_client) |
398 | /* error checking is not done in func's calling this routine. | 398 | /* error checking is not done in func's calling this routine. |
399 | so return profile 0 on error */ | 399 | so return profile 0 on error */ |
400 | return 0; | 400 | return 0; |
401 | 401 | ||
402 | val = i2c_smbus_read_word_data(cpld_client, CPLD_CFG_REG); | 402 | val = i2c_smbus_read_word_data(cpld_client, CPLD_CFG_REG); |
403 | if (val < 0) | 403 | if (val < 0) |
404 | return 0; /* default to Profile 0 on Error */ | 404 | return 0; /* default to Profile 0 on Error */ |
405 | else | 405 | else |
406 | return val & 0x7; | 406 | return val & 0x7; |
407 | } | 407 | } |
408 | 408 | ||
409 | static struct pinmux_config haptics_pin_mux[] = { | 409 | static struct pinmux_config haptics_pin_mux[] = { |
410 | {"gpmc_ad9.ehrpwm2B", OMAP_MUX_MODE4 | | 410 | {"gpmc_ad9.ehrpwm2B", OMAP_MUX_MODE4 | |
411 | AM33XX_PIN_OUTPUT}, | 411 | AM33XX_PIN_OUTPUT}, |
412 | {NULL, 0}, | 412 | {NULL, 0}, |
413 | }; | 413 | }; |
414 | 414 | ||
415 | /* Module pin mux for LCDC */ | 415 | /* Module pin mux for LCDC */ |
416 | static struct pinmux_config lcdc_pin_mux[] = { | 416 | static struct pinmux_config lcdc_pin_mux[] = { |
417 | {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 417 | {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
418 | | AM33XX_PULL_DISA}, | 418 | | AM33XX_PULL_DISA}, |
419 | {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 419 | {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
420 | | AM33XX_PULL_DISA}, | 420 | | AM33XX_PULL_DISA}, |
421 | {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 421 | {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
422 | | AM33XX_PULL_DISA}, | 422 | | AM33XX_PULL_DISA}, |
423 | {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 423 | {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
424 | | AM33XX_PULL_DISA}, | 424 | | AM33XX_PULL_DISA}, |
425 | {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 425 | {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
426 | | AM33XX_PULL_DISA}, | 426 | | AM33XX_PULL_DISA}, |
427 | {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 427 | {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
428 | | AM33XX_PULL_DISA}, | 428 | | AM33XX_PULL_DISA}, |
429 | {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 429 | {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
430 | | AM33XX_PULL_DISA}, | 430 | | AM33XX_PULL_DISA}, |
431 | {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 431 | {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
432 | | AM33XX_PULL_DISA}, | 432 | | AM33XX_PULL_DISA}, |
433 | {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 433 | {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
434 | | AM33XX_PULL_DISA}, | 434 | | AM33XX_PULL_DISA}, |
435 | {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 435 | {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
436 | | AM33XX_PULL_DISA}, | 436 | | AM33XX_PULL_DISA}, |
437 | {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 437 | {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
438 | | AM33XX_PULL_DISA}, | 438 | | AM33XX_PULL_DISA}, |
439 | {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 439 | {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
440 | | AM33XX_PULL_DISA}, | 440 | | AM33XX_PULL_DISA}, |
441 | {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 441 | {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
442 | | AM33XX_PULL_DISA}, | 442 | | AM33XX_PULL_DISA}, |
443 | {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 443 | {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
444 | | AM33XX_PULL_DISA}, | 444 | | AM33XX_PULL_DISA}, |
445 | {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 445 | {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
446 | | AM33XX_PULL_DISA}, | 446 | | AM33XX_PULL_DISA}, |
447 | {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 447 | {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
448 | | AM33XX_PULL_DISA}, | 448 | | AM33XX_PULL_DISA}, |
449 | {"gpmc_ad8.lcd_data16", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 449 | {"gpmc_ad8.lcd_data16", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
450 | {"gpmc_ad9.lcd_data17", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 450 | {"gpmc_ad9.lcd_data17", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
451 | {"gpmc_ad10.lcd_data18", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 451 | {"gpmc_ad10.lcd_data18", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
452 | {"gpmc_ad11.lcd_data19", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 452 | {"gpmc_ad11.lcd_data19", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
453 | {"gpmc_ad12.lcd_data20", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 453 | {"gpmc_ad12.lcd_data20", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
454 | {"gpmc_ad13.lcd_data21", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 454 | {"gpmc_ad13.lcd_data21", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
455 | {"gpmc_ad14.lcd_data22", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 455 | {"gpmc_ad14.lcd_data22", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
456 | {"gpmc_ad15.lcd_data23", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 456 | {"gpmc_ad15.lcd_data23", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
457 | {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 457 | {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
458 | {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 458 | {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
459 | {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 459 | {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
460 | {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 460 | {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
461 | {NULL, 0}, | 461 | {NULL, 0}, |
462 | }; | 462 | }; |
463 | 463 | ||
464 | /* Pin mux for nand flash module */ | 464 | /* Pin mux for nand flash module */ |
465 | static struct pinmux_config nand_pin_mux[] = { | 465 | static struct pinmux_config nand_pin_mux[] = { |
466 | {"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 466 | {"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
467 | {"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 467 | {"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
468 | {"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 468 | {"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
469 | {"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 469 | {"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
470 | {"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 470 | {"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
471 | {"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 471 | {"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
472 | {"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 472 | {"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
473 | {"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 473 | {"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
474 | {"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 474 | {"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
475 | {"gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 475 | {"gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
476 | {"gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 476 | {"gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
477 | {"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 477 | {"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
478 | {"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 478 | {"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
479 | {"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 479 | {"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
480 | {"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 480 | {"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
481 | {NULL, 0}, | 481 | {NULL, 0}, |
482 | }; | 482 | }; |
483 | 483 | ||
484 | /* Module pin mux for SPI fash */ | 484 | /* Module pin mux for SPI fash */ |
485 | static struct pinmux_config spi0_pin_mux[] = { | 485 | static struct pinmux_config spi0_pin_mux[] = { |
486 | {"spi0_sclk.spi0_sclk", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | 486 | {"spi0_sclk.spi0_sclk", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL |
487 | | AM33XX_INPUT_EN}, | 487 | | AM33XX_INPUT_EN}, |
488 | {"spi0_d0.spi0_d0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | 488 | {"spi0_d0.spi0_d0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP |
489 | | AM33XX_INPUT_EN}, | 489 | | AM33XX_INPUT_EN}, |
490 | {"spi0_d1.spi0_d1", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | 490 | {"spi0_d1.spi0_d1", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL |
491 | | AM33XX_INPUT_EN}, | 491 | | AM33XX_INPUT_EN}, |
492 | {"spi0_cs0.spi0_cs0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | 492 | {"spi0_cs0.spi0_cs0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP |
493 | | AM33XX_INPUT_EN}, | 493 | | AM33XX_INPUT_EN}, |
494 | {NULL, 0}, | 494 | {NULL, 0}, |
495 | }; | 495 | }; |
496 | 496 | ||
497 | /* Module pin mux for SPI flash */ | 497 | /* Module pin mux for SPI flash */ |
498 | static struct pinmux_config spi1_pin_mux[] = { | 498 | static struct pinmux_config spi1_pin_mux[] = { |
499 | {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 499 | {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
500 | | AM33XX_INPUT_EN}, | 500 | | AM33XX_INPUT_EN}, |
501 | {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 501 | {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
502 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 502 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
503 | {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 503 | {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
504 | | AM33XX_INPUT_EN}, | 504 | | AM33XX_INPUT_EN}, |
505 | {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 505 | {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
506 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 506 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
507 | {NULL, 0}, | 507 | {NULL, 0}, |
508 | }; | 508 | }; |
509 | 509 | ||
510 | /* Module pin mux for rgmii1 */ | 510 | /* Module pin mux for rgmii1 */ |
511 | static struct pinmux_config rgmii1_pin_mux[] = { | 511 | static struct pinmux_config rgmii1_pin_mux[] = { |
512 | {"mii1_txen.rgmii1_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 512 | {"mii1_txen.rgmii1_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
513 | {"mii1_rxdv.rgmii1_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 513 | {"mii1_rxdv.rgmii1_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
514 | {"mii1_txd3.rgmii1_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 514 | {"mii1_txd3.rgmii1_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
515 | {"mii1_txd2.rgmii1_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 515 | {"mii1_txd2.rgmii1_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
516 | {"mii1_txd1.rgmii1_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 516 | {"mii1_txd1.rgmii1_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
517 | {"mii1_txd0.rgmii1_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 517 | {"mii1_txd0.rgmii1_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
518 | {"mii1_txclk.rgmii1_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 518 | {"mii1_txclk.rgmii1_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
519 | {"mii1_rxclk.rgmii1_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 519 | {"mii1_rxclk.rgmii1_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
520 | {"mii1_rxd3.rgmii1_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 520 | {"mii1_rxd3.rgmii1_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
521 | {"mii1_rxd2.rgmii1_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 521 | {"mii1_rxd2.rgmii1_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
522 | {"mii1_rxd1.rgmii1_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 522 | {"mii1_rxd1.rgmii1_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
523 | {"mii1_rxd0.rgmii1_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 523 | {"mii1_rxd0.rgmii1_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
524 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 524 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
525 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 525 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
526 | {NULL, 0}, | 526 | {NULL, 0}, |
527 | }; | 527 | }; |
528 | 528 | ||
529 | /* Module pin mux for rgmii2 */ | 529 | /* Module pin mux for rgmii2 */ |
530 | static struct pinmux_config rgmii2_pin_mux[] = { | 530 | static struct pinmux_config rgmii2_pin_mux[] = { |
531 | {"gpmc_a0.rgmii2_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 531 | {"gpmc_a0.rgmii2_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
532 | {"gpmc_a1.rgmii2_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 532 | {"gpmc_a1.rgmii2_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
533 | {"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 533 | {"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
534 | {"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 534 | {"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
535 | {"gpmc_a4.rgmii2_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 535 | {"gpmc_a4.rgmii2_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
536 | {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 536 | {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
537 | {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 537 | {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
538 | {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 538 | {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
539 | {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 539 | {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
540 | {"gpmc_a9.rgmii2_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 540 | {"gpmc_a9.rgmii2_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
541 | {"gpmc_a10.rgmii2_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 541 | {"gpmc_a10.rgmii2_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
542 | {"gpmc_a11.rgmii2_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 542 | {"gpmc_a11.rgmii2_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
543 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 543 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
544 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 544 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
545 | {NULL, 0}, | 545 | {NULL, 0}, |
546 | }; | 546 | }; |
547 | 547 | ||
548 | /* Module pin mux for mii1 */ | 548 | /* Module pin mux for mii1 */ |
549 | static struct pinmux_config mii1_pin_mux[] = { | 549 | static struct pinmux_config mii1_pin_mux[] = { |
550 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 550 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
551 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 551 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
552 | {"mii1_rxdv.mii1_rxdv", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 552 | {"mii1_rxdv.mii1_rxdv", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
553 | {"mii1_txd3.mii1_txd3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 553 | {"mii1_txd3.mii1_txd3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
554 | {"mii1_txd2.mii1_txd2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 554 | {"mii1_txd2.mii1_txd2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
555 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 555 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
556 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 556 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
557 | {"mii1_txclk.mii1_txclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 557 | {"mii1_txclk.mii1_txclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
558 | {"mii1_rxclk.mii1_rxclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 558 | {"mii1_rxclk.mii1_rxclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
559 | {"mii1_rxd3.mii1_rxd3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 559 | {"mii1_rxd3.mii1_rxd3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
560 | {"mii1_rxd2.mii1_rxd2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 560 | {"mii1_rxd2.mii1_rxd2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
561 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 561 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
562 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 562 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
563 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 563 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
564 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 564 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
565 | {NULL, 0}, | 565 | {NULL, 0}, |
566 | }; | 566 | }; |
567 | 567 | ||
568 | /* Module pin mux for rmii1 */ | 568 | /* Module pin mux for rmii1 */ |
569 | static struct pinmux_config rmii1_pin_mux[] = { | 569 | static struct pinmux_config rmii1_pin_mux[] = { |
570 | {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 570 | {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
571 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 571 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
572 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 572 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
573 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 573 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
574 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 574 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
575 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 575 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
576 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 576 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
577 | {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 577 | {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
578 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 578 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
579 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 579 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
580 | {NULL, 0}, | 580 | {NULL, 0}, |
581 | }; | 581 | }; |
582 | 582 | ||
583 | static struct pinmux_config i2c1_pin_mux[] = { | 583 | static struct pinmux_config i2c1_pin_mux[] = { |
584 | {"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | | 584 | {"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | |
585 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, | 585 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, |
586 | {"spi0_cs0.i2c1_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | | 586 | {"spi0_cs0.i2c1_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | |
587 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, | 587 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, |
588 | {NULL, 0}, | 588 | {NULL, 0}, |
589 | }; | 589 | }; |
590 | 590 | ||
591 | static struct pinmux_config i2c2_pin_mux[] = { | 591 | static struct pinmux_config i2c2_pin_mux[] = { |
592 | {"uart1_ctsn.i2c2_sda", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW | | 592 | {"uart1_ctsn.i2c2_sda", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW | |
593 | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 593 | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
594 | {"uart1_rtsn.i2c2_scl", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW | | 594 | {"uart1_rtsn.i2c2_scl", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW | |
595 | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 595 | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
596 | {NULL, 0}, | 596 | {NULL, 0}, |
597 | }; | 597 | }; |
598 | 598 | ||
599 | /* Module pin mux for mcasp1 */ | 599 | /* Module pin mux for mcasp1 */ |
600 | static struct pinmux_config mcasp1_pin_mux[] = { | 600 | static struct pinmux_config mcasp1_pin_mux[] = { |
601 | {"mii1_crs.mcasp1_aclkx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 601 | {"mii1_crs.mcasp1_aclkx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
602 | {"mii1_rxerr.mcasp1_fsx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 602 | {"mii1_rxerr.mcasp1_fsx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
603 | {"mii1_col.mcasp1_axr2", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 603 | {"mii1_col.mcasp1_axr2", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
604 | {"rmii1_refclk.mcasp1_axr3", OMAP_MUX_MODE4 | | 604 | {"rmii1_refclk.mcasp1_axr3", OMAP_MUX_MODE4 | |
605 | AM33XX_PIN_INPUT_PULLDOWN}, | 605 | AM33XX_PIN_INPUT_PULLDOWN}, |
606 | {NULL, 0}, | 606 | {NULL, 0}, |
607 | }; | 607 | }; |
608 | 608 | ||
609 | 609 | ||
610 | /* Module pin mux for mmc0 */ | 610 | /* Module pin mux for mmc0 */ |
611 | static struct pinmux_config mmc0_common_pin_mux[] = { | 611 | static struct pinmux_config mmc0_common_pin_mux[] = { |
612 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 612 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
613 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 613 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
614 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 614 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
615 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 615 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
616 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 616 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
617 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 617 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
618 | {NULL, 0}, | 618 | {NULL, 0}, |
619 | }; | 619 | }; |
620 | 620 | ||
621 | static struct pinmux_config mmc0_wp_only_pin_mux[] = { | 621 | static struct pinmux_config mmc0_wp_only_pin_mux[] = { |
622 | {"mcasp0_aclkr.gpio3_18", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 622 | {"mcasp0_aclkr.gpio3_18", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
623 | {NULL, 0}, | 623 | {NULL, 0}, |
624 | }; | 624 | }; |
625 | 625 | ||
626 | static struct pinmux_config mmc0_cd_only_pin_mux[] = { | 626 | static struct pinmux_config mmc0_cd_only_pin_mux[] = { |
627 | {"spi0_cs1.gpio0_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 627 | {"spi0_cs1.gpio0_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
628 | {NULL, 0}, | 628 | {NULL, 0}, |
629 | }; | 629 | }; |
630 | 630 | ||
631 | /* Module pin mux for mmc1 */ | 631 | /* Module pin mux for mmc1 */ |
632 | static struct pinmux_config mmc1_common_pin_mux[] = { | 632 | static struct pinmux_config mmc1_common_pin_mux[] = { |
633 | {"gpmc_ad3.mmc1_dat3", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 633 | {"gpmc_ad3.mmc1_dat3", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
634 | {"gpmc_ad2.mmc1_dat2", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 634 | {"gpmc_ad2.mmc1_dat2", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
635 | {"gpmc_ad1.mmc1_dat1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 635 | {"gpmc_ad1.mmc1_dat1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
636 | {"gpmc_ad0.mmc1_dat0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 636 | {"gpmc_ad0.mmc1_dat0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
637 | {"gpmc_csn1.mmc1_clk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 637 | {"gpmc_csn1.mmc1_clk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
638 | {"gpmc_csn2.mmc1_cmd", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 638 | {"gpmc_csn2.mmc1_cmd", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
639 | {NULL, 0}, | 639 | {NULL, 0}, |
640 | }; | 640 | }; |
641 | 641 | ||
642 | static struct pinmux_config mmc1_dat4_7_pin_mux[] = { | 642 | static struct pinmux_config mmc1_dat4_7_pin_mux[] = { |
643 | {"gpmc_ad7.mmc1_dat7", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 643 | {"gpmc_ad7.mmc1_dat7", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
644 | {"gpmc_ad6.mmc1_dat6", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 644 | {"gpmc_ad6.mmc1_dat6", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
645 | {"gpmc_ad5.mmc1_dat5", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 645 | {"gpmc_ad5.mmc1_dat5", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
646 | {"gpmc_ad4.mmc1_dat4", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 646 | {"gpmc_ad4.mmc1_dat4", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
647 | {NULL, 0}, | 647 | {NULL, 0}, |
648 | }; | 648 | }; |
649 | 649 | ||
650 | static struct pinmux_config mmc1_wp_only_pin_mux[] = { | 650 | static struct pinmux_config mmc1_wp_only_pin_mux[] = { |
651 | {"gpmc_csn0.gpio1_29", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 651 | {"gpmc_csn0.gpio1_29", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
652 | {NULL, 0}, | 652 | {NULL, 0}, |
653 | }; | 653 | }; |
654 | 654 | ||
655 | static struct pinmux_config mmc1_cd_only_pin_mux[] = { | 655 | static struct pinmux_config mmc1_cd_only_pin_mux[] = { |
656 | {"gpmc_advn_ale.gpio2_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 656 | {"gpmc_advn_ale.gpio2_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
657 | {NULL, 0}, | 657 | {NULL, 0}, |
658 | }; | 658 | }; |
659 | 659 | ||
660 | /* Module pin mux for uart3 */ | 660 | /* Module pin mux for uart3 */ |
661 | static struct pinmux_config uart3_pin_mux[] = { | 661 | static struct pinmux_config uart3_pin_mux[] = { |
662 | {"spi0_cs1.uart3_rxd", AM33XX_PIN_INPUT_PULLUP}, | 662 | {"spi0_cs1.uart3_rxd", AM33XX_PIN_INPUT_PULLUP}, |
663 | {"ecap0_in_pwm0_out.uart3_txd", AM33XX_PULL_ENBL}, | 663 | {"ecap0_in_pwm0_out.uart3_txd", AM33XX_PULL_ENBL}, |
664 | {NULL, 0}, | 664 | {NULL, 0}, |
665 | }; | 665 | }; |
666 | 666 | ||
667 | static struct pinmux_config d_can_gp_pin_mux[] = { | 667 | static struct pinmux_config d_can_gp_pin_mux[] = { |
668 | {"uart0_ctsn.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, | 668 | {"uart0_ctsn.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, |
669 | {"uart0_rtsn.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 669 | {"uart0_rtsn.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
670 | {NULL, 0}, | 670 | {NULL, 0}, |
671 | }; | 671 | }; |
672 | 672 | ||
673 | static struct pinmux_config d_can_ia_pin_mux[] = { | 673 | static struct pinmux_config d_can_ia_pin_mux[] = { |
674 | {"uart0_rxd.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, | 674 | {"uart0_rxd.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, |
675 | {"uart0_txd.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 675 | {"uart0_txd.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
676 | {NULL, 0}, | 676 | {NULL, 0}, |
677 | }; | 677 | }; |
678 | 678 | ||
679 | /* Module pin mux for uart2 */ | 679 | /* Module pin mux for uart2 */ |
680 | static struct pinmux_config uart2_pin_mux[] = { | 680 | static struct pinmux_config uart2_pin_mux[] = { |
681 | {"spi0_sclk.uart2_rxd", OMAP_MUX_MODE1 | AM33XX_SLEWCTRL_SLOW | | 681 | {"spi0_sclk.uart2_rxd", OMAP_MUX_MODE1 | AM33XX_SLEWCTRL_SLOW | |
682 | AM33XX_PIN_INPUT_PULLUP}, | 682 | AM33XX_PIN_INPUT_PULLUP}, |
683 | {"spi0_d0.uart2_txd", OMAP_MUX_MODE1 | AM33XX_PULL_UP | | 683 | {"spi0_d0.uart2_txd", OMAP_MUX_MODE1 | AM33XX_PULL_UP | |
684 | AM33XX_PULL_DISA | | 684 | AM33XX_PULL_DISA | |
685 | AM33XX_SLEWCTRL_SLOW}, | 685 | AM33XX_SLEWCTRL_SLOW}, |
686 | {NULL, 0}, | 686 | {NULL, 0}, |
687 | }; | 687 | }; |
688 | 688 | ||
689 | /* pinmux for gpio based key */ | 689 | /* pinmux for gpio based key */ |
690 | static struct pinmux_config gpio_keys_pin_mux[] = { | 690 | static struct pinmux_config gpio_keys_pin_mux[] = { |
691 | {"gpmc_wait0.gpio0_30", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 691 | {"gpmc_wait0.gpio0_30", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
692 | {"gpmc_oen_ren.gpio2_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 692 | {"gpmc_oen_ren.gpio2_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
693 | {"gpmc_advn_ale.gpio2_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 693 | {"gpmc_advn_ale.gpio2_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
694 | {"gpmc_ben0_cle.gpio2_5", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 694 | {"gpmc_ben0_cle.gpio2_5", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
695 | {NULL, 0}, | 695 | {NULL, 0}, |
696 | }; | 696 | }; |
697 | 697 | ||
698 | /* pinmux for led device */ | 698 | /* pinmux for led device */ |
699 | static struct pinmux_config gpio_led_mux[] = { | 699 | static struct pinmux_config gpio_led_mux[] = { |
700 | {"gpmc_ad4.gpio1_4", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 700 | {"gpmc_ad4.gpio1_4", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
701 | {"gpmc_ad5.gpio1_5", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 701 | {"gpmc_ad5.gpio1_5", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
702 | {"gpmc_ad6.gpio1_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 702 | {"gpmc_ad6.gpio1_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
703 | {"gpmc_ad7.gpio1_7", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 703 | {"gpmc_ad7.gpio1_7", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
704 | {NULL, 0}, | 704 | {NULL, 0}, |
705 | }; | 705 | }; |
706 | 706 | ||
707 | static struct pinmux_config gpio_ddr_vtt_enb_pin_mux[] = { | 707 | static struct pinmux_config gpio_ddr_vtt_enb_pin_mux[] = { |
708 | {"ecap0_in_pwm0_out.gpio0_7", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 708 | {"ecap0_in_pwm0_out.gpio0_7", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
709 | {NULL, 0}, | 709 | {NULL, 0}, |
710 | }; | 710 | }; |
711 | 711 | ||
712 | /* | 712 | /* |
713 | * @pin_mux - single module pin-mux structure which defines pin-mux | 713 | * @pin_mux - single module pin-mux structure which defines pin-mux |
714 | * details for all its pins. | 714 | * details for all its pins. |
715 | */ | 715 | */ |
716 | static void setup_pin_mux(struct pinmux_config *pin_mux) | 716 | static void setup_pin_mux(struct pinmux_config *pin_mux) |
717 | { | 717 | { |
718 | int i; | 718 | int i; |
719 | 719 | ||
720 | for (i = 0; pin_mux->string_name != NULL; pin_mux++) | 720 | for (i = 0; pin_mux->string_name != NULL; pin_mux++) |
721 | omap_mux_init_signal(pin_mux->string_name, pin_mux->val); | 721 | omap_mux_init_signal(pin_mux->string_name, pin_mux->val); |
722 | 722 | ||
723 | } | 723 | } |
724 | 724 | ||
725 | /* Matrix GPIO Keypad Support for profile-0 only: TODO */ | 725 | /* Matrix GPIO Keypad Support for profile-0 only: TODO */ |
726 | 726 | ||
727 | /* pinmux for keypad device */ | 727 | /* pinmux for keypad device */ |
728 | static struct pinmux_config matrix_keypad_pin_mux[] = { | 728 | static struct pinmux_config matrix_keypad_pin_mux[] = { |
729 | {"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 729 | {"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
730 | {"gpmc_a6.gpio1_22", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 730 | {"gpmc_a6.gpio1_22", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
731 | {"gpmc_a9.gpio1_25", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 731 | {"gpmc_a9.gpio1_25", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
732 | {"gpmc_a10.gpio1_26", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 732 | {"gpmc_a10.gpio1_26", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
733 | {"gpmc_a11.gpio1_27", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 733 | {"gpmc_a11.gpio1_27", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
734 | {NULL, 0}, | 734 | {NULL, 0}, |
735 | }; | 735 | }; |
736 | 736 | ||
737 | /* Keys mapping */ | 737 | /* Keys mapping */ |
738 | static const uint32_t am335x_evm_matrix_keys[] = { | 738 | static const uint32_t am335x_evm_matrix_keys[] = { |
739 | KEY(0, 0, KEY_MENU), | 739 | KEY(0, 0, KEY_MENU), |
740 | KEY(1, 0, KEY_BACK), | 740 | KEY(1, 0, KEY_BACK), |
741 | KEY(2, 0, KEY_LEFT), | 741 | KEY(2, 0, KEY_LEFT), |
742 | 742 | ||
743 | KEY(0, 1, KEY_RIGHT), | 743 | KEY(0, 1, KEY_RIGHT), |
744 | KEY(1, 1, KEY_ENTER), | 744 | KEY(1, 1, KEY_ENTER), |
745 | KEY(2, 1, KEY_DOWN), | 745 | KEY(2, 1, KEY_DOWN), |
746 | }; | 746 | }; |
747 | 747 | ||
748 | const struct matrix_keymap_data am335x_evm_keymap_data = { | 748 | const struct matrix_keymap_data am335x_evm_keymap_data = { |
749 | .keymap = am335x_evm_matrix_keys, | 749 | .keymap = am335x_evm_matrix_keys, |
750 | .keymap_size = ARRAY_SIZE(am335x_evm_matrix_keys), | 750 | .keymap_size = ARRAY_SIZE(am335x_evm_matrix_keys), |
751 | }; | 751 | }; |
752 | 752 | ||
753 | static const unsigned int am335x_evm_keypad_row_gpios[] = { | 753 | static const unsigned int am335x_evm_keypad_row_gpios[] = { |
754 | GPIO_TO_PIN(1, 25), GPIO_TO_PIN(1, 26), GPIO_TO_PIN(1, 27) | 754 | GPIO_TO_PIN(1, 25), GPIO_TO_PIN(1, 26), GPIO_TO_PIN(1, 27) |
755 | }; | 755 | }; |
756 | 756 | ||
757 | static const unsigned int am335x_evm_keypad_col_gpios[] = { | 757 | static const unsigned int am335x_evm_keypad_col_gpios[] = { |
758 | GPIO_TO_PIN(1, 21), GPIO_TO_PIN(1, 22) | 758 | GPIO_TO_PIN(1, 21), GPIO_TO_PIN(1, 22) |
759 | }; | 759 | }; |
760 | 760 | ||
761 | static struct matrix_keypad_platform_data am335x_evm_keypad_platform_data = { | 761 | static struct matrix_keypad_platform_data am335x_evm_keypad_platform_data = { |
762 | .keymap_data = &am335x_evm_keymap_data, | 762 | .keymap_data = &am335x_evm_keymap_data, |
763 | .row_gpios = am335x_evm_keypad_row_gpios, | 763 | .row_gpios = am335x_evm_keypad_row_gpios, |
764 | .num_row_gpios = ARRAY_SIZE(am335x_evm_keypad_row_gpios), | 764 | .num_row_gpios = ARRAY_SIZE(am335x_evm_keypad_row_gpios), |
765 | .col_gpios = am335x_evm_keypad_col_gpios, | 765 | .col_gpios = am335x_evm_keypad_col_gpios, |
766 | .num_col_gpios = ARRAY_SIZE(am335x_evm_keypad_col_gpios), | 766 | .num_col_gpios = ARRAY_SIZE(am335x_evm_keypad_col_gpios), |
767 | .active_low = false, | 767 | .active_low = false, |
768 | .debounce_ms = 5, | 768 | .debounce_ms = 5, |
769 | .col_scan_delay_us = 2, | 769 | .col_scan_delay_us = 2, |
770 | }; | 770 | }; |
771 | 771 | ||
772 | static struct platform_device am335x_evm_keyboard = { | 772 | static struct platform_device am335x_evm_keyboard = { |
773 | .name = "matrix-keypad", | 773 | .name = "matrix-keypad", |
774 | .id = -1, | 774 | .id = -1, |
775 | .dev = { | 775 | .dev = { |
776 | .platform_data = &am335x_evm_keypad_platform_data, | 776 | .platform_data = &am335x_evm_keypad_platform_data, |
777 | }, | 777 | }, |
778 | }; | 778 | }; |
779 | 779 | ||
780 | static void matrix_keypad_init(int evm_id, int profile) | 780 | static void matrix_keypad_init(int evm_id, int profile) |
781 | { | 781 | { |
782 | int err; | 782 | int err; |
783 | 783 | ||
784 | setup_pin_mux(matrix_keypad_pin_mux); | 784 | setup_pin_mux(matrix_keypad_pin_mux); |
785 | err = platform_device_register(&am335x_evm_keyboard); | 785 | err = platform_device_register(&am335x_evm_keyboard); |
786 | if (err) { | 786 | if (err) { |
787 | pr_err("failed to register matrix keypad (2x3) device\n"); | 787 | pr_err("failed to register matrix keypad (2x3) device\n"); |
788 | } | 788 | } |
789 | } | 789 | } |
790 | 790 | ||
791 | 791 | ||
792 | /* pinmux for keypad device */ | 792 | /* pinmux for keypad device */ |
793 | static struct pinmux_config volume_keys_pin_mux[] = { | 793 | static struct pinmux_config volume_keys_pin_mux[] = { |
794 | {"spi0_sclk.gpio0_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 794 | {"spi0_sclk.gpio0_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
795 | {"spi0_d0.gpio0_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 795 | {"spi0_d0.gpio0_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
796 | {NULL, 0}, | 796 | {NULL, 0}, |
797 | }; | 797 | }; |
798 | 798 | ||
799 | /* Configure GPIOs for Volume Keys */ | 799 | /* Configure GPIOs for Volume Keys */ |
800 | static struct gpio_keys_button am335x_evm_volume_gpio_buttons[] = { | 800 | static struct gpio_keys_button am335x_evm_volume_gpio_buttons[] = { |
801 | { | 801 | { |
802 | .code = KEY_VOLUMEUP, | 802 | .code = KEY_VOLUMEUP, |
803 | .gpio = GPIO_TO_PIN(0, 2), | 803 | .gpio = GPIO_TO_PIN(0, 2), |
804 | .active_low = true, | 804 | .active_low = true, |
805 | .desc = "volume-up", | 805 | .desc = "volume-up", |
806 | .type = EV_KEY, | 806 | .type = EV_KEY, |
807 | .wakeup = 1, | 807 | .wakeup = 1, |
808 | }, | 808 | }, |
809 | { | 809 | { |
810 | .code = KEY_VOLUMEDOWN, | 810 | .code = KEY_VOLUMEDOWN, |
811 | .gpio = GPIO_TO_PIN(0, 3), | 811 | .gpio = GPIO_TO_PIN(0, 3), |
812 | .active_low = true, | 812 | .active_low = true, |
813 | .desc = "volume-down", | 813 | .desc = "volume-down", |
814 | .type = EV_KEY, | 814 | .type = EV_KEY, |
815 | .wakeup = 1, | 815 | .wakeup = 1, |
816 | }, | 816 | }, |
817 | }; | 817 | }; |
818 | 818 | ||
819 | static struct gpio_keys_platform_data am335x_evm_volume_gpio_key_info = { | 819 | static struct gpio_keys_platform_data am335x_evm_volume_gpio_key_info = { |
820 | .buttons = am335x_evm_volume_gpio_buttons, | 820 | .buttons = am335x_evm_volume_gpio_buttons, |
821 | .nbuttons = ARRAY_SIZE(am335x_evm_volume_gpio_buttons), | 821 | .nbuttons = ARRAY_SIZE(am335x_evm_volume_gpio_buttons), |
822 | }; | 822 | }; |
823 | 823 | ||
824 | static struct platform_device am335x_evm_volume_keys = { | 824 | static struct platform_device am335x_evm_volume_keys = { |
825 | .name = "gpio-keys", | 825 | .name = "gpio-keys", |
826 | .id = -1, | 826 | .id = -1, |
827 | .dev = { | 827 | .dev = { |
828 | .platform_data = &am335x_evm_volume_gpio_key_info, | 828 | .platform_data = &am335x_evm_volume_gpio_key_info, |
829 | }, | 829 | }, |
830 | }; | 830 | }; |
831 | 831 | ||
832 | static void volume_keys_init(int evm_id, int profile) | 832 | static void volume_keys_init(int evm_id, int profile) |
833 | { | 833 | { |
834 | int err; | 834 | int err; |
835 | 835 | ||
836 | setup_pin_mux(volume_keys_pin_mux); | 836 | setup_pin_mux(volume_keys_pin_mux); |
837 | err = platform_device_register(&am335x_evm_volume_keys); | 837 | err = platform_device_register(&am335x_evm_volume_keys); |
838 | if (err) | 838 | if (err) |
839 | pr_err("failed to register matrix keypad (2x3) device\n"); | 839 | pr_err("failed to register matrix keypad (2x3) device\n"); |
840 | } | 840 | } |
841 | 841 | ||
842 | /* | 842 | /* |
843 | * @evm_id - evm id which needs to be configured | 843 | * @evm_id - evm id which needs to be configured |
844 | * @dev_cfg - single evm structure which includes | 844 | * @dev_cfg - single evm structure which includes |
845 | * all module inits, pin-mux defines | 845 | * all module inits, pin-mux defines |
846 | * @profile - if present, else PROFILE_NONE | 846 | * @profile - if present, else PROFILE_NONE |
847 | * @dghtr_brd_flg - Whether Daughter board is present or not | 847 | * @dghtr_brd_flg - Whether Daughter board is present or not |
848 | */ | 848 | */ |
849 | static void _configure_device(int evm_id, struct evm_dev_cfg *dev_cfg, | 849 | static void _configure_device(int evm_id, struct evm_dev_cfg *dev_cfg, |
850 | int profile) | 850 | int profile) |
851 | { | 851 | { |
852 | int i; | 852 | int i; |
853 | 853 | ||
854 | am335x_evm_set_id(evm_id); | 854 | am335x_evm_set_id(evm_id); |
855 | 855 | ||
856 | /* | 856 | /* |
857 | * Only General Purpose & Industrial Auto Motro Control | 857 | * Only General Purpose & Industrial Auto Motro Control |
858 | * EVM has profiles. So check if this evm has profile. | 858 | * EVM has profiles. So check if this evm has profile. |
859 | * If not, ignore the profile comparison | 859 | * If not, ignore the profile comparison |
860 | */ | 860 | */ |
861 | 861 | ||
862 | /* | 862 | /* |
863 | * If the device is on baseboard, directly configure it. Else (device on | 863 | * If the device is on baseboard, directly configure it. Else (device on |
864 | * Daughter board), check if the daughter card is detected. | 864 | * Daughter board), check if the daughter card is detected. |
865 | */ | 865 | */ |
866 | if (profile == PROFILE_NONE) { | 866 | if (profile == PROFILE_NONE) { |
867 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { | 867 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { |
868 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) | 868 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) |
869 | dev_cfg->device_init(evm_id, profile); | 869 | dev_cfg->device_init(evm_id, profile); |
870 | else if (daughter_brd_detected == true) | 870 | else if (daughter_brd_detected == true) |
871 | dev_cfg->device_init(evm_id, profile); | 871 | dev_cfg->device_init(evm_id, profile); |
872 | } | 872 | } |
873 | } else { | 873 | } else { |
874 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { | 874 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { |
875 | if (dev_cfg->profile & profile) { | 875 | if (dev_cfg->profile & profile) { |
876 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) | 876 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) |
877 | dev_cfg->device_init(evm_id, profile); | 877 | dev_cfg->device_init(evm_id, profile); |
878 | else if (daughter_brd_detected == true) | 878 | else if (daughter_brd_detected == true) |
879 | dev_cfg->device_init(evm_id, profile); | 879 | dev_cfg->device_init(evm_id, profile); |
880 | } | 880 | } |
881 | } | 881 | } |
882 | } | 882 | } |
883 | } | 883 | } |
884 | 884 | ||
885 | 885 | ||
886 | /* pinmux for usb0 drvvbus */ | 886 | /* pinmux for usb0 drvvbus */ |
887 | static struct pinmux_config usb0_pin_mux[] = { | 887 | static struct pinmux_config usb0_pin_mux[] = { |
888 | {"usb0_drvvbus.usb0_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 888 | {"usb0_drvvbus.usb0_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
889 | {NULL, 0}, | 889 | {NULL, 0}, |
890 | }; | 890 | }; |
891 | 891 | ||
892 | /* pinmux for usb1 drvvbus */ | 892 | /* pinmux for usb1 drvvbus */ |
893 | static struct pinmux_config usb1_pin_mux[] = { | 893 | static struct pinmux_config usb1_pin_mux[] = { |
894 | {"usb1_drvvbus.usb1_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 894 | {"usb1_drvvbus.usb1_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
895 | {NULL, 0}, | 895 | {NULL, 0}, |
896 | }; | 896 | }; |
897 | 897 | ||
898 | /* pinmux for profibus */ | 898 | /* pinmux for profibus */ |
899 | static struct pinmux_config profibus_pin_mux[] = { | 899 | static struct pinmux_config profibus_pin_mux[] = { |
900 | {"uart1_rxd.pr1_uart0_rxd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_INPUT}, | 900 | {"uart1_rxd.pr1_uart0_rxd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_INPUT}, |
901 | {"uart1_txd.pr1_uart0_txd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, | 901 | {"uart1_txd.pr1_uart0_txd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, |
902 | {"mcasp0_fsr.pr1_pru0_pru_r30_5", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, | 902 | {"mcasp0_fsr.pr1_pru0_pru_r30_5", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, |
903 | {NULL, 0}, | 903 | {NULL, 0}, |
904 | }; | 904 | }; |
905 | 905 | ||
906 | /* Module pin mux for eCAP0 */ | 906 | /* Module pin mux for eCAP0 */ |
907 | static struct pinmux_config ecap0_pin_mux[] = { | 907 | static struct pinmux_config ecap0_pin_mux[] = { |
908 | {"ecap0_in_pwm0_out.ecap0_in_pwm0_out", | 908 | {"ecap0_in_pwm0_out.ecap0_in_pwm0_out", |
909 | OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 909 | OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
910 | {NULL, 0}, | 910 | {NULL, 0}, |
911 | }; | 911 | }; |
912 | 912 | ||
913 | /* Module pin mux for eCAP */ | 913 | /* Module pin mux for eCAP */ |
914 | static struct pinmux_config ecap2_pin_mux[] = { | 914 | static struct pinmux_config ecap2_pin_mux[] = { |
915 | {"mcasp0_ahclkr.ecap2_in_pwm2_out", AM33XX_PIN_OUTPUT}, | 915 | {"mcasp0_ahclkr.ecap2_in_pwm2_out", AM33XX_PIN_OUTPUT}, |
916 | {NULL, 0}, | 916 | {NULL, 0}, |
917 | }; | 917 | }; |
918 | 918 | ||
919 | #define AM335XEVM_WLAN_PMENA_GPIO GPIO_TO_PIN(1, 30) | 919 | #define AM335XEVM_WLAN_PMENA_GPIO GPIO_TO_PIN(1, 30) |
920 | #define AM335XEVM_WLAN_IRQ_GPIO GPIO_TO_PIN(3, 17) | 920 | #define AM335XEVM_WLAN_IRQ_GPIO GPIO_TO_PIN(3, 17) |
921 | #define AM335XEVM_SK_WLAN_IRQ_GPIO GPIO_TO_PIN(1, 29) | 921 | #define AM335XEVM_SK_WLAN_IRQ_GPIO GPIO_TO_PIN(1, 29) |
922 | 922 | ||
923 | struct wl12xx_platform_data am335xevm_wlan_data = { | 923 | struct wl12xx_platform_data am335xevm_wlan_data = { |
924 | .irq = OMAP_GPIO_IRQ(AM335XEVM_WLAN_IRQ_GPIO), | 924 | .irq = OMAP_GPIO_IRQ(AM335XEVM_WLAN_IRQ_GPIO), |
925 | .board_ref_clock = WL12XX_REFCLOCK_38_XTAL, /* 38.4Mhz */ | 925 | .board_ref_clock = WL12XX_REFCLOCK_38_XTAL, /* 38.4Mhz */ |
926 | .bt_enable_gpio = GPIO_TO_PIN(3, 21), | 926 | .bt_enable_gpio = GPIO_TO_PIN(3, 21), |
927 | .wlan_enable_gpio = GPIO_TO_PIN(1, 16), | 927 | .wlan_enable_gpio = GPIO_TO_PIN(1, 16), |
928 | }; | 928 | }; |
929 | 929 | ||
930 | /* Module pin mux for wlan and bluetooth */ | 930 | /* Module pin mux for wlan and bluetooth */ |
931 | static struct pinmux_config mmc2_wl12xx_pin_mux[] = { | 931 | static struct pinmux_config mmc2_wl12xx_pin_mux[] = { |
932 | {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 932 | {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
933 | {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 933 | {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
934 | {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 934 | {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
935 | {"gpmc_ben1.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 935 | {"gpmc_ben1.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
936 | {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 936 | {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
937 | {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 937 | {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
938 | {NULL, 0}, | 938 | {NULL, 0}, |
939 | }; | 939 | }; |
940 | 940 | ||
941 | static struct pinmux_config uart1_wl12xx_pin_mux[] = { | 941 | static struct pinmux_config uart1_wl12xx_pin_mux[] = { |
942 | {"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 942 | {"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
943 | {"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT}, | 943 | {"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT}, |
944 | {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 944 | {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
945 | {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL}, | 945 | {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL}, |
946 | {NULL, 0}, | 946 | {NULL, 0}, |
947 | }; | 947 | }; |
948 | 948 | ||
949 | static struct pinmux_config wl12xx_pin_mux[] = { | 949 | static struct pinmux_config wl12xx_pin_mux[] = { |
950 | {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 950 | {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
951 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 951 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
952 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP}, | 952 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP}, |
953 | {NULL, 0}, | 953 | {NULL, 0}, |
954 | }; | 954 | }; |
955 | 955 | ||
956 | static struct pinmux_config wl12xx_pin_mux_sk[] = { | 956 | static struct pinmux_config wl12xx_pin_mux_sk[] = { |
957 | {"gpmc_wpn.gpio0_31", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 957 | {"gpmc_wpn.gpio0_31", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
958 | {"gpmc_csn0.gpio1_29", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 958 | {"gpmc_csn0.gpio1_29", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
959 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 959 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
960 | {NULL, 0}, | 960 | {NULL, 0}, |
961 | }; | 961 | }; |
962 | 962 | ||
963 | static bool backlight_enable; | 963 | static bool backlight_enable; |
964 | 964 | ||
965 | static void enable_ecap0(int evm_id, int profile) | 965 | static void enable_ecap0(int evm_id, int profile) |
966 | { | 966 | { |
967 | backlight_enable = true; | 967 | backlight_enable = true; |
968 | setup_pin_mux(ecap0_pin_mux); | 968 | setup_pin_mux(ecap0_pin_mux); |
969 | } | 969 | } |
970 | 970 | ||
971 | static void enable_ecap2(int evm_id, int profile) | 971 | static void enable_ecap2(int evm_id, int profile) |
972 | { | 972 | { |
973 | backlight_enable = true; | 973 | backlight_enable = true; |
974 | setup_pin_mux(ecap2_pin_mux); | 974 | setup_pin_mux(ecap2_pin_mux); |
975 | } | 975 | } |
976 | 976 | ||
977 | /* Setup pwm-backlight */ | 977 | /* Setup pwm-backlight */ |
978 | static struct platform_device am335x_backlight = { | 978 | static struct platform_device am335x_backlight = { |
979 | .name = "pwm-backlight", | 979 | .name = "pwm-backlight", |
980 | .id = -1, | 980 | .id = -1, |
981 | .dev = { | 981 | .dev = { |
982 | .platform_data = &am335x_backlight_data0, | 982 | .platform_data = &am335x_backlight_data0, |
983 | }, | 983 | }, |
984 | }; | 984 | }; |
985 | 985 | ||
986 | static struct pwmss_platform_data pwm_pdata[3] = { | 986 | static struct pwmss_platform_data pwm_pdata[3] = { |
987 | { | 987 | { |
988 | .version = PWM_VERSION_1, | 988 | .version = PWM_VERSION_1, |
989 | }, | 989 | }, |
990 | { | 990 | { |
991 | .version = PWM_VERSION_1, | 991 | .version = PWM_VERSION_1, |
992 | }, | 992 | }, |
993 | { | 993 | { |
994 | .version = PWM_VERSION_1, | 994 | .version = PWM_VERSION_1, |
995 | }, | 995 | }, |
996 | }; | 996 | }; |
997 | 997 | ||
998 | static int __init backlight_init(void) | 998 | static int __init backlight_init(void) |
999 | { | 999 | { |
1000 | int status = 0; | 1000 | int status = 0; |
1001 | 1001 | ||
1002 | if (backlight_enable) { | 1002 | if (backlight_enable) { |
1003 | int ecap_index = 0; | 1003 | int ecap_index = 0; |
1004 | 1004 | ||
1005 | switch (am335x_evm_get_id()) { | 1005 | switch (am335x_evm_get_id()) { |
1006 | case GEN_PURP_EVM: | 1006 | case GEN_PURP_EVM: |
1007 | case GEN_PURP_DDR3_EVM: | 1007 | case GEN_PURP_DDR3_EVM: |
1008 | ecap_index = 0; | 1008 | ecap_index = 0; |
1009 | break; | 1009 | break; |
1010 | case EVM_SK: | 1010 | case EVM_SK: |
1011 | /* | 1011 | /* |
1012 | * Invert polarity of PWM wave from ECAP to handle | 1012 | * Invert polarity of PWM wave from ECAP to handle |
1013 | * backlight intensity to pwm brightness | 1013 | * backlight intensity to pwm brightness |
1014 | */ | 1014 | */ |
1015 | ecap_index = 2; | 1015 | ecap_index = 2; |
1016 | pwm_pdata[ecap_index].chan_attrib[0].inverse_pol = true; | 1016 | pwm_pdata[ecap_index].chan_attrib[0].inverse_pol = true; |
1017 | am335x_backlight.dev.platform_data = | 1017 | am335x_backlight.dev.platform_data = |
1018 | &am335x_backlight_data2; | 1018 | &am335x_backlight_data2; |
1019 | break; | 1019 | break; |
1020 | default: | 1020 | default: |
1021 | pr_err("%s: Error on attempting to enable backlight," | 1021 | pr_err("%s: Error on attempting to enable backlight," |
1022 | " not supported\n", __func__); | 1022 | " not supported\n", __func__); |
1023 | return -EINVAL; | 1023 | return -EINVAL; |
1024 | } | 1024 | } |
1025 | 1025 | ||
1026 | am33xx_register_ecap(ecap_index, &pwm_pdata[ecap_index]); | 1026 | am33xx_register_ecap(ecap_index, &pwm_pdata[ecap_index]); |
1027 | platform_device_register(&am335x_backlight); | 1027 | platform_device_register(&am335x_backlight); |
1028 | } | 1028 | } |
1029 | return status; | 1029 | return status; |
1030 | } | 1030 | } |
1031 | late_initcall(backlight_init); | 1031 | late_initcall(backlight_init); |
1032 | 1032 | ||
1033 | static int __init conf_disp_pll(int rate) | 1033 | static int __init conf_disp_pll(int rate) |
1034 | { | 1034 | { |
1035 | struct clk *disp_pll; | 1035 | struct clk *disp_pll; |
1036 | int ret = -EINVAL; | 1036 | int ret = -EINVAL; |
1037 | 1037 | ||
1038 | disp_pll = clk_get(NULL, "dpll_disp_ck"); | 1038 | disp_pll = clk_get(NULL, "dpll_disp_ck"); |
1039 | if (IS_ERR(disp_pll)) { | 1039 | if (IS_ERR(disp_pll)) { |
1040 | pr_err("Cannot clk_get disp_pll\n"); | 1040 | pr_err("Cannot clk_get disp_pll\n"); |
1041 | goto out; | 1041 | goto out; |
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | ret = clk_set_rate(disp_pll, rate); | 1044 | ret = clk_set_rate(disp_pll, rate); |
1045 | clk_put(disp_pll); | 1045 | clk_put(disp_pll); |
1046 | out: | 1046 | out: |
1047 | return ret; | 1047 | return ret; |
1048 | } | 1048 | } |
1049 | 1049 | ||
1050 | static void lcdc_init(int evm_id, int profile) | 1050 | static void lcdc_init(int evm_id, int profile) |
1051 | { | 1051 | { |
1052 | struct da8xx_lcdc_platform_data *lcdc_pdata; | 1052 | struct da8xx_lcdc_platform_data *lcdc_pdata; |
1053 | setup_pin_mux(lcdc_pin_mux); | 1053 | setup_pin_mux(lcdc_pin_mux); |
1054 | 1054 | ||
1055 | if (conf_disp_pll(300000000)) { | 1055 | if (conf_disp_pll(300000000)) { |
1056 | pr_info("Failed configure display PLL, not attempting to" | 1056 | pr_info("Failed configure display PLL, not attempting to" |
1057 | "register LCDC\n"); | 1057 | "register LCDC\n"); |
1058 | return; | 1058 | return; |
1059 | } | 1059 | } |
1060 | switch (evm_id) { | 1060 | switch (evm_id) { |
1061 | case GEN_PURP_EVM: | 1061 | case GEN_PURP_EVM: |
1062 | case GEN_PURP_DDR3_EVM: | 1062 | case GEN_PURP_DDR3_EVM: |
1063 | lcdc_pdata = &TFC_S9700RTWV35TR_01B_pdata; | 1063 | lcdc_pdata = &TFC_S9700RTWV35TR_01B_pdata; |
1064 | break; | 1064 | break; |
1065 | case EVM_SK: | 1065 | case EVM_SK: |
1066 | lcdc_pdata = &NHD_480272MF_ATXI_pdata; | 1066 | lcdc_pdata = &NHD_480272MF_ATXI_pdata; |
1067 | break; | 1067 | break; |
1068 | default: | 1068 | default: |
1069 | pr_err("LCDC not supported on this evm (%d)\n",evm_id); | 1069 | pr_err("LCDC not supported on this evm (%d)\n",evm_id); |
1070 | return; | 1070 | return; |
1071 | } | 1071 | } |
1072 | 1072 | ||
1073 | lcdc_pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; | 1073 | lcdc_pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; |
1074 | 1074 | ||
1075 | if (am33xx_register_lcdc(lcdc_pdata)) | 1075 | if (am33xx_register_lcdc(lcdc_pdata)) |
1076 | pr_info("Failed to register LCDC device\n"); | 1076 | pr_info("Failed to register LCDC device\n"); |
1077 | 1077 | ||
1078 | return; | 1078 | return; |
1079 | } | 1079 | } |
1080 | 1080 | ||
1081 | static void mfd_tscadc_init(int evm_id, int profile) | 1081 | static void mfd_tscadc_init(int evm_id, int profile) |
1082 | { | 1082 | { |
1083 | int err; | 1083 | int err; |
1084 | 1084 | ||
1085 | err = am33xx_register_mfd_tscadc(&tscadc); | 1085 | err = am33xx_register_mfd_tscadc(&tscadc); |
1086 | if (err) | 1086 | if (err) |
1087 | pr_err("failed to register touchscreen device\n"); | 1087 | pr_err("failed to register touchscreen device\n"); |
1088 | } | 1088 | } |
1089 | 1089 | ||
1090 | static void rgmii1_init(int evm_id, int profile) | 1090 | static void rgmii1_init(int evm_id, int profile) |
1091 | { | 1091 | { |
1092 | setup_pin_mux(rgmii1_pin_mux); | 1092 | setup_pin_mux(rgmii1_pin_mux); |
1093 | return; | 1093 | return; |
1094 | } | 1094 | } |
1095 | 1095 | ||
1096 | static void rgmii2_init(int evm_id, int profile) | 1096 | static void rgmii2_init(int evm_id, int profile) |
1097 | { | 1097 | { |
1098 | setup_pin_mux(rgmii2_pin_mux); | 1098 | setup_pin_mux(rgmii2_pin_mux); |
1099 | return; | 1099 | return; |
1100 | } | 1100 | } |
1101 | 1101 | ||
1102 | static void mii1_init(int evm_id, int profile) | 1102 | static void mii1_init(int evm_id, int profile) |
1103 | { | 1103 | { |
1104 | setup_pin_mux(mii1_pin_mux); | 1104 | setup_pin_mux(mii1_pin_mux); |
1105 | return; | 1105 | return; |
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | static void rmii1_init(int evm_id, int profile) | 1108 | static void rmii1_init(int evm_id, int profile) |
1109 | { | 1109 | { |
1110 | setup_pin_mux(rmii1_pin_mux); | 1110 | setup_pin_mux(rmii1_pin_mux); |
1111 | return; | 1111 | return; |
1112 | } | 1112 | } |
1113 | 1113 | ||
1114 | static void usb0_init(int evm_id, int profile) | 1114 | static void usb0_init(int evm_id, int profile) |
1115 | { | 1115 | { |
1116 | setup_pin_mux(usb0_pin_mux); | 1116 | setup_pin_mux(usb0_pin_mux); |
1117 | return; | 1117 | return; |
1118 | } | 1118 | } |
1119 | 1119 | ||
1120 | static void usb1_init(int evm_id, int profile) | 1120 | static void usb1_init(int evm_id, int profile) |
1121 | { | 1121 | { |
1122 | setup_pin_mux(usb1_pin_mux); | 1122 | setup_pin_mux(usb1_pin_mux); |
1123 | return; | 1123 | return; |
1124 | } | 1124 | } |
1125 | 1125 | ||
1126 | /* setup uart3 */ | 1126 | /* setup uart3 */ |
1127 | static void uart3_init(int evm_id, int profile) | 1127 | static void uart3_init(int evm_id, int profile) |
1128 | { | 1128 | { |
1129 | setup_pin_mux(uart3_pin_mux); | 1129 | setup_pin_mux(uart3_pin_mux); |
1130 | return; | 1130 | return; |
1131 | } | 1131 | } |
1132 | 1132 | ||
1133 | /* setup uart2 */ | 1133 | /* setup uart2 */ |
1134 | static void uart2_init(int evm_id, int profile) | 1134 | static void uart2_init(int evm_id, int profile) |
1135 | { | 1135 | { |
1136 | setup_pin_mux(uart2_pin_mux); | 1136 | setup_pin_mux(uart2_pin_mux); |
1137 | return; | 1137 | return; |
1138 | } | 1138 | } |
1139 | 1139 | ||
1140 | /* | 1140 | /* |
1141 | * gpio0_7 was driven HIGH in u-boot before DDR configuration | 1141 | * gpio0_7 was driven HIGH in u-boot before DDR configuration |
1142 | * | 1142 | * |
1143 | * setup gpio0_7 for EVM-SK 1.2 | 1143 | * setup gpio0_7 for EVM-SK 1.2 |
1144 | */ | 1144 | */ |
1145 | static void gpio_ddr_vtt_enb_init(int evm_id, int profile) | 1145 | static void gpio_ddr_vtt_enb_init(int evm_id, int profile) |
1146 | { | 1146 | { |
1147 | setup_pin_mux(gpio_ddr_vtt_enb_pin_mux); | 1147 | setup_pin_mux(gpio_ddr_vtt_enb_pin_mux); |
1148 | return; | 1148 | return; |
1149 | } | 1149 | } |
1150 | 1150 | ||
1151 | /* setup haptics */ | 1151 | /* setup haptics */ |
1152 | #define HAPTICS_MAX_FREQ 250 | 1152 | #define HAPTICS_MAX_FREQ 250 |
1153 | static void haptics_init(int evm_id, int profile) | 1153 | static void haptics_init(int evm_id, int profile) |
1154 | { | 1154 | { |
1155 | setup_pin_mux(haptics_pin_mux); | 1155 | setup_pin_mux(haptics_pin_mux); |
1156 | pwm_pdata[2].chan_attrib[1].max_freq = HAPTICS_MAX_FREQ; | 1156 | pwm_pdata[2].chan_attrib[1].max_freq = HAPTICS_MAX_FREQ; |
1157 | am33xx_register_ehrpwm(2, &pwm_pdata[2]); | 1157 | am33xx_register_ehrpwm(2, &pwm_pdata[2]); |
1158 | } | 1158 | } |
1159 | 1159 | ||
1160 | /* NAND partition information */ | 1160 | /* NAND partition information */ |
1161 | static struct mtd_partition am335x_nand_partitions[] = { | 1161 | static struct mtd_partition am335x_nand_partitions[] = { |
1162 | /* All the partition sizes are listed in terms of NAND block size */ | 1162 | /* All the partition sizes are listed in terms of NAND block size */ |
1163 | { | 1163 | { |
1164 | .name = "SPL", | 1164 | .name = "SPL", |
1165 | .offset = 0, /* Offset = 0x0 */ | 1165 | .offset = 0, /* Offset = 0x0 */ |
1166 | .size = SZ_128K, | 1166 | .size = SZ_128K, |
1167 | }, | 1167 | }, |
1168 | { | 1168 | { |
1169 | .name = "SPL.backup1", | 1169 | .name = "SPL.backup1", |
1170 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ | 1170 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ |
1171 | .size = SZ_128K, | 1171 | .size = SZ_128K, |
1172 | }, | 1172 | }, |
1173 | { | 1173 | { |
1174 | .name = "SPL.backup2", | 1174 | .name = "SPL.backup2", |
1175 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */ | 1175 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */ |
1176 | .size = SZ_128K, | 1176 | .size = SZ_128K, |
1177 | }, | 1177 | }, |
1178 | { | 1178 | { |
1179 | .name = "SPL.backup3", | 1179 | .name = "SPL.backup3", |
1180 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ | 1180 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ |
1181 | .size = SZ_128K, | 1181 | .size = SZ_128K, |
1182 | }, | 1182 | }, |
1183 | { | 1183 | { |
1184 | .name = "U-Boot", | 1184 | .name = "U-Boot", |
1185 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ | 1185 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ |
1186 | .size = 15 * SZ_128K, | 1186 | .size = 15 * SZ_128K, |
1187 | }, | 1187 | }, |
1188 | { | 1188 | { |
1189 | .name = "U-Boot Env", | 1189 | .name = "U-Boot Env", |
1190 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ | 1190 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ |
1191 | .size = 1 * SZ_128K, | 1191 | .size = 1 * SZ_128K, |
1192 | }, | 1192 | }, |
1193 | { | 1193 | { |
1194 | .name = "Kernel", | 1194 | .name = "Kernel", |
1195 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ | 1195 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ |
1196 | .size = 40 * SZ_128K, | 1196 | .size = 40 * SZ_128K, |
1197 | }, | 1197 | }, |
1198 | { | 1198 | { |
1199 | .name = "File System", | 1199 | .name = "File System", |
1200 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */ | 1200 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */ |
1201 | .size = MTDPART_SIZ_FULL, | 1201 | .size = MTDPART_SIZ_FULL, |
1202 | }, | 1202 | }, |
1203 | }; | 1203 | }; |
1204 | 1204 | ||
1205 | /* SPI 0/1 Platform Data */ | 1205 | /* SPI 0/1 Platform Data */ |
1206 | /* SPI flash information */ | 1206 | /* SPI flash information */ |
1207 | static struct mtd_partition am335x_spi_partitions[] = { | 1207 | static struct mtd_partition am335x_spi_partitions[] = { |
1208 | /* All the partition sizes are listed in terms of erase size */ | 1208 | /* All the partition sizes are listed in terms of erase size */ |
1209 | { | 1209 | { |
1210 | .name = "SPL", | 1210 | .name = "SPL", |
1211 | .offset = 0, /* Offset = 0x0 */ | 1211 | .offset = 0, /* Offset = 0x0 */ |
1212 | .size = SZ_128K, | 1212 | .size = SZ_128K, |
1213 | }, | 1213 | }, |
1214 | { | 1214 | { |
1215 | .name = "U-Boot", | 1215 | .name = "U-Boot", |
1216 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ | 1216 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ |
1217 | .size = 2 * SZ_128K, | 1217 | .size = 2 * SZ_128K, |
1218 | }, | 1218 | }, |
1219 | { | 1219 | { |
1220 | .name = "U-Boot Env", | 1220 | .name = "U-Boot Env", |
1221 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ | 1221 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ |
1222 | .size = 2 * SZ_4K, | 1222 | .size = 2 * SZ_4K, |
1223 | }, | 1223 | }, |
1224 | { | 1224 | { |
1225 | .name = "Kernel", | 1225 | .name = "Kernel", |
1226 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x62000 */ | 1226 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x62000 */ |
1227 | .size = 28 * SZ_128K, | 1227 | .size = 28 * SZ_128K, |
1228 | }, | 1228 | }, |
1229 | { | 1229 | { |
1230 | .name = "File System", | 1230 | .name = "File System", |
1231 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x3E2000 */ | 1231 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x3E2000 */ |
1232 | .size = MTDPART_SIZ_FULL, /* size ~= 4.1 MiB */ | 1232 | .size = MTDPART_SIZ_FULL, /* size ~= 4.1 MiB */ |
1233 | } | 1233 | } |
1234 | }; | 1234 | }; |
1235 | 1235 | ||
1236 | static const struct flash_platform_data am335x_spi_flash = { | 1236 | static const struct flash_platform_data am335x_spi_flash = { |
1237 | .type = "w25q64", | 1237 | .type = "w25q64", |
1238 | .name = "spi_flash", | 1238 | .name = "spi_flash", |
1239 | .parts = am335x_spi_partitions, | 1239 | .parts = am335x_spi_partitions, |
1240 | .nr_parts = ARRAY_SIZE(am335x_spi_partitions), | 1240 | .nr_parts = ARRAY_SIZE(am335x_spi_partitions), |
1241 | }; | 1241 | }; |
1242 | 1242 | ||
1243 | /* | 1243 | /* |
1244 | * SPI Flash works at 80Mhz however SPI Controller works at 48MHz. | 1244 | * SPI Flash works at 80Mhz however SPI Controller works at 48MHz. |
1245 | * So setup Max speed to be less than that of Controller speed | 1245 | * So setup Max speed to be less than that of Controller speed |
1246 | */ | 1246 | */ |
1247 | static struct spi_board_info am335x_spi0_slave_info[] = { | 1247 | static struct spi_board_info am335x_spi0_slave_info[] = { |
1248 | { | 1248 | { |
1249 | .modalias = "m25p80", | 1249 | .modalias = "m25p80", |
1250 | .platform_data = &am335x_spi_flash, | 1250 | .platform_data = &am335x_spi_flash, |
1251 | .irq = -1, | 1251 | .irq = -1, |
1252 | .max_speed_hz = 24000000, | 1252 | .max_speed_hz = 24000000, |
1253 | .bus_num = 1, | 1253 | .bus_num = 1, |
1254 | .chip_select = 0, | 1254 | .chip_select = 0, |
1255 | }, | 1255 | }, |
1256 | }; | 1256 | }; |
1257 | 1257 | ||
1258 | static struct spi_board_info am335x_spi1_slave_info[] = { | 1258 | static struct spi_board_info am335x_spi1_slave_info[] = { |
1259 | { | 1259 | { |
1260 | .modalias = "m25p80", | 1260 | .modalias = "m25p80", |
1261 | .platform_data = &am335x_spi_flash, | 1261 | .platform_data = &am335x_spi_flash, |
1262 | .irq = -1, | 1262 | .irq = -1, |
1263 | .max_speed_hz = 12000000, | 1263 | .max_speed_hz = 12000000, |
1264 | .bus_num = 2, | 1264 | .bus_num = 2, |
1265 | .chip_select = 0, | 1265 | .chip_select = 0, |
1266 | }, | 1266 | }, |
1267 | }; | 1267 | }; |
1268 | 1268 | ||
1269 | static struct gpmc_timings am335x_nand_timings = { | 1269 | static struct gpmc_timings am335x_nand_timings = { |
1270 | .sync_clk = 0, | 1270 | .sync_clk = 0, |
1271 | 1271 | ||
1272 | .cs_on = 0, | 1272 | .cs_on = 0, |
1273 | .cs_rd_off = 44, | 1273 | .cs_rd_off = 44, |
1274 | .cs_wr_off = 44, | 1274 | .cs_wr_off = 44, |
1275 | 1275 | ||
1276 | .adv_on = 6, | 1276 | .adv_on = 6, |
1277 | .adv_rd_off = 34, | 1277 | .adv_rd_off = 34, |
1278 | .adv_wr_off = 44, | 1278 | .adv_wr_off = 44, |
1279 | .we_off = 40, | 1279 | .we_off = 40, |
1280 | .oe_off = 54, | 1280 | .oe_off = 54, |
1281 | 1281 | ||
1282 | .access = 64, | 1282 | .access = 64, |
1283 | .rd_cycle = 82, | 1283 | .rd_cycle = 82, |
1284 | .wr_cycle = 82, | 1284 | .wr_cycle = 82, |
1285 | 1285 | ||
1286 | .wr_access = 40, | 1286 | .wr_access = 40, |
1287 | .wr_data_mux_bus = 0, | 1287 | .wr_data_mux_bus = 0, |
1288 | }; | 1288 | }; |
1289 | 1289 | ||
1290 | static void evm_nand_init(int evm_id, int profile) | 1290 | static void evm_nand_init(int evm_id, int profile) |
1291 | { | 1291 | { |
1292 | struct omap_nand_platform_data *pdata; | 1292 | struct omap_nand_platform_data *pdata; |
1293 | struct gpmc_devices_info gpmc_device[2] = { | 1293 | struct gpmc_devices_info gpmc_device[2] = { |
1294 | { NULL, 0 }, | 1294 | { NULL, 0 }, |
1295 | { NULL, 0 }, | 1295 | { NULL, 0 }, |
1296 | }; | 1296 | }; |
1297 | 1297 | ||
1298 | setup_pin_mux(nand_pin_mux); | 1298 | setup_pin_mux(nand_pin_mux); |
1299 | pdata = omap_nand_init(am335x_nand_partitions, | 1299 | pdata = omap_nand_init(am335x_nand_partitions, |
1300 | ARRAY_SIZE(am335x_nand_partitions), 0, 0, | 1300 | ARRAY_SIZE(am335x_nand_partitions), 0, 0, |
1301 | &am335x_nand_timings); | 1301 | &am335x_nand_timings); |
1302 | if (!pdata) | 1302 | if (!pdata) |
1303 | return; | 1303 | return; |
1304 | pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW; | 1304 | pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW; |
1305 | pdata->elm_used = true; | 1305 | pdata->elm_used = true; |
1306 | gpmc_device[0].pdata = pdata; | 1306 | gpmc_device[0].pdata = pdata; |
1307 | gpmc_device[0].flag = GPMC_DEVICE_NAND; | 1307 | gpmc_device[0].flag = GPMC_DEVICE_NAND; |
1308 | 1308 | ||
1309 | omap_init_gpmc(gpmc_device, sizeof(gpmc_device)); | 1309 | omap_init_gpmc(gpmc_device, sizeof(gpmc_device)); |
1310 | omap_init_elm(); | 1310 | omap_init_elm(); |
1311 | } | 1311 | } |
1312 | 1312 | ||
1313 | /* TPS65217 voltage regulator support */ | 1313 | /* TPS65217 voltage regulator support */ |
1314 | 1314 | ||
1315 | /* 1.8V */ | 1315 | /* 1.8V */ |
1316 | static struct regulator_consumer_supply tps65217_dcdc1_consumers[] = { | 1316 | static struct regulator_consumer_supply tps65217_dcdc1_consumers[] = { |
1317 | { | 1317 | { |
1318 | .supply = "vdds_osc", | 1318 | .supply = "vdds_osc", |
1319 | }, | 1319 | }, |
1320 | { | 1320 | { |
1321 | .supply = "vdds_pll_ddr", | 1321 | .supply = "vdds_pll_ddr", |
1322 | }, | 1322 | }, |
1323 | { | 1323 | { |
1324 | .supply = "vdds_pll_mpu", | 1324 | .supply = "vdds_pll_mpu", |
1325 | }, | 1325 | }, |
1326 | { | 1326 | { |
1327 | .supply = "vdds_pll_core_lcd", | 1327 | .supply = "vdds_pll_core_lcd", |
1328 | }, | 1328 | }, |
1329 | { | 1329 | { |
1330 | .supply = "vdds_sram_mpu_bb", | 1330 | .supply = "vdds_sram_mpu_bb", |
1331 | }, | 1331 | }, |
1332 | { | 1332 | { |
1333 | .supply = "vdds_sram_core_bg", | 1333 | .supply = "vdds_sram_core_bg", |
1334 | }, | 1334 | }, |
1335 | { | 1335 | { |
1336 | .supply = "vdda_usb0_1p8v", | 1336 | .supply = "vdda_usb0_1p8v", |
1337 | }, | 1337 | }, |
1338 | { | 1338 | { |
1339 | .supply = "vdds_ddr", | 1339 | .supply = "vdds_ddr", |
1340 | }, | 1340 | }, |
1341 | { | 1341 | { |
1342 | .supply = "vdds", | 1342 | .supply = "vdds", |
1343 | }, | 1343 | }, |
1344 | { | 1344 | { |
1345 | .supply = "vdds_hvx_1p8v", | 1345 | .supply = "vdds_hvx_1p8v", |
1346 | }, | 1346 | }, |
1347 | { | 1347 | { |
1348 | .supply = "vdda_adc", | 1348 | .supply = "vdda_adc", |
1349 | }, | 1349 | }, |
1350 | { | 1350 | { |
1351 | .supply = "ddr2", | 1351 | .supply = "ddr2", |
1352 | }, | 1352 | }, |
1353 | }; | 1353 | }; |
1354 | 1354 | ||
1355 | /* 1.1V */ | 1355 | /* 1.1V */ |
1356 | static struct regulator_consumer_supply tps65217_dcdc2_consumers[] = { | 1356 | static struct regulator_consumer_supply tps65217_dcdc2_consumers[] = { |
1357 | { | 1357 | { |
1358 | .supply = "vdd_mpu", | 1358 | .supply = "vdd_mpu", |
1359 | }, | 1359 | }, |
1360 | }; | 1360 | }; |
1361 | 1361 | ||
1362 | /* 1.1V */ | 1362 | /* 1.1V */ |
1363 | static struct regulator_consumer_supply tps65217_dcdc3_consumers[] = { | 1363 | static struct regulator_consumer_supply tps65217_dcdc3_consumers[] = { |
1364 | { | 1364 | { |
1365 | .supply = "vdd_core", | 1365 | .supply = "vdd_core", |
1366 | }, | 1366 | }, |
1367 | }; | 1367 | }; |
1368 | 1368 | ||
1369 | /* 1.8V LDO */ | 1369 | /* 1.8V LDO */ |
1370 | static struct regulator_consumer_supply tps65217_ldo1_consumers[] = { | 1370 | static struct regulator_consumer_supply tps65217_ldo1_consumers[] = { |
1371 | { | 1371 | { |
1372 | .supply = "vdds_rtc", | 1372 | .supply = "vdds_rtc", |
1373 | }, | 1373 | }, |
1374 | }; | 1374 | }; |
1375 | 1375 | ||
1376 | /* 3.3V LDO */ | 1376 | /* 3.3V LDO */ |
1377 | static struct regulator_consumer_supply tps65217_ldo2_consumers[] = { | 1377 | static struct regulator_consumer_supply tps65217_ldo2_consumers[] = { |
1378 | { | 1378 | { |
1379 | .supply = "vdds_any_pn", | 1379 | .supply = "vdds_any_pn", |
1380 | }, | 1380 | }, |
1381 | }; | 1381 | }; |
1382 | 1382 | ||
1383 | /* 3.3V LDO */ | 1383 | /* 3.3V LDO */ |
1384 | static struct regulator_consumer_supply tps65217_ldo3_consumers[] = { | 1384 | static struct regulator_consumer_supply tps65217_ldo3_consumers[] = { |
1385 | { | 1385 | { |
1386 | .supply = "vdds_hvx_ldo3_3p3v", | 1386 | .supply = "vdds_hvx_ldo3_3p3v", |
1387 | }, | 1387 | }, |
1388 | { | 1388 | { |
1389 | .supply = "vdda_usb0_3p3v", | 1389 | .supply = "vdda_usb0_3p3v", |
1390 | }, | 1390 | }, |
1391 | }; | 1391 | }; |
1392 | 1392 | ||
1393 | /* 3.3V LDO */ | 1393 | /* 3.3V LDO */ |
1394 | static struct regulator_consumer_supply tps65217_ldo4_consumers[] = { | 1394 | static struct regulator_consumer_supply tps65217_ldo4_consumers[] = { |
1395 | { | 1395 | { |
1396 | .supply = "vdds_hvx_ldo4_3p3v", | 1396 | .supply = "vdds_hvx_ldo4_3p3v", |
1397 | }, | 1397 | }, |
1398 | }; | 1398 | }; |
1399 | 1399 | ||
1400 | /* | 1400 | /* |
1401 | * FIXME: Some BeagleBones reuire a ramp_delay to settle down the set | 1401 | * FIXME: Some BeagleBones reuire a ramp_delay to settle down the set |
1402 | * voltage from 0.95v to 1.25v. By default a minimum of 70msec is set | 1402 | * voltage from 0.95v to 1.25v. By default a minimum of 70msec is set |
1403 | * based on experimentation. This will be removed/modified to exact | 1403 | * based on experimentation. This will be removed/modified to exact |
1404 | * value, once the root cause is known. | 1404 | * value, once the root cause is known. |
1405 | * | 1405 | * |
1406 | * The reason for extended ramp time requirement on BeagleBone is not | 1406 | * The reason for extended ramp time requirement on BeagleBone is not |
1407 | * known and the delay varies from board - board, if the board hangs | 1407 | * known and the delay varies from board - board, if the board hangs |
1408 | * with this 70msec delay then try to increase the value. | 1408 | * with this 70msec delay then try to increase the value. |
1409 | */ | 1409 | */ |
1410 | static struct tps65217_rdelay dcdc2_ramp_delay = { | 1410 | static struct tps65217_rdelay dcdc2_ramp_delay = { |
1411 | .ramp_delay = 70000, | 1411 | .ramp_delay = 70000, |
1412 | }; | 1412 | }; |
1413 | 1413 | ||
1414 | static struct regulator_init_data tps65217_regulator_data[] = { | 1414 | static struct regulator_init_data tps65217_regulator_data[] = { |
1415 | /* dcdc1 */ | 1415 | /* dcdc1 */ |
1416 | { | 1416 | { |
1417 | .constraints = { | 1417 | .constraints = { |
1418 | .min_uV = 900000, | 1418 | .min_uV = 900000, |
1419 | .max_uV = 1800000, | 1419 | .max_uV = 1800000, |
1420 | .boot_on = 1, | 1420 | .boot_on = 1, |
1421 | .always_on = 1, | 1421 | .always_on = 1, |
1422 | }, | 1422 | }, |
1423 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc1_consumers), | 1423 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc1_consumers), |
1424 | .consumer_supplies = tps65217_dcdc1_consumers, | 1424 | .consumer_supplies = tps65217_dcdc1_consumers, |
1425 | }, | 1425 | }, |
1426 | 1426 | ||
1427 | /* dcdc2 */ | 1427 | /* dcdc2 */ |
1428 | { | 1428 | { |
1429 | .constraints = { | 1429 | .constraints = { |
1430 | .min_uV = 900000, | 1430 | .min_uV = 900000, |
1431 | .max_uV = 3300000, | 1431 | .max_uV = 3300000, |
1432 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | | 1432 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | |
1433 | REGULATOR_CHANGE_STATUS), | 1433 | REGULATOR_CHANGE_STATUS), |
1434 | .boot_on = 1, | 1434 | .boot_on = 1, |
1435 | .always_on = 1, | 1435 | .always_on = 1, |
1436 | }, | 1436 | }, |
1437 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc2_consumers), | 1437 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc2_consumers), |
1438 | .consumer_supplies = tps65217_dcdc2_consumers, | 1438 | .consumer_supplies = tps65217_dcdc2_consumers, |
1439 | .driver_data = &dcdc2_ramp_delay, | 1439 | .driver_data = &dcdc2_ramp_delay, |
1440 | }, | 1440 | }, |
1441 | 1441 | ||
1442 | /* dcdc3 */ | 1442 | /* dcdc3 */ |
1443 | { | 1443 | { |
1444 | .constraints = { | 1444 | .constraints = { |
1445 | .min_uV = 900000, | 1445 | .min_uV = 900000, |
1446 | .max_uV = 1500000, | 1446 | .max_uV = 1500000, |
1447 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | | 1447 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | |
1448 | REGULATOR_CHANGE_STATUS), | 1448 | REGULATOR_CHANGE_STATUS), |
1449 | .boot_on = 1, | 1449 | .boot_on = 1, |
1450 | .always_on = 1, | 1450 | .always_on = 1, |
1451 | }, | 1451 | }, |
1452 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc3_consumers), | 1452 | .num_consumer_supplies = ARRAY_SIZE(tps65217_dcdc3_consumers), |
1453 | .consumer_supplies = tps65217_dcdc3_consumers, | 1453 | .consumer_supplies = tps65217_dcdc3_consumers, |
1454 | }, | 1454 | }, |
1455 | 1455 | ||
1456 | /* ldo1 */ | 1456 | /* ldo1 */ |
1457 | { | 1457 | { |
1458 | .constraints = { | 1458 | .constraints = { |
1459 | .min_uV = 1000000, | 1459 | .min_uV = 1000000, |
1460 | .max_uV = 3300000, | 1460 | .max_uV = 3300000, |
1461 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 1461 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, |
1462 | .boot_on = 1, | 1462 | .boot_on = 1, |
1463 | .always_on = 1, | 1463 | .always_on = 1, |
1464 | }, | 1464 | }, |
1465 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo1_consumers), | 1465 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo1_consumers), |
1466 | .consumer_supplies = tps65217_ldo1_consumers, | 1466 | .consumer_supplies = tps65217_ldo1_consumers, |
1467 | }, | 1467 | }, |
1468 | 1468 | ||
1469 | /* ldo2 */ | 1469 | /* ldo2 */ |
1470 | { | 1470 | { |
1471 | .constraints = { | 1471 | .constraints = { |
1472 | .min_uV = 900000, | 1472 | .min_uV = 900000, |
1473 | .max_uV = 3300000, | 1473 | .max_uV = 3300000, |
1474 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | | 1474 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | |
1475 | REGULATOR_CHANGE_STATUS), | 1475 | REGULATOR_CHANGE_STATUS), |
1476 | .boot_on = 1, | 1476 | .boot_on = 1, |
1477 | .always_on = 1, | 1477 | .always_on = 1, |
1478 | }, | 1478 | }, |
1479 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo2_consumers), | 1479 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo2_consumers), |
1480 | .consumer_supplies = tps65217_ldo2_consumers, | 1480 | .consumer_supplies = tps65217_ldo2_consumers, |
1481 | }, | 1481 | }, |
1482 | 1482 | ||
1483 | /* ldo3 */ | 1483 | /* ldo3 */ |
1484 | { | 1484 | { |
1485 | .constraints = { | 1485 | .constraints = { |
1486 | .min_uV = 1800000, | 1486 | .min_uV = 1800000, |
1487 | .max_uV = 3300000, | 1487 | .max_uV = 3300000, |
1488 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | | 1488 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | |
1489 | REGULATOR_CHANGE_STATUS), | 1489 | REGULATOR_CHANGE_STATUS), |
1490 | .boot_on = 1, | 1490 | .boot_on = 1, |
1491 | .always_on = 1, | 1491 | .always_on = 1, |
1492 | }, | 1492 | }, |
1493 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo3_consumers), | 1493 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo3_consumers), |
1494 | .consumer_supplies = tps65217_ldo3_consumers, | 1494 | .consumer_supplies = tps65217_ldo3_consumers, |
1495 | }, | 1495 | }, |
1496 | 1496 | ||
1497 | /* ldo4 */ | 1497 | /* ldo4 */ |
1498 | { | 1498 | { |
1499 | .constraints = { | 1499 | .constraints = { |
1500 | .min_uV = 1800000, | 1500 | .min_uV = 1800000, |
1501 | .max_uV = 3300000, | 1501 | .max_uV = 3300000, |
1502 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | | 1502 | .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE | |
1503 | REGULATOR_CHANGE_STATUS), | 1503 | REGULATOR_CHANGE_STATUS), |
1504 | .boot_on = 1, | 1504 | .boot_on = 1, |
1505 | .always_on = 1, | 1505 | .always_on = 1, |
1506 | }, | 1506 | }, |
1507 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo4_consumers), | 1507 | .num_consumer_supplies = ARRAY_SIZE(tps65217_ldo4_consumers), |
1508 | .consumer_supplies = tps65217_ldo4_consumers, | 1508 | .consumer_supplies = tps65217_ldo4_consumers, |
1509 | }, | 1509 | }, |
1510 | }; | 1510 | }; |
1511 | 1511 | ||
1512 | static struct tps65217_board beaglebone_tps65217_info = { | 1512 | static struct tps65217_board beaglebone_tps65217_info = { |
1513 | .tps65217_init_data = &tps65217_regulator_data[0], | 1513 | .tps65217_init_data = &tps65217_regulator_data[0], |
1514 | .status_off = true, | 1514 | .status_off = true, |
1515 | }; | 1515 | }; |
1516 | 1516 | ||
1517 | static struct lis3lv02d_platform_data lis331dlh_pdata = { | 1517 | static struct lis3lv02d_platform_data lis331dlh_pdata = { |
1518 | .click_flags = LIS3_CLICK_SINGLE_X | | 1518 | .click_flags = LIS3_CLICK_SINGLE_X | |
1519 | LIS3_CLICK_SINGLE_Y | | 1519 | LIS3_CLICK_SINGLE_Y | |
1520 | LIS3_CLICK_SINGLE_Z, | 1520 | LIS3_CLICK_SINGLE_Z, |
1521 | .wakeup_flags = LIS3_WAKEUP_X_LO | LIS3_WAKEUP_X_HI | | 1521 | .wakeup_flags = LIS3_WAKEUP_X_LO | LIS3_WAKEUP_X_HI | |
1522 | LIS3_WAKEUP_Y_LO | LIS3_WAKEUP_Y_HI | | 1522 | LIS3_WAKEUP_Y_LO | LIS3_WAKEUP_Y_HI | |
1523 | LIS3_WAKEUP_Z_LO | LIS3_WAKEUP_Z_HI, | 1523 | LIS3_WAKEUP_Z_LO | LIS3_WAKEUP_Z_HI, |
1524 | .irq_cfg = LIS3_IRQ1_CLICK | LIS3_IRQ2_CLICK, | 1524 | .irq_cfg = LIS3_IRQ1_CLICK | LIS3_IRQ2_CLICK, |
1525 | .wakeup_thresh = 10, | 1525 | .wakeup_thresh = 10, |
1526 | .click_thresh_x = 10, | 1526 | .click_thresh_x = 10, |
1527 | .click_thresh_y = 10, | 1527 | .click_thresh_y = 10, |
1528 | .click_thresh_z = 10, | 1528 | .click_thresh_z = 10, |
1529 | .g_range = 2, | 1529 | .g_range = 2, |
1530 | .st_min_limits[0] = 120, | 1530 | .st_min_limits[0] = 120, |
1531 | .st_min_limits[1] = 120, | 1531 | .st_min_limits[1] = 120, |
1532 | .st_min_limits[2] = 140, | 1532 | .st_min_limits[2] = 140, |
1533 | .st_max_limits[0] = 550, | 1533 | .st_max_limits[0] = 550, |
1534 | .st_max_limits[1] = 550, | 1534 | .st_max_limits[1] = 550, |
1535 | .st_max_limits[2] = 750, | 1535 | .st_max_limits[2] = 750, |
1536 | }; | 1536 | }; |
1537 | 1537 | ||
1538 | static struct i2c_board_info lis331dlh_i2c_boardinfo[] = { | 1538 | static struct i2c_board_info lis331dlh_i2c_boardinfo[] = { |
1539 | { | 1539 | { |
1540 | I2C_BOARD_INFO("lis331dlh", 0x18), | 1540 | I2C_BOARD_INFO("lis331dlh", 0x18), |
1541 | .platform_data = &lis331dlh_pdata, | 1541 | .platform_data = &lis331dlh_pdata, |
1542 | }, | 1542 | }, |
1543 | }; | 1543 | }; |
1544 | 1544 | ||
1545 | static void lis331dlh_init(int evm_id, int profile) | 1545 | static void lis331dlh_init(int evm_id, int profile) |
1546 | { | 1546 | { |
1547 | struct i2c_adapter *adapter; | 1547 | struct i2c_adapter *adapter; |
1548 | struct i2c_client *client; | 1548 | struct i2c_client *client; |
1549 | unsigned int i2c_instance; | 1549 | unsigned int i2c_instance; |
1550 | 1550 | ||
1551 | switch (evm_id) { | 1551 | switch (evm_id) { |
1552 | case GEN_PURP_EVM: | 1552 | case GEN_PURP_EVM: |
1553 | case GEN_PURP_DDR3_EVM: | 1553 | case GEN_PURP_DDR3_EVM: |
1554 | i2c_instance = 2; | 1554 | i2c_instance = 2; |
1555 | break; | 1555 | break; |
1556 | case EVM_SK: | 1556 | case EVM_SK: |
1557 | i2c_instance = 1; | 1557 | i2c_instance = 1; |
1558 | break; | 1558 | break; |
1559 | default: | 1559 | default: |
1560 | pr_err("lis331dlh is not supported on this evm (%d)\n", evm_id); | 1560 | pr_err("lis331dlh is not supported on this evm (%d)\n", evm_id); |
1561 | return; | 1561 | return; |
1562 | } | 1562 | } |
1563 | 1563 | ||
1564 | /* I2C adapter request */ | 1564 | /* I2C adapter request */ |
1565 | adapter = i2c_get_adapter(i2c_instance); | 1565 | adapter = i2c_get_adapter(i2c_instance); |
1566 | if (!adapter) { | 1566 | if (!adapter) { |
1567 | pr_err("failed to get adapter i2c%u\n", i2c_instance); | 1567 | pr_err("failed to get adapter i2c%u\n", i2c_instance); |
1568 | return; | 1568 | return; |
1569 | } | 1569 | } |
1570 | 1570 | ||
1571 | client = i2c_new_device(adapter, lis331dlh_i2c_boardinfo); | 1571 | client = i2c_new_device(adapter, lis331dlh_i2c_boardinfo); |
1572 | if (!client) | 1572 | if (!client) |
1573 | pr_err("failed to register lis331dlh to i2c%u\n", i2c_instance); | 1573 | pr_err("failed to register lis331dlh to i2c%u\n", i2c_instance); |
1574 | 1574 | ||
1575 | i2c_put_adapter(adapter); | 1575 | i2c_put_adapter(adapter); |
1576 | } | 1576 | } |
1577 | 1577 | ||
1578 | static struct i2c_board_info am335x_i2c1_boardinfo[] = { | 1578 | static struct i2c_board_info am335x_i2c1_boardinfo[] = { |
1579 | { | 1579 | { |
1580 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), | 1580 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), |
1581 | }, | 1581 | }, |
1582 | { | 1582 | { |
1583 | I2C_BOARD_INFO("tsl2550", 0x39), | 1583 | I2C_BOARD_INFO("tsl2550", 0x39), |
1584 | }, | 1584 | }, |
1585 | { | 1585 | { |
1586 | I2C_BOARD_INFO("tmp275", 0x48), | 1586 | I2C_BOARD_INFO("tmp275", 0x48), |
1587 | }, | 1587 | }, |
1588 | }; | 1588 | }; |
1589 | 1589 | ||
1590 | static void i2c1_init(int evm_id, int profile) | 1590 | static void i2c1_init(int evm_id, int profile) |
1591 | { | 1591 | { |
1592 | setup_pin_mux(i2c1_pin_mux); | 1592 | setup_pin_mux(i2c1_pin_mux); |
1593 | omap_register_i2c_bus(2, 100, am335x_i2c1_boardinfo, | 1593 | omap_register_i2c_bus(2, 100, am335x_i2c1_boardinfo, |
1594 | ARRAY_SIZE(am335x_i2c1_boardinfo)); | 1594 | ARRAY_SIZE(am335x_i2c1_boardinfo)); |
1595 | return; | 1595 | return; |
1596 | } | 1596 | } |
1597 | 1597 | ||
1598 | static struct i2c_board_info am335x_i2c2_boardinfo[] = { | 1598 | static struct i2c_board_info am335x_i2c2_boardinfo[] = { |
1599 | }; | 1599 | }; |
1600 | 1600 | ||
1601 | static void i2c2_init(int evm_id, int profile) | 1601 | static void i2c2_init(int evm_id, int profile) |
1602 | { | 1602 | { |
1603 | setup_pin_mux(i2c2_pin_mux); | 1603 | setup_pin_mux(i2c2_pin_mux); |
1604 | omap_register_i2c_bus(3, 100, am335x_i2c2_boardinfo, | 1604 | omap_register_i2c_bus(3, 100, am335x_i2c2_boardinfo, |
1605 | ARRAY_SIZE(am335x_i2c2_boardinfo)); | 1605 | ARRAY_SIZE(am335x_i2c2_boardinfo)); |
1606 | return; | 1606 | return; |
1607 | } | 1607 | } |
1608 | 1608 | ||
1609 | /* Setup McASP 1 */ | 1609 | /* Setup McASP 1 */ |
1610 | static void mcasp1_init(int evm_id, int profile) | 1610 | static void mcasp1_init(int evm_id, int profile) |
1611 | { | 1611 | { |
1612 | /* Configure McASP */ | 1612 | /* Configure McASP */ |
1613 | setup_pin_mux(mcasp1_pin_mux); | 1613 | setup_pin_mux(mcasp1_pin_mux); |
1614 | switch (evm_id) { | 1614 | switch (evm_id) { |
1615 | case EVM_SK: | 1615 | case EVM_SK: |
1616 | am335x_register_mcasp(&am335x_evm_sk_snd_data1, 1); | 1616 | am335x_register_mcasp(&am335x_evm_sk_snd_data1, 1); |
1617 | break; | 1617 | break; |
1618 | default: | 1618 | default: |
1619 | am335x_register_mcasp(&am335x_evm_snd_data1, 1); | 1619 | am335x_register_mcasp(&am335x_evm_snd_data1, 1); |
1620 | } | 1620 | } |
1621 | 1621 | ||
1622 | return; | 1622 | return; |
1623 | } | 1623 | } |
1624 | 1624 | ||
1625 | static void mmc1_init(int evm_id, int profile) | 1625 | static void mmc1_init(int evm_id, int profile) |
1626 | { | 1626 | { |
1627 | setup_pin_mux(mmc1_common_pin_mux); | 1627 | setup_pin_mux(mmc1_common_pin_mux); |
1628 | setup_pin_mux(mmc1_dat4_7_pin_mux); | 1628 | setup_pin_mux(mmc1_dat4_7_pin_mux); |
1629 | setup_pin_mux(mmc1_wp_only_pin_mux); | 1629 | setup_pin_mux(mmc1_wp_only_pin_mux); |
1630 | setup_pin_mux(mmc1_cd_only_pin_mux); | 1630 | setup_pin_mux(mmc1_cd_only_pin_mux); |
1631 | 1631 | ||
1632 | am335x_mmc[1].mmc = 2; | 1632 | am335x_mmc[1].mmc = 2; |
1633 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA; | 1633 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA; |
1634 | am335x_mmc[1].gpio_cd = GPIO_TO_PIN(2, 2); | 1634 | am335x_mmc[1].gpio_cd = GPIO_TO_PIN(2, 2); |
1635 | am335x_mmc[1].gpio_wp = GPIO_TO_PIN(1, 29); | 1635 | am335x_mmc[1].gpio_wp = GPIO_TO_PIN(1, 29); |
1636 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ | 1636 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ |
1637 | 1637 | ||
1638 | /* mmc will be initialized when mmc0_init is called */ | 1638 | /* mmc will be initialized when mmc0_init is called */ |
1639 | return; | 1639 | return; |
1640 | } | 1640 | } |
1641 | 1641 | ||
1642 | static void mmc1_wl12xx_init(int evm_id, int profile) | 1642 | static void mmc1_wl12xx_init(int evm_id, int profile) |
1643 | { | 1643 | { |
1644 | setup_pin_mux(mmc1_common_pin_mux); | 1644 | setup_pin_mux(mmc1_common_pin_mux); |
1645 | am335x_mmc[1].mmc = 2; | 1645 | am335x_mmc[1].mmc = 2; |
1646 | am335x_mmc[1].name = "wl1271"; | 1646 | am335x_mmc[1].name = "wl1271"; |
1647 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD; | 1647 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD; |
1648 | am335x_mmc[1].nonremovable = true; | 1648 | am335x_mmc[1].nonremovable = true; |
1649 | am335x_mmc[1].gpio_cd = -EINVAL; | 1649 | am335x_mmc[1].gpio_cd = -EINVAL; |
1650 | am335x_mmc[1].gpio_wp = -EINVAL; | 1650 | am335x_mmc[1].gpio_wp = -EINVAL; |
1651 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ | 1651 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ |
1652 | } | 1652 | } |
1653 | 1653 | ||
1654 | static void mmc2_wl12xx_init(int evm_id, int profile) | 1654 | static void mmc2_wl12xx_init(int evm_id, int profile) |
1655 | { | 1655 | { |
1656 | setup_pin_mux(mmc2_wl12xx_pin_mux); | 1656 | setup_pin_mux(mmc2_wl12xx_pin_mux); |
1657 | 1657 | ||
1658 | am335x_mmc[1].mmc = 3; | 1658 | am335x_mmc[1].mmc = 3; |
1659 | am335x_mmc[1].name = "wl1271"; | 1659 | am335x_mmc[1].name = "wl1271"; |
1660 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD; | 1660 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD; |
1661 | am335x_mmc[1].nonremovable = true; | 1661 | am335x_mmc[1].nonremovable = true; |
1662 | am335x_mmc[1].gpio_cd = -EINVAL; | 1662 | am335x_mmc[1].gpio_cd = -EINVAL; |
1663 | am335x_mmc[1].gpio_wp = -EINVAL; | 1663 | am335x_mmc[1].gpio_wp = -EINVAL; |
1664 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ | 1664 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ |
1665 | 1665 | ||
1666 | /* mmc will be initialized when mmc0_init is called */ | 1666 | /* mmc will be initialized when mmc0_init is called */ |
1667 | return; | 1667 | return; |
1668 | } | 1668 | } |
1669 | 1669 | ||
1670 | static void uart1_wl12xx_init(int evm_id, int profile) | 1670 | static void uart1_wl12xx_init(int evm_id, int profile) |
1671 | { | 1671 | { |
1672 | setup_pin_mux(uart1_wl12xx_pin_mux); | 1672 | setup_pin_mux(uart1_wl12xx_pin_mux); |
1673 | } | 1673 | } |
1674 | 1674 | ||
1675 | static void wl12xx_bluetooth_enable(void) | 1675 | static void wl12xx_bluetooth_enable(void) |
1676 | { | 1676 | { |
1677 | int status = gpio_request(am335xevm_wlan_data.bt_enable_gpio, | 1677 | int status = gpio_request(am335xevm_wlan_data.bt_enable_gpio, |
1678 | "bt_en\n"); | 1678 | "bt_en\n"); |
1679 | if (status < 0) | 1679 | if (status < 0) |
1680 | pr_err("Failed to request gpio for bt_enable"); | 1680 | pr_err("Failed to request gpio for bt_enable"); |
1681 | 1681 | ||
1682 | pr_info("Configure Bluetooth Enable pin...\n"); | 1682 | pr_info("Configure Bluetooth Enable pin...\n"); |
1683 | gpio_direction_output(am335xevm_wlan_data.bt_enable_gpio, 0); | 1683 | gpio_direction_output(am335xevm_wlan_data.bt_enable_gpio, 0); |
1684 | } | 1684 | } |
1685 | 1685 | ||
1686 | static int wl12xx_set_power(struct device *dev, int slot, int on, int vdd) | 1686 | static int wl12xx_set_power(struct device *dev, int slot, int on, int vdd) |
1687 | { | 1687 | { |
1688 | if (on) { | 1688 | if (on) { |
1689 | gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 1); | 1689 | gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 1); |
1690 | mdelay(70); | 1690 | mdelay(70); |
1691 | } else { | 1691 | } else { |
1692 | gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 0); | 1692 | gpio_direction_output(am335xevm_wlan_data.wlan_enable_gpio, 0); |
1693 | } | 1693 | } |
1694 | 1694 | ||
1695 | return 0; | 1695 | return 0; |
1696 | } | 1696 | } |
1697 | 1697 | ||
1698 | static void wl12xx_init(int evm_id, int profile) | 1698 | static void wl12xx_init(int evm_id, int profile) |
1699 | { | 1699 | { |
1700 | struct device *dev; | 1700 | struct device *dev; |
1701 | struct omap_mmc_platform_data *pdata; | 1701 | struct omap_mmc_platform_data *pdata; |
1702 | int ret; | 1702 | int ret; |
1703 | 1703 | ||
1704 | if (evm_id == EVM_SK) { | 1704 | if (evm_id == EVM_SK) { |
1705 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(0, 31); | 1705 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(0, 31); |
1706 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(3, 21); | 1706 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(3, 21); |
1707 | am335xevm_wlan_data.irq = | 1707 | am335xevm_wlan_data.irq = |
1708 | OMAP_GPIO_IRQ(AM335XEVM_SK_WLAN_IRQ_GPIO); | 1708 | OMAP_GPIO_IRQ(AM335XEVM_SK_WLAN_IRQ_GPIO); |
1709 | setup_pin_mux(wl12xx_pin_mux_sk); | 1709 | setup_pin_mux(wl12xx_pin_mux_sk); |
1710 | } else { | 1710 | } else { |
1711 | setup_pin_mux(wl12xx_pin_mux); | 1711 | setup_pin_mux(wl12xx_pin_mux); |
1712 | } | 1712 | } |
1713 | wl12xx_bluetooth_enable(); | 1713 | wl12xx_bluetooth_enable(); |
1714 | 1714 | ||
1715 | if (wl12xx_set_platform_data(&am335xevm_wlan_data)) | 1715 | if (wl12xx_set_platform_data(&am335xevm_wlan_data)) |
1716 | pr_err("error setting wl12xx data\n"); | 1716 | pr_err("error setting wl12xx data\n"); |
1717 | 1717 | ||
1718 | dev = am335x_mmc[1].dev; | 1718 | dev = am335x_mmc[1].dev; |
1719 | if (!dev) { | 1719 | if (!dev) { |
1720 | pr_err("wl12xx mmc device initialization failed\n"); | 1720 | pr_err("wl12xx mmc device initialization failed\n"); |
1721 | goto out; | 1721 | goto out; |
1722 | } | 1722 | } |
1723 | 1723 | ||
1724 | pdata = dev->platform_data; | 1724 | pdata = dev->platform_data; |
1725 | if (!pdata) { | 1725 | if (!pdata) { |
1726 | pr_err("Platfrom data of wl12xx device not set\n"); | 1726 | pr_err("Platfrom data of wl12xx device not set\n"); |
1727 | goto out; | 1727 | goto out; |
1728 | } | 1728 | } |
1729 | 1729 | ||
1730 | ret = gpio_request_one(am335xevm_wlan_data.wlan_enable_gpio, | 1730 | ret = gpio_request_one(am335xevm_wlan_data.wlan_enable_gpio, |
1731 | GPIOF_OUT_INIT_LOW, "wlan_en"); | 1731 | GPIOF_OUT_INIT_LOW, "wlan_en"); |
1732 | if (ret) { | 1732 | if (ret) { |
1733 | pr_err("Error requesting wlan enable gpio: %d\n", ret); | 1733 | pr_err("Error requesting wlan enable gpio: %d\n", ret); |
1734 | goto out; | 1734 | goto out; |
1735 | } | 1735 | } |
1736 | 1736 | ||
1737 | 1737 | ||
1738 | pdata->slots[0].set_power = wl12xx_set_power; | 1738 | pdata->slots[0].set_power = wl12xx_set_power; |
1739 | out: | 1739 | out: |
1740 | return; | 1740 | return; |
1741 | } | 1741 | } |
1742 | 1742 | ||
1743 | static void d_can_init(int evm_id, int profile) | 1743 | static void d_can_init(int evm_id, int profile) |
1744 | { | 1744 | { |
1745 | switch (evm_id) { | 1745 | switch (evm_id) { |
1746 | case IND_AUT_MTR_EVM: | 1746 | case IND_AUT_MTR_EVM: |
1747 | if ((profile == PROFILE_0) || (profile == PROFILE_1)) { | 1747 | if ((profile == PROFILE_0) || (profile == PROFILE_1)) { |
1748 | setup_pin_mux(d_can_ia_pin_mux); | 1748 | setup_pin_mux(d_can_ia_pin_mux); |
1749 | /* Instance Zero */ | 1749 | /* Instance Zero */ |
1750 | am33xx_d_can_init(0); | 1750 | am33xx_d_can_init(0); |
1751 | } | 1751 | } |
1752 | break; | 1752 | break; |
1753 | case GEN_PURP_EVM: | 1753 | case GEN_PURP_EVM: |
1754 | case GEN_PURP_DDR3_EVM: | 1754 | case GEN_PURP_DDR3_EVM: |
1755 | if (profile == PROFILE_1) { | 1755 | if (profile == PROFILE_1) { |
1756 | setup_pin_mux(d_can_gp_pin_mux); | 1756 | setup_pin_mux(d_can_gp_pin_mux); |
1757 | /* Instance One */ | 1757 | /* Instance One */ |
1758 | am33xx_d_can_init(1); | 1758 | am33xx_d_can_init(1); |
1759 | } | 1759 | } |
1760 | break; | 1760 | break; |
1761 | default: | 1761 | default: |
1762 | break; | 1762 | break; |
1763 | } | 1763 | } |
1764 | } | 1764 | } |
1765 | 1765 | ||
1766 | static void mmc0_init(int evm_id, int profile) | 1766 | static void mmc0_init(int evm_id, int profile) |
1767 | { | 1767 | { |
1768 | switch (evm_id) { | 1768 | switch (evm_id) { |
1769 | case BEAGLE_BONE_A3: | 1769 | case BEAGLE_BONE_A3: |
1770 | case BEAGLE_BONE_OLD: | 1770 | case BEAGLE_BONE_OLD: |
1771 | case EVM_SK: | 1771 | case EVM_SK: |
1772 | setup_pin_mux(mmc0_common_pin_mux); | 1772 | setup_pin_mux(mmc0_common_pin_mux); |
1773 | setup_pin_mux(mmc0_cd_only_pin_mux); | 1773 | setup_pin_mux(mmc0_cd_only_pin_mux); |
1774 | break; | 1774 | break; |
1775 | default: | 1775 | default: |
1776 | setup_pin_mux(mmc0_common_pin_mux); | 1776 | setup_pin_mux(mmc0_common_pin_mux); |
1777 | setup_pin_mux(mmc0_cd_only_pin_mux); | 1777 | setup_pin_mux(mmc0_cd_only_pin_mux); |
1778 | setup_pin_mux(mmc0_wp_only_pin_mux); | 1778 | setup_pin_mux(mmc0_wp_only_pin_mux); |
1779 | break; | 1779 | break; |
1780 | } | 1780 | } |
1781 | 1781 | ||
1782 | omap2_hsmmc_init(am335x_mmc); | 1782 | omap2_hsmmc_init(am335x_mmc); |
1783 | return; | 1783 | return; |
1784 | } | 1784 | } |
1785 | 1785 | ||
1786 | static struct i2c_board_info tps65217_i2c_boardinfo[] = { | 1786 | static struct i2c_board_info tps65217_i2c_boardinfo[] = { |
1787 | { | 1787 | { |
1788 | I2C_BOARD_INFO("tps65217", TPS65217_I2C_ID), | 1788 | I2C_BOARD_INFO("tps65217", TPS65217_I2C_ID), |
1789 | .platform_data = &beaglebone_tps65217_info, | 1789 | .platform_data = &beaglebone_tps65217_info, |
1790 | }, | 1790 | }, |
1791 | }; | 1791 | }; |
1792 | 1792 | ||
1793 | static void tps65217_init(int evm_id, int profile) | 1793 | static void tps65217_init(int evm_id, int profile) |
1794 | { | 1794 | { |
1795 | struct i2c_adapter *adapter; | 1795 | struct i2c_adapter *adapter; |
1796 | struct i2c_client *client; | 1796 | struct i2c_client *client; |
1797 | struct device *mpu_dev; | 1797 | struct device *mpu_dev; |
1798 | struct tps65217 *tps; | 1798 | struct tps65217 *tps; |
1799 | unsigned int val; | 1799 | unsigned int val; |
1800 | int ret; | 1800 | int ret; |
1801 | 1801 | ||
1802 | mpu_dev = omap_device_get_by_hwmod_name("mpu"); | 1802 | mpu_dev = omap_device_get_by_hwmod_name("mpu"); |
1803 | if (!mpu_dev) | 1803 | if (!mpu_dev) |
1804 | pr_warning("%s: unable to get the mpu device\n", __func__); | 1804 | pr_warning("%s: unable to get the mpu device\n", __func__); |
1805 | 1805 | ||
1806 | /* I2C1 adapter request */ | 1806 | /* I2C1 adapter request */ |
1807 | adapter = i2c_get_adapter(1); | 1807 | adapter = i2c_get_adapter(1); |
1808 | if (!adapter) { | 1808 | if (!adapter) { |
1809 | pr_err("failed to get adapter i2c1\n"); | 1809 | pr_err("failed to get adapter i2c1\n"); |
1810 | return; | 1810 | return; |
1811 | } | 1811 | } |
1812 | 1812 | ||
1813 | client = i2c_new_device(adapter, tps65217_i2c_boardinfo); | 1813 | client = i2c_new_device(adapter, tps65217_i2c_boardinfo); |
1814 | if (!client) | 1814 | if (!client) |
1815 | pr_err("failed to register tps65217 to i2c1\n"); | 1815 | pr_err("failed to register tps65217 to i2c1\n"); |
1816 | 1816 | ||
1817 | i2c_put_adapter(adapter); | 1817 | i2c_put_adapter(adapter); |
1818 | 1818 | ||
1819 | tps = (struct tps65217 *)i2c_get_clientdata(client); | 1819 | tps = (struct tps65217 *)i2c_get_clientdata(client); |
1820 | 1820 | ||
1821 | ret = tps65217_reg_read(tps, TPS65217_REG_STATUS, &val); | 1821 | ret = tps65217_reg_read(tps, TPS65217_REG_STATUS, &val); |
1822 | if (ret) { | 1822 | if (ret) { |
1823 | pr_err("failed to read tps65217 status reg\n"); | 1823 | pr_err("failed to read tps65217 status reg\n"); |
1824 | return; | 1824 | return; |
1825 | } | 1825 | } |
1826 | 1826 | ||
1827 | if (!(val & TPS65217_STATUS_ACPWR)) { | 1827 | if (!(val & TPS65217_STATUS_ACPWR)) { |
1828 | /* If powered by USB then disable OPP120 and OPPTURBO */ | 1828 | /* If powered by USB then disable OPP120 and OPPTURBO */ |
1829 | pr_info("Maximum current provided by the USB port is 500mA" | 1829 | pr_info("Maximum current provided by the USB port is 500mA" |
1830 | " which is not sufficient\nwhen operating @OPP120 and" | 1830 | " which is not sufficient\nwhen operating @OPP120 and" |
1831 | " OPPTURBO. The current requirement for some\nuse-cases" | 1831 | " OPPTURBO. The current requirement for some\nuse-cases" |
1832 | " using OPP100 might also exceed the maximum current" | 1832 | " using OPP100 might also exceed the maximum current" |
1833 | " that the\nUSB port can provide. Unless you are fully" | 1833 | " that the\nUSB port can provide. Unless you are fully" |
1834 | " confident that the current\nrequirements for OPP100" | 1834 | " confident that the current\nrequirements for OPP100" |
1835 | " use-case don't exceed the USB limits, switching\nto" | 1835 | " use-case don't exceed the USB limits, switching\nto" |
1836 | " AC power is recommended.\n"); | 1836 | " AC power is recommended.\n"); |
1837 | opp_disable(mpu_dev, 600000000); | 1837 | opp_disable(mpu_dev, 600000000); |
1838 | opp_disable(mpu_dev, 720000000); | 1838 | opp_disable(mpu_dev, 720000000); |
1839 | } | 1839 | } |
1840 | } | 1840 | } |
1841 | 1841 | ||
1842 | static void mmc0_no_cd_init(int evm_id, int profile) | 1842 | static void mmc0_no_cd_init(int evm_id, int profile) |
1843 | { | 1843 | { |
1844 | setup_pin_mux(mmc0_common_pin_mux); | 1844 | setup_pin_mux(mmc0_common_pin_mux); |
1845 | setup_pin_mux(mmc0_wp_only_pin_mux); | 1845 | setup_pin_mux(mmc0_wp_only_pin_mux); |
1846 | 1846 | ||
1847 | omap2_hsmmc_init(am335x_mmc); | 1847 | omap2_hsmmc_init(am335x_mmc); |
1848 | return; | 1848 | return; |
1849 | } | 1849 | } |
1850 | 1850 | ||
1851 | /* Configure GPIOs for GPIO Keys */ | 1851 | /* Configure GPIOs for GPIO Keys */ |
1852 | static struct gpio_keys_button am335x_evm_gpio_buttons[] = { | 1852 | static struct gpio_keys_button am335x_evm_gpio_buttons[] = { |
1853 | { | 1853 | { |
1854 | .code = BTN_0, | 1854 | .code = BTN_0, |
1855 | .gpio = GPIO_TO_PIN(2, 3), | 1855 | .gpio = GPIO_TO_PIN(2, 3), |
1856 | .desc = "SW1", | 1856 | .desc = "SW1", |
1857 | }, | 1857 | }, |
1858 | { | 1858 | { |
1859 | .code = BTN_1, | 1859 | .code = BTN_1, |
1860 | .gpio = GPIO_TO_PIN(2, 2), | 1860 | .gpio = GPIO_TO_PIN(2, 2), |
1861 | .desc = "SW2", | 1861 | .desc = "SW2", |
1862 | }, | 1862 | }, |
1863 | { | 1863 | { |
1864 | .code = BTN_2, | 1864 | .code = BTN_2, |
1865 | .gpio = GPIO_TO_PIN(0, 30), | 1865 | .gpio = GPIO_TO_PIN(0, 30), |
1866 | .desc = "SW3", | 1866 | .desc = "SW3", |
1867 | .wakeup = 1, | 1867 | .wakeup = 1, |
1868 | }, | 1868 | }, |
1869 | { | 1869 | { |
1870 | .code = BTN_3, | 1870 | .code = BTN_3, |
1871 | .gpio = GPIO_TO_PIN(2, 5), | 1871 | .gpio = GPIO_TO_PIN(2, 5), |
1872 | .desc = "SW4", | 1872 | .desc = "SW4", |
1873 | }, | 1873 | }, |
1874 | }; | 1874 | }; |
1875 | 1875 | ||
1876 | static struct gpio_keys_platform_data am335x_evm_gpio_key_info = { | 1876 | static struct gpio_keys_platform_data am335x_evm_gpio_key_info = { |
1877 | .buttons = am335x_evm_gpio_buttons, | 1877 | .buttons = am335x_evm_gpio_buttons, |
1878 | .nbuttons = ARRAY_SIZE(am335x_evm_gpio_buttons), | 1878 | .nbuttons = ARRAY_SIZE(am335x_evm_gpio_buttons), |
1879 | }; | 1879 | }; |
1880 | 1880 | ||
1881 | static struct platform_device am335x_evm_gpio_keys = { | 1881 | static struct platform_device am335x_evm_gpio_keys = { |
1882 | .name = "gpio-keys", | 1882 | .name = "gpio-keys", |
1883 | .id = -1, | 1883 | .id = -1, |
1884 | .dev = { | 1884 | .dev = { |
1885 | .platform_data = &am335x_evm_gpio_key_info, | 1885 | .platform_data = &am335x_evm_gpio_key_info, |
1886 | }, | 1886 | }, |
1887 | }; | 1887 | }; |
1888 | 1888 | ||
1889 | static void gpio_keys_init(int evm_id, int profile) | 1889 | static void gpio_keys_init(int evm_id, int profile) |
1890 | { | 1890 | { |
1891 | int err; | 1891 | int err; |
1892 | 1892 | ||
1893 | setup_pin_mux(gpio_keys_pin_mux); | 1893 | setup_pin_mux(gpio_keys_pin_mux); |
1894 | err = platform_device_register(&am335x_evm_gpio_keys); | 1894 | err = platform_device_register(&am335x_evm_gpio_keys); |
1895 | if (err) | 1895 | if (err) |
1896 | pr_err("failed to register gpio key device\n"); | 1896 | pr_err("failed to register gpio key device\n"); |
1897 | } | 1897 | } |
1898 | 1898 | ||
1899 | static struct gpio_led gpio_leds[] = { | 1899 | static struct gpio_led gpio_leds[] = { |
1900 | { | 1900 | { |
1901 | .name = "am335x:EVM_SK:usr0", | 1901 | .name = "am335x:EVM_SK:usr0", |
1902 | .gpio = GPIO_TO_PIN(1, 4), /* D1 */ | 1902 | .gpio = GPIO_TO_PIN(1, 4), /* D1 */ |
1903 | }, | 1903 | }, |
1904 | { | 1904 | { |
1905 | .name = "am335x:EVM_SK:usr1", | 1905 | .name = "am335x:EVM_SK:usr1", |
1906 | .gpio = GPIO_TO_PIN(1, 5), /* D2 */ | 1906 | .gpio = GPIO_TO_PIN(1, 5), /* D2 */ |
1907 | }, | 1907 | }, |
1908 | { | 1908 | { |
1909 | .name = "am335x:EVM_SK:mmc0", | 1909 | .name = "am335x:EVM_SK:mmc0", |
1910 | .gpio = GPIO_TO_PIN(1, 7), /* D3 */ | 1910 | .gpio = GPIO_TO_PIN(1, 7), /* D3 */ |
1911 | .default_trigger = "mmc0", | 1911 | .default_trigger = "mmc0", |
1912 | }, | 1912 | }, |
1913 | { | 1913 | { |
1914 | .name = "am335x:EVM_SK:heartbeat", | 1914 | .name = "am335x:EVM_SK:heartbeat", |
1915 | .gpio = GPIO_TO_PIN(1, 6), /* D4 */ | 1915 | .gpio = GPIO_TO_PIN(1, 6), /* D4 */ |
1916 | .default_trigger = "heartbeat", | 1916 | .default_trigger = "heartbeat", |
1917 | }, | 1917 | }, |
1918 | }; | 1918 | }; |
1919 | 1919 | ||
1920 | static struct gpio_led_platform_data gpio_led_info = { | 1920 | static struct gpio_led_platform_data gpio_led_info = { |
1921 | .leds = gpio_leds, | 1921 | .leds = gpio_leds, |
1922 | .num_leds = ARRAY_SIZE(gpio_leds), | 1922 | .num_leds = ARRAY_SIZE(gpio_leds), |
1923 | }; | 1923 | }; |
1924 | 1924 | ||
1925 | static struct platform_device leds_gpio = { | 1925 | static struct platform_device leds_gpio = { |
1926 | .name = "leds-gpio", | 1926 | .name = "leds-gpio", |
1927 | .id = -1, | 1927 | .id = -1, |
1928 | .dev = { | 1928 | .dev = { |
1929 | .platform_data = &gpio_led_info, | 1929 | .platform_data = &gpio_led_info, |
1930 | }, | 1930 | }, |
1931 | }; | 1931 | }; |
1932 | 1932 | ||
1933 | static void gpio_led_init(int evm_id, int profile) | 1933 | static void gpio_led_init(int evm_id, int profile) |
1934 | { | 1934 | { |
1935 | int err; | 1935 | int err; |
1936 | 1936 | ||
1937 | setup_pin_mux(gpio_led_mux); | 1937 | setup_pin_mux(gpio_led_mux); |
1938 | err = platform_device_register(&leds_gpio); | 1938 | err = platform_device_register(&leds_gpio); |
1939 | if (err) | 1939 | if (err) |
1940 | pr_err("failed to register gpio led device\n"); | 1940 | pr_err("failed to register gpio led device\n"); |
1941 | } | 1941 | } |
1942 | 1942 | ||
1943 | /* setup spi0 */ | 1943 | /* setup spi0 */ |
1944 | static void spi0_init(int evm_id, int profile) | 1944 | static void spi0_init(int evm_id, int profile) |
1945 | { | 1945 | { |
1946 | setup_pin_mux(spi0_pin_mux); | 1946 | setup_pin_mux(spi0_pin_mux); |
1947 | spi_register_board_info(am335x_spi0_slave_info, | 1947 | spi_register_board_info(am335x_spi0_slave_info, |
1948 | ARRAY_SIZE(am335x_spi0_slave_info)); | 1948 | ARRAY_SIZE(am335x_spi0_slave_info)); |
1949 | return; | 1949 | return; |
1950 | } | 1950 | } |
1951 | 1951 | ||
1952 | /* setup spi1 */ | 1952 | /* setup spi1 */ |
1953 | static void spi1_init(int evm_id, int profile) | 1953 | static void spi1_init(int evm_id, int profile) |
1954 | { | 1954 | { |
1955 | setup_pin_mux(spi1_pin_mux); | 1955 | setup_pin_mux(spi1_pin_mux); |
1956 | spi_register_board_info(am335x_spi1_slave_info, | 1956 | spi_register_board_info(am335x_spi1_slave_info, |
1957 | ARRAY_SIZE(am335x_spi1_slave_info)); | 1957 | ARRAY_SIZE(am335x_spi1_slave_info)); |
1958 | return; | 1958 | return; |
1959 | } | 1959 | } |
1960 | 1960 | ||
1961 | 1961 | ||
1962 | static int beaglebone_phy_fixup(struct phy_device *phydev) | 1962 | static int beaglebone_phy_fixup(struct phy_device *phydev) |
1963 | { | 1963 | { |
1964 | phydev->supported &= ~(SUPPORTED_100baseT_Half | | 1964 | phydev->supported &= ~(SUPPORTED_100baseT_Half | |
1965 | SUPPORTED_100baseT_Full); | 1965 | SUPPORTED_100baseT_Full); |
1966 | 1966 | ||
1967 | return 0; | 1967 | return 0; |
1968 | } | 1968 | } |
1969 | 1969 | ||
1970 | static void profibus_init(int evm_id, int profile) | 1970 | static void profibus_init(int evm_id, int profile) |
1971 | { | 1971 | { |
1972 | setup_pin_mux(profibus_pin_mux); | 1972 | setup_pin_mux(profibus_pin_mux); |
1973 | return; | 1973 | return; |
1974 | } | 1974 | } |
1975 | 1975 | ||
1976 | static struct omap_rtc_pdata am335x_rtc_info = { | 1976 | static struct omap_rtc_pdata am335x_rtc_info = { |
1977 | .pm_off = false, | 1977 | .pm_off = false, |
1978 | .wakeup_capable = 0, | 1978 | .wakeup_capable = 0, |
1979 | }; | 1979 | }; |
1980 | 1980 | ||
1981 | static void am335x_rtc_init(int evm_id, int profile) | 1981 | static void am335x_rtc_init(int evm_id, int profile) |
1982 | { | 1982 | { |
1983 | void __iomem *base; | 1983 | void __iomem *base; |
1984 | struct clk *clk; | 1984 | struct clk *clk; |
1985 | struct omap_hwmod *oh; | 1985 | struct omap_hwmod *oh; |
1986 | struct platform_device *pdev; | 1986 | struct platform_device *pdev; |
1987 | char *dev_name = "am33xx-rtc"; | 1987 | char *dev_name = "am33xx-rtc"; |
1988 | 1988 | ||
1989 | clk = clk_get(NULL, "rtc_fck"); | 1989 | clk = clk_get(NULL, "rtc_fck"); |
1990 | if (IS_ERR(clk)) { | 1990 | if (IS_ERR(clk)) { |
1991 | pr_err("rtc : Failed to get RTC clock\n"); | 1991 | pr_err("rtc : Failed to get RTC clock\n"); |
1992 | return; | 1992 | return; |
1993 | } | 1993 | } |
1994 | 1994 | ||
1995 | if (clk_enable(clk)) { | 1995 | if (clk_enable(clk)) { |
1996 | pr_err("rtc: Clock Enable Failed\n"); | 1996 | pr_err("rtc: Clock Enable Failed\n"); |
1997 | return; | 1997 | return; |
1998 | } | 1998 | } |
1999 | 1999 | ||
2000 | base = ioremap(AM33XX_RTC_BASE, SZ_4K); | 2000 | base = ioremap(AM33XX_RTC_BASE, SZ_4K); |
2001 | 2001 | ||
2002 | if (WARN_ON(!base)) | 2002 | if (WARN_ON(!base)) |
2003 | return; | 2003 | return; |
2004 | 2004 | ||
2005 | /* Unlock the rtc's registers */ | 2005 | /* Unlock the rtc's registers */ |
2006 | writel(0x83e70b13, base + 0x6c); | 2006 | writel(0x83e70b13, base + 0x6c); |
2007 | writel(0x95a4f1e0, base + 0x70); | 2007 | writel(0x95a4f1e0, base + 0x70); |
2008 | 2008 | ||
2009 | /* | 2009 | /* |
2010 | * Enable the 32K OSc | 2010 | * Enable the 32K OSc |
2011 | * TODO: Need a better way to handle this | 2011 | * TODO: Need a better way to handle this |
2012 | * Since we want the clock to be running before mmc init | 2012 | * Since we want the clock to be running before mmc init |
2013 | * we need to do it before the rtc probe happens | 2013 | * we need to do it before the rtc probe happens |
2014 | */ | 2014 | */ |
2015 | writel(0x48, base + 0x54); | 2015 | writel(0x48, base + 0x54); |
2016 | 2016 | ||
2017 | iounmap(base); | 2017 | iounmap(base); |
2018 | 2018 | ||
2019 | switch (evm_id) { | 2019 | switch (evm_id) { |
2020 | case BEAGLE_BONE_A3: | 2020 | case BEAGLE_BONE_A3: |
2021 | case BEAGLE_BONE_OLD: | 2021 | case BEAGLE_BONE_OLD: |
2022 | am335x_rtc_info.pm_off = true; | 2022 | am335x_rtc_info.pm_off = true; |
2023 | break; | 2023 | break; |
2024 | default: | 2024 | default: |
2025 | break; | 2025 | break; |
2026 | } | 2026 | } |
2027 | 2027 | ||
2028 | clk_disable(clk); | 2028 | clk_disable(clk); |
2029 | clk_put(clk); | 2029 | clk_put(clk); |
2030 | 2030 | ||
2031 | if (omap_rev() >= AM335X_REV_ES2_0) | 2031 | if (omap_rev() >= AM335X_REV_ES2_0) |
2032 | am335x_rtc_info.wakeup_capable = 1; | 2032 | am335x_rtc_info.wakeup_capable = 1; |
2033 | 2033 | ||
2034 | oh = omap_hwmod_lookup("rtc"); | 2034 | oh = omap_hwmod_lookup("rtc"); |
2035 | if (!oh) { | 2035 | if (!oh) { |
2036 | pr_err("could not look up %s\n", "rtc"); | 2036 | pr_err("could not look up %s\n", "rtc"); |
2037 | return; | 2037 | return; |
2038 | } | 2038 | } |
2039 | 2039 | ||
2040 | pdev = omap_device_build(dev_name, -1, oh, &am335x_rtc_info, | 2040 | pdev = omap_device_build(dev_name, -1, oh, &am335x_rtc_info, |
2041 | sizeof(struct omap_rtc_pdata), NULL, 0, 0); | 2041 | sizeof(struct omap_rtc_pdata), NULL, 0, 0); |
2042 | WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", | 2042 | WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", |
2043 | dev_name, oh->name); | 2043 | dev_name, oh->name); |
2044 | } | 2044 | } |
2045 | 2045 | ||
2046 | /* Enable clkout2 */ | 2046 | /* Enable clkout2 */ |
2047 | static struct pinmux_config clkout2_pin_mux[] = { | 2047 | static struct pinmux_config clkout2_pin_mux[] = { |
2048 | {"xdma_event_intr1.clkout2", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT}, | 2048 | {"xdma_event_intr1.clkout2", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT}, |
2049 | {NULL, 0}, | 2049 | {NULL, 0}, |
2050 | }; | 2050 | }; |
2051 | 2051 | ||
2052 | static void clkout2_enable(int evm_id, int profile) | 2052 | static void clkout2_enable(int evm_id, int profile) |
2053 | { | 2053 | { |
2054 | struct clk *ck_32; | 2054 | struct clk *ck_32; |
2055 | 2055 | ||
2056 | ck_32 = clk_get(NULL, "clkout2_ck"); | 2056 | ck_32 = clk_get(NULL, "clkout2_ck"); |
2057 | if (IS_ERR(ck_32)) { | 2057 | if (IS_ERR(ck_32)) { |
2058 | pr_err("Cannot clk_get ck_32\n"); | 2058 | pr_err("Cannot clk_get ck_32\n"); |
2059 | return; | 2059 | return; |
2060 | } | 2060 | } |
2061 | 2061 | ||
2062 | clk_enable(ck_32); | 2062 | clk_enable(ck_32); |
2063 | 2063 | ||
2064 | setup_pin_mux(clkout2_pin_mux); | 2064 | setup_pin_mux(clkout2_pin_mux); |
2065 | } | 2065 | } |
2066 | 2066 | ||
2067 | static void sgx_init(int evm_id, int profile) | 2067 | static void sgx_init(int evm_id, int profile) |
2068 | { | 2068 | { |
2069 | if (omap3_has_sgx()) { | 2069 | if (omap3_has_sgx()) { |
2070 | am33xx_gpu_init(); | 2070 | am33xx_gpu_init(); |
2071 | } | 2071 | } |
2072 | } | 2072 | } |
2073 | /* General Purpose EVM */ | 2073 | /* General Purpose EVM */ |
2074 | static struct evm_dev_cfg gen_purp_evm_dev_cfg[] = { | 2074 | static struct evm_dev_cfg gen_purp_evm_dev_cfg[] = { |
2075 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2075 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2076 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2076 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2077 | {enable_ecap0, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 2077 | {enable_ecap0, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
2078 | PROFILE_2 | PROFILE_7) }, | 2078 | PROFILE_2 | PROFILE_7) }, |
2079 | {lcdc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 2079 | {lcdc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
2080 | PROFILE_2 | PROFILE_7) }, | 2080 | PROFILE_2 | PROFILE_7) }, |
2081 | {mfd_tscadc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 2081 | {mfd_tscadc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
2082 | PROFILE_2 | PROFILE_7) }, | 2082 | PROFILE_2 | PROFILE_7) }, |
2083 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2083 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2084 | {rgmii2_init, DEV_ON_DGHTR_BRD, (PROFILE_1 | PROFILE_2 | | 2084 | {rgmii2_init, DEV_ON_DGHTR_BRD, (PROFILE_1 | PROFILE_2 | |
2085 | PROFILE_4 | PROFILE_6) }, | 2085 | PROFILE_4 | PROFILE_6) }, |
2086 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2086 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2087 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2087 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2088 | {evm_nand_init, DEV_ON_DGHTR_BRD, | 2088 | {evm_nand_init, DEV_ON_DGHTR_BRD, |
2089 | (PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3)}, | 2089 | (PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3)}, |
2090 | {i2c1_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, | 2090 | {i2c1_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, |
2091 | {lis331dlh_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, | 2091 | {lis331dlh_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, |
2092 | {mcasp1_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_3 | PROFILE_7)}, | 2092 | {mcasp1_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_3 | PROFILE_7)}, |
2093 | {mmc1_init, DEV_ON_DGHTR_BRD, PROFILE_2}, | 2093 | {mmc1_init, DEV_ON_DGHTR_BRD, PROFILE_2}, |
2094 | {mmc2_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | | 2094 | {mmc2_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | |
2095 | PROFILE_5)}, | 2095 | PROFILE_5)}, |
2096 | {mmc0_init, DEV_ON_BASEBOARD, (PROFILE_ALL & ~PROFILE_5)}, | 2096 | {mmc0_init, DEV_ON_BASEBOARD, (PROFILE_ALL & ~PROFILE_5)}, |
2097 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_5}, | 2097 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_5}, |
2098 | {spi0_init, DEV_ON_DGHTR_BRD, PROFILE_2}, | 2098 | {spi0_init, DEV_ON_DGHTR_BRD, PROFILE_2}, |
2099 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | | 2099 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | |
2100 | PROFILE_5)}, | 2100 | PROFILE_5)}, |
2101 | {wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | PROFILE_5)}, | 2101 | {wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | PROFILE_5)}, |
2102 | {d_can_init, DEV_ON_DGHTR_BRD, PROFILE_1}, | 2102 | {d_can_init, DEV_ON_DGHTR_BRD, PROFILE_1}, |
2103 | {matrix_keypad_init, DEV_ON_DGHTR_BRD, PROFILE_0}, | 2103 | {matrix_keypad_init, DEV_ON_DGHTR_BRD, PROFILE_0}, |
2104 | {volume_keys_init, DEV_ON_DGHTR_BRD, PROFILE_0}, | 2104 | {volume_keys_init, DEV_ON_DGHTR_BRD, PROFILE_0}, |
2105 | {uart2_init, DEV_ON_DGHTR_BRD, PROFILE_3}, | 2105 | {uart2_init, DEV_ON_DGHTR_BRD, PROFILE_3}, |
2106 | {haptics_init, DEV_ON_DGHTR_BRD, (PROFILE_4)}, | 2106 | {haptics_init, DEV_ON_DGHTR_BRD, (PROFILE_4)}, |
2107 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2107 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2108 | {NULL, 0, 0}, | 2108 | {NULL, 0, 0}, |
2109 | }; | 2109 | }; |
2110 | 2110 | ||
2111 | /* Industrial Auto Motor Control EVM */ | 2111 | /* Industrial Auto Motor Control EVM */ |
2112 | static struct evm_dev_cfg ind_auto_mtrl_evm_dev_cfg[] = { | 2112 | static struct evm_dev_cfg ind_auto_mtrl_evm_dev_cfg[] = { |
2113 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2113 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2114 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2114 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2115 | {mii1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 2115 | {mii1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
2116 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2116 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2117 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2117 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2118 | {profibus_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 2118 | {profibus_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
2119 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 2119 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
2120 | {spi1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 2120 | {spi1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
2121 | {uart3_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 2121 | {uart3_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
2122 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2122 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2123 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2123 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2124 | {NULL, 0, 0}, | 2124 | {NULL, 0, 0}, |
2125 | }; | 2125 | }; |
2126 | 2126 | ||
2127 | /* Beaglebone < Rev A3 */ | 2127 | /* Beaglebone < Rev A3 */ |
2128 | static struct evm_dev_cfg beaglebone_old_dev_cfg[] = { | 2128 | static struct evm_dev_cfg beaglebone_old_dev_cfg[] = { |
2129 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2129 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2130 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2130 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2131 | {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2131 | {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2132 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2132 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2133 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2133 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2134 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2134 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2135 | {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2135 | {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2136 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2136 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2137 | {NULL, 0, 0}, | 2137 | {NULL, 0, 0}, |
2138 | }; | 2138 | }; |
2139 | 2139 | ||
2140 | /* Beaglebone Rev A3 and after */ | 2140 | /* Beaglebone Rev A3 and after */ |
2141 | static struct evm_dev_cfg beaglebone_dev_cfg[] = { | 2141 | static struct evm_dev_cfg beaglebone_dev_cfg[] = { |
2142 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2142 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2143 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2143 | {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2144 | {tps65217_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2144 | {tps65217_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2145 | {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2145 | {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2146 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2146 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2147 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2147 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2148 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2148 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2149 | {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2149 | {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2150 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 2150 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
2151 | {NULL, 0, 0}, | 2151 | {NULL, 0, 0}, |
2152 | }; | 2152 | }; |
2153 | 2153 | ||
2154 | /* EVM - Starter Kit */ | 2154 | /* EVM - Starter Kit */ |
2155 | static struct evm_dev_cfg evm_sk_dev_cfg[] = { | 2155 | static struct evm_dev_cfg evm_sk_dev_cfg[] = { |
2156 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2156 | {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2157 | {mmc1_wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2157 | {mmc1_wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2158 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2158 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2159 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2159 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2160 | {rgmii2_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2160 | {rgmii2_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2161 | {lcdc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2161 | {lcdc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2162 | {enable_ecap2, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2162 | {enable_ecap2, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2163 | {mfd_tscadc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2163 | {mfd_tscadc_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2164 | {gpio_keys_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2164 | {gpio_keys_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2165 | {gpio_led_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2165 | {gpio_led_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2166 | {lis331dlh_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2166 | {lis331dlh_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2167 | {mcasp1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2167 | {mcasp1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2168 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2168 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2169 | {wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2169 | {wl12xx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2170 | {gpio_ddr_vtt_enb_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2170 | {gpio_ddr_vtt_enb_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2171 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 2171 | {sgx_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
2172 | {NULL, 0, 0}, | 2172 | {NULL, 0, 0}, |
2173 | }; | 2173 | }; |
2174 | 2174 | ||
2175 | static int am33xx_evm_tx_clk_dly_phy_fixup(struct phy_device *phydev) | 2175 | static int am33xx_evm_tx_clk_dly_phy_fixup(struct phy_device *phydev) |
2176 | { | 2176 | { |
2177 | phy_write(phydev, AR8051_PHY_DEBUG_ADDR_REG, | 2177 | phy_write(phydev, AR8051_PHY_DEBUG_ADDR_REG, |
2178 | AR8051_DEBUG_RGMII_CLK_DLY_REG); | 2178 | AR8051_DEBUG_RGMII_CLK_DLY_REG); |
2179 | phy_write(phydev, AR8051_PHY_DEBUG_DATA_REG, AR8051_RGMII_TX_CLK_DLY); | 2179 | phy_write(phydev, AR8051_PHY_DEBUG_DATA_REG, AR8051_RGMII_TX_CLK_DLY); |
2180 | 2180 | ||
2181 | return 0; | 2181 | return 0; |
2182 | } | 2182 | } |
2183 | 2183 | ||
2184 | #define AM33XX_VDD_MPU_OPP50_UV 1100000 | 2184 | #define AM33XX_VDD_CORE_OPP50_UV 1100000 |
2185 | #define AM33XX_OPP120_FREQ 600000000 | 2185 | #define AM33XX_OPP120_FREQ 600000000 |
2186 | #define AM33XX_OPPTURBO_FREQ 720000000 | 2186 | #define AM33XX_OPPTURBO_FREQ 720000000 |
2187 | 2187 | ||
2188 | #define AM33XX_ES2_0_VDD_MPU_OPP50_UV 950000 | 2188 | #define AM33XX_ES2_0_VDD_CORE_OPP50_UV 950000 |
2189 | #define AM33XX_ES2_0_OPP120_FREQ 720000000 | ||
2189 | #define AM33XX_ES2_0_OPPTURBO_FREQ 800000000 | 2190 | #define AM33XX_ES2_0_OPPTURBO_FREQ 800000000 |
2190 | #define AM33XX_ES2_0_OPPNITRO_FREQ 1000000000 | 2191 | #define AM33XX_ES2_0_OPPNITRO_FREQ 1000000000 |
2191 | 2192 | ||
2192 | #define AM33XX_ES2_1_VDD_MPU_OPP50_UV 950000 | 2193 | #define AM33XX_ES2_1_VDD_CORE_OPP50_UV 950000 |
2194 | #define AM33XX_ES2_1_OPP120_FREQ 720000000 | ||
2193 | #define AM33XX_ES2_1_OPPTURBO_FREQ 800000000 | 2195 | #define AM33XX_ES2_1_OPPTURBO_FREQ 800000000 |
2194 | #define AM33XX_ES2_1_OPPNITRO_FREQ 1000000000 | 2196 | #define AM33XX_ES2_1_OPPNITRO_FREQ 1000000000 |
2195 | 2197 | ||
2196 | static void am335x_opp_update(void) | 2198 | static void am335x_opp_update(void) |
2197 | { | 2199 | { |
2198 | u32 rev; | 2200 | u32 rev; |
2199 | int voltage_uv = 0; | 2201 | int voltage_uv = 0; |
2200 | struct device *core_dev, *mpu_dev; | 2202 | struct device *core_dev, *mpu_dev; |
2201 | struct regulator *core_reg; | 2203 | struct regulator *core_reg; |
2202 | 2204 | ||
2203 | core_dev = omap_device_get_by_hwmod_name("l3_main"); | 2205 | core_dev = omap_device_get_by_hwmod_name("l3_main"); |
2204 | mpu_dev = omap_device_get_by_hwmod_name("mpu"); | 2206 | mpu_dev = omap_device_get_by_hwmod_name("mpu"); |
2205 | 2207 | ||
2206 | if (!mpu_dev || !core_dev) { | 2208 | if (!mpu_dev || !core_dev) { |
2207 | pr_err("%s: Aiee.. no mpu/core devices? %p %p\n", __func__, | 2209 | pr_err("%s: Aiee.. no mpu/core devices? %p %p\n", __func__, |
2208 | mpu_dev, core_dev); | 2210 | mpu_dev, core_dev); |
2209 | return; | 2211 | return; |
2210 | } | 2212 | } |
2211 | 2213 | ||
2212 | core_reg = regulator_get(core_dev, "vdd_core"); | 2214 | core_reg = regulator_get(core_dev, "vdd_core"); |
2213 | if (IS_ERR(core_reg)) { | 2215 | if (IS_ERR(core_reg)) { |
2214 | pr_err("%s: unable to get core regulator\n", __func__); | 2216 | pr_err("%s: unable to get core regulator\n", __func__); |
2215 | return; | 2217 | return; |
2216 | } | 2218 | } |
2217 | 2219 | ||
2218 | /* | 2220 | /* |
2219 | * Ensure physical regulator is present. | 2221 | * Ensure physical regulator is present. |
2220 | * (e.g. could be dummy regulator.) | 2222 | * (e.g. could be dummy regulator.) |
2221 | */ | 2223 | */ |
2222 | voltage_uv = regulator_get_voltage(core_reg); | 2224 | voltage_uv = regulator_get_voltage(core_reg); |
2223 | if (voltage_uv < 0) { | 2225 | if (voltage_uv < 0) { |
2224 | pr_err("%s: physical regulator not present for core" \ | 2226 | pr_err("%s: physical regulator not present for core" \ |
2225 | "(%d)\n", __func__, voltage_uv); | 2227 | "(%d)\n", __func__, voltage_uv); |
2226 | regulator_put(core_reg); | 2228 | regulator_put(core_reg); |
2227 | return; | 2229 | return; |
2228 | } | 2230 | } |
2229 | 2231 | ||
2230 | pr_debug("%s: core regulator value %d\n", __func__, voltage_uv); | 2232 | pr_debug("%s: core regulator value %d\n", __func__, voltage_uv); |
2231 | if (voltage_uv > 0) { | 2233 | if (voltage_uv > 0) { |
2232 | rev = omap_rev(); | 2234 | rev = omap_rev(); |
2233 | switch (rev) { | 2235 | switch (rev) { |
2234 | case AM335X_REV_ES1_0: | 2236 | case AM335X_REV_ES1_0: |
2235 | if (voltage_uv <= AM33XX_VDD_MPU_OPP50_UV) { | 2237 | if (voltage_uv <= AM33XX_VDD_CORE_OPP50_UV) { |
2236 | /* | 2238 | /* |
2237 | * disable the higher freqs - we dont care about | 2239 | * disable the higher freqs - we dont care about |
2238 | * the results | 2240 | * the results |
2239 | */ | 2241 | */ |
2240 | opp_disable(mpu_dev, AM33XX_OPP120_FREQ); | 2242 | opp_disable(mpu_dev, AM33XX_OPP120_FREQ); |
2241 | opp_disable(mpu_dev, AM33XX_OPPTURBO_FREQ); | 2243 | opp_disable(mpu_dev, AM33XX_OPPTURBO_FREQ); |
2242 | } | 2244 | } |
2243 | break; | 2245 | break; |
2244 | case AM335X_REV_ES2_0: | 2246 | case AM335X_REV_ES2_0: |
2245 | if (voltage_uv <= AM33XX_ES2_0_VDD_MPU_OPP50_UV) { | 2247 | if (voltage_uv <= AM33XX_ES2_0_VDD_CORE_OPP50_UV) { |
2246 | /* | 2248 | /* |
2247 | * disable the higher freqs - we dont care about | 2249 | * disable the higher freqs - we dont care about |
2248 | * the results | 2250 | * the results |
2249 | */ | 2251 | */ |
2250 | opp_disable(mpu_dev, | 2252 | opp_disable(mpu_dev, |
2253 | AM33XX_ES2_0_OPP120_FREQ); | ||
2254 | opp_disable(mpu_dev, | ||
2251 | AM33XX_ES2_0_OPPTURBO_FREQ); | 2255 | AM33XX_ES2_0_OPPTURBO_FREQ); |
2252 | opp_disable(mpu_dev, | 2256 | opp_disable(mpu_dev, |
2253 | AM33XX_ES2_0_OPPNITRO_FREQ); | 2257 | AM33XX_ES2_0_OPPNITRO_FREQ); |
2254 | } | 2258 | } |
2255 | break; | 2259 | break; |
2256 | case AM335X_REV_ES2_1: | 2260 | case AM335X_REV_ES2_1: |
2257 | /* FALLTHROUGH */ | 2261 | /* FALLTHROUGH */ |
2258 | default: | 2262 | default: |
2259 | if (voltage_uv <= AM33XX_ES2_1_VDD_MPU_OPP50_UV) { | 2263 | if (voltage_uv <= AM33XX_ES2_1_VDD_CORE_OPP50_UV) { |
2260 | /* | 2264 | /* |
2261 | * disable the higher freqs - we dont care about | 2265 | * disable the higher freqs - we dont care about |
2262 | * the results | 2266 | * the results |
2263 | */ | 2267 | */ |
2268 | opp_disable(mpu_dev, | ||
2269 | AM33XX_ES2_1_OPP120_FREQ); | ||
2264 | opp_disable(mpu_dev, | 2270 | opp_disable(mpu_dev, |
2265 | AM33XX_ES2_1_OPPTURBO_FREQ); | 2271 | AM33XX_ES2_1_OPPTURBO_FREQ); |
2266 | opp_disable(mpu_dev, | 2272 | opp_disable(mpu_dev, |
2267 | AM33XX_ES2_1_OPPNITRO_FREQ); | 2273 | AM33XX_ES2_1_OPPNITRO_FREQ); |
2268 | } | 2274 | } |
2269 | break; | 2275 | break; |
2270 | } | 2276 | } |
2271 | } | 2277 | } |
2272 | } | 2278 | } |
2273 | 2279 | ||
2274 | static void setup_general_purpose_evm(void) | 2280 | static void setup_general_purpose_evm(void) |
2275 | { | 2281 | { |
2276 | u32 prof_sel = am335x_get_profile_selection(); | 2282 | u32 prof_sel = am335x_get_profile_selection(); |
2277 | u32 boardid = GEN_PURP_EVM; | 2283 | u32 boardid = GEN_PURP_EVM; |
2278 | 2284 | ||
2279 | if (!strncmp("1.5A", config.version, 4)) | 2285 | if (!strncmp("1.5A", config.version, 4)) |
2280 | boardid = GEN_PURP_DDR3_EVM; | 2286 | boardid = GEN_PURP_DDR3_EVM; |
2281 | 2287 | ||
2282 | pr_info("The board is general purpose EVM %sin profile %d\n", | 2288 | pr_info("The board is general purpose EVM %sin profile %d\n", |
2283 | ((boardid == GEN_PURP_DDR3_EVM) ? "with DDR3 " : ""), | 2289 | ((boardid == GEN_PURP_DDR3_EVM) ? "with DDR3 " : ""), |
2284 | prof_sel); | 2290 | prof_sel); |
2285 | 2291 | ||
2286 | _configure_device(boardid, gen_purp_evm_dev_cfg, (1L << prof_sel)); | 2292 | _configure_device(boardid, gen_purp_evm_dev_cfg, (1L << prof_sel)); |
2287 | 2293 | ||
2288 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, NULL); | 2294 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, NULL); |
2289 | /* Atheros Tx Clk delay Phy fixup */ | 2295 | /* Atheros Tx Clk delay Phy fixup */ |
2290 | phy_register_fixup_for_uid(AM335X_EVM_PHY_ID, AM335X_EVM_PHY_MASK, | 2296 | phy_register_fixup_for_uid(AM335X_EVM_PHY_ID, AM335X_EVM_PHY_MASK, |
2291 | am33xx_evm_tx_clk_dly_phy_fixup); | 2297 | am33xx_evm_tx_clk_dly_phy_fixup); |
2292 | } | 2298 | } |
2293 | 2299 | ||
2294 | static void setup_ind_auto_motor_ctrl_evm(void) | 2300 | static void setup_ind_auto_motor_ctrl_evm(void) |
2295 | { | 2301 | { |
2296 | u32 prof_sel = am335x_get_profile_selection(); | 2302 | u32 prof_sel = am335x_get_profile_selection(); |
2297 | 2303 | ||
2298 | pr_info("The board is an industrial automation EVM in profile %d\n", | 2304 | pr_info("The board is an industrial automation EVM in profile %d\n", |
2299 | prof_sel); | 2305 | prof_sel); |
2300 | 2306 | ||
2301 | /* Only Profile 0 is supported */ | 2307 | /* Only Profile 0 is supported */ |
2302 | if ((1L << prof_sel) != PROFILE_0) { | 2308 | if ((1L << prof_sel) != PROFILE_0) { |
2303 | pr_err("AM335X: Only Profile 0 is supported\n"); | 2309 | pr_err("AM335X: Only Profile 0 is supported\n"); |
2304 | pr_err("Assuming profile 0 & continuing\n"); | 2310 | pr_err("Assuming profile 0 & continuing\n"); |
2305 | prof_sel = PROFILE_0; | 2311 | prof_sel = PROFILE_0; |
2306 | } | 2312 | } |
2307 | 2313 | ||
2308 | _configure_device(IND_AUT_MTR_EVM, ind_auto_mtrl_evm_dev_cfg, | 2314 | _configure_device(IND_AUT_MTR_EVM, ind_auto_mtrl_evm_dev_cfg, |
2309 | PROFILE_0); | 2315 | PROFILE_0); |
2310 | 2316 | ||
2311 | am33xx_cpsw_init(AM33XX_CPSW_MODE_MII, "0:1e", "0:00"); | 2317 | am33xx_cpsw_init(AM33XX_CPSW_MODE_MII, "0:1e", "0:00"); |
2312 | } | 2318 | } |
2313 | 2319 | ||
2314 | /* BeagleBone < Rev A3 */ | 2320 | /* BeagleBone < Rev A3 */ |
2315 | static void setup_beaglebone_old(void) | 2321 | static void setup_beaglebone_old(void) |
2316 | { | 2322 | { |
2317 | pr_info("The board is a AM335x Beaglebone < Rev A3.\n"); | 2323 | pr_info("The board is a AM335x Beaglebone < Rev A3.\n"); |
2318 | 2324 | ||
2319 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ | 2325 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ |
2320 | am335x_mmc[0].gpio_wp = -EINVAL; | 2326 | am335x_mmc[0].gpio_wp = -EINVAL; |
2321 | 2327 | ||
2322 | _configure_device(BEAGLE_BONE_OLD, beaglebone_old_dev_cfg, | 2328 | _configure_device(BEAGLE_BONE_OLD, beaglebone_old_dev_cfg, |
2323 | PROFILE_NONE); | 2329 | PROFILE_NONE); |
2324 | 2330 | ||
2325 | phy_register_fixup_for_uid(BBB_PHY_ID, BBB_PHY_MASK, | 2331 | phy_register_fixup_for_uid(BBB_PHY_ID, BBB_PHY_MASK, |
2326 | beaglebone_phy_fixup); | 2332 | beaglebone_phy_fixup); |
2327 | 2333 | ||
2328 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RMII, NULL, NULL); | 2334 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RMII, NULL, NULL); |
2329 | } | 2335 | } |
2330 | 2336 | ||
2331 | /* BeagleBone after Rev A3 */ | 2337 | /* BeagleBone after Rev A3 */ |
2332 | static void setup_beaglebone(void) | 2338 | static void setup_beaglebone(void) |
2333 | { | 2339 | { |
2334 | pr_info("The board is a AM335x Beaglebone.\n"); | 2340 | pr_info("The board is a AM335x Beaglebone.\n"); |
2335 | 2341 | ||
2336 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ | 2342 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ |
2337 | am335x_mmc[0].gpio_wp = -EINVAL; | 2343 | am335x_mmc[0].gpio_wp = -EINVAL; |
2338 | 2344 | ||
2339 | _configure_device(BEAGLE_BONE_A3, beaglebone_dev_cfg, PROFILE_NONE); | 2345 | _configure_device(BEAGLE_BONE_A3, beaglebone_dev_cfg, PROFILE_NONE); |
2340 | 2346 | ||
2341 | /* TPS65217 regulator has full constraints */ | 2347 | /* TPS65217 regulator has full constraints */ |
2342 | regulator_has_full_constraints(); | 2348 | regulator_has_full_constraints(); |
2343 | 2349 | ||
2344 | am33xx_cpsw_init(AM33XX_CPSW_MODE_MII, NULL, NULL); | 2350 | am33xx_cpsw_init(AM33XX_CPSW_MODE_MII, NULL, NULL); |
2345 | } | 2351 | } |
2346 | 2352 | ||
2347 | /* EVM - Starter Kit */ | 2353 | /* EVM - Starter Kit */ |
2348 | static void setup_starterkit(void) | 2354 | static void setup_starterkit(void) |
2349 | { | 2355 | { |
2350 | pr_info("The board is a AM335x Starter Kit.\n"); | 2356 | pr_info("The board is a AM335x Starter Kit.\n"); |
2351 | 2357 | ||
2352 | /* Starter Kit has Micro-SD slot which doesn't have Write Protect pin */ | 2358 | /* Starter Kit has Micro-SD slot which doesn't have Write Protect pin */ |
2353 | am335x_mmc[0].gpio_wp = -EINVAL; | 2359 | am335x_mmc[0].gpio_wp = -EINVAL; |
2354 | 2360 | ||
2355 | _configure_device(EVM_SK, evm_sk_dev_cfg, PROFILE_NONE); | 2361 | _configure_device(EVM_SK, evm_sk_dev_cfg, PROFILE_NONE); |
2356 | 2362 | ||
2357 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, NULL); | 2363 | am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, NULL); |
2358 | /* Atheros Tx Clk delay Phy fixup */ | 2364 | /* Atheros Tx Clk delay Phy fixup */ |
2359 | phy_register_fixup_for_uid(AM335X_EVM_PHY_ID, AM335X_EVM_PHY_MASK, | 2365 | phy_register_fixup_for_uid(AM335X_EVM_PHY_ID, AM335X_EVM_PHY_MASK, |
2360 | am33xx_evm_tx_clk_dly_phy_fixup); | 2366 | am33xx_evm_tx_clk_dly_phy_fixup); |
2361 | } | 2367 | } |
2362 | 2368 | ||
2363 | static void am335x_setup_daughter_board(struct memory_accessor *m, void *c) | 2369 | static void am335x_setup_daughter_board(struct memory_accessor *m, void *c) |
2364 | { | 2370 | { |
2365 | int ret; | 2371 | int ret; |
2366 | 2372 | ||
2367 | /* | 2373 | /* |
2368 | * Read from the EEPROM to see the presence of daughter board. | 2374 | * Read from the EEPROM to see the presence of daughter board. |
2369 | * If present, print the cpld version. | 2375 | * If present, print the cpld version. |
2370 | */ | 2376 | */ |
2371 | 2377 | ||
2372 | ret = m->read(m, (char *)&config1, 0, sizeof(config1)); | 2378 | ret = m->read(m, (char *)&config1, 0, sizeof(config1)); |
2373 | if (ret == sizeof(config1)) { | 2379 | if (ret == sizeof(config1)) { |
2374 | pr_info("Detected a daughter card on AM335x EVM.."); | 2380 | pr_info("Detected a daughter card on AM335x EVM.."); |
2375 | daughter_brd_detected = true; | 2381 | daughter_brd_detected = true; |
2376 | } | 2382 | } |
2377 | else { | 2383 | else { |
2378 | pr_info("No daughter card found\n"); | 2384 | pr_info("No daughter card found\n"); |
2379 | daughter_brd_detected = false; | 2385 | daughter_brd_detected = false; |
2380 | return; | 2386 | return; |
2381 | } | 2387 | } |
2382 | 2388 | ||
2383 | if (!strncmp("CPLD", config1.cpld_ver, 4)) | 2389 | if (!strncmp("CPLD", config1.cpld_ver, 4)) |
2384 | pr_info("CPLD version: %s\n", config1.cpld_ver); | 2390 | pr_info("CPLD version: %s\n", config1.cpld_ver); |
2385 | else | 2391 | else |
2386 | pr_err("Unknown CPLD version found\n"); | 2392 | pr_err("Unknown CPLD version found\n"); |
2387 | } | 2393 | } |
2388 | 2394 | ||
2389 | static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context) | 2395 | static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context) |
2390 | { | 2396 | { |
2391 | int ret; | 2397 | int ret; |
2392 | char tmp[10]; | 2398 | char tmp[10]; |
2393 | 2399 | ||
2394 | /* 1st get the MAC address from EEPROM */ | 2400 | /* 1st get the MAC address from EEPROM */ |
2395 | ret = mem_acc->read(mem_acc, (char *)&am335x_mac_addr, | 2401 | ret = mem_acc->read(mem_acc, (char *)&am335x_mac_addr, |
2396 | EEPROM_MAC_ADDRESS_OFFSET, sizeof(am335x_mac_addr)); | 2402 | EEPROM_MAC_ADDRESS_OFFSET, sizeof(am335x_mac_addr)); |
2397 | 2403 | ||
2398 | if (ret != sizeof(am335x_mac_addr)) { | 2404 | if (ret != sizeof(am335x_mac_addr)) { |
2399 | pr_warning("AM335X: EVM Config read fail: %d\n", ret); | 2405 | pr_warning("AM335X: EVM Config read fail: %d\n", ret); |
2400 | return; | 2406 | return; |
2401 | } | 2407 | } |
2402 | 2408 | ||
2403 | /* Fillup global mac id */ | 2409 | /* Fillup global mac id */ |
2404 | am33xx_cpsw_macidfillup(&am335x_mac_addr[0][0], | 2410 | am33xx_cpsw_macidfillup(&am335x_mac_addr[0][0], |
2405 | &am335x_mac_addr[1][0]); | 2411 | &am335x_mac_addr[1][0]); |
2406 | 2412 | ||
2407 | /* get board specific data */ | 2413 | /* get board specific data */ |
2408 | ret = mem_acc->read(mem_acc, (char *)&config, 0, sizeof(config)); | 2414 | ret = mem_acc->read(mem_acc, (char *)&config, 0, sizeof(config)); |
2409 | if (ret != sizeof(config)) { | 2415 | if (ret != sizeof(config)) { |
2410 | pr_err("AM335X EVM config read fail, read %d bytes\n", ret); | 2416 | pr_err("AM335X EVM config read fail, read %d bytes\n", ret); |
2411 | pr_err("This likely means that there either is no/or a failed EEPROM\n"); | 2417 | pr_err("This likely means that there either is no/or a failed EEPROM\n"); |
2412 | goto out; | 2418 | goto out; |
2413 | } | 2419 | } |
2414 | 2420 | ||
2415 | if (config.header != AM335X_EEPROM_HEADER) { | 2421 | if (config.header != AM335X_EEPROM_HEADER) { |
2416 | pr_err("AM335X: wrong header 0x%x, expected 0x%x\n", | 2422 | pr_err("AM335X: wrong header 0x%x, expected 0x%x\n", |
2417 | config.header, AM335X_EEPROM_HEADER); | 2423 | config.header, AM335X_EEPROM_HEADER); |
2418 | goto out; | 2424 | goto out; |
2419 | } | 2425 | } |
2420 | 2426 | ||
2421 | if (strncmp("A335", config.name, 4)) { | 2427 | if (strncmp("A335", config.name, 4)) { |
2422 | pr_err("Board %s\ndoesn't look like an AM335x board\n", | 2428 | pr_err("Board %s\ndoesn't look like an AM335x board\n", |
2423 | config.name); | 2429 | config.name); |
2424 | goto out; | 2430 | goto out; |
2425 | } | 2431 | } |
2426 | 2432 | ||
2427 | snprintf(tmp, sizeof(config.name) + 1, "%s", config.name); | 2433 | snprintf(tmp, sizeof(config.name) + 1, "%s", config.name); |
2428 | pr_info("Board name: %s\n", tmp); | 2434 | pr_info("Board name: %s\n", tmp); |
2429 | snprintf(tmp, sizeof(config.version) + 1, "%s", config.version); | 2435 | snprintf(tmp, sizeof(config.version) + 1, "%s", config.version); |
2430 | pr_info("Board version: %s\n", tmp); | 2436 | pr_info("Board version: %s\n", tmp); |
2431 | 2437 | ||
2432 | if (!strncmp("A335BONE", config.name, 8)) { | 2438 | if (!strncmp("A335BONE", config.name, 8)) { |
2433 | daughter_brd_detected = false; | 2439 | daughter_brd_detected = false; |
2434 | if(!strncmp("00A1", config.version, 4) || | 2440 | if(!strncmp("00A1", config.version, 4) || |
2435 | !strncmp("00A2", config.version, 4)) | 2441 | !strncmp("00A2", config.version, 4)) |
2436 | setup_beaglebone_old(); | 2442 | setup_beaglebone_old(); |
2437 | else | 2443 | else |
2438 | setup_beaglebone(); | 2444 | setup_beaglebone(); |
2439 | } else if (!strncmp("A335X_SK", config.name, 8)) { | 2445 | } else if (!strncmp("A335X_SK", config.name, 8)) { |
2440 | daughter_brd_detected = false; | 2446 | daughter_brd_detected = false; |
2441 | setup_starterkit(); | 2447 | setup_starterkit(); |
2442 | } else { | 2448 | } else { |
2443 | /* only 6 characters of options string used for now */ | 2449 | /* only 6 characters of options string used for now */ |
2444 | snprintf(tmp, 7, "%s", config.opt); | 2450 | snprintf(tmp, 7, "%s", config.opt); |
2445 | pr_info("SKU: %s\n", tmp); | 2451 | pr_info("SKU: %s\n", tmp); |
2446 | 2452 | ||
2447 | if (!strncmp("SKU#01", config.opt, 6)) | 2453 | if (!strncmp("SKU#01", config.opt, 6)) |
2448 | setup_general_purpose_evm(); | 2454 | setup_general_purpose_evm(); |
2449 | else if (!strncmp("SKU#02", config.opt, 6)) | 2455 | else if (!strncmp("SKU#02", config.opt, 6)) |
2450 | setup_ind_auto_motor_ctrl_evm(); | 2456 | setup_ind_auto_motor_ctrl_evm(); |
2451 | else | 2457 | else |
2452 | goto out; | 2458 | goto out; |
2453 | } | 2459 | } |
2454 | 2460 | ||
2455 | am335x_opp_update(); | 2461 | am335x_opp_update(); |
2456 | 2462 | ||
2457 | return; | 2463 | return; |
2458 | 2464 | ||
2459 | out: | 2465 | out: |
2460 | /* | 2466 | /* |
2461 | * If the EEPROM hasn't been programed or an incorrect header | 2467 | * If the EEPROM hasn't been programed or an incorrect header |
2462 | * or board name are read then the hardware details are unknown. | 2468 | * or board name are read then the hardware details are unknown. |
2463 | * Notify the user and call machine_halt to stop the boot process. | 2469 | * Notify the user and call machine_halt to stop the boot process. |
2464 | */ | 2470 | */ |
2465 | pr_err("The error message above indicates that there is an issue with\n" | 2471 | pr_err("The error message above indicates that there is an issue with\n" |
2466 | "the EEPROM or the EEPROM contents. After verifying the EEPROM\n" | 2472 | "the EEPROM or the EEPROM contents. After verifying the EEPROM\n" |
2467 | "contents, if any, refer to the %s function in the\n" | 2473 | "contents, if any, refer to the %s function in the\n" |
2468 | "%s file to modify the board\n" | 2474 | "%s file to modify the board\n" |
2469 | "initialization code to match the hardware configuration\n", | 2475 | "initialization code to match the hardware configuration\n", |
2470 | __func__ , __FILE__); | 2476 | __func__ , __FILE__); |
2471 | machine_halt(); | 2477 | machine_halt(); |
2472 | } | 2478 | } |
2473 | 2479 | ||
2474 | static struct at24_platform_data am335x_daughter_board_eeprom_info = { | 2480 | static struct at24_platform_data am335x_daughter_board_eeprom_info = { |
2475 | .byte_len = (256*1024) / 8, | 2481 | .byte_len = (256*1024) / 8, |
2476 | .page_size = 64, | 2482 | .page_size = 64, |
2477 | .flags = AT24_FLAG_ADDR16, | 2483 | .flags = AT24_FLAG_ADDR16, |
2478 | .setup = am335x_setup_daughter_board, | 2484 | .setup = am335x_setup_daughter_board, |
2479 | .context = (void *)NULL, | 2485 | .context = (void *)NULL, |
2480 | }; | 2486 | }; |
2481 | 2487 | ||
2482 | static struct at24_platform_data am335x_baseboard_eeprom_info = { | 2488 | static struct at24_platform_data am335x_baseboard_eeprom_info = { |
2483 | .byte_len = (256*1024) / 8, | 2489 | .byte_len = (256*1024) / 8, |
2484 | .page_size = 64, | 2490 | .page_size = 64, |
2485 | .flags = AT24_FLAG_ADDR16, | 2491 | .flags = AT24_FLAG_ADDR16, |
2486 | .setup = am335x_evm_setup, | 2492 | .setup = am335x_evm_setup, |
2487 | .context = (void *)NULL, | 2493 | .context = (void *)NULL, |
2488 | }; | 2494 | }; |
2489 | 2495 | ||
2490 | static struct regulator_init_data am335x_dummy = { | 2496 | static struct regulator_init_data am335x_dummy = { |
2491 | .constraints.always_on = true, | 2497 | .constraints.always_on = true, |
2492 | }; | 2498 | }; |
2493 | 2499 | ||
2494 | static struct regulator_consumer_supply am335x_vdd1_supply[] = { | 2500 | static struct regulator_consumer_supply am335x_vdd1_supply[] = { |
2495 | REGULATOR_SUPPLY("vdd_mpu", NULL), | 2501 | REGULATOR_SUPPLY("vdd_mpu", NULL), |
2496 | }; | 2502 | }; |
2497 | 2503 | ||
2498 | static struct regulator_init_data am335x_vdd1 = { | 2504 | static struct regulator_init_data am335x_vdd1 = { |
2499 | .constraints = { | 2505 | .constraints = { |
2500 | .min_uV = 600000, | 2506 | .min_uV = 600000, |
2501 | .max_uV = 1500000, | 2507 | .max_uV = 1500000, |
2502 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 2508 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
2503 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | 2509 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, |
2504 | .always_on = 1, | 2510 | .always_on = 1, |
2505 | }, | 2511 | }, |
2506 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd1_supply), | 2512 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd1_supply), |
2507 | .consumer_supplies = am335x_vdd1_supply, | 2513 | .consumer_supplies = am335x_vdd1_supply, |
2508 | }; | 2514 | }; |
2509 | 2515 | ||
2510 | static struct regulator_consumer_supply am335x_vdd2_supply[] = { | 2516 | static struct regulator_consumer_supply am335x_vdd2_supply[] = { |
2511 | REGULATOR_SUPPLY("vdd_core", NULL), | 2517 | REGULATOR_SUPPLY("vdd_core", NULL), |
2512 | }; | 2518 | }; |
2513 | 2519 | ||
2514 | static struct regulator_init_data am335x_vdd2 = { | 2520 | static struct regulator_init_data am335x_vdd2 = { |
2515 | .constraints = { | 2521 | .constraints = { |
2516 | .min_uV = 600000, | 2522 | .min_uV = 600000, |
2517 | .max_uV = 1500000, | 2523 | .max_uV = 1500000, |
2518 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 2524 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
2519 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | 2525 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, |
2520 | .always_on = 1, | 2526 | .always_on = 1, |
2521 | }, | 2527 | }, |
2522 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd2_supply), | 2528 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd2_supply), |
2523 | .consumer_supplies = am335x_vdd2_supply, | 2529 | .consumer_supplies = am335x_vdd2_supply, |
2524 | }; | 2530 | }; |
2525 | 2531 | ||
2526 | static struct tps65910_board am335x_tps65910_info = { | 2532 | static struct tps65910_board am335x_tps65910_info = { |
2527 | .tps65910_pmic_init_data[TPS65910_REG_VRTC] = &am335x_dummy, | 2533 | .tps65910_pmic_init_data[TPS65910_REG_VRTC] = &am335x_dummy, |
2528 | .tps65910_pmic_init_data[TPS65910_REG_VIO] = &am335x_dummy, | 2534 | .tps65910_pmic_init_data[TPS65910_REG_VIO] = &am335x_dummy, |
2529 | .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &am335x_vdd1, | 2535 | .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &am335x_vdd1, |
2530 | .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &am335x_vdd2, | 2536 | .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &am335x_vdd2, |
2531 | .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &am335x_dummy, | 2537 | .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &am335x_dummy, |
2532 | .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &am335x_dummy, | 2538 | .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &am335x_dummy, |
2533 | .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &am335x_dummy, | 2539 | .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &am335x_dummy, |
2534 | .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &am335x_dummy, | 2540 | .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &am335x_dummy, |
2535 | .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &am335x_dummy, | 2541 | .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &am335x_dummy, |
2536 | .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &am335x_dummy, | 2542 | .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &am335x_dummy, |
2537 | .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &am335x_dummy, | 2543 | .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &am335x_dummy, |
2538 | .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &am335x_dummy, | 2544 | .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &am335x_dummy, |
2539 | .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &am335x_dummy, | 2545 | .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &am335x_dummy, |
2540 | }; | 2546 | }; |
2541 | 2547 | ||
2542 | /* | 2548 | /* |
2543 | * Daughter board Detection. | 2549 | * Daughter board Detection. |
2544 | * Every board has a ID memory (EEPROM) on board. We probe these devices at | 2550 | * Every board has a ID memory (EEPROM) on board. We probe these devices at |
2545 | * machine init, starting from daughter board and ending with baseboard. | 2551 | * machine init, starting from daughter board and ending with baseboard. |
2546 | * Assumptions : | 2552 | * Assumptions : |
2547 | * 1. probe for i2c devices are called in the order they are included in | 2553 | * 1. probe for i2c devices are called in the order they are included in |
2548 | * the below struct. Daughter boards eeprom are probed 1st. Baseboard | 2554 | * the below struct. Daughter boards eeprom are probed 1st. Baseboard |
2549 | * eeprom probe is called last. | 2555 | * eeprom probe is called last. |
2550 | */ | 2556 | */ |
2551 | static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] = { | 2557 | static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] = { |
2552 | { | 2558 | { |
2553 | /* Daughter Board EEPROM */ | 2559 | /* Daughter Board EEPROM */ |
2554 | I2C_BOARD_INFO("24c256", DAUG_BOARD_I2C_ADDR), | 2560 | I2C_BOARD_INFO("24c256", DAUG_BOARD_I2C_ADDR), |
2555 | .platform_data = &am335x_daughter_board_eeprom_info, | 2561 | .platform_data = &am335x_daughter_board_eeprom_info, |
2556 | }, | 2562 | }, |
2557 | { | 2563 | { |
2558 | /* Baseboard board EEPROM */ | 2564 | /* Baseboard board EEPROM */ |
2559 | I2C_BOARD_INFO("24c256", BASEBOARD_I2C_ADDR), | 2565 | I2C_BOARD_INFO("24c256", BASEBOARD_I2C_ADDR), |
2560 | .platform_data = &am335x_baseboard_eeprom_info, | 2566 | .platform_data = &am335x_baseboard_eeprom_info, |
2561 | }, | 2567 | }, |
2562 | { | 2568 | { |
2563 | I2C_BOARD_INFO("cpld_reg", 0x35), | 2569 | I2C_BOARD_INFO("cpld_reg", 0x35), |
2564 | }, | 2570 | }, |
2565 | { | 2571 | { |
2566 | I2C_BOARD_INFO("tlc59108", 0x40), | 2572 | I2C_BOARD_INFO("tlc59108", 0x40), |
2567 | }, | 2573 | }, |
2568 | { | 2574 | { |
2569 | I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1), | 2575 | I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1), |
2570 | .platform_data = &am335x_tps65910_info, | 2576 | .platform_data = &am335x_tps65910_info, |
2571 | }, | 2577 | }, |
2572 | { | 2578 | { |
2573 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), | 2579 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), |
2574 | }, | 2580 | }, |
2575 | }; | 2581 | }; |
2576 | 2582 | ||
2577 | static struct omap_musb_board_data musb_board_data = { | 2583 | static struct omap_musb_board_data musb_board_data = { |
2578 | .interface_type = MUSB_INTERFACE_ULPI, | 2584 | .interface_type = MUSB_INTERFACE_ULPI, |
2579 | /* | 2585 | /* |
2580 | * mode[0:3] = USB0PORT's mode | 2586 | * mode[0:3] = USB0PORT's mode |
2581 | * mode[4:7] = USB1PORT's mode | 2587 | * mode[4:7] = USB1PORT's mode |
2582 | * AM335X beta EVM has USB0 in OTG mode and USB1 in host mode. | 2588 | * AM335X beta EVM has USB0 in OTG mode and USB1 in host mode. |
2583 | */ | 2589 | */ |
2584 | .mode = (MUSB_HOST << 4) | MUSB_OTG, | 2590 | .mode = (MUSB_HOST << 4) | MUSB_OTG, |
2585 | .power = 500, | 2591 | .power = 500, |
2586 | .instances = 1, | 2592 | .instances = 1, |
2587 | }; | 2593 | }; |
2588 | 2594 | ||
2589 | static int cpld_reg_probe(struct i2c_client *client, | 2595 | static int cpld_reg_probe(struct i2c_client *client, |
2590 | const struct i2c_device_id *id) | 2596 | const struct i2c_device_id *id) |
2591 | { | 2597 | { |
2592 | cpld_client = client; | 2598 | cpld_client = client; |
2593 | return 0; | 2599 | return 0; |
2594 | } | 2600 | } |
2595 | 2601 | ||
2596 | static int __devexit cpld_reg_remove(struct i2c_client *client) | 2602 | static int __devexit cpld_reg_remove(struct i2c_client *client) |
2597 | { | 2603 | { |
2598 | cpld_client = NULL; | 2604 | cpld_client = NULL; |
2599 | return 0; | 2605 | return 0; |
2600 | } | 2606 | } |
2601 | 2607 | ||
2602 | static const struct i2c_device_id cpld_reg_id[] = { | 2608 | static const struct i2c_device_id cpld_reg_id[] = { |
2603 | { "cpld_reg", 0 }, | 2609 | { "cpld_reg", 0 }, |
2604 | { } | 2610 | { } |
2605 | }; | 2611 | }; |
2606 | 2612 | ||
2607 | static struct i2c_driver cpld_reg_driver = { | 2613 | static struct i2c_driver cpld_reg_driver = { |
2608 | .driver = { | 2614 | .driver = { |
2609 | .name = "cpld_reg", | 2615 | .name = "cpld_reg", |
2610 | }, | 2616 | }, |
2611 | .probe = cpld_reg_probe, | 2617 | .probe = cpld_reg_probe, |
2612 | .remove = cpld_reg_remove, | 2618 | .remove = cpld_reg_remove, |
2613 | .id_table = cpld_reg_id, | 2619 | .id_table = cpld_reg_id, |
2614 | }; | 2620 | }; |
2615 | 2621 | ||
2616 | static void evm_init_cpld(void) | 2622 | static void evm_init_cpld(void) |
2617 | { | 2623 | { |
2618 | i2c_add_driver(&cpld_reg_driver); | 2624 | i2c_add_driver(&cpld_reg_driver); |
2619 | } | 2625 | } |
2620 | 2626 | ||
2621 | static void __init am335x_evm_i2c_init(void) | 2627 | static void __init am335x_evm_i2c_init(void) |
2622 | { | 2628 | { |
2623 | /* Initially assume General Purpose EVM Config */ | 2629 | /* Initially assume General Purpose EVM Config */ |
2624 | am335x_evm_id = GEN_PURP_EVM; | 2630 | am335x_evm_id = GEN_PURP_EVM; |
2625 | 2631 | ||
2626 | evm_init_cpld(); | 2632 | evm_init_cpld(); |
2627 | 2633 | ||
2628 | omap_register_i2c_bus(1, 100, am335x_i2c0_boardinfo, | 2634 | omap_register_i2c_bus(1, 100, am335x_i2c0_boardinfo, |
2629 | ARRAY_SIZE(am335x_i2c0_boardinfo)); | 2635 | ARRAY_SIZE(am335x_i2c0_boardinfo)); |
2630 | } | 2636 | } |
2631 | 2637 | ||
2632 | void __iomem *am33xx_emif_base; | 2638 | void __iomem *am33xx_emif_base; |
2633 | 2639 | ||
2634 | void __iomem * __init am33xx_get_mem_ctlr(void) | 2640 | void __iomem * __init am33xx_get_mem_ctlr(void) |
2635 | { | 2641 | { |
2636 | 2642 | ||
2637 | am33xx_emif_base = ioremap(AM33XX_EMIF0_BASE, SZ_32K); | 2643 | am33xx_emif_base = ioremap(AM33XX_EMIF0_BASE, SZ_32K); |
2638 | 2644 | ||
2639 | if (!am33xx_emif_base) | 2645 | if (!am33xx_emif_base) |
2640 | pr_warning("%s: Unable to map DDR2 controller", __func__); | 2646 | pr_warning("%s: Unable to map DDR2 controller", __func__); |
2641 | 2647 | ||
2642 | return am33xx_emif_base; | 2648 | return am33xx_emif_base; |
2643 | } | 2649 | } |
2644 | 2650 | ||
2645 | void __iomem *am33xx_get_ram_base(void) | 2651 | void __iomem *am33xx_get_ram_base(void) |
2646 | { | 2652 | { |
2647 | return am33xx_emif_base; | 2653 | return am33xx_emif_base; |
2648 | } | 2654 | } |
2649 | 2655 | ||
2650 | void __iomem *am33xx_gpio0_base; | 2656 | void __iomem *am33xx_gpio0_base; |
2651 | 2657 | ||
2652 | void __iomem *am33xx_get_gpio0_base(void) | 2658 | void __iomem *am33xx_get_gpio0_base(void) |
2653 | { | 2659 | { |
2654 | am33xx_gpio0_base = ioremap(AM33XX_GPIO0_BASE, SZ_4K); | 2660 | am33xx_gpio0_base = ioremap(AM33XX_GPIO0_BASE, SZ_4K); |
2655 | 2661 | ||
2656 | return am33xx_gpio0_base; | 2662 | return am33xx_gpio0_base; |
2657 | } | 2663 | } |
2658 | 2664 | ||
2659 | static struct resource am33xx_cpuidle_resources[] = { | 2665 | static struct resource am33xx_cpuidle_resources[] = { |
2660 | { | 2666 | { |
2661 | .start = AM33XX_EMIF0_BASE, | 2667 | .start = AM33XX_EMIF0_BASE, |
2662 | .end = AM33XX_EMIF0_BASE + SZ_32K - 1, | 2668 | .end = AM33XX_EMIF0_BASE + SZ_32K - 1, |
2663 | .flags = IORESOURCE_MEM, | 2669 | .flags = IORESOURCE_MEM, |
2664 | }, | 2670 | }, |
2665 | }; | 2671 | }; |
2666 | 2672 | ||
2667 | /* AM33XX devices support DDR2 power down */ | 2673 | /* AM33XX devices support DDR2 power down */ |
2668 | static struct am33xx_cpuidle_config am33xx_cpuidle_pdata = { | 2674 | static struct am33xx_cpuidle_config am33xx_cpuidle_pdata = { |
2669 | .ddr2_pdown = 1, | 2675 | .ddr2_pdown = 1, |
2670 | }; | 2676 | }; |
2671 | 2677 | ||
2672 | static struct platform_device am33xx_cpuidle_device = { | 2678 | static struct platform_device am33xx_cpuidle_device = { |
2673 | .name = "cpuidle-am33xx", | 2679 | .name = "cpuidle-am33xx", |
2674 | .num_resources = ARRAY_SIZE(am33xx_cpuidle_resources), | 2680 | .num_resources = ARRAY_SIZE(am33xx_cpuidle_resources), |
2675 | .resource = am33xx_cpuidle_resources, | 2681 | .resource = am33xx_cpuidle_resources, |
2676 | .dev = { | 2682 | .dev = { |
2677 | .platform_data = &am33xx_cpuidle_pdata, | 2683 | .platform_data = &am33xx_cpuidle_pdata, |
2678 | }, | 2684 | }, |
2679 | }; | 2685 | }; |
2680 | 2686 | ||
2681 | static void __init am33xx_cpuidle_init(void) | 2687 | static void __init am33xx_cpuidle_init(void) |
2682 | { | 2688 | { |
2683 | int ret; | 2689 | int ret; |
2684 | 2690 | ||
2685 | am33xx_cpuidle_pdata.emif_base = am33xx_get_mem_ctlr(); | 2691 | am33xx_cpuidle_pdata.emif_base = am33xx_get_mem_ctlr(); |
2686 | 2692 | ||
2687 | ret = platform_device_register(&am33xx_cpuidle_device); | 2693 | ret = platform_device_register(&am33xx_cpuidle_device); |
2688 | 2694 | ||
2689 | if (ret) | 2695 | if (ret) |
2690 | pr_warning("AM33XX cpuidle registration failed\n"); | 2696 | pr_warning("AM33XX cpuidle registration failed\n"); |
2691 | 2697 | ||
2692 | } | 2698 | } |
2693 | 2699 | ||
2694 | static void __init am335x_evm_init(void) | 2700 | static void __init am335x_evm_init(void) |
2695 | { | 2701 | { |
2696 | am33xx_cpuidle_init(); | 2702 | am33xx_cpuidle_init(); |
2697 | am33xx_mux_init(board_mux); | 2703 | am33xx_mux_init(board_mux); |
2698 | omap_serial_init(); | 2704 | omap_serial_init(); |
2699 | am335x_evm_i2c_init(); | 2705 | am335x_evm_i2c_init(); |
2700 | omap_sdrc_init(NULL, NULL); | 2706 | omap_sdrc_init(NULL, NULL); |
2701 | usb_musb_init(&musb_board_data); | 2707 | usb_musb_init(&musb_board_data); |
2702 | omap_board_config = am335x_evm_config; | 2708 | omap_board_config = am335x_evm_config; |
2703 | omap_board_config_size = ARRAY_SIZE(am335x_evm_config); | 2709 | omap_board_config_size = ARRAY_SIZE(am335x_evm_config); |
2704 | /* Create an alias for icss clock */ | 2710 | /* Create an alias for icss clock */ |
2705 | if (clk_add_alias("pruss", NULL, "pruss_uart_gclk", NULL)) | 2711 | if (clk_add_alias("pruss", NULL, "pruss_uart_gclk", NULL)) |
2706 | pr_warn("failed to create an alias: icss_uart_gclk --> pruss\n"); | 2712 | pr_warn("failed to create an alias: icss_uart_gclk --> pruss\n"); |
2707 | /* Create an alias for gfx/sgx clock */ | 2713 | /* Create an alias for gfx/sgx clock */ |
2708 | if (clk_add_alias("sgx_ck", NULL, "gfx_fclk", NULL)) | 2714 | if (clk_add_alias("sgx_ck", NULL, "gfx_fclk", NULL)) |
2709 | pr_warn("failed to create an alias: gfx_fclk --> sgx_ck\n"); | 2715 | pr_warn("failed to create an alias: gfx_fclk --> sgx_ck\n"); |
2710 | } | 2716 | } |
2711 | 2717 | ||
2712 | static void __init am335x_evm_map_io(void) | 2718 | static void __init am335x_evm_map_io(void) |
2713 | { | 2719 | { |
2714 | omap2_set_globals_am33xx(); | 2720 | omap2_set_globals_am33xx(); |
2715 | omapam33xx_map_common_io(); | 2721 | omapam33xx_map_common_io(); |
2716 | } | 2722 | } |
2717 | 2723 | ||
2718 | MACHINE_START(AM335XEVM, "am335xevm") | 2724 | MACHINE_START(AM335XEVM, "am335xevm") |
2719 | /* Maintainer: Texas Instruments */ | 2725 | /* Maintainer: Texas Instruments */ |
2720 | .atag_offset = 0x100, | 2726 | .atag_offset = 0x100, |
2721 | .map_io = am335x_evm_map_io, | 2727 | .map_io = am335x_evm_map_io, |
2722 | .init_early = am33xx_init_early, | 2728 | .init_early = am33xx_init_early, |
2723 | .init_irq = ti81xx_init_irq, | 2729 | .init_irq = ti81xx_init_irq, |
2724 | .handle_irq = omap3_intc_handle_irq, | 2730 | .handle_irq = omap3_intc_handle_irq, |
2725 | .timer = &omap3_am33xx_timer, | 2731 | .timer = &omap3_am33xx_timer, |
2726 | .init_machine = am335x_evm_init, | 2732 | .init_machine = am335x_evm_init, |
2727 | MACHINE_END | 2733 | MACHINE_END |
2728 | 2734 | ||
2729 | MACHINE_START(AM335XIAEVM, "am335xiaevm") | 2735 | MACHINE_START(AM335XIAEVM, "am335xiaevm") |
2730 | /* Maintainer: Texas Instruments */ | 2736 | /* Maintainer: Texas Instruments */ |
2731 | .atag_offset = 0x100, | 2737 | .atag_offset = 0x100, |
2732 | .map_io = am335x_evm_map_io, | 2738 | .map_io = am335x_evm_map_io, |
2733 | .init_irq = ti81xx_init_irq, | 2739 | .init_irq = ti81xx_init_irq, |
2734 | .init_early = am33xx_init_early, | 2740 | .init_early = am33xx_init_early, |
2735 | .timer = &omap3_am33xx_timer, | 2741 | .timer = &omap3_am33xx_timer, |
2736 | .init_machine = am335x_evm_init, | 2742 | .init_machine = am335x_evm_init, |
2737 | MACHINE_END | 2743 | MACHINE_END |
2738 | 2744 |