|
@@ -619,3 +619,196 @@ static struct regulator_init_data rx51_vaux4 = {
|
|
|
};
|
|
|
|
|
|
static struct regulator_init_data rx51_vmmc1 = {
|
|
|
+ .constraints = {
|
|
|
+ .min_uV = 1850000,
|
|
|
+ .max_uV = 3150000,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(rx51_vmmc1_supply),
|
|
|
+ .consumer_supplies = rx51_vmmc1_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vmmc2 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "V28_A",
|
|
|
+ .min_uV = 2800000,
|
|
|
+ .max_uV = 3000000,
|
|
|
+ .always_on = true, /* due VIO leak to AIC34 VDDs */
|
|
|
+ .apply_uV = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(rx51_vmmc2_supplies),
|
|
|
+ .consumer_supplies = rx51_vmmc2_supplies,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vpll1 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VPLL",
|
|
|
+ .min_uV = 1800000,
|
|
|
+ .max_uV = 1800000,
|
|
|
+ .apply_uV = true,
|
|
|
+ .always_on = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vpll2 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VSDI_CSI",
|
|
|
+ .min_uV = 1800000,
|
|
|
+ .max_uV = 1800000,
|
|
|
+ .apply_uV = true,
|
|
|
+ .always_on = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vsim = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VMMC2_IO_18",
|
|
|
+ .min_uV = 1800000,
|
|
|
+ .max_uV = 1800000,
|
|
|
+ .apply_uV = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(rx51_vsim_supply),
|
|
|
+ .consumer_supplies = rx51_vsim_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vio = {
|
|
|
+ .constraints = {
|
|
|
+ .min_uV = 1800000,
|
|
|
+ .max_uV = 1800000,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(rx51_vio_supplies),
|
|
|
+ .consumer_supplies = rx51_vio_supplies,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vintana1 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VINTANA1",
|
|
|
+ .min_uV = 1500000,
|
|
|
+ .max_uV = 1500000,
|
|
|
+ .always_on = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vintana2 = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VINTANA2",
|
|
|
+ .min_uV = 2750000,
|
|
|
+ .max_uV = 2750000,
|
|
|
+ .apply_uV = true,
|
|
|
+ .always_on = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data rx51_vintdig = {
|
|
|
+ .constraints = {
|
|
|
+ .name = "VINTDIG",
|
|
|
+ .min_uV = 1500000,
|
|
|
+ .max_uV = 1500000,
|
|
|
+ .always_on = true,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_MODE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
|
|
|
+ .gpio_reset = RX51_FMTX_RESET_GPIO,
|
|
|
+};
|
|
|
+
|
|
|
+static struct i2c_board_info rx51_si4713_board_info __initdata_or_module = {
|
|
|
+ I2C_BOARD_INFO("si4713", SI4713_I2C_ADDR_BUSEN_HIGH),
|
|
|
+ .platform_data = &rx51_si4713_i2c_data,
|
|
|
+};
|
|
|
+
|
|
|
+static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module = {
|
|
|
+ .i2c_bus = 2,
|
|
|
+ .subdev_board_info = &rx51_si4713_board_info,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device rx51_si4713_dev __initdata_or_module = {
|
|
|
+ .name = "radio-si4713",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &rx51_si4713_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static __init void rx51_init_si4713(void)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = gpio_request_one(RX51_FMTX_IRQ, GPIOF_DIR_IN, "si4713 irq");
|
|
|
+ if (err) {
|
|
|
+ printk(KERN_ERR "Cannot request si4713 irq gpio. %d\n", err);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ rx51_si4713_board_info.irq = gpio_to_irq(RX51_FMTX_IRQ);
|
|
|
+ platform_device_register(&rx51_si4713_dev);
|
|
|
+}
|
|
|
+
|
|
|
+static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
|
|
|
+{
|
|
|
+ /* FIXME this gpio setup is just a placeholder for now */
|
|
|
+ gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
|
|
|
+ gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "speaker_en");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct twl4030_gpio_platform_data rx51_gpio_data = {
|
|
|
+ .pulldowns = BIT(0) | BIT(1) | BIT(2) | BIT(3)
|
|
|
+ | BIT(4) | BIT(5)
|
|
|
+ | BIT(8) | BIT(9) | BIT(10) | BIT(11)
|
|
|
+ | BIT(12) | BIT(13) | BIT(14) | BIT(15)
|
|
|
+ | BIT(16) | BIT(17) ,
|
|
|
+ .setup = rx51_twlgpio_setup,
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl4030_ins sleep_on_seq[] __initdata = {
|
|
|
+/*
|
|
|
+ * Turn off everything
|
|
|
+ */
|
|
|
+ {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_SLEEP), 2},
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl4030_script sleep_on_script __initdata = {
|
|
|
+ .script = sleep_on_seq,
|
|
|
+ .size = ARRAY_SIZE(sleep_on_seq),
|
|
|
+ .flags = TWL4030_SLEEP_SCRIPT,
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl4030_ins wakeup_seq[] __initdata = {
|
|
|
+/*
|
|
|
+ * Reenable everything
|
|
|
+ */
|
|
|
+ {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
|