0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/init.h>
0011 #include <linux/kernel.h>
0012 #include <linux/platform_device.h>
0013 #include <linux/io.h>
0014 #include <linux/gpio-pxa.h>
0015 #include <linux/gpio/machine.h>
0016 #include <linux/regulator/machine.h>
0017 #include <linux/regulator/max8649.h>
0018 #include <linux/regulator/fixed.h>
0019 #include <linux/mfd/max8925.h>
0020
0021 #include <asm/mach-types.h>
0022 #include <asm/mach/arch.h>
0023 #include "addr-map.h"
0024 #include "mfp-mmp2.h"
0025 #include "mmp2.h"
0026 #include "irqs.h"
0027
0028 #include "common.h"
0029
0030 #define BROWNSTONE_NR_IRQS (MMP_NR_IRQS + 40)
0031
0032 #define GPIO_5V_ENABLE (89)
0033
0034 static unsigned long brownstone_pin_config[] __initdata = {
0035
0036 GPIO29_UART1_RXD,
0037 GPIO30_UART1_TXD,
0038
0039
0040 GPIO51_UART3_RXD,
0041 GPIO52_UART3_TXD,
0042
0043
0044 GPIO168_DFI_D0,
0045 GPIO167_DFI_D1,
0046 GPIO166_DFI_D2,
0047 GPIO165_DFI_D3,
0048 GPIO107_DFI_D4,
0049 GPIO106_DFI_D5,
0050 GPIO105_DFI_D6,
0051 GPIO104_DFI_D7,
0052 GPIO111_DFI_D8,
0053 GPIO164_DFI_D9,
0054 GPIO163_DFI_D10,
0055 GPIO162_DFI_D11,
0056 GPIO161_DFI_D12,
0057 GPIO110_DFI_D13,
0058 GPIO109_DFI_D14,
0059 GPIO108_DFI_D15,
0060 GPIO143_ND_nCS0,
0061 GPIO144_ND_nCS1,
0062 GPIO147_ND_nWE,
0063 GPIO148_ND_nRE,
0064 GPIO150_ND_ALE,
0065 GPIO149_ND_CLE,
0066 GPIO112_ND_RDY0,
0067 GPIO160_ND_RDY1,
0068
0069
0070 PMIC_PMIC_INT | MFP_LPM_EDGE_FALL,
0071
0072
0073 GPIO131_MMC1_DAT3 | MFP_PULL_HIGH,
0074 GPIO132_MMC1_DAT2 | MFP_PULL_HIGH,
0075 GPIO133_MMC1_DAT1 | MFP_PULL_HIGH,
0076 GPIO134_MMC1_DAT0 | MFP_PULL_HIGH,
0077 GPIO136_MMC1_CMD | MFP_PULL_HIGH,
0078 GPIO139_MMC1_CLK,
0079 GPIO140_MMC1_CD | MFP_PULL_LOW,
0080 GPIO141_MMC1_WP | MFP_PULL_LOW,
0081
0082
0083 GPIO37_MMC2_DAT3 | MFP_PULL_HIGH,
0084 GPIO38_MMC2_DAT2 | MFP_PULL_HIGH,
0085 GPIO39_MMC2_DAT1 | MFP_PULL_HIGH,
0086 GPIO40_MMC2_DAT0 | MFP_PULL_HIGH,
0087 GPIO41_MMC2_CMD | MFP_PULL_HIGH,
0088 GPIO42_MMC2_CLK,
0089
0090
0091 GPIO165_MMC3_DAT7 | MFP_PULL_HIGH,
0092 GPIO162_MMC3_DAT6 | MFP_PULL_HIGH,
0093 GPIO166_MMC3_DAT5 | MFP_PULL_HIGH,
0094 GPIO163_MMC3_DAT4 | MFP_PULL_HIGH,
0095 GPIO167_MMC3_DAT3 | MFP_PULL_HIGH,
0096 GPIO164_MMC3_DAT2 | MFP_PULL_HIGH,
0097 GPIO168_MMC3_DAT1 | MFP_PULL_HIGH,
0098 GPIO111_MMC3_DAT0 | MFP_PULL_HIGH,
0099 GPIO112_MMC3_CMD | MFP_PULL_HIGH,
0100 GPIO151_MMC3_CLK,
0101
0102
0103 GPIO89_GPIO,
0104 };
0105
0106 static struct pxa_gpio_platform_data mmp2_gpio_pdata = {
0107 .irq_base = MMP_GPIO_TO_IRQ(0),
0108 };
0109
0110 static struct regulator_consumer_supply max8649_supply[] = {
0111 REGULATOR_SUPPLY("vcc_core", NULL),
0112 };
0113
0114 static struct regulator_init_data max8649_init_data = {
0115 .constraints = {
0116 .name = "vcc_core range",
0117 .min_uV = 1150000,
0118 .max_uV = 1280000,
0119 .always_on = 1,
0120 .boot_on = 1,
0121 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
0122 },
0123 .num_consumer_supplies = 1,
0124 .consumer_supplies = &max8649_supply[0],
0125 };
0126
0127 static struct max8649_platform_data brownstone_max8649_info = {
0128 .mode = 2,
0129 .extclk = 0,
0130 .ramp_timing = MAX8649_RAMP_32MV,
0131 .regulator = &max8649_init_data,
0132 };
0133
0134 static struct regulator_consumer_supply brownstone_v_5vp_supplies[] = {
0135 REGULATOR_SUPPLY("v_5vp", NULL),
0136 };
0137
0138 static struct regulator_init_data brownstone_v_5vp_data = {
0139 .constraints = {
0140 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
0141 },
0142 .num_consumer_supplies = ARRAY_SIZE(brownstone_v_5vp_supplies),
0143 .consumer_supplies = brownstone_v_5vp_supplies,
0144 };
0145
0146 static struct fixed_voltage_config brownstone_v_5vp = {
0147 .supply_name = "v_5vp",
0148 .microvolts = 5000000,
0149 .enabled_at_boot = 1,
0150 .init_data = &brownstone_v_5vp_data,
0151 };
0152
0153 static struct platform_device brownstone_v_5vp_device = {
0154 .name = "reg-fixed-voltage",
0155 .id = 1,
0156 .dev = {
0157 .platform_data = &brownstone_v_5vp,
0158 },
0159 };
0160
0161 static struct gpiod_lookup_table brownstone_v_5vp_gpiod_table = {
0162 .dev_id = "reg-fixed-voltage.1",
0163 .table = {
0164 GPIO_LOOKUP("gpio-pxa", GPIO_5V_ENABLE,
0165 NULL, GPIO_ACTIVE_HIGH),
0166 { },
0167 },
0168 };
0169
0170 static struct max8925_platform_data brownstone_max8925_info = {
0171 .irq_base = MMP_NR_IRQS,
0172 };
0173
0174 static struct i2c_board_info brownstone_twsi1_info[] = {
0175 [0] = {
0176 .type = "max8649",
0177 .addr = 0x60,
0178 .platform_data = &brownstone_max8649_info,
0179 },
0180 [1] = {
0181 .type = "max8925",
0182 .addr = 0x3c,
0183 .irq = IRQ_MMP2_PMIC,
0184 .platform_data = &brownstone_max8925_info,
0185 },
0186 };
0187
0188 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc0 = {
0189 .clk_delay_cycles = 0x1f,
0190 };
0191
0192 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc2 = {
0193 .clk_delay_cycles = 0x1f,
0194 .flags = PXA_FLAG_CARD_PERMANENT
0195 | PXA_FLAG_SD_8_BIT_CAPABLE_SLOT,
0196 };
0197
0198 static struct sram_platdata mmp2_asram_platdata = {
0199 .pool_name = "asram",
0200 .granularity = SRAM_GRANULARITY,
0201 };
0202
0203 static struct sram_platdata mmp2_isram_platdata = {
0204 .pool_name = "isram",
0205 .granularity = SRAM_GRANULARITY,
0206 };
0207
0208 static void __init brownstone_init(void)
0209 {
0210 mfp_config(ARRAY_AND_SIZE(brownstone_pin_config));
0211
0212
0213 mmp2_add_uart(1);
0214 mmp2_add_uart(3);
0215 platform_device_add_data(&mmp2_device_gpio, &mmp2_gpio_pdata,
0216 sizeof(struct pxa_gpio_platform_data));
0217 platform_device_register(&mmp2_device_gpio);
0218 mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(brownstone_twsi1_info));
0219 mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0);
0220 mmp2_add_sdhost(2, &mmp2_sdh_platdata_mmc2);
0221 mmp2_add_asram(&mmp2_asram_platdata);
0222 mmp2_add_isram(&mmp2_isram_platdata);
0223
0224
0225 gpiod_add_lookup_table(&brownstone_v_5vp_gpiod_table);
0226 platform_device_register(&brownstone_v_5vp_device);
0227 }
0228
0229 MACHINE_START(BROWNSTONE, "Brownstone Development Platform")
0230
0231 .map_io = mmp_map_io,
0232 .nr_irqs = BROWNSTONE_NR_IRQS,
0233 .init_irq = mmp2_init_irq,
0234 .init_time = mmp2_timer_init,
0235 .init_machine = brownstone_init,
0236 .restart = mmp_restart,
0237 MACHINE_END