|
@@ -611,3 +611,179 @@ static struct i2c_board_info i2c_devs0[] = {
|
|
|
.irq = S3C_EINT(23),
|
|
|
},
|
|
|
};
|
|
|
+
|
|
|
+static struct s3c2410_platform_i2c i2c0_pdata = {
|
|
|
+ .frequency = 400000,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply pvdd_1v2_consumers[] = {
|
|
|
+ REGULATOR_SUPPLY("DCVDD", "spi0.0"),
|
|
|
+ REGULATOR_SUPPLY("AVDD", "spi0.0"),
|
|
|
+ REGULATOR_SUPPLY("AVDD", "spi0.1"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data pvdd_1v2 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "PVDD_1V2",
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+
|
|
|
+ .consumer_supplies = pvdd_1v2_consumers,
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply pvdd_1v8_consumers[] = {
|
|
|
+ REGULATOR_SUPPLY("LDOVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("PLLVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD1", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD2", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD3", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("CPVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("AVDD2", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DCVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("AVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD", "spi0.0"),
|
|
|
+
|
|
|
+ REGULATOR_SUPPLY("DBVDD", "1-003a"),
|
|
|
+ REGULATOR_SUPPLY("LDOVDD", "1-003a"),
|
|
|
+ REGULATOR_SUPPLY("CPVDD", "1-003a"),
|
|
|
+ REGULATOR_SUPPLY("AVDD", "1-003a"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD1", "spi0.1"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD2", "spi0.1"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD3", "spi0.1"),
|
|
|
+ REGULATOR_SUPPLY("LDOVDD", "spi0.1"),
|
|
|
+ REGULATOR_SUPPLY("CPVDD", "spi0.1"),
|
|
|
+
|
|
|
+ REGULATOR_SUPPLY("DBVDD2", "wm5102-codec"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD3", "wm5102-codec"),
|
|
|
+ REGULATOR_SUPPLY("CPVDD", "wm5102-codec"),
|
|
|
+
|
|
|
+ REGULATOR_SUPPLY("DBVDD2", "wm5110-codec"),
|
|
|
+ REGULATOR_SUPPLY("DBVDD3", "wm5110-codec"),
|
|
|
+ REGULATOR_SUPPLY("CPVDD", "wm5110-codec"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data pvdd_1v8 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "PVDD_1V8",
|
|
|
+ .always_on = 1,
|
|
|
+ },
|
|
|
+
|
|
|
+ .consumer_supplies = pvdd_1v8_consumers,
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(pvdd_1v8_consumers),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply pvdd_3v3_consumers[] = {
|
|
|
+ REGULATOR_SUPPLY("MICVDD", "1-001a"),
|
|
|
+ REGULATOR_SUPPLY("AVDD1", "1-001a"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data pvdd_3v3 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "PVDD_3V3",
|
|
|
+ .always_on = 1,
|
|
|
+ },
|
|
|
+
|
|
|
+ .consumer_supplies = pvdd_3v3_consumers,
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(pvdd_3v3_consumers),
|
|
|
+};
|
|
|
+
|
|
|
+static struct wm831x_pdata glenfarclas_pmic_pdata = {
|
|
|
+ .wm831x_num = 2,
|
|
|
+ .irq_base = GLENFARCLAS_PMIC_IRQ_BASE,
|
|
|
+ .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE,
|
|
|
+ .soft_shutdown = true,
|
|
|
+
|
|
|
+ .gpio_defaults = {
|
|
|
+ /* GPIO1-3: IRQ inputs, rising edge triggered, CMOS */
|
|
|
+ [0] = WM831X_GPN_DIR | WM831X_GPN_POL | WM831X_GPN_ENA,
|
|
|
+ [1] = WM831X_GPN_DIR | WM831X_GPN_POL | WM831X_GPN_ENA,
|
|
|
+ [2] = WM831X_GPN_DIR | WM831X_GPN_POL | WM831X_GPN_ENA,
|
|
|
+ },
|
|
|
+
|
|
|
+ .dcdc = {
|
|
|
+ &pvdd_1v2, /* DCDC1 */
|
|
|
+ &pvdd_1v8, /* DCDC2 */
|
|
|
+ &pvdd_3v3, /* DCDC3 */
|
|
|
+ },
|
|
|
+
|
|
|
+ .disable_touch = true,
|
|
|
+};
|
|
|
+
|
|
|
+static struct wm1250_ev1_pdata wm1250_ev1_pdata = {
|
|
|
+ .gpios = {
|
|
|
+ [WM1250_EV1_GPIO_CLK_ENA] = S3C64XX_GPN(12),
|
|
|
+ [WM1250_EV1_GPIO_CLK_SEL0] = S3C64XX_GPL(12),
|
|
|
+ [WM1250_EV1_GPIO_CLK_SEL1] = S3C64XX_GPL(13),
|
|
|
+ [WM1250_EV1_GPIO_OSR] = S3C64XX_GPL(14),
|
|
|
+ [WM1250_EV1_GPIO_MASTER] = S3C64XX_GPL(8),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct i2c_board_info i2c_devs1[] = {
|
|
|
+ { I2C_BOARD_INFO("wm8311", 0x34),
|
|
|
+ .irq = S3C_EINT(0),
|
|
|
+ .platform_data = &glenfarclas_pmic_pdata },
|
|
|
+
|
|
|
+ { I2C_BOARD_INFO("wlf-gf-module", 0x20) },
|
|
|
+ { I2C_BOARD_INFO("wlf-gf-module", 0x22) },
|
|
|
+ { I2C_BOARD_INFO("wlf-gf-module", 0x24) },
|
|
|
+ { I2C_BOARD_INFO("wlf-gf-module", 0x25) },
|
|
|
+ { I2C_BOARD_INFO("wlf-gf-module", 0x26) },
|
|
|
+
|
|
|
+ { I2C_BOARD_INFO("wm1250-ev1", 0x27),
|
|
|
+ .platform_data = &wm1250_ev1_pdata },
|
|
|
+};
|
|
|
+
|
|
|
+static struct s3c2410_platform_i2c i2c1_pdata = {
|
|
|
+ .frequency = 400000,
|
|
|
+ .bus_num = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init crag6410_map_io(void)
|
|
|
+{
|
|
|
+ s3c64xx_init_io(NULL, 0);
|
|
|
+ s3c24xx_init_clocks(12000000);
|
|
|
+ s3c24xx_init_uarts(crag6410_uartcfgs, ARRAY_SIZE(crag6410_uartcfgs));
|
|
|
+
|
|
|
+ /* LCD type and Bypass set by bootloader */
|
|
|
+}
|
|
|
+
|
|
|
+static struct s3c_sdhci_platdata crag6410_hsmmc2_pdata = {
|
|
|
+ .max_width = 4,
|
|
|
+ .cd_type = S3C_SDHCI_CD_PERMANENT,
|
|
|
+ .host_caps = MMC_CAP_POWER_OFF_CARD,
|
|
|
+};
|
|
|
+
|
|
|
+static void crag6410_cfg_sdhci0(struct platform_device *dev, int width)
|
|
|
+{
|
|
|
+ /* Set all the necessary GPG pins to special-function 2 */
|
|
|
+ s3c_gpio_cfgrange_nopull(S3C64XX_GPG(0), 2 + width, S3C_GPIO_SFN(2));
|
|
|
+
|
|
|
+ /* force card-detected for prototype 0 */
|
|
|
+ s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_DOWN);
|
|
|
+}
|
|
|
+
|
|
|
+static struct s3c_sdhci_platdata crag6410_hsmmc0_pdata = {
|
|
|
+ .max_width = 4,
|
|
|
+ .cd_type = S3C_SDHCI_CD_INTERNAL,
|
|
|
+ .cfg_gpio = crag6410_cfg_sdhci0,
|
|
|
+ .host_caps = MMC_CAP_POWER_OFF_CARD,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct gpio_led gpio_leds[] = {
|
|
|
+ {
|
|
|
+ .name = "d13:green:",
|
|
|
+ .gpio = MMGPIO_GPIO_BASE + 0,
|
|
|
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "d14:green:",
|
|
|
+ .gpio = MMGPIO_GPIO_BASE + 1,
|
|
|
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "d15:green:",
|
|
|
+ .gpio = MMGPIO_GPIO_BASE + 2,
|
|
|
+ .default_state = LEDS_GPIO_DEFSTATE_ON,
|