Commit 57abae34c8ec0b6d86a66ea2d53589b2564a70d5
1 parent
90c0ebd772
Exists in
master
arm:omap:am335x: Add cpuidle related board data
Add board specific cpuidle hookup for AM335x EVM Signed-off-by: Vaibhav Bedia <vaibhav.bedia@ti.com>
Showing 1 changed file with 49 additions and 0 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/i2c/at24.h> | 18 | #include <linux/i2c/at24.h> |
| 19 | #include <linux/phy.h> | 19 | #include <linux/phy.h> |
| 20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
| 21 | #include <linux/spi/spi.h> | 21 | #include <linux/spi/spi.h> |
| 22 | #include <linux/spi/flash.h> | 22 | #include <linux/spi/flash.h> |
| 23 | #ifdef CONFIG_KEYBOARD_GPIO | 23 | #ifdef CONFIG_KEYBOARD_GPIO |
| 24 | #include <linux/gpio_keys.h> | 24 | #include <linux/gpio_keys.h> |
| 25 | #endif | 25 | #endif |
| 26 | #ifdef CONFIG_KEYBOARD_MATRIX | 26 | #ifdef CONFIG_KEYBOARD_MATRIX |
| 27 | #include <linux/input.h> | 27 | #include <linux/input.h> |
| 28 | #include <linux/input/matrix_keypad.h> | 28 | #include <linux/input/matrix_keypad.h> |
| 29 | #endif | 29 | #endif |
| 30 | #include <linux/mtd/mtd.h> | 30 | #include <linux/mtd/mtd.h> |
| 31 | #include <linux/mtd/nand.h> | 31 | #include <linux/mtd/nand.h> |
| 32 | #include <linux/mtd/partitions.h> | 32 | #include <linux/mtd/partitions.h> |
| 33 | #include <linux/platform_device.h> | 33 | #include <linux/platform_device.h> |
| 34 | #include <linux/clk.h> | 34 | #include <linux/clk.h> |
| 35 | #include <linux/err.h> | 35 | #include <linux/err.h> |
| 36 | #include <linux/wl12xx.h> | 36 | #include <linux/wl12xx.h> |
| 37 | #include <linux/ethtool.h> | 37 | #include <linux/ethtool.h> |
| 38 | #include <linux/mfd/tps65910.h> | 38 | #include <linux/mfd/tps65910.h> |
| 39 | 39 | ||
| 40 | /* LCD controller is similar to DA850 */ | 40 | /* LCD controller is similar to DA850 */ |
| 41 | #include <video/da8xx-fb.h> | 41 | #include <video/da8xx-fb.h> |
| 42 | 42 | ||
| 43 | #include <mach/hardware.h> | 43 | #include <mach/hardware.h> |
| 44 | #include <mach/board-am335xevm.h> | 44 | #include <mach/board-am335xevm.h> |
| 45 | 45 | ||
| 46 | #include <asm/mach-types.h> | 46 | #include <asm/mach-types.h> |
| 47 | #include <asm/mach/arch.h> | 47 | #include <asm/mach/arch.h> |
| 48 | #include <asm/mach/map.h> | 48 | #include <asm/mach/map.h> |
| 49 | #include <asm/hardware/asp.h> | 49 | #include <asm/hardware/asp.h> |
| 50 | 50 | ||
| 51 | #include <plat/irqs.h> | 51 | #include <plat/irqs.h> |
| 52 | #include <plat/board.h> | 52 | #include <plat/board.h> |
| 53 | #include <plat/common.h> | 53 | #include <plat/common.h> |
| 54 | #include <plat/lcdc.h> | 54 | #include <plat/lcdc.h> |
| 55 | #include <plat/usb.h> | 55 | #include <plat/usb.h> |
| 56 | #include <plat/mmc.h> | 56 | #include <plat/mmc.h> |
| 57 | 57 | ||
| 58 | #include "board-flash.h" | 58 | #include "board-flash.h" |
| 59 | #include "cpuidle33xx.h" | ||
| 59 | #include "mux.h" | 60 | #include "mux.h" |
| 60 | #include "devices.h" | 61 | #include "devices.h" |
| 61 | #include "hsmmc.h" | 62 | #include "hsmmc.h" |
| 62 | 63 | ||
| 63 | /* TLK PHY IDs */ | 64 | /* TLK PHY IDs */ |
| 64 | #define TLK110_PHY_ID 0x2000A201 | 65 | #define TLK110_PHY_ID 0x2000A201 |
| 65 | #define TLK110_PHY_MASK 0xfffffff0 | 66 | #define TLK110_PHY_MASK 0xfffffff0 |
| 66 | 67 | ||
| 67 | /* BBB PHY IDs */ | 68 | /* BBB PHY IDs */ |
| 68 | #define BBB_PHY_ID 0x7c0f1 | 69 | #define BBB_PHY_ID 0x7c0f1 |
| 69 | #define BBB_PHY_MASK 0xfffffffe | 70 | #define BBB_PHY_MASK 0xfffffffe |
| 70 | 71 | ||
| 71 | /* TLK110 PHY register offsets */ | 72 | /* TLK110 PHY register offsets */ |
| 72 | #define TLK110_COARSEGAIN_REG 0x00A3 | 73 | #define TLK110_COARSEGAIN_REG 0x00A3 |
| 73 | #define TLK110_LPFHPF_REG 0x00AC | 74 | #define TLK110_LPFHPF_REG 0x00AC |
| 74 | #define TLK110_SPAREANALOG_REG 0x00B9 | 75 | #define TLK110_SPAREANALOG_REG 0x00B9 |
| 75 | #define TLK110_VRCR_REG 0x00D0 | 76 | #define TLK110_VRCR_REG 0x00D0 |
| 76 | #define TLK110_SETFFE_REG 0x0107 | 77 | #define TLK110_SETFFE_REG 0x0107 |
| 77 | #define TLK110_FTSP_REG 0x0154 | 78 | #define TLK110_FTSP_REG 0x0154 |
| 78 | #define TLK110_ALFATPIDL_REG 0x002A | 79 | #define TLK110_ALFATPIDL_REG 0x002A |
| 79 | #define TLK110_PSCOEF21_REG 0x0096 | 80 | #define TLK110_PSCOEF21_REG 0x0096 |
| 80 | #define TLK110_PSCOEF3_REG 0x0097 | 81 | #define TLK110_PSCOEF3_REG 0x0097 |
| 81 | #define TLK110_ALFAFACTOR1_REG 0x002C | 82 | #define TLK110_ALFAFACTOR1_REG 0x002C |
| 82 | #define TLK110_ALFAFACTOR2_REG 0x0023 | 83 | #define TLK110_ALFAFACTOR2_REG 0x0023 |
| 83 | #define TLK110_CFGPS_REG 0x0095 | 84 | #define TLK110_CFGPS_REG 0x0095 |
| 84 | #define TLK110_FTSPTXGAIN_REG 0x0150 | 85 | #define TLK110_FTSPTXGAIN_REG 0x0150 |
| 85 | #define TLK110_SWSCR3_REG 0x000B | 86 | #define TLK110_SWSCR3_REG 0x000B |
| 86 | #define TLK110_SCFALLBACK_REG 0x0040 | 87 | #define TLK110_SCFALLBACK_REG 0x0040 |
| 87 | #define TLK110_PHYRCR_REG 0x001F | 88 | #define TLK110_PHYRCR_REG 0x001F |
| 88 | 89 | ||
| 89 | /* TLK110 register writes values */ | 90 | /* TLK110 register writes values */ |
| 90 | #define TLK110_COARSEGAIN_VAL 0x0000 | 91 | #define TLK110_COARSEGAIN_VAL 0x0000 |
| 91 | #define TLK110_LPFHPF_VAL 0x8000 | 92 | #define TLK110_LPFHPF_VAL 0x8000 |
| 92 | #define TLK110_SPANALOG_VAL 0x0000 | 93 | #define TLK110_SPANALOG_VAL 0x0000 |
| 93 | #define TLK110_VRCR_VAL 0x0008 | 94 | #define TLK110_VRCR_VAL 0x0008 |
| 94 | #define TLK110_SETFFE_VAL 0x0605 | 95 | #define TLK110_SETFFE_VAL 0x0605 |
| 95 | #define TLK110_FTSP_VAL 0x0255 | 96 | #define TLK110_FTSP_VAL 0x0255 |
| 96 | #define TLK110_ALFATPIDL_VAL 0x7998 | 97 | #define TLK110_ALFATPIDL_VAL 0x7998 |
| 97 | #define TLK110_PSCOEF21_VAL 0x3A20 | 98 | #define TLK110_PSCOEF21_VAL 0x3A20 |
| 98 | #define TLK110_PSCOEF3_VAL 0x003F | 99 | #define TLK110_PSCOEF3_VAL 0x003F |
| 99 | #define TLK110_ALFACTOR1_VAL 0xFF80 | 100 | #define TLK110_ALFACTOR1_VAL 0xFF80 |
| 100 | #define TLK110_ALFACTOR2_VAL 0x021C | 101 | #define TLK110_ALFACTOR2_VAL 0x021C |
| 101 | #define TLK110_CFGPS_VAL 0x0000 | 102 | #define TLK110_CFGPS_VAL 0x0000 |
| 102 | #define TLK110_FTSPTXGAIN_VAL 0x6A88 | 103 | #define TLK110_FTSPTXGAIN_VAL 0x6A88 |
| 103 | #define TLK110_SWSCR3_VAL 0x0000 | 104 | #define TLK110_SWSCR3_VAL 0x0000 |
| 104 | #define TLK110_SCFALLBACK_VAL 0xC11D | 105 | #define TLK110_SCFALLBACK_VAL 0xC11D |
| 105 | #define TLK110_PHYRCR_VAL 0x4000 | 106 | #define TLK110_PHYRCR_VAL 0x4000 |
| 106 | 107 | ||
| 107 | #ifdef CONFIG_TLK110_WORKAROUND | 108 | #ifdef CONFIG_TLK110_WORKAROUND |
| 108 | #define am335x_tlk110_phy_init()\ | 109 | #define am335x_tlk110_phy_init()\ |
| 109 | do { \ | 110 | do { \ |
| 110 | phy_register_fixup_for_uid(TLK110_PHY_ID,\ | 111 | phy_register_fixup_for_uid(TLK110_PHY_ID,\ |
| 111 | TLK110_PHY_MASK,\ | 112 | TLK110_PHY_MASK,\ |
| 112 | am335x_tlk110_phy_fixup);\ | 113 | am335x_tlk110_phy_fixup);\ |
| 113 | } while (0); | 114 | } while (0); |
| 114 | #else | 115 | #else |
| 115 | #define am335x_tlk110_phy_init() do { } while (0); | 116 | #define am335x_tlk110_phy_init() do { } while (0); |
| 116 | #endif | 117 | #endif |
| 117 | 118 | ||
| 118 | /* Convert GPIO signal to GPIO pin number */ | 119 | /* Convert GPIO signal to GPIO pin number */ |
| 119 | #define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio)) | 120 | #define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio)) |
| 120 | 121 | ||
| 121 | static const struct display_panel disp_panel = { | 122 | static const struct display_panel disp_panel = { |
| 122 | WVGA, | 123 | WVGA, |
| 123 | 32, | 124 | 32, |
| 124 | 32, | 125 | 32, |
| 125 | COLOR_ACTIVE, | 126 | COLOR_ACTIVE, |
| 126 | }; | 127 | }; |
| 127 | 128 | ||
| 128 | static struct lcd_ctrl_config lcd_cfg = { | 129 | static struct lcd_ctrl_config lcd_cfg = { |
| 129 | &disp_panel, | 130 | &disp_panel, |
| 130 | .ac_bias = 255, | 131 | .ac_bias = 255, |
| 131 | .ac_bias_intrpt = 0, | 132 | .ac_bias_intrpt = 0, |
| 132 | .dma_burst_sz = 16, | 133 | .dma_burst_sz = 16, |
| 133 | .bpp = 32, | 134 | .bpp = 32, |
| 134 | .fdd = 0x80, | 135 | .fdd = 0x80, |
| 135 | .tft_alt_mode = 0, | 136 | .tft_alt_mode = 0, |
| 136 | .stn_565_mode = 0, | 137 | .stn_565_mode = 0, |
| 137 | .mono_8bit_mode = 0, | 138 | .mono_8bit_mode = 0, |
| 138 | .invert_line_clock = 1, | 139 | .invert_line_clock = 1, |
| 139 | .invert_frm_clock = 1, | 140 | .invert_frm_clock = 1, |
| 140 | .sync_edge = 0, | 141 | .sync_edge = 0, |
| 141 | .sync_ctrl = 1, | 142 | .sync_ctrl = 1, |
| 142 | .raster_order = 0, | 143 | .raster_order = 0, |
| 143 | }; | 144 | }; |
| 144 | 145 | ||
| 145 | struct da8xx_lcdc_platform_data TFC_S9700RTWV35TR_01B_pdata = { | 146 | struct da8xx_lcdc_platform_data TFC_S9700RTWV35TR_01B_pdata = { |
| 146 | .manu_name = "ThreeFive", | 147 | .manu_name = "ThreeFive", |
| 147 | .controller_data = &lcd_cfg, | 148 | .controller_data = &lcd_cfg, |
| 148 | .type = "TFC_S9700RTWV35TR_01B", | 149 | .type = "TFC_S9700RTWV35TR_01B", |
| 149 | }; | 150 | }; |
| 150 | 151 | ||
| 151 | /* TSc controller */ | 152 | /* TSc controller */ |
| 152 | #include <linux/input/ti_tscadc.h> | 153 | #include <linux/input/ti_tscadc.h> |
| 153 | #include <linux/lis3lv02d.h> | 154 | #include <linux/lis3lv02d.h> |
| 154 | 155 | ||
| 155 | static struct resource tsc_resources[] = { | 156 | static struct resource tsc_resources[] = { |
| 156 | [0] = { | 157 | [0] = { |
| 157 | .start = AM33XX_TSC_BASE, | 158 | .start = AM33XX_TSC_BASE, |
| 158 | .end = AM33XX_TSC_BASE + SZ_8K - 1, | 159 | .end = AM33XX_TSC_BASE + SZ_8K - 1, |
| 159 | .flags = IORESOURCE_MEM, | 160 | .flags = IORESOURCE_MEM, |
| 160 | }, | 161 | }, |
| 161 | [1] = { | 162 | [1] = { |
| 162 | .start = AM33XX_IRQ_ADC_GEN, | 163 | .start = AM33XX_IRQ_ADC_GEN, |
| 163 | .end = AM33XX_IRQ_ADC_GEN, | 164 | .end = AM33XX_IRQ_ADC_GEN, |
| 164 | .flags = IORESOURCE_IRQ, | 165 | .flags = IORESOURCE_IRQ, |
| 165 | }, | 166 | }, |
| 166 | }; | 167 | }; |
| 167 | 168 | ||
| 168 | static struct tsc_data am335x_touchscreen_data = { | 169 | static struct tsc_data am335x_touchscreen_data = { |
| 169 | .wires = 4, | 170 | .wires = 4, |
| 170 | .x_plate_resistance = 200, | 171 | .x_plate_resistance = 200, |
| 171 | }; | 172 | }; |
| 172 | 173 | ||
| 173 | static struct platform_device tsc_device = { | 174 | static struct platform_device tsc_device = { |
| 174 | .name = "tsc", | 175 | .name = "tsc", |
| 175 | .id = -1, | 176 | .id = -1, |
| 176 | .dev = { | 177 | .dev = { |
| 177 | .platform_data = &am335x_touchscreen_data, | 178 | .platform_data = &am335x_touchscreen_data, |
| 178 | }, | 179 | }, |
| 179 | .num_resources = ARRAY_SIZE(tsc_resources), | 180 | .num_resources = ARRAY_SIZE(tsc_resources), |
| 180 | .resource = tsc_resources, | 181 | .resource = tsc_resources, |
| 181 | }; | 182 | }; |
| 182 | 183 | ||
| 183 | static u8 am335x_iis_serializer_direction1[] = { | 184 | static u8 am335x_iis_serializer_direction1[] = { |
| 184 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, RX_MODE, | 185 | INACTIVE_MODE, INACTIVE_MODE, TX_MODE, RX_MODE, |
| 185 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 186 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
| 186 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 187 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
| 187 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, | 188 | INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, |
| 188 | }; | 189 | }; |
| 189 | 190 | ||
| 190 | static struct snd_platform_data am335x_evm_snd_data1 = { | 191 | static struct snd_platform_data am335x_evm_snd_data1 = { |
| 191 | .tx_dma_offset = 0x46400000, /* McASP1 */ | 192 | .tx_dma_offset = 0x46400000, /* McASP1 */ |
| 192 | .rx_dma_offset = 0x46400000, | 193 | .rx_dma_offset = 0x46400000, |
| 193 | .op_mode = DAVINCI_MCASP_IIS_MODE, | 194 | .op_mode = DAVINCI_MCASP_IIS_MODE, |
| 194 | .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction1), | 195 | .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction1), |
| 195 | .tdm_slots = 2, | 196 | .tdm_slots = 2, |
| 196 | .serial_dir = am335x_iis_serializer_direction1, | 197 | .serial_dir = am335x_iis_serializer_direction1, |
| 197 | .asp_chan_q = EVENTQ_2, | 198 | .asp_chan_q = EVENTQ_2, |
| 198 | .version = MCASP_VERSION_3, | 199 | .version = MCASP_VERSION_3, |
| 199 | .txnumevt = 1, | 200 | .txnumevt = 1, |
| 200 | .rxnumevt = 1, | 201 | .rxnumevt = 1, |
| 201 | }; | 202 | }; |
| 202 | 203 | ||
| 203 | static struct omap2_hsmmc_info am335x_mmc[] __initdata = { | 204 | static struct omap2_hsmmc_info am335x_mmc[] __initdata = { |
| 204 | { | 205 | { |
| 205 | .mmc = 1, | 206 | .mmc = 1, |
| 206 | .caps = MMC_CAP_4_BIT_DATA, | 207 | .caps = MMC_CAP_4_BIT_DATA, |
| 207 | .gpio_cd = GPIO_TO_PIN(0, 6), | 208 | .gpio_cd = GPIO_TO_PIN(0, 6), |
| 208 | .gpio_wp = GPIO_TO_PIN(3, 18), | 209 | .gpio_wp = GPIO_TO_PIN(3, 18), |
| 209 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */ | 210 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */ |
| 210 | }, | 211 | }, |
| 211 | { | 212 | { |
| 212 | .mmc = 0, /* will be set at runtime */ | 213 | .mmc = 0, /* will be set at runtime */ |
| 213 | }, | 214 | }, |
| 214 | { | 215 | { |
| 215 | .mmc = 0, /* will be set at runtime */ | 216 | .mmc = 0, /* will be set at runtime */ |
| 216 | }, | 217 | }, |
| 217 | {} /* Terminator */ | 218 | {} /* Terminator */ |
| 218 | }; | 219 | }; |
| 219 | 220 | ||
| 220 | 221 | ||
| 221 | #ifdef CONFIG_OMAP_MUX | 222 | #ifdef CONFIG_OMAP_MUX |
| 222 | static struct omap_board_mux board_mux[] __initdata = { | 223 | static struct omap_board_mux board_mux[] __initdata = { |
| 223 | AM33XX_MUX(I2C0_SDA, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | | 224 | AM33XX_MUX(I2C0_SDA, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | |
| 224 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), | 225 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), |
| 225 | AM33XX_MUX(I2C0_SCL, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | | 226 | AM33XX_MUX(I2C0_SCL, OMAP_MUX_MODE0 | AM33XX_SLEWCTRL_SLOW | |
| 226 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), | 227 | AM33XX_INPUT_EN | AM33XX_PIN_OUTPUT), |
| 227 | { .reg_offset = OMAP_MUX_TERMINATOR }, | 228 | { .reg_offset = OMAP_MUX_TERMINATOR }, |
| 228 | }; | 229 | }; |
| 229 | #else | 230 | #else |
| 230 | #define board_mux NULL | 231 | #define board_mux NULL |
| 231 | #endif | 232 | #endif |
| 232 | 233 | ||
| 233 | /* module pin mux structure */ | 234 | /* module pin mux structure */ |
| 234 | struct pinmux_config { | 235 | struct pinmux_config { |
| 235 | const char *string_name; /* signal name format */ | 236 | const char *string_name; /* signal name format */ |
| 236 | int val; /* Options for the mux register value */ | 237 | int val; /* Options for the mux register value */ |
| 237 | }; | 238 | }; |
| 238 | 239 | ||
| 239 | struct evm_dev_cfg { | 240 | struct evm_dev_cfg { |
| 240 | void (*device_init)(int evm_id, int profile); | 241 | void (*device_init)(int evm_id, int profile); |
| 241 | 242 | ||
| 242 | /* | 243 | /* |
| 243 | * If the device is required on both baseboard & daughter board (ex i2c), | 244 | * If the device is required on both baseboard & daughter board (ex i2c), |
| 244 | * specify DEV_ON_BASEBOARD | 245 | * specify DEV_ON_BASEBOARD |
| 245 | */ | 246 | */ |
| 246 | #define DEV_ON_BASEBOARD 0 | 247 | #define DEV_ON_BASEBOARD 0 |
| 247 | #define DEV_ON_DGHTR_BRD 1 | 248 | #define DEV_ON_DGHTR_BRD 1 |
| 248 | u32 device_on; | 249 | u32 device_on; |
| 249 | 250 | ||
| 250 | u32 profile; /* Profiles (0-7) in which the module is present */ | 251 | u32 profile; /* Profiles (0-7) in which the module is present */ |
| 251 | }; | 252 | }; |
| 252 | 253 | ||
| 253 | /* AM335X - CPLD Register Offsets */ | 254 | /* AM335X - CPLD Register Offsets */ |
| 254 | #define CPLD_DEVICE_HDR 0x00 /* CPLD Header */ | 255 | #define CPLD_DEVICE_HDR 0x00 /* CPLD Header */ |
| 255 | #define CPLD_DEVICE_ID 0x04 /* CPLD identification */ | 256 | #define CPLD_DEVICE_ID 0x04 /* CPLD identification */ |
| 256 | #define CPLD_DEVICE_REV 0x0C /* Revision of the CPLD code */ | 257 | #define CPLD_DEVICE_REV 0x0C /* Revision of the CPLD code */ |
| 257 | #define CPLD_CFG_REG 0x10 /* Configuration Register */ | 258 | #define CPLD_CFG_REG 0x10 /* Configuration Register */ |
| 258 | 259 | ||
| 259 | static struct i2c_client *cpld_client; | 260 | static struct i2c_client *cpld_client; |
| 260 | 261 | ||
| 261 | static u32 am335x_evm_id; | 262 | static u32 am335x_evm_id; |
| 262 | 263 | ||
| 263 | static struct omap_board_config_kernel am335x_evm_config[] __initdata = { | 264 | static struct omap_board_config_kernel am335x_evm_config[] __initdata = { |
| 264 | }; | 265 | }; |
| 265 | 266 | ||
| 266 | /* | 267 | /* |
| 267 | * EVM Config held in On-Board eeprom device. | 268 | * EVM Config held in On-Board eeprom device. |
| 268 | * | 269 | * |
| 269 | * Header Format | 270 | * Header Format |
| 270 | * | 271 | * |
| 271 | * Name Size Contents | 272 | * Name Size Contents |
| 272 | * (Bytes) | 273 | * (Bytes) |
| 273 | *------------------------------------------------------------- | 274 | *------------------------------------------------------------- |
| 274 | * Header 4 0xAA, 0x55, 0x33, 0xEE | 275 | * Header 4 0xAA, 0x55, 0x33, 0xEE |
| 275 | * | 276 | * |
| 276 | * Board Name 8 Name for board in ASCII. | 277 | * Board Name 8 Name for board in ASCII. |
| 277 | * example "A33515BB" = "AM335X | 278 | * example "A33515BB" = "AM335X |
| 278 | Low Cost EVM board" | 279 | Low Cost EVM board" |
| 279 | * | 280 | * |
| 280 | * Version 4 Hardware version code for board in | 281 | * Version 4 Hardware version code for board in |
| 281 | * in ASCII. "1.0A" = rev.01.0A | 282 | * in ASCII. "1.0A" = rev.01.0A |
| 282 | * | 283 | * |
| 283 | * Serial Number 12 Serial number of the board. This is a 12 | 284 | * Serial Number 12 Serial number of the board. This is a 12 |
| 284 | * character string which is WWYY4P16nnnn, where | 285 | * character string which is WWYY4P16nnnn, where |
| 285 | * WW = 2 digit week of the year of production | 286 | * WW = 2 digit week of the year of production |
| 286 | * YY = 2 digit year of production | 287 | * YY = 2 digit year of production |
| 287 | * nnnn = incrementing board number | 288 | * nnnn = incrementing board number |
| 288 | * | 289 | * |
| 289 | * Configuration option 32 Codes(TBD) to show the configuration | 290 | * Configuration option 32 Codes(TBD) to show the configuration |
| 290 | * setup on this board. | 291 | * setup on this board. |
| 291 | * | 292 | * |
| 292 | * Available 32720 Available space for other non-volatile | 293 | * Available 32720 Available space for other non-volatile |
| 293 | * data. | 294 | * data. |
| 294 | */ | 295 | */ |
| 295 | struct am335x_evm_eeprom_config { | 296 | struct am335x_evm_eeprom_config { |
| 296 | u32 header; | 297 | u32 header; |
| 297 | u8 name[8]; | 298 | u8 name[8]; |
| 298 | char version[4]; | 299 | char version[4]; |
| 299 | u8 serial[12]; | 300 | u8 serial[12]; |
| 300 | u8 opt[32]; | 301 | u8 opt[32]; |
| 301 | }; | 302 | }; |
| 302 | 303 | ||
| 303 | static struct am335x_evm_eeprom_config config; | 304 | static struct am335x_evm_eeprom_config config; |
| 304 | static bool daughter_brd_detected; | 305 | static bool daughter_brd_detected; |
| 305 | 306 | ||
| 306 | #define GP_EVM_REV_IS_1_0 0x1 | 307 | #define GP_EVM_REV_IS_1_0 0x1 |
| 307 | #define GP_EVM_REV_IS_1_1A 0x2 | 308 | #define GP_EVM_REV_IS_1_1A 0x2 |
| 308 | #define GP_EVM_REV_IS_UNKNOWN 0xFF | 309 | #define GP_EVM_REV_IS_UNKNOWN 0xFF |
| 309 | static unsigned int gp_evm_revision = GP_EVM_REV_IS_UNKNOWN; | 310 | static unsigned int gp_evm_revision = GP_EVM_REV_IS_UNKNOWN; |
| 310 | unsigned int gigabit_enable = 1; | 311 | unsigned int gigabit_enable = 1; |
| 311 | 312 | ||
| 312 | #define EEPROM_MAC_ADDRESS_OFFSET 60 /* 4+8+4+12+32 */ | 313 | #define EEPROM_MAC_ADDRESS_OFFSET 60 /* 4+8+4+12+32 */ |
| 313 | #define EEPROM_NO_OF_MAC_ADDR 3 | 314 | #define EEPROM_NO_OF_MAC_ADDR 3 |
| 314 | static char am335x_mac_addr[EEPROM_NO_OF_MAC_ADDR][ETH_ALEN]; | 315 | static char am335x_mac_addr[EEPROM_NO_OF_MAC_ADDR][ETH_ALEN]; |
| 315 | 316 | ||
| 316 | #define AM335X_EEPROM_HEADER 0xEE3355AA | 317 | #define AM335X_EEPROM_HEADER 0xEE3355AA |
| 317 | 318 | ||
| 318 | /* current profile if exists else PROFILE_0 on error */ | 319 | /* current profile if exists else PROFILE_0 on error */ |
| 319 | static u32 am335x_get_profile_selection(void) | 320 | static u32 am335x_get_profile_selection(void) |
| 320 | { | 321 | { |
| 321 | int val = 0; | 322 | int val = 0; |
| 322 | 323 | ||
| 323 | if (!cpld_client) | 324 | if (!cpld_client) |
| 324 | /* error checking is not done in func's calling this routine. | 325 | /* error checking is not done in func's calling this routine. |
| 325 | so return profile 0 on error */ | 326 | so return profile 0 on error */ |
| 326 | return 0; | 327 | return 0; |
| 327 | 328 | ||
| 328 | val = i2c_smbus_read_word_data(cpld_client, CPLD_CFG_REG); | 329 | val = i2c_smbus_read_word_data(cpld_client, CPLD_CFG_REG); |
| 329 | if (val < 0) | 330 | if (val < 0) |
| 330 | return 0; /* default to Profile 0 on Error */ | 331 | return 0; /* default to Profile 0 on Error */ |
| 331 | else | 332 | else |
| 332 | return val & 0x7; | 333 | return val & 0x7; |
| 333 | } | 334 | } |
| 334 | 335 | ||
| 335 | /* Module pin mux for LCDC */ | 336 | /* Module pin mux for LCDC */ |
| 336 | static struct pinmux_config lcdc_pin_mux[] = { | 337 | static struct pinmux_config lcdc_pin_mux[] = { |
| 337 | {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 338 | {"lcd_data0.lcd_data0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 338 | | AM33XX_PULL_DISA}, | 339 | | AM33XX_PULL_DISA}, |
| 339 | {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 340 | {"lcd_data1.lcd_data1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 340 | | AM33XX_PULL_DISA}, | 341 | | AM33XX_PULL_DISA}, |
| 341 | {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 342 | {"lcd_data2.lcd_data2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 342 | | AM33XX_PULL_DISA}, | 343 | | AM33XX_PULL_DISA}, |
| 343 | {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 344 | {"lcd_data3.lcd_data3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 344 | | AM33XX_PULL_DISA}, | 345 | | AM33XX_PULL_DISA}, |
| 345 | {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 346 | {"lcd_data4.lcd_data4", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 346 | | AM33XX_PULL_DISA}, | 347 | | AM33XX_PULL_DISA}, |
| 347 | {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 348 | {"lcd_data5.lcd_data5", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 348 | | AM33XX_PULL_DISA}, | 349 | | AM33XX_PULL_DISA}, |
| 349 | {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 350 | {"lcd_data6.lcd_data6", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 350 | | AM33XX_PULL_DISA}, | 351 | | AM33XX_PULL_DISA}, |
| 351 | {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 352 | {"lcd_data7.lcd_data7", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 352 | | AM33XX_PULL_DISA}, | 353 | | AM33XX_PULL_DISA}, |
| 353 | {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 354 | {"lcd_data8.lcd_data8", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 354 | | AM33XX_PULL_DISA}, | 355 | | AM33XX_PULL_DISA}, |
| 355 | {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 356 | {"lcd_data9.lcd_data9", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 356 | | AM33XX_PULL_DISA}, | 357 | | AM33XX_PULL_DISA}, |
| 357 | {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 358 | {"lcd_data10.lcd_data10", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 358 | | AM33XX_PULL_DISA}, | 359 | | AM33XX_PULL_DISA}, |
| 359 | {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 360 | {"lcd_data11.lcd_data11", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 360 | | AM33XX_PULL_DISA}, | 361 | | AM33XX_PULL_DISA}, |
| 361 | {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 362 | {"lcd_data12.lcd_data12", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 362 | | AM33XX_PULL_DISA}, | 363 | | AM33XX_PULL_DISA}, |
| 363 | {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 364 | {"lcd_data13.lcd_data13", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 364 | | AM33XX_PULL_DISA}, | 365 | | AM33XX_PULL_DISA}, |
| 365 | {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 366 | {"lcd_data14.lcd_data14", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 366 | | AM33XX_PULL_DISA}, | 367 | | AM33XX_PULL_DISA}, |
| 367 | {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | 368 | {"lcd_data15.lcd_data15", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT |
| 368 | | AM33XX_PULL_DISA}, | 369 | | AM33XX_PULL_DISA}, |
| 369 | {"gpmc_ad8.lcd_data16", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 370 | {"gpmc_ad8.lcd_data16", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 370 | {"gpmc_ad9.lcd_data17", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 371 | {"gpmc_ad9.lcd_data17", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 371 | {"gpmc_ad10.lcd_data18", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 372 | {"gpmc_ad10.lcd_data18", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 372 | {"gpmc_ad11.lcd_data19", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 373 | {"gpmc_ad11.lcd_data19", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 373 | {"gpmc_ad12.lcd_data20", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 374 | {"gpmc_ad12.lcd_data20", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 374 | {"gpmc_ad13.lcd_data21", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 375 | {"gpmc_ad13.lcd_data21", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 375 | {"gpmc_ad14.lcd_data22", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 376 | {"gpmc_ad14.lcd_data22", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 376 | {"gpmc_ad15.lcd_data23", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 377 | {"gpmc_ad15.lcd_data23", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 377 | {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 378 | {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 378 | {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 379 | {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 379 | {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 380 | {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 380 | {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 381 | {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 381 | {NULL, 0}, | 382 | {NULL, 0}, |
| 382 | }; | 383 | }; |
| 383 | 384 | ||
| 384 | static struct pinmux_config tsc_pin_mux[] = { | 385 | static struct pinmux_config tsc_pin_mux[] = { |
| 385 | {"ain0.ain0", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 386 | {"ain0.ain0", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 386 | {"ain1.ain1", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 387 | {"ain1.ain1", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 387 | {"ain2.ain2", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 388 | {"ain2.ain2", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 388 | {"ain3.ain3", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 389 | {"ain3.ain3", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 389 | {"vrefp.vrefp", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 390 | {"vrefp.vrefp", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 390 | {"vrefn.vrefn", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, | 391 | {"vrefn.vrefn", OMAP_MUX_MODE0 | AM33XX_INPUT_EN}, |
| 391 | {NULL, 0}, | 392 | {NULL, 0}, |
| 392 | }; | 393 | }; |
| 393 | 394 | ||
| 394 | /* Pin mux for nand flash module */ | 395 | /* Pin mux for nand flash module */ |
| 395 | static struct pinmux_config nand_pin_mux[] = { | 396 | static struct pinmux_config nand_pin_mux[] = { |
| 396 | {"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 397 | {"gpmc_ad0.gpmc_ad0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 397 | {"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 398 | {"gpmc_ad1.gpmc_ad1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 398 | {"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 399 | {"gpmc_ad2.gpmc_ad2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 399 | {"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 400 | {"gpmc_ad3.gpmc_ad3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 400 | {"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 401 | {"gpmc_ad4.gpmc_ad4", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 401 | {"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 402 | {"gpmc_ad5.gpmc_ad5", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 402 | {"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 403 | {"gpmc_ad6.gpmc_ad6", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 403 | {"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 404 | {"gpmc_ad7.gpmc_ad7", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 404 | {"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 405 | {"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 405 | {"gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 406 | {"gpmc_wpn.gpmc_wpn", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
| 406 | {"gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 407 | {"gpmc_csn0.gpmc_csn0", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
| 407 | {"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 408 | {"gpmc_advn_ale.gpmc_advn_ale", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
| 408 | {"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 409 | {"gpmc_oen_ren.gpmc_oen_ren", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
| 409 | {"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 410 | {"gpmc_wen.gpmc_wen", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
| 410 | {"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, | 411 | {"gpmc_ben0_cle.gpmc_ben0_cle", OMAP_MUX_MODE0 | AM33XX_PULL_DISA}, |
| 411 | {NULL, 0}, | 412 | {NULL, 0}, |
| 412 | }; | 413 | }; |
| 413 | 414 | ||
| 414 | /* Module pin mux for SPI fash */ | 415 | /* Module pin mux for SPI fash */ |
| 415 | static struct pinmux_config spi0_pin_mux[] = { | 416 | static struct pinmux_config spi0_pin_mux[] = { |
| 416 | {"spi0_sclk.spi0_sclk", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | 417 | {"spi0_sclk.spi0_sclk", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL |
| 417 | | AM33XX_INPUT_EN}, | 418 | | AM33XX_INPUT_EN}, |
| 418 | {"spi0_d0.spi0_d0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | 419 | {"spi0_d0.spi0_d0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP |
| 419 | | AM33XX_INPUT_EN}, | 420 | | AM33XX_INPUT_EN}, |
| 420 | {"spi0_d1.spi0_d1", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | 421 | {"spi0_d1.spi0_d1", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL |
| 421 | | AM33XX_INPUT_EN}, | 422 | | AM33XX_INPUT_EN}, |
| 422 | {"spi0_cs0.spi0_cs0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | 423 | {"spi0_cs0.spi0_cs0", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL | AM33XX_PULL_UP |
| 423 | | AM33XX_INPUT_EN}, | 424 | | AM33XX_INPUT_EN}, |
| 424 | {NULL, 0}, | 425 | {NULL, 0}, |
| 425 | }; | 426 | }; |
| 426 | 427 | ||
| 427 | /* Module pin mux for SPI flash */ | 428 | /* Module pin mux for SPI flash */ |
| 428 | static struct pinmux_config spi1_pin_mux[] = { | 429 | static struct pinmux_config spi1_pin_mux[] = { |
| 429 | {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 430 | {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
| 430 | | AM33XX_INPUT_EN}, | 431 | | AM33XX_INPUT_EN}, |
| 431 | {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 432 | {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
| 432 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 433 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
| 433 | {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 434 | {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
| 434 | | AM33XX_INPUT_EN}, | 435 | | AM33XX_INPUT_EN}, |
| 435 | {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | 436 | {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |
| 436 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, | 437 | | AM33XX_PULL_UP | AM33XX_INPUT_EN}, |
| 437 | {NULL, 0}, | 438 | {NULL, 0}, |
| 438 | }; | 439 | }; |
| 439 | 440 | ||
| 440 | /* Module pin mux for rgmii1 */ | 441 | /* Module pin mux for rgmii1 */ |
| 441 | static struct pinmux_config rgmii1_pin_mux[] = { | 442 | static struct pinmux_config rgmii1_pin_mux[] = { |
| 442 | {"mii1_txen.rgmii1_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 443 | {"mii1_txen.rgmii1_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 443 | {"mii1_rxdv.rgmii1_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 444 | {"mii1_rxdv.rgmii1_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 444 | {"mii1_txd3.rgmii1_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 445 | {"mii1_txd3.rgmii1_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 445 | {"mii1_txd2.rgmii1_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 446 | {"mii1_txd2.rgmii1_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 446 | {"mii1_txd1.rgmii1_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 447 | {"mii1_txd1.rgmii1_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 447 | {"mii1_txd0.rgmii1_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 448 | {"mii1_txd0.rgmii1_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 448 | {"mii1_txclk.rgmii1_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 449 | {"mii1_txclk.rgmii1_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 449 | {"mii1_rxclk.rgmii1_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 450 | {"mii1_rxclk.rgmii1_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 450 | {"mii1_rxd3.rgmii1_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 451 | {"mii1_rxd3.rgmii1_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 451 | {"mii1_rxd2.rgmii1_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 452 | {"mii1_rxd2.rgmii1_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 452 | {"mii1_rxd1.rgmii1_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 453 | {"mii1_rxd1.rgmii1_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 453 | {"mii1_rxd0.rgmii1_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 454 | {"mii1_rxd0.rgmii1_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 454 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 455 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 455 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 456 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
| 456 | {NULL, 0}, | 457 | {NULL, 0}, |
| 457 | }; | 458 | }; |
| 458 | 459 | ||
| 459 | /* Module pin mux for rgmii2 */ | 460 | /* Module pin mux for rgmii2 */ |
| 460 | static struct pinmux_config rgmii2_pin_mux[] = { | 461 | static struct pinmux_config rgmii2_pin_mux[] = { |
| 461 | {"gpmc_a0.rgmii2_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 462 | {"gpmc_a0.rgmii2_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 462 | {"gpmc_a1.rgmii2_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 463 | {"gpmc_a1.rgmii2_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 463 | {"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 464 | {"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 464 | {"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 465 | {"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 465 | {"gpmc_a4.rgmii2_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 466 | {"gpmc_a4.rgmii2_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 466 | {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 467 | {"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 467 | {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, | 468 | {"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT}, |
| 468 | {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 469 | {"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 469 | {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 470 | {"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 470 | {"gpmc_a9.rgmii2_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 471 | {"gpmc_a9.rgmii2_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 471 | {"gpmc_a10.rgmii2_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 472 | {"gpmc_a10.rgmii2_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 472 | {"gpmc_a11.rgmii2_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, | 473 | {"gpmc_a11.rgmii2_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 473 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 474 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 474 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 475 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
| 475 | {NULL, 0}, | 476 | {NULL, 0}, |
| 476 | }; | 477 | }; |
| 477 | 478 | ||
| 478 | /* Module pin mux for mii1 */ | 479 | /* Module pin mux for mii1 */ |
| 479 | static struct pinmux_config mii1_pin_mux[] = { | 480 | static struct pinmux_config mii1_pin_mux[] = { |
| 480 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 481 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 481 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 482 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 482 | {"mii1_rxdv.mii1_rxdv", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 483 | {"mii1_rxdv.mii1_rxdv", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 483 | {"mii1_txd3.mii1_txd3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 484 | {"mii1_txd3.mii1_txd3", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 484 | {"mii1_txd2.mii1_txd2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 485 | {"mii1_txd2.mii1_txd2", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 485 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 486 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 486 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 487 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 487 | {"mii1_txclk.mii1_txclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 488 | {"mii1_txclk.mii1_txclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 488 | {"mii1_rxclk.mii1_rxclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 489 | {"mii1_rxclk.mii1_rxclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 489 | {"mii1_rxd3.mii1_rxd3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 490 | {"mii1_rxd3.mii1_rxd3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 490 | {"mii1_rxd2.mii1_rxd2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 491 | {"mii1_rxd2.mii1_rxd2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 491 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 492 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 492 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 493 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 493 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 494 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 494 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 495 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
| 495 | {NULL, 0}, | 496 | {NULL, 0}, |
| 496 | }; | 497 | }; |
| 497 | 498 | ||
| 498 | /* Module pin mux for rmii1 */ | 499 | /* Module pin mux for rmii1 */ |
| 499 | static struct pinmux_config rmii1_pin_mux[] = { | 500 | static struct pinmux_config rmii1_pin_mux[] = { |
| 500 | {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 501 | {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 501 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 502 | {"mii1_rxerr.mii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 502 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 503 | {"mii1_txen.mii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 503 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 504 | {"mii1_txd1.mii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 504 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, | 505 | {"mii1_txd0.mii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT}, |
| 505 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 506 | {"mii1_rxd1.mii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 506 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, | 507 | {"mii1_rxd0.mii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 507 | {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, | 508 | {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 508 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 509 | {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 509 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, | 510 | {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP}, |
| 510 | {NULL, 0}, | 511 | {NULL, 0}, |
| 511 | }; | 512 | }; |
| 512 | 513 | ||
| 513 | static struct pinmux_config i2c1_pin_mux[] = { | 514 | static struct pinmux_config i2c1_pin_mux[] = { |
| 514 | {"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | | 515 | {"spi0_d1.i2c1_sda", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | |
| 515 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, | 516 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, |
| 516 | {"spi0_cs0.i2c1_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | | 517 | {"spi0_cs0.i2c1_scl", OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW | |
| 517 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, | 518 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, |
| 518 | {NULL, 0}, | 519 | {NULL, 0}, |
| 519 | }; | 520 | }; |
| 520 | 521 | ||
| 521 | /* Module pin mux for mcasp1 */ | 522 | /* Module pin mux for mcasp1 */ |
| 522 | static struct pinmux_config mcasp1_pin_mux[] = { | 523 | static struct pinmux_config mcasp1_pin_mux[] = { |
| 523 | {"mii1_crs.mcasp1_aclkx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 524 | {"mii1_crs.mcasp1_aclkx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 524 | {"mii1_rxerr.mcasp1_fsx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 525 | {"mii1_rxerr.mcasp1_fsx", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 525 | {"mii1_col.mcasp1_axr2", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 526 | {"mii1_col.mcasp1_axr2", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 526 | {"rmii1_refclk.mcasp1_axr3", OMAP_MUX_MODE4 | | 527 | {"rmii1_refclk.mcasp1_axr3", OMAP_MUX_MODE4 | |
| 527 | AM33XX_PIN_INPUT_PULLDOWN}, | 528 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 528 | {NULL, 0}, | 529 | {NULL, 0}, |
| 529 | }; | 530 | }; |
| 530 | 531 | ||
| 531 | 532 | ||
| 532 | /* Module pin mux for mmc0 */ | 533 | /* Module pin mux for mmc0 */ |
| 533 | static struct pinmux_config mmc0_pin_mux[] = { | 534 | static struct pinmux_config mmc0_pin_mux[] = { |
| 534 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 535 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 535 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 536 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 536 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 537 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 537 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 538 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 538 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 539 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 539 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 540 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 540 | {"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 541 | {"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
| 541 | {"spi0_cs1.mmc0_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 542 | {"spi0_cs1.mmc0_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
| 542 | {NULL, 0}, | 543 | {NULL, 0}, |
| 543 | }; | 544 | }; |
| 544 | 545 | ||
| 545 | static struct pinmux_config mmc0_no_cd_pin_mux[] = { | 546 | static struct pinmux_config mmc0_no_cd_pin_mux[] = { |
| 546 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 547 | {"mmc0_dat3.mmc0_dat3", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 547 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 548 | {"mmc0_dat2.mmc0_dat2", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 548 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 549 | {"mmc0_dat1.mmc0_dat1", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 549 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 550 | {"mmc0_dat0.mmc0_dat0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 550 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 551 | {"mmc0_clk.mmc0_clk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 551 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 552 | {"mmc0_cmd.mmc0_cmd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 552 | {"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, | 553 | {"mcasp0_aclkr.mmc0_sdwp", OMAP_MUX_MODE4 | AM33XX_PIN_INPUT_PULLDOWN}, |
| 553 | {NULL, 0}, | 554 | {NULL, 0}, |
| 554 | }; | 555 | }; |
| 555 | 556 | ||
| 556 | /* Module pin mux for mmc1 */ | 557 | /* Module pin mux for mmc1 */ |
| 557 | static struct pinmux_config mmc1_pin_mux[] = { | 558 | static struct pinmux_config mmc1_pin_mux[] = { |
| 558 | {"gpmc_ad7.mmc1_dat7", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 559 | {"gpmc_ad7.mmc1_dat7", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 559 | {"gpmc_ad6.mmc1_dat6", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 560 | {"gpmc_ad6.mmc1_dat6", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 560 | {"gpmc_ad5.mmc1_dat5", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 561 | {"gpmc_ad5.mmc1_dat5", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 561 | {"gpmc_ad4.mmc1_dat4", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 562 | {"gpmc_ad4.mmc1_dat4", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 562 | {"gpmc_ad3.mmc1_dat3", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 563 | {"gpmc_ad3.mmc1_dat3", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 563 | {"gpmc_ad2.mmc1_dat2", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 564 | {"gpmc_ad2.mmc1_dat2", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 564 | {"gpmc_ad1.mmc1_dat1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 565 | {"gpmc_ad1.mmc1_dat1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 565 | {"gpmc_ad0.mmc1_dat0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, | 566 | {"gpmc_ad0.mmc1_dat0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, |
| 566 | {"gpmc_csn1.mmc1_clk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 567 | {"gpmc_csn1.mmc1_clk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
| 567 | {"gpmc_csn2.mmc1_cmd", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 568 | {"gpmc_csn2.mmc1_cmd", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
| 568 | {"gpmc_csn0.mmc1_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 569 | {"gpmc_csn0.mmc1_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
| 569 | {"gpmc_advn_ale.mmc1_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, | 570 | {"gpmc_advn_ale.mmc1_sdcd", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, |
| 570 | {NULL, 0}, | 571 | {NULL, 0}, |
| 571 | }; | 572 | }; |
| 572 | 573 | ||
| 573 | /* Module pin mux for uart3 */ | 574 | /* Module pin mux for uart3 */ |
| 574 | static struct pinmux_config uart3_pin_mux[] = { | 575 | static struct pinmux_config uart3_pin_mux[] = { |
| 575 | {"spi0_cs1.uart3_rxd", AM33XX_PIN_INPUT_PULLUP}, | 576 | {"spi0_cs1.uart3_rxd", AM33XX_PIN_INPUT_PULLUP}, |
| 576 | {"ecap0_in_pwm0_out.uart3_txd", AM33XX_PULL_ENBL}, | 577 | {"ecap0_in_pwm0_out.uart3_txd", AM33XX_PULL_ENBL}, |
| 577 | {NULL, 0}, | 578 | {NULL, 0}, |
| 578 | }; | 579 | }; |
| 579 | 580 | ||
| 580 | static struct pinmux_config d_can_gp_pin_mux[] = { | 581 | static struct pinmux_config d_can_gp_pin_mux[] = { |
| 581 | {"uart0_ctsn.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, | 582 | {"uart0_ctsn.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, |
| 582 | {"uart0_rtsn.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 583 | {"uart0_rtsn.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
| 583 | {NULL, 0}, | 584 | {NULL, 0}, |
| 584 | }; | 585 | }; |
| 585 | 586 | ||
| 586 | static struct pinmux_config d_can_ia_pin_mux[] = { | 587 | static struct pinmux_config d_can_ia_pin_mux[] = { |
| 587 | {"uart0_rxd.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, | 588 | {"uart0_rxd.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL}, |
| 588 | {"uart0_txd.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, | 589 | {"uart0_txd.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP}, |
| 589 | {NULL, 0}, | 590 | {NULL, 0}, |
| 590 | }; | 591 | }; |
| 591 | 592 | ||
| 592 | /* | 593 | /* |
| 593 | * @pin_mux - single module pin-mux structure which defines pin-mux | 594 | * @pin_mux - single module pin-mux structure which defines pin-mux |
| 594 | * details for all its pins. | 595 | * details for all its pins. |
| 595 | */ | 596 | */ |
| 596 | static void setup_pin_mux(struct pinmux_config *pin_mux) | 597 | static void setup_pin_mux(struct pinmux_config *pin_mux) |
| 597 | { | 598 | { |
| 598 | int i; | 599 | int i; |
| 599 | 600 | ||
| 600 | for (i = 0; pin_mux->string_name != NULL; pin_mux++) | 601 | for (i = 0; pin_mux->string_name != NULL; pin_mux++) |
| 601 | omap_mux_init_signal(pin_mux->string_name, pin_mux->val); | 602 | omap_mux_init_signal(pin_mux->string_name, pin_mux->val); |
| 602 | 603 | ||
| 603 | } | 604 | } |
| 604 | 605 | ||
| 605 | /* Matrix GPIO Keypad Support for profile-0 only: TODO */ | 606 | /* Matrix GPIO Keypad Support for profile-0 only: TODO */ |
| 606 | #ifdef CONFIG_KEYBOARD_MATRIX | 607 | #ifdef CONFIG_KEYBOARD_MATRIX |
| 607 | 608 | ||
| 608 | /* pinmux for keypad device */ | 609 | /* pinmux for keypad device */ |
| 609 | static struct pinmux_config matrix_keypad_pin_mux[] = { | 610 | static struct pinmux_config matrix_keypad_pin_mux[] = { |
| 610 | {"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 611 | {"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 611 | {"gpmc_a8.gpio1_24", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 612 | {"gpmc_a8.gpio1_24", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 612 | {"gpmc_a9.gpio1_25", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 613 | {"gpmc_a9.gpio1_25", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 613 | {"gpmc_a10.gpio1_26", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 614 | {"gpmc_a10.gpio1_26", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 614 | {"gpmc_a11.gpio1_27", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 615 | {"gpmc_a11.gpio1_27", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 615 | {NULL, 0}, | 616 | {NULL, 0}, |
| 616 | }; | 617 | }; |
| 617 | 618 | ||
| 618 | /* Keys mapping */ | 619 | /* Keys mapping */ |
| 619 | static const uint32_t am335x_evm_matrix_keys[] = { | 620 | static const uint32_t am335x_evm_matrix_keys[] = { |
| 620 | KEY(0, 0, KEY_MENU), | 621 | KEY(0, 0, KEY_MENU), |
| 621 | KEY(1, 0, KEY_BACK), | 622 | KEY(1, 0, KEY_BACK), |
| 622 | KEY(2, 0, KEY_LEFT), | 623 | KEY(2, 0, KEY_LEFT), |
| 623 | 624 | ||
| 624 | KEY(0, 1, KEY_RIGHT), | 625 | KEY(0, 1, KEY_RIGHT), |
| 625 | KEY(1, 1, KEY_ENTER), | 626 | KEY(1, 1, KEY_ENTER), |
| 626 | KEY(2, 1, KEY_DOWN), | 627 | KEY(2, 1, KEY_DOWN), |
| 627 | }; | 628 | }; |
| 628 | 629 | ||
| 629 | const struct matrix_keymap_data am335x_evm_keymap_data = { | 630 | const struct matrix_keymap_data am335x_evm_keymap_data = { |
| 630 | .keymap = am335x_evm_matrix_keys, | 631 | .keymap = am335x_evm_matrix_keys, |
| 631 | .keymap_size = ARRAY_SIZE(am335x_evm_matrix_keys), | 632 | .keymap_size = ARRAY_SIZE(am335x_evm_matrix_keys), |
| 632 | }; | 633 | }; |
| 633 | 634 | ||
| 634 | static const unsigned int am335x_evm_keypad_row_gpios[] = { | 635 | static const unsigned int am335x_evm_keypad_row_gpios[] = { |
| 635 | GPIO_TO_PIN(1, 25), GPIO_TO_PIN(1, 26), GPIO_TO_PIN(1, 27) | 636 | GPIO_TO_PIN(1, 25), GPIO_TO_PIN(1, 26), GPIO_TO_PIN(1, 27) |
| 636 | }; | 637 | }; |
| 637 | 638 | ||
| 638 | static const unsigned int am335x_evm_keypad_col_gpios[] = { | 639 | static const unsigned int am335x_evm_keypad_col_gpios[] = { |
| 639 | GPIO_TO_PIN(1, 21), GPIO_TO_PIN(1, 24) | 640 | GPIO_TO_PIN(1, 21), GPIO_TO_PIN(1, 24) |
| 640 | }; | 641 | }; |
| 641 | 642 | ||
| 642 | static struct matrix_keypad_platform_data am335x_evm_keypad_platform_data = { | 643 | static struct matrix_keypad_platform_data am335x_evm_keypad_platform_data = { |
| 643 | .keymap_data = &am335x_evm_keymap_data, | 644 | .keymap_data = &am335x_evm_keymap_data, |
| 644 | .row_gpios = am335x_evm_keypad_row_gpios, | 645 | .row_gpios = am335x_evm_keypad_row_gpios, |
| 645 | .num_row_gpios = ARRAY_SIZE(am335x_evm_keypad_row_gpios), | 646 | .num_row_gpios = ARRAY_SIZE(am335x_evm_keypad_row_gpios), |
| 646 | .col_gpios = am335x_evm_keypad_col_gpios, | 647 | .col_gpios = am335x_evm_keypad_col_gpios, |
| 647 | .num_col_gpios = ARRAY_SIZE(am335x_evm_keypad_col_gpios), | 648 | .num_col_gpios = ARRAY_SIZE(am335x_evm_keypad_col_gpios), |
| 648 | .active_low = false, | 649 | .active_low = false, |
| 649 | .debounce_ms = 5, | 650 | .debounce_ms = 5, |
| 650 | .col_scan_delay_us = 2, | 651 | .col_scan_delay_us = 2, |
| 651 | }; | 652 | }; |
| 652 | 653 | ||
| 653 | static struct platform_device am335x_evm_keyboard = { | 654 | static struct platform_device am335x_evm_keyboard = { |
| 654 | .name = "matrix-keypad", | 655 | .name = "matrix-keypad", |
| 655 | .id = -1, | 656 | .id = -1, |
| 656 | .dev = { | 657 | .dev = { |
| 657 | .platform_data = &am335x_evm_keypad_platform_data, | 658 | .platform_data = &am335x_evm_keypad_platform_data, |
| 658 | }, | 659 | }, |
| 659 | }; | 660 | }; |
| 660 | 661 | ||
| 661 | static void matrix_keypad_init(int evm_id, int profile) | 662 | static void matrix_keypad_init(int evm_id, int profile) |
| 662 | { | 663 | { |
| 663 | int err; | 664 | int err; |
| 664 | 665 | ||
| 665 | setup_pin_mux(matrix_keypad_pin_mux); | 666 | setup_pin_mux(matrix_keypad_pin_mux); |
| 666 | err = platform_device_register(&am335x_evm_keyboard); | 667 | err = platform_device_register(&am335x_evm_keyboard); |
| 667 | if (err) { | 668 | if (err) { |
| 668 | pr_err("failed to register matrix keypad (2x3) device\n"); | 669 | pr_err("failed to register matrix keypad (2x3) device\n"); |
| 669 | } | 670 | } |
| 670 | } | 671 | } |
| 671 | #endif | 672 | #endif |
| 672 | 673 | ||
| 673 | 674 | ||
| 674 | #ifdef CONFIG_KEYBOARD_GPIO | 675 | #ifdef CONFIG_KEYBOARD_GPIO |
| 675 | /* pinmux for keypad device */ | 676 | /* pinmux for keypad device */ |
| 676 | static struct pinmux_config volume_keys_pin_mux[] = { | 677 | static struct pinmux_config volume_keys_pin_mux[] = { |
| 677 | {"spi0_sclk.gpio0_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 678 | {"spi0_sclk.gpio0_2", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 678 | {"spi0_d0.gpio0_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 679 | {"spi0_d0.gpio0_3", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 679 | {NULL, 0}, | 680 | {NULL, 0}, |
| 680 | }; | 681 | }; |
| 681 | 682 | ||
| 682 | /* Configure GPIOs for Volume Keys */ | 683 | /* Configure GPIOs for Volume Keys */ |
| 683 | static struct gpio_keys_button am335x_evm_volume_gpio_buttons[] = { | 684 | static struct gpio_keys_button am335x_evm_volume_gpio_buttons[] = { |
| 684 | { | 685 | { |
| 685 | .code = KEY_VOLUMEUP, | 686 | .code = KEY_VOLUMEUP, |
| 686 | .gpio = GPIO_TO_PIN(0, 2), | 687 | .gpio = GPIO_TO_PIN(0, 2), |
| 687 | .active_low = true, | 688 | .active_low = true, |
| 688 | .desc = "volume-up", | 689 | .desc = "volume-up", |
| 689 | .type = EV_KEY, | 690 | .type = EV_KEY, |
| 690 | .wakeup = 1, | 691 | .wakeup = 1, |
| 691 | }, | 692 | }, |
| 692 | { | 693 | { |
| 693 | .code = KEY_VOLUMEDOWN, | 694 | .code = KEY_VOLUMEDOWN, |
| 694 | .gpio = GPIO_TO_PIN(0, 3), | 695 | .gpio = GPIO_TO_PIN(0, 3), |
| 695 | .active_low = true, | 696 | .active_low = true, |
| 696 | .desc = "volume-down", | 697 | .desc = "volume-down", |
| 697 | .type = EV_KEY, | 698 | .type = EV_KEY, |
| 698 | .wakeup = 1, | 699 | .wakeup = 1, |
| 699 | }, | 700 | }, |
| 700 | }; | 701 | }; |
| 701 | 702 | ||
| 702 | static struct gpio_keys_platform_data am335x_evm_volume_gpio_key_info = { | 703 | static struct gpio_keys_platform_data am335x_evm_volume_gpio_key_info = { |
| 703 | .buttons = am335x_evm_volume_gpio_buttons, | 704 | .buttons = am335x_evm_volume_gpio_buttons, |
| 704 | .nbuttons = ARRAY_SIZE(am335x_evm_volume_gpio_buttons), | 705 | .nbuttons = ARRAY_SIZE(am335x_evm_volume_gpio_buttons), |
| 705 | }; | 706 | }; |
| 706 | 707 | ||
| 707 | static struct platform_device am335x_evm_volume_keys = { | 708 | static struct platform_device am335x_evm_volume_keys = { |
| 708 | .name = "gpio-keys", | 709 | .name = "gpio-keys", |
| 709 | .id = -1, | 710 | .id = -1, |
| 710 | .dev = { | 711 | .dev = { |
| 711 | .platform_data = &am335x_evm_volume_gpio_key_info, | 712 | .platform_data = &am335x_evm_volume_gpio_key_info, |
| 712 | }, | 713 | }, |
| 713 | }; | 714 | }; |
| 714 | 715 | ||
| 715 | static void volume_keys_init(int evm_id, int profile) | 716 | static void volume_keys_init(int evm_id, int profile) |
| 716 | { | 717 | { |
| 717 | int err; | 718 | int err; |
| 718 | 719 | ||
| 719 | setup_pin_mux(volume_keys_pin_mux); | 720 | setup_pin_mux(volume_keys_pin_mux); |
| 720 | err = platform_device_register(&am335x_evm_volume_keys); | 721 | err = platform_device_register(&am335x_evm_volume_keys); |
| 721 | if (err) | 722 | if (err) |
| 722 | pr_err("failed to register matrix keypad (2x3) device\n"); | 723 | pr_err("failed to register matrix keypad (2x3) device\n"); |
| 723 | } | 724 | } |
| 724 | #endif | 725 | #endif |
| 725 | 726 | ||
| 726 | /* | 727 | /* |
| 727 | * @evm_id - evm id which needs to be configured | 728 | * @evm_id - evm id which needs to be configured |
| 728 | * @dev_cfg - single evm structure which includes | 729 | * @dev_cfg - single evm structure which includes |
| 729 | * all module inits, pin-mux defines | 730 | * all module inits, pin-mux defines |
| 730 | * @profile - if present, else PROFILE_NONE | 731 | * @profile - if present, else PROFILE_NONE |
| 731 | * @dghtr_brd_flg - Whether Daughter board is present or not | 732 | * @dghtr_brd_flg - Whether Daughter board is present or not |
| 732 | */ | 733 | */ |
| 733 | static void _configure_device(int evm_id, struct evm_dev_cfg *dev_cfg, | 734 | static void _configure_device(int evm_id, struct evm_dev_cfg *dev_cfg, |
| 734 | int profile) | 735 | int profile) |
| 735 | { | 736 | { |
| 736 | int i; | 737 | int i; |
| 737 | 738 | ||
| 738 | /* | 739 | /* |
| 739 | * Only General Purpose & Industrial Auto Motro Control | 740 | * Only General Purpose & Industrial Auto Motro Control |
| 740 | * EVM has profiles. So check if this evm has profile. | 741 | * EVM has profiles. So check if this evm has profile. |
| 741 | * If not, ignore the profile comparison | 742 | * If not, ignore the profile comparison |
| 742 | */ | 743 | */ |
| 743 | 744 | ||
| 744 | /* | 745 | /* |
| 745 | * If the device is on baseboard, directly configure it. Else (device on | 746 | * If the device is on baseboard, directly configure it. Else (device on |
| 746 | * Daughter board), check if the daughter card is detected. | 747 | * Daughter board), check if the daughter card is detected. |
| 747 | */ | 748 | */ |
| 748 | if (profile == PROFILE_NONE) { | 749 | if (profile == PROFILE_NONE) { |
| 749 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { | 750 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { |
| 750 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) | 751 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) |
| 751 | dev_cfg->device_init(evm_id, profile); | 752 | dev_cfg->device_init(evm_id, profile); |
| 752 | else if (daughter_brd_detected == true) | 753 | else if (daughter_brd_detected == true) |
| 753 | dev_cfg->device_init(evm_id, profile); | 754 | dev_cfg->device_init(evm_id, profile); |
| 754 | } | 755 | } |
| 755 | } else { | 756 | } else { |
| 756 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { | 757 | for (i = 0; dev_cfg->device_init != NULL; dev_cfg++) { |
| 757 | if (dev_cfg->profile & profile) { | 758 | if (dev_cfg->profile & profile) { |
| 758 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) | 759 | if (dev_cfg->device_on == DEV_ON_BASEBOARD) |
| 759 | dev_cfg->device_init(evm_id, profile); | 760 | dev_cfg->device_init(evm_id, profile); |
| 760 | else if (daughter_brd_detected == true) | 761 | else if (daughter_brd_detected == true) |
| 761 | dev_cfg->device_init(evm_id, profile); | 762 | dev_cfg->device_init(evm_id, profile); |
| 762 | } | 763 | } |
| 763 | } | 764 | } |
| 764 | } | 765 | } |
| 765 | } | 766 | } |
| 766 | 767 | ||
| 767 | #define AM335X_LCD_BL_PIN GPIO_TO_PIN(0, 7) | 768 | #define AM335X_LCD_BL_PIN GPIO_TO_PIN(0, 7) |
| 768 | 769 | ||
| 769 | /* pinmux for usb0 drvvbus */ | 770 | /* pinmux for usb0 drvvbus */ |
| 770 | static struct pinmux_config usb0_pin_mux[] = { | 771 | static struct pinmux_config usb0_pin_mux[] = { |
| 771 | {"usb0_drvvbus.usb0_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 772 | {"usb0_drvvbus.usb0_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 772 | {NULL, 0}, | 773 | {NULL, 0}, |
| 773 | }; | 774 | }; |
| 774 | 775 | ||
| 775 | /* pinmux for usb1 drvvbus */ | 776 | /* pinmux for usb1 drvvbus */ |
| 776 | static struct pinmux_config usb1_pin_mux[] = { | 777 | static struct pinmux_config usb1_pin_mux[] = { |
| 777 | {"usb1_drvvbus.usb1_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 778 | {"usb1_drvvbus.usb1_drvvbus", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 778 | {NULL, 0}, | 779 | {NULL, 0}, |
| 779 | }; | 780 | }; |
| 780 | 781 | ||
| 781 | /* pinmux for profibus */ | 782 | /* pinmux for profibus */ |
| 782 | static struct pinmux_config profibus_pin_mux[] = { | 783 | static struct pinmux_config profibus_pin_mux[] = { |
| 783 | {"uart1_rxd.pr1_uart0_rxd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_INPUT}, | 784 | {"uart1_rxd.pr1_uart0_rxd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_INPUT}, |
| 784 | {"uart1_txd.pr1_uart0_txd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, | 785 | {"uart1_txd.pr1_uart0_txd_mux1", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, |
| 785 | {"mcasp0_fsr.pr1_pru0_pru_r30_5", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, | 786 | {"mcasp0_fsr.pr1_pru0_pru_r30_5", OMAP_MUX_MODE5 | AM33XX_PIN_OUTPUT}, |
| 786 | {NULL, 0}, | 787 | {NULL, 0}, |
| 787 | }; | 788 | }; |
| 788 | 789 | ||
| 789 | /* Module pin mux for eCAP0 */ | 790 | /* Module pin mux for eCAP0 */ |
| 790 | static struct pinmux_config ecap0_pin_mux[] = { | 791 | static struct pinmux_config ecap0_pin_mux[] = { |
| 791 | {"ecap0_in_pwm0_out.gpio0_7", AM33XX_PIN_OUTPUT}, | 792 | {"ecap0_in_pwm0_out.gpio0_7", AM33XX_PIN_OUTPUT}, |
| 792 | {NULL, 0}, | 793 | {NULL, 0}, |
| 793 | }; | 794 | }; |
| 794 | 795 | ||
| 795 | #define AM335XEVM_WLAN_IRQ_GPIO GPIO_TO_PIN(3, 17) | 796 | #define AM335XEVM_WLAN_IRQ_GPIO GPIO_TO_PIN(3, 17) |
| 796 | 797 | ||
| 797 | struct wl12xx_platform_data am335xevm_wlan_data = { | 798 | struct wl12xx_platform_data am335xevm_wlan_data = { |
| 798 | .irq = OMAP_GPIO_IRQ(AM335XEVM_WLAN_IRQ_GPIO), | 799 | .irq = OMAP_GPIO_IRQ(AM335XEVM_WLAN_IRQ_GPIO), |
| 799 | .board_ref_clock = WL12XX_REFCLOCK_38_XTAL, /* 38.4Mhz */ | 800 | .board_ref_clock = WL12XX_REFCLOCK_38_XTAL, /* 38.4Mhz */ |
| 800 | }; | 801 | }; |
| 801 | 802 | ||
| 802 | /* Module pin mux for wlan and bluetooth */ | 803 | /* Module pin mux for wlan and bluetooth */ |
| 803 | static struct pinmux_config mmc2_wl12xx_pin_mux[] = { | 804 | static struct pinmux_config mmc2_wl12xx_pin_mux[] = { |
| 804 | {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 805 | {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 805 | {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 806 | {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 806 | {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 807 | {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 807 | {"gpmc_ben1.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 808 | {"gpmc_ben1.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 808 | {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 809 | {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 809 | {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, | 810 | {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, |
| 810 | {NULL, 0}, | 811 | {NULL, 0}, |
| 811 | }; | 812 | }; |
| 812 | 813 | ||
| 813 | static struct pinmux_config uart1_wl12xx_pin_mux[] = { | 814 | static struct pinmux_config uart1_wl12xx_pin_mux[] = { |
| 814 | {"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, | 815 | {"uart1_ctsn.uart1_ctsn", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT}, |
| 815 | {"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT}, | 816 | {"uart1_rtsn.uart1_rtsn", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT}, |
| 816 | {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, | 817 | {"uart1_rxd.uart1_rxd", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP}, |
| 817 | {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL}, | 818 | {"uart1_txd.uart1_txd", OMAP_MUX_MODE0 | AM33XX_PULL_ENBL}, |
| 818 | {NULL, 0}, | 819 | {NULL, 0}, |
| 819 | }; | 820 | }; |
| 820 | 821 | ||
| 821 | static struct pinmux_config wl12xx_pin_mux_evm_rev1_1a[] = { | 822 | static struct pinmux_config wl12xx_pin_mux_evm_rev1_1a[] = { |
| 822 | {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 823 | {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 823 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 824 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 824 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 825 | {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 825 | {NULL, 0}, | 826 | {NULL, 0}, |
| 826 | }; | 827 | }; |
| 827 | 828 | ||
| 828 | static struct pinmux_config wl12xx_pin_mux_evm_rev1_0[] = { | 829 | static struct pinmux_config wl12xx_pin_mux_evm_rev1_0[] = { |
| 829 | {"gpmc_csn1.gpio1_30", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 830 | {"gpmc_csn1.gpio1_30", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 830 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, | 831 | {"mcasp0_ahclkr.gpio3_17", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, |
| 831 | {"gpmc_csn2.gpio1_31", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, | 832 | {"gpmc_csn2.gpio1_31", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, |
| 832 | {NULL, 0}, | 833 | {NULL, 0}, |
| 833 | }; | 834 | }; |
| 834 | 835 | ||
| 835 | static int backlight_enable = false; | 836 | static int backlight_enable = false; |
| 836 | 837 | ||
| 837 | static void enable_ecap0(int evm_id, int profile) | 838 | static void enable_ecap0(int evm_id, int profile) |
| 838 | { | 839 | { |
| 839 | backlight_enable = true; | 840 | backlight_enable = true; |
| 840 | } | 841 | } |
| 841 | 842 | ||
| 842 | static int __init ecap0_init(void) | 843 | static int __init ecap0_init(void) |
| 843 | { | 844 | { |
| 844 | int status = 0; | 845 | int status = 0; |
| 845 | 846 | ||
| 846 | if (backlight_enable) { | 847 | if (backlight_enable) { |
| 847 | setup_pin_mux(ecap0_pin_mux); | 848 | setup_pin_mux(ecap0_pin_mux); |
| 848 | 849 | ||
| 849 | status = gpio_request(AM335X_LCD_BL_PIN, "lcd bl\n"); | 850 | status = gpio_request(AM335X_LCD_BL_PIN, "lcd bl\n"); |
| 850 | if (status < 0) | 851 | if (status < 0) |
| 851 | pr_warn("Failed to request gpio for LCD backlight\n"); | 852 | pr_warn("Failed to request gpio for LCD backlight\n"); |
| 852 | 853 | ||
| 853 | gpio_direction_output(AM335X_LCD_BL_PIN, 1); | 854 | gpio_direction_output(AM335X_LCD_BL_PIN, 1); |
| 854 | } | 855 | } |
| 855 | return status; | 856 | return status; |
| 856 | } | 857 | } |
| 857 | late_initcall(ecap0_init); | 858 | late_initcall(ecap0_init); |
| 858 | 859 | ||
| 859 | static int __init conf_disp_pll(int rate) | 860 | static int __init conf_disp_pll(int rate) |
| 860 | { | 861 | { |
| 861 | struct clk *disp_pll; | 862 | struct clk *disp_pll; |
| 862 | int ret = -EINVAL; | 863 | int ret = -EINVAL; |
| 863 | 864 | ||
| 864 | disp_pll = clk_get(NULL, "dpll_disp_ck"); | 865 | disp_pll = clk_get(NULL, "dpll_disp_ck"); |
| 865 | if (IS_ERR(disp_pll)) { | 866 | if (IS_ERR(disp_pll)) { |
| 866 | pr_err("Cannot clk_get disp_pll\n"); | 867 | pr_err("Cannot clk_get disp_pll\n"); |
| 867 | goto out; | 868 | goto out; |
| 868 | } | 869 | } |
| 869 | 870 | ||
| 870 | ret = clk_set_rate(disp_pll, rate); | 871 | ret = clk_set_rate(disp_pll, rate); |
| 871 | clk_put(disp_pll); | 872 | clk_put(disp_pll); |
| 872 | out: | 873 | out: |
| 873 | return ret; | 874 | return ret; |
| 874 | } | 875 | } |
| 875 | 876 | ||
| 876 | static void lcdc_init(int evm_id, int profile) | 877 | static void lcdc_init(int evm_id, int profile) |
| 877 | { | 878 | { |
| 878 | 879 | ||
| 879 | setup_pin_mux(lcdc_pin_mux); | 880 | setup_pin_mux(lcdc_pin_mux); |
| 880 | 881 | ||
| 881 | if (conf_disp_pll(300000000)) { | 882 | if (conf_disp_pll(300000000)) { |
| 882 | pr_info("Failed configure display PLL, not attempting to" | 883 | pr_info("Failed configure display PLL, not attempting to" |
| 883 | "register LCDC\n"); | 884 | "register LCDC\n"); |
| 884 | return; | 885 | return; |
| 885 | } | 886 | } |
| 886 | 887 | ||
| 887 | if (am33xx_register_lcdc(&TFC_S9700RTWV35TR_01B_pdata)) | 888 | if (am33xx_register_lcdc(&TFC_S9700RTWV35TR_01B_pdata)) |
| 888 | pr_info("Failed to register LCDC device\n"); | 889 | pr_info("Failed to register LCDC device\n"); |
| 889 | return; | 890 | return; |
| 890 | } | 891 | } |
| 891 | 892 | ||
| 892 | static void tsc_init(int evm_id, int profile) | 893 | static void tsc_init(int evm_id, int profile) |
| 893 | { | 894 | { |
| 894 | int err; | 895 | int err; |
| 895 | 896 | ||
| 896 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) { | 897 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) { |
| 897 | am335x_touchscreen_data.analog_input = 1; | 898 | am335x_touchscreen_data.analog_input = 1; |
| 898 | pr_info("TSC connected to beta GP EVM\n"); | 899 | pr_info("TSC connected to beta GP EVM\n"); |
| 899 | } else { | 900 | } else { |
| 900 | am335x_touchscreen_data.analog_input = 0; | 901 | am335x_touchscreen_data.analog_input = 0; |
| 901 | pr_info("TSC connected to alpha GP EVM\n"); | 902 | pr_info("TSC connected to alpha GP EVM\n"); |
| 902 | } | 903 | } |
| 903 | setup_pin_mux(tsc_pin_mux); | 904 | setup_pin_mux(tsc_pin_mux); |
| 904 | err = platform_device_register(&tsc_device); | 905 | err = platform_device_register(&tsc_device); |
| 905 | if (err) | 906 | if (err) |
| 906 | pr_err("failed to register touchscreen device\n"); | 907 | pr_err("failed to register touchscreen device\n"); |
| 907 | } | 908 | } |
| 908 | 909 | ||
| 909 | static void rgmii1_init(int evm_id, int profile) | 910 | static void rgmii1_init(int evm_id, int profile) |
| 910 | { | 911 | { |
| 911 | setup_pin_mux(rgmii1_pin_mux); | 912 | setup_pin_mux(rgmii1_pin_mux); |
| 912 | return; | 913 | return; |
| 913 | } | 914 | } |
| 914 | 915 | ||
| 915 | static void rgmii2_init(int evm_id, int profile) | 916 | static void rgmii2_init(int evm_id, int profile) |
| 916 | { | 917 | { |
| 917 | setup_pin_mux(rgmii2_pin_mux); | 918 | setup_pin_mux(rgmii2_pin_mux); |
| 918 | return; | 919 | return; |
| 919 | } | 920 | } |
| 920 | 921 | ||
| 921 | static void mii1_init(int evm_id, int profile) | 922 | static void mii1_init(int evm_id, int profile) |
| 922 | { | 923 | { |
| 923 | setup_pin_mux(mii1_pin_mux); | 924 | setup_pin_mux(mii1_pin_mux); |
| 924 | return; | 925 | return; |
| 925 | } | 926 | } |
| 926 | 927 | ||
| 927 | static void rmii1_init(int evm_id, int profile) | 928 | static void rmii1_init(int evm_id, int profile) |
| 928 | { | 929 | { |
| 929 | setup_pin_mux(rmii1_pin_mux); | 930 | setup_pin_mux(rmii1_pin_mux); |
| 930 | return; | 931 | return; |
| 931 | } | 932 | } |
| 932 | 933 | ||
| 933 | static void usb0_init(int evm_id, int profile) | 934 | static void usb0_init(int evm_id, int profile) |
| 934 | { | 935 | { |
| 935 | setup_pin_mux(usb0_pin_mux); | 936 | setup_pin_mux(usb0_pin_mux); |
| 936 | return; | 937 | return; |
| 937 | } | 938 | } |
| 938 | 939 | ||
| 939 | static void usb1_init(int evm_id, int profile) | 940 | static void usb1_init(int evm_id, int profile) |
| 940 | { | 941 | { |
| 941 | setup_pin_mux(usb1_pin_mux); | 942 | setup_pin_mux(usb1_pin_mux); |
| 942 | return; | 943 | return; |
| 943 | } | 944 | } |
| 944 | 945 | ||
| 945 | /* setup uart3 */ | 946 | /* setup uart3 */ |
| 946 | static void uart3_init(int evm_id, int profile) | 947 | static void uart3_init(int evm_id, int profile) |
| 947 | { | 948 | { |
| 948 | setup_pin_mux(uart3_pin_mux); | 949 | setup_pin_mux(uart3_pin_mux); |
| 949 | return; | 950 | return; |
| 950 | } | 951 | } |
| 951 | 952 | ||
| 952 | /* NAND partition information */ | 953 | /* NAND partition information */ |
| 953 | static struct mtd_partition am335x_nand_partitions[] = { | 954 | static struct mtd_partition am335x_nand_partitions[] = { |
| 954 | /* All the partition sizes are listed in terms of NAND block size */ | 955 | /* All the partition sizes are listed in terms of NAND block size */ |
| 955 | { | 956 | { |
| 956 | .name = "SPL", | 957 | .name = "SPL", |
| 957 | .offset = 0, /* Offset = 0x0 */ | 958 | .offset = 0, /* Offset = 0x0 */ |
| 958 | .size = SZ_128K, | 959 | .size = SZ_128K, |
| 959 | }, | 960 | }, |
| 960 | { | 961 | { |
| 961 | .name = "SPL.backup1", | 962 | .name = "SPL.backup1", |
| 962 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ | 963 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ |
| 963 | .size = SZ_128K, | 964 | .size = SZ_128K, |
| 964 | }, | 965 | }, |
| 965 | { | 966 | { |
| 966 | .name = "SPL.backup2", | 967 | .name = "SPL.backup2", |
| 967 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */ | 968 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */ |
| 968 | .size = SZ_128K, | 969 | .size = SZ_128K, |
| 969 | }, | 970 | }, |
| 970 | { | 971 | { |
| 971 | .name = "SPL.backup3", | 972 | .name = "SPL.backup3", |
| 972 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ | 973 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ |
| 973 | .size = SZ_128K, | 974 | .size = SZ_128K, |
| 974 | }, | 975 | }, |
| 975 | { | 976 | { |
| 976 | .name = "U-Boot", | 977 | .name = "U-Boot", |
| 977 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ | 978 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ |
| 978 | .size = 15 * SZ_128K, | 979 | .size = 15 * SZ_128K, |
| 979 | }, | 980 | }, |
| 980 | { | 981 | { |
| 981 | .name = "U-Boot Env", | 982 | .name = "U-Boot Env", |
| 982 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ | 983 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ |
| 983 | .size = 1 * SZ_128K, | 984 | .size = 1 * SZ_128K, |
| 984 | }, | 985 | }, |
| 985 | { | 986 | { |
| 986 | .name = "Kernel", | 987 | .name = "Kernel", |
| 987 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ | 988 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ |
| 988 | .size = 40 * SZ_128K, | 989 | .size = 40 * SZ_128K, |
| 989 | }, | 990 | }, |
| 990 | { | 991 | { |
| 991 | .name = "File System", | 992 | .name = "File System", |
| 992 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */ | 993 | .offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */ |
| 993 | .size = MTDPART_SIZ_FULL, | 994 | .size = MTDPART_SIZ_FULL, |
| 994 | }, | 995 | }, |
| 995 | }; | 996 | }; |
| 996 | 997 | ||
| 997 | /* SPI 0/1 Platform Data */ | 998 | /* SPI 0/1 Platform Data */ |
| 998 | /* SPI flash information */ | 999 | /* SPI flash information */ |
| 999 | static struct mtd_partition am335x_spi_partitions[] = { | 1000 | static struct mtd_partition am335x_spi_partitions[] = { |
| 1000 | /* All the partition sizes are listed in terms of erase size */ | 1001 | /* All the partition sizes are listed in terms of erase size */ |
| 1001 | { | 1002 | { |
| 1002 | .name = "U-Boot-min", | 1003 | .name = "U-Boot-min", |
| 1003 | .offset = 0, | 1004 | .offset = 0, |
| 1004 | .size = SZ_128K, | 1005 | .size = SZ_128K, |
| 1005 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | 1006 | .mask_flags = MTD_WRITEABLE, /* force read-only */ |
| 1006 | }, | 1007 | }, |
| 1007 | { | 1008 | { |
| 1008 | .name = "U-Boot", | 1009 | .name = "U-Boot", |
| 1009 | .offset = MTDPART_OFS_APPEND, | 1010 | .offset = MTDPART_OFS_APPEND, |
| 1010 | .size = 2 * SZ_128K, | 1011 | .size = 2 * SZ_128K, |
| 1011 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | 1012 | .mask_flags = MTD_WRITEABLE, /* force read-only */ |
| 1012 | }, | 1013 | }, |
| 1013 | { | 1014 | { |
| 1014 | .name = "U-Boot Env", | 1015 | .name = "U-Boot Env", |
| 1015 | .offset = MTDPART_OFS_APPEND, | 1016 | .offset = MTDPART_OFS_APPEND, |
| 1016 | .size = 2 * SZ_4K, | 1017 | .size = 2 * SZ_4K, |
| 1017 | }, | 1018 | }, |
| 1018 | { | 1019 | { |
| 1019 | .name = "Kernel", | 1020 | .name = "Kernel", |
| 1020 | .offset = MTDPART_OFS_APPEND, | 1021 | .offset = MTDPART_OFS_APPEND, |
| 1021 | .size = 28 * SZ_128K, | 1022 | .size = 28 * SZ_128K, |
| 1022 | }, | 1023 | }, |
| 1023 | { | 1024 | { |
| 1024 | .name = "File System", | 1025 | .name = "File System", |
| 1025 | .offset = MTDPART_OFS_APPEND, | 1026 | .offset = MTDPART_OFS_APPEND, |
| 1026 | .size = MTDPART_SIZ_FULL, /* size ~= 1.1 MiB */ | 1027 | .size = MTDPART_SIZ_FULL, /* size ~= 1.1 MiB */ |
| 1027 | } | 1028 | } |
| 1028 | }; | 1029 | }; |
| 1029 | 1030 | ||
| 1030 | static const struct flash_platform_data am335x_spi_flash = { | 1031 | static const struct flash_platform_data am335x_spi_flash = { |
| 1031 | .type = "w25q64", | 1032 | .type = "w25q64", |
| 1032 | .name = "spi_flash", | 1033 | .name = "spi_flash", |
| 1033 | .parts = am335x_spi_partitions, | 1034 | .parts = am335x_spi_partitions, |
| 1034 | .nr_parts = ARRAY_SIZE(am335x_spi_partitions), | 1035 | .nr_parts = ARRAY_SIZE(am335x_spi_partitions), |
| 1035 | }; | 1036 | }; |
| 1036 | 1037 | ||
| 1037 | /* | 1038 | /* |
| 1038 | * SPI Flash works at 80Mhz however SPI Controller works at 48MHz. | 1039 | * SPI Flash works at 80Mhz however SPI Controller works at 48MHz. |
| 1039 | * So setup Max speed to be less than that of Controller speed | 1040 | * So setup Max speed to be less than that of Controller speed |
| 1040 | */ | 1041 | */ |
| 1041 | static struct spi_board_info am335x_spi0_slave_info[] = { | 1042 | static struct spi_board_info am335x_spi0_slave_info[] = { |
| 1042 | { | 1043 | { |
| 1043 | .modalias = "m25p80", | 1044 | .modalias = "m25p80", |
| 1044 | .platform_data = &am335x_spi_flash, | 1045 | .platform_data = &am335x_spi_flash, |
| 1045 | .irq = -1, | 1046 | .irq = -1, |
| 1046 | .max_speed_hz = 24000000, | 1047 | .max_speed_hz = 24000000, |
| 1047 | .bus_num = 1, | 1048 | .bus_num = 1, |
| 1048 | .chip_select = 0, | 1049 | .chip_select = 0, |
| 1049 | }, | 1050 | }, |
| 1050 | }; | 1051 | }; |
| 1051 | 1052 | ||
| 1052 | static struct spi_board_info am335x_spi1_slave_info[] = { | 1053 | static struct spi_board_info am335x_spi1_slave_info[] = { |
| 1053 | { | 1054 | { |
| 1054 | .modalias = "m25p80", | 1055 | .modalias = "m25p80", |
| 1055 | .platform_data = &am335x_spi_flash, | 1056 | .platform_data = &am335x_spi_flash, |
| 1056 | .irq = -1, | 1057 | .irq = -1, |
| 1057 | .max_speed_hz = 12000000, | 1058 | .max_speed_hz = 12000000, |
| 1058 | .bus_num = 2, | 1059 | .bus_num = 2, |
| 1059 | .chip_select = 0, | 1060 | .chip_select = 0, |
| 1060 | }, | 1061 | }, |
| 1061 | }; | 1062 | }; |
| 1062 | 1063 | ||
| 1063 | static void evm_nand_init(int evm_id, int profile) | 1064 | static void evm_nand_init(int evm_id, int profile) |
| 1064 | { | 1065 | { |
| 1065 | setup_pin_mux(nand_pin_mux); | 1066 | setup_pin_mux(nand_pin_mux); |
| 1066 | board_nand_init(am335x_nand_partitions, | 1067 | board_nand_init(am335x_nand_partitions, |
| 1067 | ARRAY_SIZE(am335x_nand_partitions), 0, 0); | 1068 | ARRAY_SIZE(am335x_nand_partitions), 0, 0); |
| 1068 | } | 1069 | } |
| 1069 | 1070 | ||
| 1070 | static struct lis3lv02d_platform_data lis331dlh_pdata = { | 1071 | static struct lis3lv02d_platform_data lis331dlh_pdata = { |
| 1071 | .click_flags = LIS3_CLICK_SINGLE_X | | 1072 | .click_flags = LIS3_CLICK_SINGLE_X | |
| 1072 | LIS3_CLICK_SINGLE_Y | | 1073 | LIS3_CLICK_SINGLE_Y | |
| 1073 | LIS3_CLICK_SINGLE_Z, | 1074 | LIS3_CLICK_SINGLE_Z, |
| 1074 | .wakeup_flags = LIS3_WAKEUP_X_LO | LIS3_WAKEUP_X_HI | | 1075 | .wakeup_flags = LIS3_WAKEUP_X_LO | LIS3_WAKEUP_X_HI | |
| 1075 | LIS3_WAKEUP_Y_LO | LIS3_WAKEUP_Y_HI | | 1076 | LIS3_WAKEUP_Y_LO | LIS3_WAKEUP_Y_HI | |
| 1076 | LIS3_WAKEUP_Z_LO | LIS3_WAKEUP_Z_HI, | 1077 | LIS3_WAKEUP_Z_LO | LIS3_WAKEUP_Z_HI, |
| 1077 | .irq_cfg = LIS3_IRQ1_CLICK | LIS3_IRQ2_CLICK, | 1078 | .irq_cfg = LIS3_IRQ1_CLICK | LIS3_IRQ2_CLICK, |
| 1078 | .wakeup_thresh = 10, | 1079 | .wakeup_thresh = 10, |
| 1079 | .click_thresh_x = 10, | 1080 | .click_thresh_x = 10, |
| 1080 | .click_thresh_y = 10, | 1081 | .click_thresh_y = 10, |
| 1081 | .click_thresh_z = 10, | 1082 | .click_thresh_z = 10, |
| 1082 | .g_range = 2, | 1083 | .g_range = 2, |
| 1083 | .st_min_limits[0] = 120, | 1084 | .st_min_limits[0] = 120, |
| 1084 | .st_min_limits[1] = 120, | 1085 | .st_min_limits[1] = 120, |
| 1085 | .st_min_limits[2] = 140, | 1086 | .st_min_limits[2] = 140, |
| 1086 | .st_max_limits[0] = 550, | 1087 | .st_max_limits[0] = 550, |
| 1087 | .st_max_limits[1] = 550, | 1088 | .st_max_limits[1] = 550, |
| 1088 | .st_max_limits[2] = 750, | 1089 | .st_max_limits[2] = 750, |
| 1089 | }; | 1090 | }; |
| 1090 | 1091 | ||
| 1091 | static struct i2c_board_info am335x_i2c_boardinfo1[] = { | 1092 | static struct i2c_board_info am335x_i2c_boardinfo1[] = { |
| 1092 | { | 1093 | { |
| 1093 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), | 1094 | I2C_BOARD_INFO("tlv320aic3x", 0x1b), |
| 1094 | }, | 1095 | }, |
| 1095 | { | 1096 | { |
| 1096 | I2C_BOARD_INFO("lis331dlh", 0x18), | 1097 | I2C_BOARD_INFO("lis331dlh", 0x18), |
| 1097 | .platform_data = &lis331dlh_pdata, | 1098 | .platform_data = &lis331dlh_pdata, |
| 1098 | }, | 1099 | }, |
| 1099 | { | 1100 | { |
| 1100 | I2C_BOARD_INFO("tsl2550", 0x39), | 1101 | I2C_BOARD_INFO("tsl2550", 0x39), |
| 1101 | }, | 1102 | }, |
| 1102 | { | 1103 | { |
| 1103 | I2C_BOARD_INFO("tmp275", 0x48), | 1104 | I2C_BOARD_INFO("tmp275", 0x48), |
| 1104 | }, | 1105 | }, |
| 1105 | }; | 1106 | }; |
| 1106 | 1107 | ||
| 1107 | static void i2c1_init(int evm_id, int profile) | 1108 | static void i2c1_init(int evm_id, int profile) |
| 1108 | { | 1109 | { |
| 1109 | setup_pin_mux(i2c1_pin_mux); | 1110 | setup_pin_mux(i2c1_pin_mux); |
| 1110 | omap_register_i2c_bus(2, 100, am335x_i2c_boardinfo1, | 1111 | omap_register_i2c_bus(2, 100, am335x_i2c_boardinfo1, |
| 1111 | ARRAY_SIZE(am335x_i2c_boardinfo1)); | 1112 | ARRAY_SIZE(am335x_i2c_boardinfo1)); |
| 1112 | return; | 1113 | return; |
| 1113 | } | 1114 | } |
| 1114 | 1115 | ||
| 1115 | /* Setup McASP 1 */ | 1116 | /* Setup McASP 1 */ |
| 1116 | static void mcasp1_init(int evm_id, int profile) | 1117 | static void mcasp1_init(int evm_id, int profile) |
| 1117 | { | 1118 | { |
| 1118 | /* Configure McASP */ | 1119 | /* Configure McASP */ |
| 1119 | setup_pin_mux(mcasp1_pin_mux); | 1120 | setup_pin_mux(mcasp1_pin_mux); |
| 1120 | am335x_register_mcasp1(&am335x_evm_snd_data1); | 1121 | am335x_register_mcasp1(&am335x_evm_snd_data1); |
| 1121 | return; | 1122 | return; |
| 1122 | } | 1123 | } |
| 1123 | 1124 | ||
| 1124 | static void mmc1_init(int evm_id, int profile) | 1125 | static void mmc1_init(int evm_id, int profile) |
| 1125 | { | 1126 | { |
| 1126 | setup_pin_mux(mmc1_pin_mux); | 1127 | setup_pin_mux(mmc1_pin_mux); |
| 1127 | 1128 | ||
| 1128 | am335x_mmc[1].mmc = 2; | 1129 | am335x_mmc[1].mmc = 2; |
| 1129 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA; | 1130 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA; |
| 1130 | am335x_mmc[1].gpio_cd = GPIO_TO_PIN(3, 15); | 1131 | am335x_mmc[1].gpio_cd = GPIO_TO_PIN(3, 15); |
| 1131 | am335x_mmc[1].gpio_wp = GPIO_TO_PIN(0, 14); | 1132 | am335x_mmc[1].gpio_wp = GPIO_TO_PIN(0, 14); |
| 1132 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ | 1133 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ |
| 1133 | 1134 | ||
| 1134 | /* mmc will be initialized when mmc0_init is called */ | 1135 | /* mmc will be initialized when mmc0_init is called */ |
| 1135 | return; | 1136 | return; |
| 1136 | } | 1137 | } |
| 1137 | 1138 | ||
| 1138 | static void mmc2_wl12xx_init(int evm_id, int profile) | 1139 | static void mmc2_wl12xx_init(int evm_id, int profile) |
| 1139 | { | 1140 | { |
| 1140 | setup_pin_mux(mmc2_wl12xx_pin_mux); | 1141 | setup_pin_mux(mmc2_wl12xx_pin_mux); |
| 1141 | 1142 | ||
| 1142 | am335x_mmc[1].mmc = 3; | 1143 | am335x_mmc[1].mmc = 3; |
| 1143 | am335x_mmc[1].name = "wl1271"; | 1144 | am335x_mmc[1].name = "wl1271"; |
| 1144 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD | 1145 | am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD |
| 1145 | | MMC_PM_KEEP_POWER; | 1146 | | MMC_PM_KEEP_POWER; |
| 1146 | am335x_mmc[1].nonremovable = true; | 1147 | am335x_mmc[1].nonremovable = true; |
| 1147 | am335x_mmc[1].gpio_cd = -EINVAL; | 1148 | am335x_mmc[1].gpio_cd = -EINVAL; |
| 1148 | am335x_mmc[1].gpio_wp = -EINVAL; | 1149 | am335x_mmc[1].gpio_wp = -EINVAL; |
| 1149 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ | 1150 | am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */ |
| 1150 | 1151 | ||
| 1151 | /* mmc will be initialized when mmc0_init is called */ | 1152 | /* mmc will be initialized when mmc0_init is called */ |
| 1152 | return; | 1153 | return; |
| 1153 | } | 1154 | } |
| 1154 | 1155 | ||
| 1155 | static void uart1_wl12xx_init(int evm_id, int profile) | 1156 | static void uart1_wl12xx_init(int evm_id, int profile) |
| 1156 | { | 1157 | { |
| 1157 | setup_pin_mux(uart1_wl12xx_pin_mux); | 1158 | setup_pin_mux(uart1_wl12xx_pin_mux); |
| 1158 | } | 1159 | } |
| 1159 | 1160 | ||
| 1160 | static void wl12xx_bluetooth_enable(void) | 1161 | static void wl12xx_bluetooth_enable(void) |
| 1161 | { | 1162 | { |
| 1162 | int status = gpio_request(am335xevm_wlan_data.bt_enable_gpio, | 1163 | int status = gpio_request(am335xevm_wlan_data.bt_enable_gpio, |
| 1163 | "bt_en\n"); | 1164 | "bt_en\n"); |
| 1164 | if (status < 0) | 1165 | if (status < 0) |
| 1165 | pr_err("Failed to request gpio for bt_enable"); | 1166 | pr_err("Failed to request gpio for bt_enable"); |
| 1166 | 1167 | ||
| 1167 | pr_info("Configure Bluetooth Enable pin...\n"); | 1168 | pr_info("Configure Bluetooth Enable pin...\n"); |
| 1168 | gpio_direction_output(am335xevm_wlan_data.bt_enable_gpio, 0); | 1169 | gpio_direction_output(am335xevm_wlan_data.bt_enable_gpio, 0); |
| 1169 | } | 1170 | } |
| 1170 | 1171 | ||
| 1171 | static int wl12xx_set_power(struct device *dev, int slot, int on, int vdd) | 1172 | static int wl12xx_set_power(struct device *dev, int slot, int on, int vdd) |
| 1172 | { | 1173 | { |
| 1173 | if (on) { | 1174 | if (on) { |
| 1174 | gpio_set_value(am335xevm_wlan_data.wlan_enable_gpio, 1); | 1175 | gpio_set_value(am335xevm_wlan_data.wlan_enable_gpio, 1); |
| 1175 | mdelay(70); | 1176 | mdelay(70); |
| 1176 | } | 1177 | } |
| 1177 | else | 1178 | else |
| 1178 | gpio_set_value(am335xevm_wlan_data.wlan_enable_gpio, 0); | 1179 | gpio_set_value(am335xevm_wlan_data.wlan_enable_gpio, 0); |
| 1179 | 1180 | ||
| 1180 | return 0; | 1181 | return 0; |
| 1181 | } | 1182 | } |
| 1182 | 1183 | ||
| 1183 | static void wl12xx_init(int evm_id, int profile) | 1184 | static void wl12xx_init(int evm_id, int profile) |
| 1184 | { | 1185 | { |
| 1185 | struct device *dev; | 1186 | struct device *dev; |
| 1186 | struct omap_mmc_platform_data *pdata; | 1187 | struct omap_mmc_platform_data *pdata; |
| 1187 | int ret; | 1188 | int ret; |
| 1188 | 1189 | ||
| 1189 | /* Register WLAN and BT enable pins based on the evm board revision */ | 1190 | /* Register WLAN and BT enable pins based on the evm board revision */ |
| 1190 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) { | 1191 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) { |
| 1191 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 16); | 1192 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 16); |
| 1192 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(3, 21); | 1193 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(3, 21); |
| 1193 | } | 1194 | } |
| 1194 | else { | 1195 | else { |
| 1195 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 30); | 1196 | am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 30); |
| 1196 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(1, 31); | 1197 | am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(1, 31); |
| 1197 | } | 1198 | } |
| 1198 | 1199 | ||
| 1199 | wl12xx_bluetooth_enable(); | 1200 | wl12xx_bluetooth_enable(); |
| 1200 | 1201 | ||
| 1201 | if (wl12xx_set_platform_data(&am335xevm_wlan_data)) | 1202 | if (wl12xx_set_platform_data(&am335xevm_wlan_data)) |
| 1202 | pr_err("error setting wl12xx data\n"); | 1203 | pr_err("error setting wl12xx data\n"); |
| 1203 | 1204 | ||
| 1204 | dev = am335x_mmc[1].dev; | 1205 | dev = am335x_mmc[1].dev; |
| 1205 | if (!dev) { | 1206 | if (!dev) { |
| 1206 | pr_err("wl12xx mmc device initialization failed\n"); | 1207 | pr_err("wl12xx mmc device initialization failed\n"); |
| 1207 | goto out; | 1208 | goto out; |
| 1208 | } | 1209 | } |
| 1209 | 1210 | ||
| 1210 | pdata = dev->platform_data; | 1211 | pdata = dev->platform_data; |
| 1211 | if (!pdata) { | 1212 | if (!pdata) { |
| 1212 | pr_err("Platfrom data of wl12xx device not set\n"); | 1213 | pr_err("Platfrom data of wl12xx device not set\n"); |
| 1213 | goto out; | 1214 | goto out; |
| 1214 | } | 1215 | } |
| 1215 | 1216 | ||
| 1216 | ret = gpio_request_one(am335xevm_wlan_data.wlan_enable_gpio, | 1217 | ret = gpio_request_one(am335xevm_wlan_data.wlan_enable_gpio, |
| 1217 | GPIOF_OUT_INIT_LOW, "wlan_en"); | 1218 | GPIOF_OUT_INIT_LOW, "wlan_en"); |
| 1218 | if (ret) { | 1219 | if (ret) { |
| 1219 | pr_err("Error requesting wlan enable gpio: %d\n", ret); | 1220 | pr_err("Error requesting wlan enable gpio: %d\n", ret); |
| 1220 | goto out; | 1221 | goto out; |
| 1221 | } | 1222 | } |
| 1222 | 1223 | ||
| 1223 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) | 1224 | if (gp_evm_revision == GP_EVM_REV_IS_1_1A) |
| 1224 | setup_pin_mux(wl12xx_pin_mux_evm_rev1_1a); | 1225 | setup_pin_mux(wl12xx_pin_mux_evm_rev1_1a); |
| 1225 | else | 1226 | else |
| 1226 | setup_pin_mux(wl12xx_pin_mux_evm_rev1_0); | 1227 | setup_pin_mux(wl12xx_pin_mux_evm_rev1_0); |
| 1227 | 1228 | ||
| 1228 | pdata->slots[0].set_power = wl12xx_set_power; | 1229 | pdata->slots[0].set_power = wl12xx_set_power; |
| 1229 | out: | 1230 | out: |
| 1230 | return; | 1231 | return; |
| 1231 | } | 1232 | } |
| 1232 | 1233 | ||
| 1233 | static void d_can_init(int evm_id, int profile) | 1234 | static void d_can_init(int evm_id, int profile) |
| 1234 | { | 1235 | { |
| 1235 | switch (evm_id) { | 1236 | switch (evm_id) { |
| 1236 | case IND_AUT_MTR_EVM: | 1237 | case IND_AUT_MTR_EVM: |
| 1237 | if ((profile == PROFILE_0) || (profile == PROFILE_1)) { | 1238 | if ((profile == PROFILE_0) || (profile == PROFILE_1)) { |
| 1238 | setup_pin_mux(d_can_ia_pin_mux); | 1239 | setup_pin_mux(d_can_ia_pin_mux); |
| 1239 | /* Instance Zero */ | 1240 | /* Instance Zero */ |
| 1240 | am33xx_d_can_init(0); | 1241 | am33xx_d_can_init(0); |
| 1241 | } | 1242 | } |
| 1242 | break; | 1243 | break; |
| 1243 | case GEN_PURP_EVM: | 1244 | case GEN_PURP_EVM: |
| 1244 | if (profile == PROFILE_1) { | 1245 | if (profile == PROFILE_1) { |
| 1245 | setup_pin_mux(d_can_gp_pin_mux); | 1246 | setup_pin_mux(d_can_gp_pin_mux); |
| 1246 | /* Instance One */ | 1247 | /* Instance One */ |
| 1247 | am33xx_d_can_init(1); | 1248 | am33xx_d_can_init(1); |
| 1248 | } | 1249 | } |
| 1249 | break; | 1250 | break; |
| 1250 | default: | 1251 | default: |
| 1251 | break; | 1252 | break; |
| 1252 | } | 1253 | } |
| 1253 | } | 1254 | } |
| 1254 | 1255 | ||
| 1255 | static void mmc0_init(int evm_id, int profile) | 1256 | static void mmc0_init(int evm_id, int profile) |
| 1256 | { | 1257 | { |
| 1257 | setup_pin_mux(mmc0_pin_mux); | 1258 | setup_pin_mux(mmc0_pin_mux); |
| 1258 | 1259 | ||
| 1259 | omap2_hsmmc_init(am335x_mmc); | 1260 | omap2_hsmmc_init(am335x_mmc); |
| 1260 | return; | 1261 | return; |
| 1261 | } | 1262 | } |
| 1262 | 1263 | ||
| 1263 | static void mmc0_no_cd_init(int evm_id, int profile) | 1264 | static void mmc0_no_cd_init(int evm_id, int profile) |
| 1264 | { | 1265 | { |
| 1265 | setup_pin_mux(mmc0_no_cd_pin_mux); | 1266 | setup_pin_mux(mmc0_no_cd_pin_mux); |
| 1266 | 1267 | ||
| 1267 | omap2_hsmmc_init(am335x_mmc); | 1268 | omap2_hsmmc_init(am335x_mmc); |
| 1268 | return; | 1269 | return; |
| 1269 | } | 1270 | } |
| 1270 | 1271 | ||
| 1271 | 1272 | ||
| 1272 | /* setup spi0 */ | 1273 | /* setup spi0 */ |
| 1273 | static void spi0_init(int evm_id, int profile) | 1274 | static void spi0_init(int evm_id, int profile) |
| 1274 | { | 1275 | { |
| 1275 | setup_pin_mux(spi0_pin_mux); | 1276 | setup_pin_mux(spi0_pin_mux); |
| 1276 | spi_register_board_info(am335x_spi0_slave_info, | 1277 | spi_register_board_info(am335x_spi0_slave_info, |
| 1277 | ARRAY_SIZE(am335x_spi0_slave_info)); | 1278 | ARRAY_SIZE(am335x_spi0_slave_info)); |
| 1278 | return; | 1279 | return; |
| 1279 | } | 1280 | } |
| 1280 | 1281 | ||
| 1281 | /* setup spi1 */ | 1282 | /* setup spi1 */ |
| 1282 | static void spi1_init(int evm_id, int profile) | 1283 | static void spi1_init(int evm_id, int profile) |
| 1283 | { | 1284 | { |
| 1284 | setup_pin_mux(spi1_pin_mux); | 1285 | setup_pin_mux(spi1_pin_mux); |
| 1285 | spi_register_board_info(am335x_spi1_slave_info, | 1286 | spi_register_board_info(am335x_spi1_slave_info, |
| 1286 | ARRAY_SIZE(am335x_spi1_slave_info)); | 1287 | ARRAY_SIZE(am335x_spi1_slave_info)); |
| 1287 | return; | 1288 | return; |
| 1288 | } | 1289 | } |
| 1289 | 1290 | ||
| 1290 | 1291 | ||
| 1291 | static int beaglebone_phy_fixup(struct phy_device *phydev) | 1292 | static int beaglebone_phy_fixup(struct phy_device *phydev) |
| 1292 | { | 1293 | { |
| 1293 | phydev->supported &= ~(SUPPORTED_100baseT_Half | | 1294 | phydev->supported &= ~(SUPPORTED_100baseT_Half | |
| 1294 | SUPPORTED_100baseT_Full); | 1295 | SUPPORTED_100baseT_Full); |
| 1295 | 1296 | ||
| 1296 | return 0; | 1297 | return 0; |
| 1297 | } | 1298 | } |
| 1298 | 1299 | ||
| 1299 | #ifdef CONFIG_TLK110_WORKAROUND | 1300 | #ifdef CONFIG_TLK110_WORKAROUND |
| 1300 | static int am335x_tlk110_phy_fixup(struct phy_device *phydev) | 1301 | static int am335x_tlk110_phy_fixup(struct phy_device *phydev) |
| 1301 | { | 1302 | { |
| 1302 | unsigned int val; | 1303 | unsigned int val; |
| 1303 | 1304 | ||
| 1304 | /* This is done as a workaround to support TLK110 rev1.0 phy */ | 1305 | /* This is done as a workaround to support TLK110 rev1.0 phy */ |
| 1305 | val = phy_read(phydev, TLK110_COARSEGAIN_REG); | 1306 | val = phy_read(phydev, TLK110_COARSEGAIN_REG); |
| 1306 | phy_write(phydev, TLK110_COARSEGAIN_REG, (val | TLK110_COARSEGAIN_VAL)); | 1307 | phy_write(phydev, TLK110_COARSEGAIN_REG, (val | TLK110_COARSEGAIN_VAL)); |
| 1307 | 1308 | ||
| 1308 | val = phy_read(phydev, TLK110_LPFHPF_REG); | 1309 | val = phy_read(phydev, TLK110_LPFHPF_REG); |
| 1309 | phy_write(phydev, TLK110_LPFHPF_REG, (val | TLK110_LPFHPF_VAL)); | 1310 | phy_write(phydev, TLK110_LPFHPF_REG, (val | TLK110_LPFHPF_VAL)); |
| 1310 | 1311 | ||
| 1311 | val = phy_read(phydev, TLK110_SPAREANALOG_REG); | 1312 | val = phy_read(phydev, TLK110_SPAREANALOG_REG); |
| 1312 | phy_write(phydev, TLK110_SPAREANALOG_REG, (val | TLK110_SPANALOG_VAL)); | 1313 | phy_write(phydev, TLK110_SPAREANALOG_REG, (val | TLK110_SPANALOG_VAL)); |
| 1313 | 1314 | ||
| 1314 | val = phy_read(phydev, TLK110_VRCR_REG); | 1315 | val = phy_read(phydev, TLK110_VRCR_REG); |
| 1315 | phy_write(phydev, TLK110_VRCR_REG, (val | TLK110_VRCR_VAL)); | 1316 | phy_write(phydev, TLK110_VRCR_REG, (val | TLK110_VRCR_VAL)); |
| 1316 | 1317 | ||
| 1317 | val = phy_read(phydev, TLK110_SETFFE_REG); | 1318 | val = phy_read(phydev, TLK110_SETFFE_REG); |
| 1318 | phy_write(phydev, TLK110_SETFFE_REG, (val | TLK110_SETFFE_VAL)); | 1319 | phy_write(phydev, TLK110_SETFFE_REG, (val | TLK110_SETFFE_VAL)); |
| 1319 | 1320 | ||
| 1320 | val = phy_read(phydev, TLK110_FTSP_REG); | 1321 | val = phy_read(phydev, TLK110_FTSP_REG); |
| 1321 | phy_write(phydev, TLK110_FTSP_REG, (val | TLK110_FTSP_VAL)); | 1322 | phy_write(phydev, TLK110_FTSP_REG, (val | TLK110_FTSP_VAL)); |
| 1322 | 1323 | ||
| 1323 | val = phy_read(phydev, TLK110_ALFATPIDL_REG); | 1324 | val = phy_read(phydev, TLK110_ALFATPIDL_REG); |
| 1324 | phy_write(phydev, TLK110_ALFATPIDL_REG, (val | TLK110_ALFATPIDL_VAL)); | 1325 | phy_write(phydev, TLK110_ALFATPIDL_REG, (val | TLK110_ALFATPIDL_VAL)); |
| 1325 | 1326 | ||
| 1326 | val = phy_read(phydev, TLK110_PSCOEF21_REG); | 1327 | val = phy_read(phydev, TLK110_PSCOEF21_REG); |
| 1327 | phy_write(phydev, TLK110_PSCOEF21_REG, (val | TLK110_PSCOEF21_VAL)); | 1328 | phy_write(phydev, TLK110_PSCOEF21_REG, (val | TLK110_PSCOEF21_VAL)); |
| 1328 | 1329 | ||
| 1329 | val = phy_read(phydev, TLK110_PSCOEF3_REG); | 1330 | val = phy_read(phydev, TLK110_PSCOEF3_REG); |
| 1330 | phy_write(phydev, TLK110_PSCOEF3_REG, (val | TLK110_PSCOEF3_VAL)); | 1331 | phy_write(phydev, TLK110_PSCOEF3_REG, (val | TLK110_PSCOEF3_VAL)); |
| 1331 | 1332 | ||
| 1332 | val = phy_read(phydev, TLK110_ALFAFACTOR1_REG); | 1333 | val = phy_read(phydev, TLK110_ALFAFACTOR1_REG); |
| 1333 | phy_write(phydev, TLK110_ALFAFACTOR1_REG, (val | TLK110_ALFACTOR1_VAL)); | 1334 | phy_write(phydev, TLK110_ALFAFACTOR1_REG, (val | TLK110_ALFACTOR1_VAL)); |
| 1334 | 1335 | ||
| 1335 | val = phy_read(phydev, TLK110_ALFAFACTOR2_REG); | 1336 | val = phy_read(phydev, TLK110_ALFAFACTOR2_REG); |
| 1336 | phy_write(phydev, TLK110_ALFAFACTOR2_REG, (val | TLK110_ALFACTOR2_VAL)); | 1337 | phy_write(phydev, TLK110_ALFAFACTOR2_REG, (val | TLK110_ALFACTOR2_VAL)); |
| 1337 | 1338 | ||
| 1338 | val = phy_read(phydev, TLK110_CFGPS_REG); | 1339 | val = phy_read(phydev, TLK110_CFGPS_REG); |
| 1339 | phy_write(phydev, TLK110_CFGPS_REG, (val | TLK110_CFGPS_VAL)); | 1340 | phy_write(phydev, TLK110_CFGPS_REG, (val | TLK110_CFGPS_VAL)); |
| 1340 | 1341 | ||
| 1341 | val = phy_read(phydev, TLK110_FTSPTXGAIN_REG); | 1342 | val = phy_read(phydev, TLK110_FTSPTXGAIN_REG); |
| 1342 | phy_write(phydev, TLK110_FTSPTXGAIN_REG, (val | TLK110_FTSPTXGAIN_VAL)); | 1343 | phy_write(phydev, TLK110_FTSPTXGAIN_REG, (val | TLK110_FTSPTXGAIN_VAL)); |
| 1343 | 1344 | ||
| 1344 | val = phy_read(phydev, TLK110_SWSCR3_REG); | 1345 | val = phy_read(phydev, TLK110_SWSCR3_REG); |
| 1345 | phy_write(phydev, TLK110_SWSCR3_REG, (val | TLK110_SWSCR3_VAL)); | 1346 | phy_write(phydev, TLK110_SWSCR3_REG, (val | TLK110_SWSCR3_VAL)); |
| 1346 | 1347 | ||
| 1347 | val = phy_read(phydev, TLK110_SCFALLBACK_REG); | 1348 | val = phy_read(phydev, TLK110_SCFALLBACK_REG); |
| 1348 | phy_write(phydev, TLK110_SCFALLBACK_REG, (val | TLK110_SCFALLBACK_VAL)); | 1349 | phy_write(phydev, TLK110_SCFALLBACK_REG, (val | TLK110_SCFALLBACK_VAL)); |
| 1349 | 1350 | ||
| 1350 | val = phy_read(phydev, TLK110_PHYRCR_REG); | 1351 | val = phy_read(phydev, TLK110_PHYRCR_REG); |
| 1351 | phy_write(phydev, TLK110_PHYRCR_REG, (val | TLK110_PHYRCR_VAL)); | 1352 | phy_write(phydev, TLK110_PHYRCR_REG, (val | TLK110_PHYRCR_VAL)); |
| 1352 | 1353 | ||
| 1353 | return 0; | 1354 | return 0; |
| 1354 | } | 1355 | } |
| 1355 | #endif | 1356 | #endif |
| 1356 | 1357 | ||
| 1357 | static void profibus_init(int evm_id, int profile) | 1358 | static void profibus_init(int evm_id, int profile) |
| 1358 | { | 1359 | { |
| 1359 | setup_pin_mux(profibus_pin_mux); | 1360 | setup_pin_mux(profibus_pin_mux); |
| 1360 | return; | 1361 | return; |
| 1361 | } | 1362 | } |
| 1362 | 1363 | ||
| 1363 | /* Low-Cost EVM */ | 1364 | /* Low-Cost EVM */ |
| 1364 | static struct evm_dev_cfg low_cost_evm_dev_cfg[] = { | 1365 | static struct evm_dev_cfg low_cost_evm_dev_cfg[] = { |
| 1365 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1366 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1366 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1367 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1367 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1368 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1368 | {evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1369 | {evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1369 | {NULL, 0, 0}, | 1370 | {NULL, 0, 0}, |
| 1370 | }; | 1371 | }; |
| 1371 | 1372 | ||
| 1372 | /* General Purpose EVM */ | 1373 | /* General Purpose EVM */ |
| 1373 | static struct evm_dev_cfg gen_purp_evm_dev_cfg[] = { | 1374 | static struct evm_dev_cfg gen_purp_evm_dev_cfg[] = { |
| 1374 | {enable_ecap0, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 1375 | {enable_ecap0, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
| 1375 | PROFILE_2 | PROFILE_7) }, | 1376 | PROFILE_2 | PROFILE_7) }, |
| 1376 | {lcdc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 1377 | {lcdc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
| 1377 | PROFILE_2 | PROFILE_7) }, | 1378 | PROFILE_2 | PROFILE_7) }, |
| 1378 | {tsc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | | 1379 | {tsc_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_1 | |
| 1379 | PROFILE_2 | PROFILE_7) }, | 1380 | PROFILE_2 | PROFILE_7) }, |
| 1380 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1381 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1381 | {rgmii2_init, DEV_ON_DGHTR_BRD, (PROFILE_1 | PROFILE_2 | | 1382 | {rgmii2_init, DEV_ON_DGHTR_BRD, (PROFILE_1 | PROFILE_2 | |
| 1382 | PROFILE_4 | PROFILE_6) }, | 1383 | PROFILE_4 | PROFILE_6) }, |
| 1383 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1384 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1384 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1385 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1385 | {evm_nand_init, DEV_ON_DGHTR_BRD, | 1386 | {evm_nand_init, DEV_ON_DGHTR_BRD, |
| 1386 | (PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3)}, | 1387 | (PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3)}, |
| 1387 | {i2c1_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, | 1388 | {i2c1_init, DEV_ON_DGHTR_BRD, (PROFILE_ALL & ~PROFILE_2)}, |
| 1388 | {mcasp1_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_3 | PROFILE_7) }, | 1389 | {mcasp1_init, DEV_ON_DGHTR_BRD, (PROFILE_0 | PROFILE_3 | PROFILE_7) }, |
| 1389 | {mmc1_init, DEV_ON_DGHTR_BRD, PROFILE_2}, | 1390 | {mmc1_init, DEV_ON_DGHTR_BRD, PROFILE_2}, |
| 1390 | {mmc2_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | | 1391 | {mmc2_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | |
| 1391 | PROFILE_5)}, | 1392 | PROFILE_5)}, |
| 1392 | {mmc0_init, DEV_ON_BASEBOARD, (PROFILE_ALL & ~PROFILE_5)}, | 1393 | {mmc0_init, DEV_ON_BASEBOARD, (PROFILE_ALL & ~PROFILE_5)}, |
| 1393 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_5}, | 1394 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_5}, |
| 1394 | {spi0_init, DEV_ON_DGHTR_BRD, PROFILE_2}, | 1395 | {spi0_init, DEV_ON_DGHTR_BRD, PROFILE_2}, |
| 1395 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | | 1396 | {uart1_wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | |
| 1396 | PROFILE_5)}, | 1397 | PROFILE_5)}, |
| 1397 | {wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | PROFILE_5)}, | 1398 | {wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0 | PROFILE_3 | PROFILE_5)}, |
| 1398 | {d_can_init, DEV_ON_DGHTR_BRD, PROFILE_1}, | 1399 | {d_can_init, DEV_ON_DGHTR_BRD, PROFILE_1}, |
| 1399 | #ifdef CONFIG_KEYBOARD_MATRIX | 1400 | #ifdef CONFIG_KEYBOARD_MATRIX |
| 1400 | {matrix_keypad_init, DEV_ON_DGHTR_BRD, PROFILE_0}, | 1401 | {matrix_keypad_init, DEV_ON_DGHTR_BRD, PROFILE_0}, |
| 1401 | #endif | 1402 | #endif |
| 1402 | #ifdef CONFIG_KEYBOARD_GPIO | 1403 | #ifdef CONFIG_KEYBOARD_GPIO |
| 1403 | {volume_keys_init, DEV_ON_DGHTR_BRD, PROFILE_0}, | 1404 | {volume_keys_init, DEV_ON_DGHTR_BRD, PROFILE_0}, |
| 1404 | #endif | 1405 | #endif |
| 1405 | {NULL, 0, 0}, | 1406 | {NULL, 0, 0}, |
| 1406 | }; | 1407 | }; |
| 1407 | 1408 | ||
| 1408 | /* Industrial Auto Motor Control EVM */ | 1409 | /* Industrial Auto Motor Control EVM */ |
| 1409 | static struct evm_dev_cfg ind_auto_mtrl_evm_dev_cfg[] = { | 1410 | static struct evm_dev_cfg ind_auto_mtrl_evm_dev_cfg[] = { |
| 1410 | {mii1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 1411 | {mii1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
| 1411 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1412 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1412 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1413 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1413 | {profibus_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 1414 | {profibus_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
| 1414 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 1415 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
| 1415 | {spi1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 1416 | {spi1_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
| 1416 | {uart3_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, | 1417 | {uart3_init, DEV_ON_DGHTR_BRD, PROFILE_ALL}, |
| 1417 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1418 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1418 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_ALL}, | 1419 | {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_ALL}, |
| 1419 | {NULL, 0, 0}, | 1420 | {NULL, 0, 0}, |
| 1420 | }; | 1421 | }; |
| 1421 | 1422 | ||
| 1422 | /* IP-Phone EVM */ | 1423 | /* IP-Phone EVM */ |
| 1423 | static struct evm_dev_cfg ip_phn_evm_dev_cfg[] = { | 1424 | static struct evm_dev_cfg ip_phn_evm_dev_cfg[] = { |
| 1424 | {enable_ecap0, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1425 | {enable_ecap0, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1425 | {lcdc_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1426 | {lcdc_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1426 | {tsc_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1427 | {tsc_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1427 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1428 | {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1428 | {rgmii2_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1429 | {rgmii2_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1429 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1430 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1430 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1431 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1431 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1432 | {evm_nand_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1432 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1433 | {i2c1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1433 | {mcasp1_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, | 1434 | {mcasp1_init, DEV_ON_DGHTR_BRD, PROFILE_NONE}, |
| 1434 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1435 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1435 | {NULL, 0, 0}, | 1436 | {NULL, 0, 0}, |
| 1436 | }; | 1437 | }; |
| 1437 | 1438 | ||
| 1438 | /* Beaglebone < Rev A3 */ | 1439 | /* Beaglebone < Rev A3 */ |
| 1439 | static struct evm_dev_cfg beaglebone_old_dev_cfg[] = { | 1440 | static struct evm_dev_cfg beaglebone_old_dev_cfg[] = { |
| 1440 | {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1441 | {rmii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1441 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1442 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1442 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1443 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1443 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1444 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1444 | {NULL, 0, 0}, | 1445 | {NULL, 0, 0}, |
| 1445 | }; | 1446 | }; |
| 1446 | 1447 | ||
| 1447 | /* Beaglebone Rev A3 and after */ | 1448 | /* Beaglebone Rev A3 and after */ |
| 1448 | static struct evm_dev_cfg beaglebone_dev_cfg[] = { | 1449 | static struct evm_dev_cfg beaglebone_dev_cfg[] = { |
| 1449 | {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1450 | {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1450 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1451 | {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1451 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1452 | {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1452 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, | 1453 | {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, |
| 1453 | {NULL, 0, 0}, | 1454 | {NULL, 0, 0}, |
| 1454 | }; | 1455 | }; |
| 1455 | 1456 | ||
| 1456 | static void setup_low_cost_evm(void) | 1457 | static void setup_low_cost_evm(void) |
| 1457 | { | 1458 | { |
| 1458 | pr_info("The board is a AM335x Low Cost EVM.\n"); | 1459 | pr_info("The board is a AM335x Low Cost EVM.\n"); |
| 1459 | 1460 | ||
| 1460 | _configure_device(LOW_COST_EVM, low_cost_evm_dev_cfg, PROFILE_NONE); | 1461 | _configure_device(LOW_COST_EVM, low_cost_evm_dev_cfg, PROFILE_NONE); |
| 1461 | } | 1462 | } |
| 1462 | 1463 | ||
| 1463 | static void setup_general_purpose_evm(void) | 1464 | static void setup_general_purpose_evm(void) |
| 1464 | { | 1465 | { |
| 1465 | u32 prof_sel = am335x_get_profile_selection(); | 1466 | u32 prof_sel = am335x_get_profile_selection(); |
| 1466 | pr_info("The board is general purpose EVM in profile %d\n", prof_sel); | 1467 | pr_info("The board is general purpose EVM in profile %d\n", prof_sel); |
| 1467 | 1468 | ||
| 1468 | if (!strncmp("1.1A", config.version, 4)) { | 1469 | if (!strncmp("1.1A", config.version, 4)) { |
| 1469 | gp_evm_revision = GP_EVM_REV_IS_1_1A; | 1470 | gp_evm_revision = GP_EVM_REV_IS_1_1A; |
| 1470 | } else if (!strncmp("1.0", config.version, 3)) { | 1471 | } else if (!strncmp("1.0", config.version, 3)) { |
| 1471 | gp_evm_revision = GP_EVM_REV_IS_1_0; | 1472 | gp_evm_revision = GP_EVM_REV_IS_1_0; |
| 1472 | } else { | 1473 | } else { |
| 1473 | pr_err("Found invalid GP EVM revision, falling back to Rev1.1A"); | 1474 | pr_err("Found invalid GP EVM revision, falling back to Rev1.1A"); |
| 1474 | gp_evm_revision = GP_EVM_REV_IS_1_1A; | 1475 | gp_evm_revision = GP_EVM_REV_IS_1_1A; |
| 1475 | } | 1476 | } |
| 1476 | 1477 | ||
| 1477 | if (gp_evm_revision == GP_EVM_REV_IS_1_0) | 1478 | if (gp_evm_revision == GP_EVM_REV_IS_1_0) |
| 1478 | gigabit_enable = 0; | 1479 | gigabit_enable = 0; |
| 1479 | else if (gp_evm_revision == GP_EVM_REV_IS_1_1A) | 1480 | else if (gp_evm_revision == GP_EVM_REV_IS_1_1A) |
| 1480 | gigabit_enable = 1; | 1481 | gigabit_enable = 1; |
| 1481 | 1482 | ||
| 1482 | _configure_device(GEN_PURP_EVM, gen_purp_evm_dev_cfg, (1L << prof_sel)); | 1483 | _configure_device(GEN_PURP_EVM, gen_purp_evm_dev_cfg, (1L << prof_sel)); |
| 1483 | } | 1484 | } |
| 1484 | 1485 | ||
| 1485 | static void setup_ind_auto_motor_ctrl_evm(void) | 1486 | static void setup_ind_auto_motor_ctrl_evm(void) |
| 1486 | { | 1487 | { |
| 1487 | u32 prof_sel = am335x_get_profile_selection(); | 1488 | u32 prof_sel = am335x_get_profile_selection(); |
| 1488 | 1489 | ||
| 1489 | pr_info("The board is an industrial automation EVM in profile %d\n", | 1490 | pr_info("The board is an industrial automation EVM in profile %d\n", |
| 1490 | prof_sel); | 1491 | prof_sel); |
| 1491 | 1492 | ||
| 1492 | /* Only Profile 0 is supported */ | 1493 | /* Only Profile 0 is supported */ |
| 1493 | if ((1L << prof_sel) != PROFILE_0) { | 1494 | if ((1L << prof_sel) != PROFILE_0) { |
| 1494 | pr_err("AM335X: Only Profile 0 is supported\n"); | 1495 | pr_err("AM335X: Only Profile 0 is supported\n"); |
| 1495 | pr_err("Assuming profile 0 & continuing\n"); | 1496 | pr_err("Assuming profile 0 & continuing\n"); |
| 1496 | prof_sel = PROFILE_0; | 1497 | prof_sel = PROFILE_0; |
| 1497 | } | 1498 | } |
| 1498 | 1499 | ||
| 1499 | _configure_device(IND_AUT_MTR_EVM, ind_auto_mtrl_evm_dev_cfg, | 1500 | _configure_device(IND_AUT_MTR_EVM, ind_auto_mtrl_evm_dev_cfg, |
| 1500 | PROFILE_0); | 1501 | PROFILE_0); |
| 1501 | 1502 | ||
| 1502 | /* Fillup global evmid */ | 1503 | /* Fillup global evmid */ |
| 1503 | am33xx_evmid_fillup(IND_AUT_MTR_EVM); | 1504 | am33xx_evmid_fillup(IND_AUT_MTR_EVM); |
| 1504 | 1505 | ||
| 1505 | /* Initialize TLK110 PHY registers for phy version 1.0 */ | 1506 | /* Initialize TLK110 PHY registers for phy version 1.0 */ |
| 1506 | am335x_tlk110_phy_init(); | 1507 | am335x_tlk110_phy_init(); |
| 1507 | 1508 | ||
| 1508 | 1509 | ||
| 1509 | } | 1510 | } |
| 1510 | 1511 | ||
| 1511 | static void setup_ip_phone_evm(void) | 1512 | static void setup_ip_phone_evm(void) |
| 1512 | { | 1513 | { |
| 1513 | pr_info("The board is an IP phone EVM\n"); | 1514 | pr_info("The board is an IP phone EVM\n"); |
| 1514 | 1515 | ||
| 1515 | _configure_device(IP_PHN_EVM, ip_phn_evm_dev_cfg, PROFILE_NONE); | 1516 | _configure_device(IP_PHN_EVM, ip_phn_evm_dev_cfg, PROFILE_NONE); |
| 1516 | } | 1517 | } |
| 1517 | 1518 | ||
| 1518 | /* BeagleBone < Rev A3 */ | 1519 | /* BeagleBone < Rev A3 */ |
| 1519 | static void setup_beaglebone_old(void) | 1520 | static void setup_beaglebone_old(void) |
| 1520 | { | 1521 | { |
| 1521 | pr_info("The board is a AM335x Beaglebone < Rev A3.\n"); | 1522 | pr_info("The board is a AM335x Beaglebone < Rev A3.\n"); |
| 1522 | 1523 | ||
| 1523 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ | 1524 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ |
| 1524 | am335x_mmc[0].gpio_wp = -EINVAL; | 1525 | am335x_mmc[0].gpio_wp = -EINVAL; |
| 1525 | 1526 | ||
| 1526 | _configure_device(LOW_COST_EVM, beaglebone_old_dev_cfg, PROFILE_NONE); | 1527 | _configure_device(LOW_COST_EVM, beaglebone_old_dev_cfg, PROFILE_NONE); |
| 1527 | 1528 | ||
| 1528 | phy_register_fixup_for_uid(BBB_PHY_ID, BBB_PHY_MASK, | 1529 | phy_register_fixup_for_uid(BBB_PHY_ID, BBB_PHY_MASK, |
| 1529 | beaglebone_phy_fixup); | 1530 | beaglebone_phy_fixup); |
| 1530 | } | 1531 | } |
| 1531 | 1532 | ||
| 1532 | /* BeagleBone after Rev A3 */ | 1533 | /* BeagleBone after Rev A3 */ |
| 1533 | static void setup_beaglebone(void) | 1534 | static void setup_beaglebone(void) |
| 1534 | { | 1535 | { |
| 1535 | pr_info("The board is a AM335x Beaglebone.\n"); | 1536 | pr_info("The board is a AM335x Beaglebone.\n"); |
| 1536 | 1537 | ||
| 1537 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ | 1538 | /* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */ |
| 1538 | am335x_mmc[0].gpio_wp = -EINVAL; | 1539 | am335x_mmc[0].gpio_wp = -EINVAL; |
| 1539 | 1540 | ||
| 1540 | _configure_device(LOW_COST_EVM, beaglebone_dev_cfg, PROFILE_NONE); | 1541 | _configure_device(LOW_COST_EVM, beaglebone_dev_cfg, PROFILE_NONE); |
| 1541 | } | 1542 | } |
| 1542 | 1543 | ||
| 1543 | 1544 | ||
| 1544 | static void am335x_setup_daughter_board(struct memory_accessor *m, void *c) | 1545 | static void am335x_setup_daughter_board(struct memory_accessor *m, void *c) |
| 1545 | { | 1546 | { |
| 1546 | u8 tmp; | 1547 | u8 tmp; |
| 1547 | int ret; | 1548 | int ret; |
| 1548 | 1549 | ||
| 1549 | /* | 1550 | /* |
| 1550 | * try reading a byte from the EEPROM to see if it is | 1551 | * try reading a byte from the EEPROM to see if it is |
| 1551 | * present. We could read a lot more, but that would | 1552 | * present. We could read a lot more, but that would |
| 1552 | * just slow the boot process and we have all the information | 1553 | * just slow the boot process and we have all the information |
| 1553 | * we need from the EEPROM on the base board anyway. | 1554 | * we need from the EEPROM on the base board anyway. |
| 1554 | */ | 1555 | */ |
| 1555 | ret = m->read(m, &tmp, 0, sizeof(u8)); | 1556 | ret = m->read(m, &tmp, 0, sizeof(u8)); |
| 1556 | if (ret == sizeof(u8)) { | 1557 | if (ret == sizeof(u8)) { |
| 1557 | pr_info("Detected a daughter card on AM335x EVM.."); | 1558 | pr_info("Detected a daughter card on AM335x EVM.."); |
| 1558 | daughter_brd_detected = true; | 1559 | daughter_brd_detected = true; |
| 1559 | } else { | 1560 | } else { |
| 1560 | pr_info("No daughter card found\n"); | 1561 | pr_info("No daughter card found\n"); |
| 1561 | daughter_brd_detected = false; | 1562 | daughter_brd_detected = false; |
| 1562 | } | 1563 | } |
| 1563 | } | 1564 | } |
| 1564 | 1565 | ||
| 1565 | static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context) | 1566 | static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context) |
| 1566 | { | 1567 | { |
| 1567 | int ret; | 1568 | int ret; |
| 1568 | char tmp[10]; | 1569 | char tmp[10]; |
| 1569 | 1570 | ||
| 1570 | /* 1st get the MAC address from EEPROM */ | 1571 | /* 1st get the MAC address from EEPROM */ |
| 1571 | ret = mem_acc->read(mem_acc, (char *)&am335x_mac_addr, | 1572 | ret = mem_acc->read(mem_acc, (char *)&am335x_mac_addr, |
| 1572 | EEPROM_MAC_ADDRESS_OFFSET, sizeof(am335x_mac_addr)); | 1573 | EEPROM_MAC_ADDRESS_OFFSET, sizeof(am335x_mac_addr)); |
| 1573 | 1574 | ||
| 1574 | if (ret != sizeof(am335x_mac_addr)) { | 1575 | if (ret != sizeof(am335x_mac_addr)) { |
| 1575 | pr_warning("AM335X: EVM Config read fail: %d\n", ret); | 1576 | pr_warning("AM335X: EVM Config read fail: %d\n", ret); |
| 1576 | return; | 1577 | return; |
| 1577 | } | 1578 | } |
| 1578 | 1579 | ||
| 1579 | /* Fillup global mac id */ | 1580 | /* Fillup global mac id */ |
| 1580 | am33xx_cpsw_macidfillup(&am335x_mac_addr[0][0], | 1581 | am33xx_cpsw_macidfillup(&am335x_mac_addr[0][0], |
| 1581 | &am335x_mac_addr[1][0]); | 1582 | &am335x_mac_addr[1][0]); |
| 1582 | 1583 | ||
| 1583 | /* get board specific data */ | 1584 | /* get board specific data */ |
| 1584 | ret = mem_acc->read(mem_acc, (char *)&config, 0, sizeof(config)); | 1585 | ret = mem_acc->read(mem_acc, (char *)&config, 0, sizeof(config)); |
| 1585 | if (ret != sizeof(config)) { | 1586 | if (ret != sizeof(config)) { |
| 1586 | pr_warning("AM335X EVM config read fail, read %d bytes\n", ret); | 1587 | pr_warning("AM335X EVM config read fail, read %d bytes\n", ret); |
| 1587 | return; | 1588 | return; |
| 1588 | } | 1589 | } |
| 1589 | 1590 | ||
| 1590 | if (config.header != AM335X_EEPROM_HEADER) { | 1591 | if (config.header != AM335X_EEPROM_HEADER) { |
| 1591 | pr_warning("AM335X: wrong header 0x%x, expected 0x%x\n", | 1592 | pr_warning("AM335X: wrong header 0x%x, expected 0x%x\n", |
| 1592 | config.header, AM335X_EEPROM_HEADER); | 1593 | config.header, AM335X_EEPROM_HEADER); |
| 1593 | goto out; | 1594 | goto out; |
| 1594 | } | 1595 | } |
| 1595 | 1596 | ||
| 1596 | if (strncmp("A335", config.name, 4)) { | 1597 | if (strncmp("A335", config.name, 4)) { |
| 1597 | pr_err("Board %s doesn't look like an AM335x board\n", | 1598 | pr_err("Board %s doesn't look like an AM335x board\n", |
| 1598 | config.name); | 1599 | config.name); |
| 1599 | goto out; | 1600 | goto out; |
| 1600 | } | 1601 | } |
| 1601 | 1602 | ||
| 1602 | snprintf(tmp, sizeof(config.name) + 1, "%s", config.name); | 1603 | snprintf(tmp, sizeof(config.name) + 1, "%s", config.name); |
| 1603 | pr_info("Board name: %s\n", tmp); | 1604 | pr_info("Board name: %s\n", tmp); |
| 1604 | snprintf(tmp, sizeof(config.version) + 1, "%s", config.version); | 1605 | snprintf(tmp, sizeof(config.version) + 1, "%s", config.version); |
| 1605 | pr_info("Board version: %s\n", tmp); | 1606 | pr_info("Board version: %s\n", tmp); |
| 1606 | 1607 | ||
| 1607 | if (!strncmp("A335BONE", config.name, 8)) { | 1608 | if (!strncmp("A335BONE", config.name, 8)) { |
| 1608 | daughter_brd_detected = false; | 1609 | daughter_brd_detected = false; |
| 1609 | if(!strncmp("00A1", config.version, 4) || | 1610 | if(!strncmp("00A1", config.version, 4) || |
| 1610 | !strncmp("00A2", config.version, 4)) | 1611 | !strncmp("00A2", config.version, 4)) |
| 1611 | setup_beaglebone_old(); | 1612 | setup_beaglebone_old(); |
| 1612 | else | 1613 | else |
| 1613 | setup_beaglebone(); | 1614 | setup_beaglebone(); |
| 1614 | } else { | 1615 | } else { |
| 1615 | /* only 6 characters of options string used for now */ | 1616 | /* only 6 characters of options string used for now */ |
| 1616 | snprintf(tmp, 7, "%s", config.opt); | 1617 | snprintf(tmp, 7, "%s", config.opt); |
| 1617 | pr_info("SKU: %s\n", tmp); | 1618 | pr_info("SKU: %s\n", tmp); |
| 1618 | 1619 | ||
| 1619 | if (!strncmp("SKU#00", config.opt, 6)) | 1620 | if (!strncmp("SKU#00", config.opt, 6)) |
| 1620 | setup_low_cost_evm(); | 1621 | setup_low_cost_evm(); |
| 1621 | else if (!strncmp("SKU#01", config.opt, 6)) | 1622 | else if (!strncmp("SKU#01", config.opt, 6)) |
| 1622 | setup_general_purpose_evm(); | 1623 | setup_general_purpose_evm(); |
| 1623 | else if (!strncmp("SKU#02", config.opt, 6)) | 1624 | else if (!strncmp("SKU#02", config.opt, 6)) |
| 1624 | setup_ind_auto_motor_ctrl_evm(); | 1625 | setup_ind_auto_motor_ctrl_evm(); |
| 1625 | else if (!strncmp("SKU#03", config.opt, 6)) | 1626 | else if (!strncmp("SKU#03", config.opt, 6)) |
| 1626 | setup_ip_phone_evm(); | 1627 | setup_ip_phone_evm(); |
| 1627 | else | 1628 | else |
| 1628 | goto out; | 1629 | goto out; |
| 1629 | } | 1630 | } |
| 1630 | /* Initialize cpsw after board detection is completed as board | 1631 | /* Initialize cpsw after board detection is completed as board |
| 1631 | * information is required for configuring phy address and hence | 1632 | * information is required for configuring phy address and hence |
| 1632 | * should be call only after board detection | 1633 | * should be call only after board detection |
| 1633 | */ | 1634 | */ |
| 1634 | am33xx_cpsw_init(gigabit_enable); | 1635 | am33xx_cpsw_init(gigabit_enable); |
| 1635 | 1636 | ||
| 1636 | return; | 1637 | return; |
| 1637 | out: | 1638 | out: |
| 1638 | /* | 1639 | /* |
| 1639 | * If the EEPROM hasn't been programed or an incorrect header | 1640 | * If the EEPROM hasn't been programed or an incorrect header |
| 1640 | * or board name are read, assume this is an old beaglebone board | 1641 | * or board name are read, assume this is an old beaglebone board |
| 1641 | * (< Rev A3) | 1642 | * (< Rev A3) |
| 1642 | */ | 1643 | */ |
| 1643 | pr_err("Could not detect any board, falling back to: " | 1644 | pr_err("Could not detect any board, falling back to: " |
| 1644 | "Beaglebone (< Rev A3) with no daughter card connected\n"); | 1645 | "Beaglebone (< Rev A3) with no daughter card connected\n"); |
| 1645 | daughter_brd_detected = false; | 1646 | daughter_brd_detected = false; |
| 1646 | setup_beaglebone_old(); | 1647 | setup_beaglebone_old(); |
| 1647 | 1648 | ||
| 1648 | /* Initialize cpsw after board detection is completed as board | 1649 | /* Initialize cpsw after board detection is completed as board |
| 1649 | * information is required for configuring phy address and hence | 1650 | * information is required for configuring phy address and hence |
| 1650 | * should be call only after board detection | 1651 | * should be call only after board detection |
| 1651 | */ | 1652 | */ |
| 1652 | 1653 | ||
| 1653 | am33xx_cpsw_init(gigabit_enable); | 1654 | am33xx_cpsw_init(gigabit_enable); |
| 1654 | } | 1655 | } |
| 1655 | 1656 | ||
| 1656 | static struct at24_platform_data am335x_daughter_board_eeprom_info = { | 1657 | static struct at24_platform_data am335x_daughter_board_eeprom_info = { |
| 1657 | .byte_len = (256*1024) / 8, | 1658 | .byte_len = (256*1024) / 8, |
| 1658 | .page_size = 64, | 1659 | .page_size = 64, |
| 1659 | .flags = AT24_FLAG_ADDR16, | 1660 | .flags = AT24_FLAG_ADDR16, |
| 1660 | .setup = am335x_setup_daughter_board, | 1661 | .setup = am335x_setup_daughter_board, |
| 1661 | .context = (void *)NULL, | 1662 | .context = (void *)NULL, |
| 1662 | }; | 1663 | }; |
| 1663 | 1664 | ||
| 1664 | static struct at24_platform_data am335x_baseboard_eeprom_info = { | 1665 | static struct at24_platform_data am335x_baseboard_eeprom_info = { |
| 1665 | .byte_len = (256*1024) / 8, | 1666 | .byte_len = (256*1024) / 8, |
| 1666 | .page_size = 64, | 1667 | .page_size = 64, |
| 1667 | .flags = AT24_FLAG_ADDR16, | 1668 | .flags = AT24_FLAG_ADDR16, |
| 1668 | .setup = am335x_evm_setup, | 1669 | .setup = am335x_evm_setup, |
| 1669 | .context = (void *)NULL, | 1670 | .context = (void *)NULL, |
| 1670 | }; | 1671 | }; |
| 1671 | 1672 | ||
| 1672 | static struct regulator_init_data am335x_dummy; | 1673 | static struct regulator_init_data am335x_dummy; |
| 1673 | 1674 | ||
| 1674 | static struct regulator_consumer_supply am335x_vdd1_supply[] = { | 1675 | static struct regulator_consumer_supply am335x_vdd1_supply[] = { |
| 1675 | REGULATOR_SUPPLY("mpu", "mpu.0"), | 1676 | REGULATOR_SUPPLY("mpu", "mpu.0"), |
| 1676 | }; | 1677 | }; |
| 1677 | 1678 | ||
| 1678 | static struct regulator_init_data am335x_vdd1 = { | 1679 | static struct regulator_init_data am335x_vdd1 = { |
| 1679 | .constraints = { | 1680 | .constraints = { |
| 1680 | .min_uV = 600000, | 1681 | .min_uV = 600000, |
| 1681 | .max_uV = 1500000, | 1682 | .max_uV = 1500000, |
| 1682 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 1683 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
| 1683 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, | 1684 | .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, |
| 1684 | .always_on = 1, | 1685 | .always_on = 1, |
| 1685 | }, | 1686 | }, |
| 1686 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd1_supply), | 1687 | .num_consumer_supplies = ARRAY_SIZE(am335x_vdd1_supply), |
| 1687 | .consumer_supplies = am335x_vdd1_supply, | 1688 | .consumer_supplies = am335x_vdd1_supply, |
| 1688 | }; | 1689 | }; |
| 1689 | 1690 | ||
| 1690 | static struct tps65910_board am335x_tps65910_info = { | 1691 | static struct tps65910_board am335x_tps65910_info = { |
| 1691 | .tps65910_pmic_init_data[TPS65910_REG_VRTC] = &am335x_dummy, | 1692 | .tps65910_pmic_init_data[TPS65910_REG_VRTC] = &am335x_dummy, |
| 1692 | .tps65910_pmic_init_data[TPS65910_REG_VIO] = &am335x_dummy, | 1693 | .tps65910_pmic_init_data[TPS65910_REG_VIO] = &am335x_dummy, |
| 1693 | .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &am335x_vdd1, | 1694 | .tps65910_pmic_init_data[TPS65910_REG_VDD1] = &am335x_vdd1, |
| 1694 | .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &am335x_dummy, | 1695 | .tps65910_pmic_init_data[TPS65910_REG_VDD2] = &am335x_dummy, |
| 1695 | .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &am335x_dummy, | 1696 | .tps65910_pmic_init_data[TPS65910_REG_VDD3] = &am335x_dummy, |
| 1696 | .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &am335x_dummy, | 1697 | .tps65910_pmic_init_data[TPS65910_REG_VDIG1] = &am335x_dummy, |
| 1697 | .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &am335x_dummy, | 1698 | .tps65910_pmic_init_data[TPS65910_REG_VDIG2] = &am335x_dummy, |
| 1698 | .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &am335x_dummy, | 1699 | .tps65910_pmic_init_data[TPS65910_REG_VPLL] = &am335x_dummy, |
| 1699 | .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &am335x_dummy, | 1700 | .tps65910_pmic_init_data[TPS65910_REG_VDAC] = &am335x_dummy, |
| 1700 | .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &am335x_dummy, | 1701 | .tps65910_pmic_init_data[TPS65910_REG_VAUX1] = &am335x_dummy, |
| 1701 | .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &am335x_dummy, | 1702 | .tps65910_pmic_init_data[TPS65910_REG_VAUX2] = &am335x_dummy, |
| 1702 | .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &am335x_dummy, | 1703 | .tps65910_pmic_init_data[TPS65910_REG_VAUX33] = &am335x_dummy, |
| 1703 | .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &am335x_dummy, | 1704 | .tps65910_pmic_init_data[TPS65910_REG_VMMC] = &am335x_dummy, |
| 1704 | }; | 1705 | }; |
| 1705 | 1706 | ||
| 1706 | /* | 1707 | /* |
| 1707 | * Daughter board Detection. | 1708 | * Daughter board Detection. |
| 1708 | * Every board has a ID memory (EEPROM) on board. We probe these devices at | 1709 | * Every board has a ID memory (EEPROM) on board. We probe these devices at |
| 1709 | * machine init, starting from daughter board and ending with baseboard. | 1710 | * machine init, starting from daughter board and ending with baseboard. |
| 1710 | * Assumptions : | 1711 | * Assumptions : |
| 1711 | * 1. probe for i2c devices are called in the order they are included in | 1712 | * 1. probe for i2c devices are called in the order they are included in |
| 1712 | * the below struct. Daughter boards eeprom are probed 1st. Baseboard | 1713 | * the below struct. Daughter boards eeprom are probed 1st. Baseboard |
| 1713 | * eeprom probe is called last. | 1714 | * eeprom probe is called last. |
| 1714 | */ | 1715 | */ |
| 1715 | static struct i2c_board_info __initdata am335x_i2c_boardinfo[] = { | 1716 | static struct i2c_board_info __initdata am335x_i2c_boardinfo[] = { |
| 1716 | { | 1717 | { |
| 1717 | /* Daughter Board EEPROM */ | 1718 | /* Daughter Board EEPROM */ |
| 1718 | I2C_BOARD_INFO("24c256", DAUG_BOARD_I2C_ADDR), | 1719 | I2C_BOARD_INFO("24c256", DAUG_BOARD_I2C_ADDR), |
| 1719 | .platform_data = &am335x_daughter_board_eeprom_info, | 1720 | .platform_data = &am335x_daughter_board_eeprom_info, |
| 1720 | }, | 1721 | }, |
| 1721 | { | 1722 | { |
| 1722 | /* Baseboard board EEPROM */ | 1723 | /* Baseboard board EEPROM */ |
| 1723 | I2C_BOARD_INFO("24c256", BASEBOARD_I2C_ADDR), | 1724 | I2C_BOARD_INFO("24c256", BASEBOARD_I2C_ADDR), |
| 1724 | .platform_data = &am335x_baseboard_eeprom_info, | 1725 | .platform_data = &am335x_baseboard_eeprom_info, |
| 1725 | }, | 1726 | }, |
| 1726 | { | 1727 | { |
| 1727 | I2C_BOARD_INFO("cpld_reg", 0x35), | 1728 | I2C_BOARD_INFO("cpld_reg", 0x35), |
| 1728 | }, | 1729 | }, |
| 1729 | { | 1730 | { |
| 1730 | I2C_BOARD_INFO("tlc59108", 0x40), | 1731 | I2C_BOARD_INFO("tlc59108", 0x40), |
| 1731 | }, | 1732 | }, |
| 1732 | { | 1733 | { |
| 1733 | I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1), | 1734 | I2C_BOARD_INFO("tps65910", TPS65910_I2C_ID1), |
| 1734 | .platform_data = &am335x_tps65910_info, | 1735 | .platform_data = &am335x_tps65910_info, |
| 1735 | }, | 1736 | }, |
| 1736 | 1737 | ||
| 1737 | }; | 1738 | }; |
| 1738 | 1739 | ||
| 1739 | static struct omap_musb_board_data musb_board_data = { | 1740 | static struct omap_musb_board_data musb_board_data = { |
| 1740 | .interface_type = MUSB_INTERFACE_ULPI, | 1741 | .interface_type = MUSB_INTERFACE_ULPI, |
| 1741 | .mode = MUSB_OTG, | 1742 | .mode = MUSB_OTG, |
| 1742 | .power = 500, | 1743 | .power = 500, |
| 1743 | .instances = 1, | 1744 | .instances = 1, |
| 1744 | }; | 1745 | }; |
| 1745 | 1746 | ||
| 1746 | static int cpld_reg_probe(struct i2c_client *client, | 1747 | static int cpld_reg_probe(struct i2c_client *client, |
| 1747 | const struct i2c_device_id *id) | 1748 | const struct i2c_device_id *id) |
| 1748 | { | 1749 | { |
| 1749 | cpld_client = client; | 1750 | cpld_client = client; |
| 1750 | return 0; | 1751 | return 0; |
| 1751 | } | 1752 | } |
| 1752 | 1753 | ||
| 1753 | static int __devexit cpld_reg_remove(struct i2c_client *client) | 1754 | static int __devexit cpld_reg_remove(struct i2c_client *client) |
| 1754 | { | 1755 | { |
| 1755 | cpld_client = NULL; | 1756 | cpld_client = NULL; |
| 1756 | return 0; | 1757 | return 0; |
| 1757 | } | 1758 | } |
| 1758 | 1759 | ||
| 1759 | static const struct i2c_device_id cpld_reg_id[] = { | 1760 | static const struct i2c_device_id cpld_reg_id[] = { |
| 1760 | { "cpld_reg", 0 }, | 1761 | { "cpld_reg", 0 }, |
| 1761 | { } | 1762 | { } |
| 1762 | }; | 1763 | }; |
| 1763 | 1764 | ||
| 1764 | static struct i2c_driver cpld_reg_driver = { | 1765 | static struct i2c_driver cpld_reg_driver = { |
| 1765 | .driver = { | 1766 | .driver = { |
| 1766 | .name = "cpld_reg", | 1767 | .name = "cpld_reg", |
| 1767 | }, | 1768 | }, |
| 1768 | .probe = cpld_reg_probe, | 1769 | .probe = cpld_reg_probe, |
| 1769 | .remove = cpld_reg_remove, | 1770 | .remove = cpld_reg_remove, |
| 1770 | .id_table = cpld_reg_id, | 1771 | .id_table = cpld_reg_id, |
| 1771 | }; | 1772 | }; |
| 1772 | 1773 | ||
| 1773 | static void evm_init_cpld(void) | 1774 | static void evm_init_cpld(void) |
| 1774 | { | 1775 | { |
| 1775 | i2c_add_driver(&cpld_reg_driver); | 1776 | i2c_add_driver(&cpld_reg_driver); |
| 1776 | } | 1777 | } |
| 1777 | 1778 | ||
| 1778 | static void __init am335x_evm_i2c_init(void) | 1779 | static void __init am335x_evm_i2c_init(void) |
| 1779 | { | 1780 | { |
| 1780 | /* Initially assume Low Cost EVM Config */ | 1781 | /* Initially assume Low Cost EVM Config */ |
| 1781 | am335x_evm_id = LOW_COST_EVM; | 1782 | am335x_evm_id = LOW_COST_EVM; |
| 1782 | 1783 | ||
| 1783 | evm_init_cpld(); | 1784 | evm_init_cpld(); |
| 1784 | 1785 | ||
| 1785 | omap_register_i2c_bus(1, 100, am335x_i2c_boardinfo, | 1786 | omap_register_i2c_bus(1, 100, am335x_i2c_boardinfo, |
| 1786 | ARRAY_SIZE(am335x_i2c_boardinfo)); | 1787 | ARRAY_SIZE(am335x_i2c_boardinfo)); |
| 1787 | } | 1788 | } |
| 1788 | 1789 | ||
| 1789 | static struct resource am335x_rtc_resources[] = { | 1790 | static struct resource am335x_rtc_resources[] = { |
| 1790 | { | 1791 | { |
| 1791 | .start = AM33XX_RTC_BASE, | 1792 | .start = AM33XX_RTC_BASE, |
| 1792 | .end = AM33XX_RTC_BASE + SZ_4K - 1, | 1793 | .end = AM33XX_RTC_BASE + SZ_4K - 1, |
| 1793 | .flags = IORESOURCE_MEM, | 1794 | .flags = IORESOURCE_MEM, |
| 1794 | }, | 1795 | }, |
| 1795 | { /* timer irq */ | 1796 | { /* timer irq */ |
| 1796 | .start = AM33XX_IRQ_RTC_TIMER, | 1797 | .start = AM33XX_IRQ_RTC_TIMER, |
| 1797 | .end = AM33XX_IRQ_RTC_TIMER, | 1798 | .end = AM33XX_IRQ_RTC_TIMER, |
| 1798 | .flags = IORESOURCE_IRQ, | 1799 | .flags = IORESOURCE_IRQ, |
| 1799 | }, | 1800 | }, |
| 1800 | { /* alarm irq */ | 1801 | { /* alarm irq */ |
| 1801 | .start = AM33XX_IRQ_RTC_ALARM, | 1802 | .start = AM33XX_IRQ_RTC_ALARM, |
| 1802 | .end = AM33XX_IRQ_RTC_ALARM, | 1803 | .end = AM33XX_IRQ_RTC_ALARM, |
| 1803 | .flags = IORESOURCE_IRQ, | 1804 | .flags = IORESOURCE_IRQ, |
| 1804 | }, | 1805 | }, |
| 1805 | }; | 1806 | }; |
| 1806 | 1807 | ||
| 1807 | static struct platform_device am335x_rtc_device = { | 1808 | static struct platform_device am335x_rtc_device = { |
| 1808 | .name = "omap_rtc", | 1809 | .name = "omap_rtc", |
| 1809 | .id = -1, | 1810 | .id = -1, |
| 1810 | .num_resources = ARRAY_SIZE(am335x_rtc_resources), | 1811 | .num_resources = ARRAY_SIZE(am335x_rtc_resources), |
| 1811 | .resource = am335x_rtc_resources, | 1812 | .resource = am335x_rtc_resources, |
| 1812 | }; | 1813 | }; |
| 1813 | 1814 | ||
| 1814 | static int am335x_rtc_init(void) | 1815 | static int am335x_rtc_init(void) |
| 1815 | { | 1816 | { |
| 1816 | void __iomem *base; | 1817 | void __iomem *base; |
| 1817 | struct clk *clk; | 1818 | struct clk *clk; |
| 1818 | 1819 | ||
| 1819 | clk = clk_get(NULL, "rtc_fck"); | 1820 | clk = clk_get(NULL, "rtc_fck"); |
| 1820 | if (IS_ERR(clk)) { | 1821 | if (IS_ERR(clk)) { |
| 1821 | pr_err("rtc : Failed to get RTC clock\n"); | 1822 | pr_err("rtc : Failed to get RTC clock\n"); |
| 1822 | return -1; | 1823 | return -1; |
| 1823 | } | 1824 | } |
| 1824 | 1825 | ||
| 1825 | if (clk_enable(clk)) { | 1826 | if (clk_enable(clk)) { |
| 1826 | pr_err("rtc: Clock Enable Failed\n"); | 1827 | pr_err("rtc: Clock Enable Failed\n"); |
| 1827 | return -1; | 1828 | return -1; |
| 1828 | } | 1829 | } |
| 1829 | 1830 | ||
| 1830 | base = ioremap(AM33XX_RTC_BASE, SZ_4K); | 1831 | base = ioremap(AM33XX_RTC_BASE, SZ_4K); |
| 1831 | 1832 | ||
| 1832 | if (WARN_ON(!base)) | 1833 | if (WARN_ON(!base)) |
| 1833 | return -ENOMEM; | 1834 | return -ENOMEM; |
| 1834 | 1835 | ||
| 1835 | /* Unlock the rtc's registers */ | 1836 | /* Unlock the rtc's registers */ |
| 1836 | __raw_writel(0x83e70b13, base + 0x6c); | 1837 | __raw_writel(0x83e70b13, base + 0x6c); |
| 1837 | __raw_writel(0x95a4f1e0, base + 0x70); | 1838 | __raw_writel(0x95a4f1e0, base + 0x70); |
| 1838 | 1839 | ||
| 1839 | /* | 1840 | /* |
| 1840 | * Enable the 32K OSc | 1841 | * Enable the 32K OSc |
| 1841 | * TODO: Need a better way to handle this | 1842 | * TODO: Need a better way to handle this |
| 1842 | * Since we want the clock to be running before mmc init | 1843 | * Since we want the clock to be running before mmc init |
| 1843 | * we need to do it before the rtc probe happens | 1844 | * we need to do it before the rtc probe happens |
| 1844 | */ | 1845 | */ |
| 1845 | __raw_writel(0x48, base + 0x54); | 1846 | __raw_writel(0x48, base + 0x54); |
| 1846 | 1847 | ||
| 1847 | iounmap(base); | 1848 | iounmap(base); |
| 1848 | 1849 | ||
| 1849 | return platform_device_register(&am335x_rtc_device); | 1850 | return platform_device_register(&am335x_rtc_device); |
| 1850 | } | 1851 | } |
| 1851 | 1852 | ||
| 1852 | /* Enable clkout2 */ | 1853 | /* Enable clkout2 */ |
| 1853 | static struct pinmux_config clkout2_pin_mux[] = { | 1854 | static struct pinmux_config clkout2_pin_mux[] = { |
| 1854 | {"xdma_event_intr1.clkout2", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT}, | 1855 | {"xdma_event_intr1.clkout2", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT}, |
| 1855 | {NULL, 0}, | 1856 | {NULL, 0}, |
| 1856 | }; | 1857 | }; |
| 1857 | 1858 | ||
| 1858 | static void __init clkout2_enable(void) | 1859 | static void __init clkout2_enable(void) |
| 1859 | { | 1860 | { |
| 1860 | struct clk *ck_32; | 1861 | struct clk *ck_32; |
| 1861 | 1862 | ||
| 1862 | ck_32 = clk_get(NULL, "clkout2_ck"); | 1863 | ck_32 = clk_get(NULL, "clkout2_ck"); |
| 1863 | if (IS_ERR(ck_32)) { | 1864 | if (IS_ERR(ck_32)) { |
| 1864 | pr_err("Cannot clk_get ck_32\n"); | 1865 | pr_err("Cannot clk_get ck_32\n"); |
| 1865 | return; | 1866 | return; |
| 1866 | } | 1867 | } |
| 1867 | 1868 | ||
| 1868 | clk_enable(ck_32); | 1869 | clk_enable(ck_32); |
| 1869 | 1870 | ||
| 1870 | setup_pin_mux(clkout2_pin_mux); | 1871 | setup_pin_mux(clkout2_pin_mux); |
| 1871 | } | 1872 | } |
| 1872 | 1873 | ||
| 1874 | void __iomem * __init am33xx_get_mem_ctlr(void) | ||
| 1875 | { | ||
| 1876 | void __iomem *am33xx_emif_base; | ||
| 1877 | |||
| 1878 | am33xx_emif_base = ioremap(AM33XX_EMIF0_BASE, SZ_32K); | ||
| 1879 | |||
| 1880 | if (!am33xx_emif_base) | ||
| 1881 | pr_warning("%s: Unable to map DDR2 controller", __func__); | ||
| 1882 | |||
| 1883 | return am33xx_emif_base; | ||
| 1884 | } | ||
| 1885 | |||
| 1886 | static struct resource am33xx_cpuidle_resources[] = { | ||
| 1887 | { | ||
| 1888 | .start = AM33XX_EMIF0_BASE, | ||
| 1889 | .end = AM33XX_EMIF0_BASE + SZ_32K - 1, | ||
| 1890 | .flags = IORESOURCE_MEM, | ||
| 1891 | }, | ||
| 1892 | }; | ||
| 1893 | |||
| 1894 | /* AM33XX devices support DDR2 power down */ | ||
| 1895 | static struct am33xx_cpuidle_config am33xx_cpuidle_pdata = { | ||
| 1896 | .ddr2_pdown = 1, | ||
| 1897 | }; | ||
| 1898 | |||
| 1899 | static struct platform_device am33xx_cpuidle_device = { | ||
| 1900 | .name = "cpuidle-am33xx", | ||
| 1901 | .num_resources = ARRAY_SIZE(am33xx_cpuidle_resources), | ||
| 1902 | .resource = am33xx_cpuidle_resources, | ||
| 1903 | .dev = { | ||
| 1904 | .platform_data = &am33xx_cpuidle_pdata, | ||
| 1905 | }, | ||
| 1906 | }; | ||
| 1907 | |||
| 1908 | static void __init am33xx_cpuidle_init(void) | ||
| 1909 | { | ||
| 1910 | int ret; | ||
| 1911 | |||
| 1912 | am33xx_cpuidle_pdata.emif_base = am33xx_get_mem_ctlr(); | ||
| 1913 | |||
| 1914 | ret = platform_device_register(&am33xx_cpuidle_device); | ||
| 1915 | |||
| 1916 | if (ret) | ||
| 1917 | pr_warning("AM33XX cpuidle registration failed\n"); | ||
| 1918 | |||
| 1919 | } | ||
| 1920 | |||
| 1873 | static void __init am335x_evm_init(void) | 1921 | static void __init am335x_evm_init(void) |
| 1874 | { | 1922 | { |
| 1923 | am33xx_cpuidle_init(); | ||
| 1875 | am33xx_mux_init(board_mux); | 1924 | am33xx_mux_init(board_mux); |
| 1876 | omap_serial_init(); | 1925 | omap_serial_init(); |
| 1877 | am335x_rtc_init(); | 1926 | am335x_rtc_init(); |
| 1878 | clkout2_enable(); | 1927 | clkout2_enable(); |
| 1879 | am335x_evm_i2c_init(); | 1928 | am335x_evm_i2c_init(); |
| 1880 | omap_sdrc_init(NULL, NULL); | 1929 | omap_sdrc_init(NULL, NULL); |
| 1881 | usb_musb_init(&musb_board_data); | 1930 | usb_musb_init(&musb_board_data); |
| 1882 | omap_board_config = am335x_evm_config; | 1931 | omap_board_config = am335x_evm_config; |
| 1883 | omap_board_config_size = ARRAY_SIZE(am335x_evm_config); | 1932 | omap_board_config_size = ARRAY_SIZE(am335x_evm_config); |
| 1884 | /* Create an alias for icss clock */ | 1933 | /* Create an alias for icss clock */ |
| 1885 | if (clk_add_alias("pruss", NULL, "icss_uart_gclk", NULL)) | 1934 | if (clk_add_alias("pruss", NULL, "icss_uart_gclk", NULL)) |
| 1886 | pr_err("failed to create an alias: icss_uart_gclk --> pruss\n"); | 1935 | pr_err("failed to create an alias: icss_uart_gclk --> pruss\n"); |
| 1887 | /* Create an alias for gfx/sgx clock */ | 1936 | /* Create an alias for gfx/sgx clock */ |
| 1888 | if (clk_add_alias("sgx_ck", NULL, "gfx_fclk", NULL)) | 1937 | if (clk_add_alias("sgx_ck", NULL, "gfx_fclk", NULL)) |
| 1889 | pr_err("failed to create an alias: gfx_fclk --> sgx_ck\n"); | 1938 | pr_err("failed to create an alias: gfx_fclk --> sgx_ck\n"); |
| 1890 | } | 1939 | } |
| 1891 | 1940 | ||
| 1892 | static void __init am335x_evm_map_io(void) | 1941 | static void __init am335x_evm_map_io(void) |
| 1893 | { | 1942 | { |
| 1894 | omap2_set_globals_am33xx(); | 1943 | omap2_set_globals_am33xx(); |
| 1895 | omapam33xx_map_common_io(); | 1944 | omapam33xx_map_common_io(); |
| 1896 | } | 1945 | } |
| 1897 | 1946 | ||
| 1898 | MACHINE_START(AM335XEVM, "am335xevm") | 1947 | MACHINE_START(AM335XEVM, "am335xevm") |
| 1899 | /* Maintainer: Texas Instruments */ | 1948 | /* Maintainer: Texas Instruments */ |
| 1900 | .atag_offset = 0x100, | 1949 | .atag_offset = 0x100, |
| 1901 | .map_io = am335x_evm_map_io, | 1950 | .map_io = am335x_evm_map_io, |
| 1902 | .init_irq = ti816x_init_irq, | 1951 | .init_irq = ti816x_init_irq, |
| 1903 | .init_early = am335x_init_early, | 1952 | .init_early = am335x_init_early, |
| 1904 | .timer = &omap3_am33xx_timer, | 1953 | .timer = &omap3_am33xx_timer, |
| 1905 | .init_machine = am335x_evm_init, | 1954 | .init_machine = am335x_evm_init, |
| 1906 | MACHINE_END | 1955 | MACHINE_END |
| 1907 | 1956 | ||
| 1908 | MACHINE_START(AM335XIAEVM, "am335xiaevm") | 1957 | MACHINE_START(AM335XIAEVM, "am335xiaevm") |
| 1909 | /* Maintainer: Texas Instruments */ | 1958 | /* Maintainer: Texas Instruments */ |
| 1910 | .atag_offset = 0x100, | 1959 | .atag_offset = 0x100, |
| 1911 | .map_io = am335x_evm_map_io, | 1960 | .map_io = am335x_evm_map_io, |
| 1912 | .init_irq = ti816x_init_irq, | 1961 | .init_irq = ti816x_init_irq, |
| 1913 | .init_early = am335x_init_early, | 1962 | .init_early = am335x_init_early, |
| 1914 | .timer = &omap3_am33xx_timer, | 1963 | .timer = &omap3_am33xx_timer, |
| 1915 | .init_machine = am335x_evm_init, | 1964 | .init_machine = am335x_evm_init, |
| 1916 | MACHINE_END | 1965 | MACHINE_END |
| 1917 | 1966 |