static int twl4030reg_set_mode(struct regulator_dev *rdev, unsigned mode) { struct twlreg_info *info = rdev_get_drvdata(rdev); unsigned message; int status; switch (mode) { case REGULATOR_MODE_NORMAL: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); break; case REGULATOR_MODE_STANDBY: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_SLEEP); break; default: return -EINVAL; } status = twlreg_grp(rdev); if (status < 0) return status; if (!(status & (P3_GRP_4030 | P2_GRP_4030 | P1_GRP_4030))) return -EACCES; status = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, message >> 8, TWL4030_PM_MASTER_PB_WORD_MSB); if (status < 0) return status; return twl_i2c_write_u8(TWL_MODULE_PM_MASTER, message & 0xff, TWL4030_PM_MASTER_PB_WORD_LSB); }
static int twl4030reg_set_mode(struct regulator_dev *rdev, unsigned mode) { struct twlreg_info *info = rdev_get_drvdata(rdev); unsigned message; int status; /* We can only set the mode through state machine commands... */ switch (mode) { case REGULATOR_MODE_NORMAL: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); break; case REGULATOR_MODE_STANDBY: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_SLEEP); break; default: return -EINVAL; } /* Ensure the resource is associated with some group */ status = twlreg_grp(rdev); if (status < 0) return status; if (!(status & (P3_GRP_4030 | P2_GRP_4030 | P1_GRP_4030))) return -EACCES; status = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, message >> 8, TWL4030_PM_MASTER_PB_WORD_MSB); if (status < 0) return status; return twl_i2c_write_u8(TWL_MODULE_PM_MASTER, message & 0xff, TWL4030_PM_MASTER_PB_WORD_LSB); }
static int twl4030reg_set_mode(struct regulator_dev *rdev, unsigned mode) { struct twlreg_info *info = rdev_get_drvdata(rdev); unsigned message; int status; /* We can only set the mode through state machine commands... */ switch (mode) { case REGULATOR_MODE_NORMAL: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); break; case REGULATOR_MODE_STANDBY: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_SLEEP); break; default: return -EINVAL; } /* Ensure the resource is associated with some group */ status = twl4030reg_grp(rdev); if (status < 0) return status; if (!(status & (P3_GRP | P2_GRP | P1_GRP))) return -EACCES; return twl4030_send_pb_msg(message); }
static int twl4030reg_set_mode(struct regulator_dev *rdev, unsigned mode) { struct twlreg_info *info = rdev_get_drvdata(rdev); unsigned message; /* We can only set the mode through state machine commands... */ switch (mode) { case REGULATOR_MODE_NORMAL: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); break; case REGULATOR_MODE_STANDBY: message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_SLEEP); break; default: return -EINVAL; } return twl4030_send_pb_msg(message); }
static int twl4030reg_enable(struct regulator_dev *rdev) { struct twlreg_info *info = rdev_get_drvdata(rdev); int grp, status; unsigned message; grp = twl4030reg_read(info, VREG_GRP); if (grp < 0) return grp; grp |= P1_GRP; status = twl4030reg_write(info, VREG_GRP, grp); if (status < 0) return status; message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); return twl4030_send_pb_msg(message); }
static struct twl4030_script wakeup_p3_script __initdata = { .script = wakeup_p3_seq, .size = ARRAY_SIZE(wakeup_p3_seq), .flags = TWL4030_WAKEUP3_SCRIPT, }; static struct twl4030_ins wrst_seq[] __initdata = { /* * Reset twl4030. * Reset VDD1 regulator. * Reset VDD2 regulator. * Reset VPLL1 regulator. * Enable sysclk output. * Reenable twl4030. */ {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 0, 1, RES_STATE_ACTIVE), 0x13}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 3, RES_STATE_OFF), 0x13}, {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD1, RES_STATE_WRST), 0x13}, {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD2, RES_STATE_WRST), 0x13}, {MSG_SINGULAR(DEV_GRP_NULL, RES_VPLL1, RES_STATE_WRST), 0x35}, {MSG_SINGULAR(DEV_GRP_P3, RES_HFCLKOUT, RES_STATE_ACTIVE), 2}, {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2}, }; static struct twl4030_script wrst_script __initdata = { .script = wrst_seq, .size = ARRAY_SIZE(wrst_seq), .flags = TWL4030_WRST_SCRIPT, };
/* TODO: might not be needed static struct twl4030_gpio_platform_data board_gpio_data = { .gpio_base = OMAP_MAX_GPIO_LINES, .irq_base = TWL4030_GPIO_IRQ_BASE, .irq_end = TWL4030_GPIO_IRQ_END, .setup = zoom2_twl_gpio_setup, }; */ static struct twl4030_madc_platform_data board_madc_data = { .irq_line = 1, }; static struct twl4030_ins __initdata sleep_on_seq[] = { /* Turn OFF VAUX2 */ {MSG_SINGULAR(DEV_GRP_P1, RES_VAUX2, RES_STATE_OFF), 2}, /* Turn off HFCLKOUT */ {MSG_SINGULAR(DEV_GRP_P1, RES_HFCLKOUT, RES_STATE_OFF), 2}, /* Turn OFF VDD1 */ {MSG_SINGULAR(DEV_GRP_P1, RES_VDD1, RES_STATE_OFF), 2}, /* Turn OFF VDD2 */ {MSG_SINGULAR(DEV_GRP_P1, RES_VDD2, RES_STATE_OFF), 2}, /* Turn OFF VPLL1 */ {MSG_SINGULAR(DEV_GRP_P1, RES_VPLL1, RES_STATE_OFF), 2}, }; static struct twl4030_script sleep_on_script __initdata = { .script = sleep_on_seq, .size = ARRAY_SIZE(sleep_on_seq), .flags = TRITON_SLEEP_SCRIPT, };
}; static struct twl4030_gpio_platform_data boxer_gpio_data = { .gpio_base = OMAP_MAX_GPIO_LINES, .irq_base = TWL4030_GPIO_IRQ_BASE, .irq_end = TWL4030_GPIO_IRQ_END, .setup = boxer_twl_gpio_setup, }; static struct twl4030_madc_platform_data boxer_madc_data = { .irq_line = 1, }; static struct twl4030_ins sleep_on_seq[] = { /* Turn off HFCLKOUT */ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_OFF), 2}, /* Turn OFF VDD1 */ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_OFF), 2}, /* Turn OFF VDD2 */ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_OFF), 2}, /* Turn OFF VPLL1 */ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_OFF), 2}, /* Turn OFF REGEN */ /* test stability without REGEN {MSG_SINGULAR(DEV_GRP_P1, 0x15, RES_STATE_OFF), 2}, */ }; static struct twl4030_script sleep_on_script = { .script = sleep_on_seq, .size = ARRAY_SIZE(sleep_on_seq), .flags = TRITON_SLEEP_SCRIPT, };
.gpio_base = OMAP_MAX_GPIO_LINES, .irq_base = TWL4030_GPIO_IRQ_BASE, .irq_end = TWL4030_GPIO_IRQ_END, }; static struct twl4030_ins sleep_on_seq[] = { /* * Turn off everything. #define MSG_BROADCAST(devgrp, grp, type, type2, state) \ ( (devgrp) << 13 | 1 << 12 | (grp) << 9 | (type2) << 7 \ | (type) << 4 | (state)) #define MSG_SINGULAR(devgrp, id, state) \ ((devgrp) << 13 | 0 << 12 | (id) << 4 | (state)) 0x14 - Corresponds to 500uSec */ {MSG_SINGULAR(DEV_GRP_NULL, RES_HFCLKOUT, RES_STATE_SLEEP), 0x14}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 4, 1, RES_STATE_SLEEP), 2}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 4, 2, RES_STATE_SLEEP), 2}, }; static struct twl4030_script sleep_on_script = { .script = sleep_on_seq, .size = ARRAY_SIZE(sleep_on_seq), .number_of_events = 1, .events[0] = { .offset = 0, .event = TRITON_SLEEP, }, }; static struct twl4030_ins wakeup_seq[] = {
RES_STATE_SLEEP), 4}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_ALL, RES_TYPE2_R0, RES_STATE_SLEEP), 4}, }; 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_SINGULAR(DEV_GRP_NULL, RES_VUSB_1V5, RES_STATE_ACTIVE), 0x30}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP_PR, RES_TYPE_ALL, RES_TYPE2_R0, RES_STATE_ACTIVE), 0x37}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_ALL, RES_TYPE2_R0, RES_STATE_ACTIVE), 0x2}, }; static struct twl4030_script wakeup_script __initdata = { .script = wakeup_seq, .size = ARRAY_SIZE(wakeup_seq), .flags = TWL4030_WAKEUP12_SCRIPT | TWL4030_WAKEUP3_SCRIPT, }; static struct twl4030_script *twl4030_scripts[] __initdata = { &wakeup_script, &sleep_on_script,
.name = KEYRESET_NAME, .dev.platform_data = &hub_reset_keys_pdata, }; //#define CONFIG_LGE_SLEEP_HUB #ifdef CONFIG_LGE_MTC_ETA//[email protected] struct platform_device hub_mtc_eta_log_device = { .name = "lge_mtc_eta_logger", }; #endif #ifdef CONFIG_LGE_SLEEP_HUB static struct twl4030_ins sleep_on_seq[] __initdata = { #if 0 //[email protected] please confirm the power team, check /* Turn off HFCLKOUT */ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_OFF), 2}, #endif /* Turn OFF VDD1 */ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_OFF), 2}, /* Turn OFF VDD2 */ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_OFF), 2}, /* Turn OFF VPLL1 */ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_OFF), 2}, /*LGE_CHANGE_S [[email protected]] 2009-11-18, to reduce current level */ {MSG_SINGULAR(DEV_GRP_P1, 0xe, RES_STATE_ACTIVE), 0xe}, // 20100823 [email protected] Fix LDOs to be turned on upon resumption [START_LGE] //{MSG_SINGULAR(DEV_GRP_P1, 0x17, RES_STATE_OFF), 0xe}, // 20100823 [email protected] Fix LDOs to be turned on upon resumption [END_LGE] /*LGE_CHANGE_S [[email protected]] 2009-11-18, to reduce current level */
TWL4030_RESCONFIG(RES_VIO, DEV_GRP_ALL, 2, 2, RES_STATE_SLEEP), TWL4030_RESCONFIG(RES_VDD1, DEV_GRP_P1, 4, 1, RES_STATE_OFF), /* ? */ TWL4030_RESCONFIG(RES_VDD2, DEV_GRP_P1, 3, 1, RES_STATE_OFF), /* ? */ TWL4030_RESCONFIG(RES_REGEN, DEV_GRP_ALL, 2, 1, RES_STATE_SLEEP), TWL4030_RESCONFIG(RES_NRES_PWRON, DEV_GRP_ALL, 0, 1, RES_STATE_SLEEP), TWL4030_RESCONFIG(RES_CLKEN, DEV_GRP_ALL, 3, 2, RES_STATE_SLEEP), TWL4030_RESCONFIG(RES_SYSEN, DEV_GRP_ALL, 6, 1, RES_STATE_SLEEP), TWL4030_RESCONFIG(RES_HFCLKOUT, DEV_GRP_P3, 0, 2, RES_STATE_SLEEP), /* ? */ TWL4030_RESCONFIG(0, 0, 0, 0, 0), }; /** * Optimized 'Active to Sleep' sequence */ static struct twl4030_ins omap3beagle_sleep_seq[] __initdata = { { MSG_SINGULAR(DEV_GRP_NULL, RES_HFCLKOUT, RES_STATE_SLEEP), 20}, { MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1, RES_STATE_SLEEP), 2 }, { MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2, RES_STATE_SLEEP), 2 }, }; static struct twl4030_script omap3beagle_sleep_script __initdata = { .script = omap3beagle_sleep_seq, .size = ARRAY_SIZE(omap3beagle_sleep_seq), .flags = TWL4030_SLEEP_SCRIPT, }; /** * Optimized 'Sleep to Active (P12)' sequence */ static struct twl4030_ins omap3beagle_wake_p12_seq[] __initdata = { { MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1, RES_STATE_ACTIVE), 2 }
/* * Sequence to reset the TRITON Power resources, * when the system gets warm reset. * Executed upon warm reset signal. */ static struct twl4030_ins wrst_seq[] __initdata = { /* * Reset twl4030. * Reset Main_Ref. * Reset All type2_group2. * Reset VUSB_3v1. * Reset All type2_group1. * Reset RC. * Reenable twl4030. */ {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2}, {MSG_SINGULAR(DEV_GRP_NULL, RES_Main_Ref, RES_STATE_WRST), 2}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2, RES_STATE_WRST), 2}, {MSG_SINGULAR(DEV_GRP_NULL, RES_VUSB_3V1, RES_STATE_WRST), 2}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1, RES_STATE_WRST), 2}, {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_RC, RES_TYPE_ALL, RES_TYPE2_R0, RES_STATE_WRST), 2}, {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2}, }; static struct twl4030_script wrst_script __initdata = { .script = wrst_seq, .size = ARRAY_SIZE(wrst_seq), .flags = TWL4030_WRST_SCRIPT,
| 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_usb_data rx51_usb_data = { .usb_mode = T2_USB_MODE_ULPI, }; static struct twl4030_ins sleep_on_seq[] __initdata = { /* * Turn off VDD1 and VDD2. */ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_OFF), 4}, {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_OFF), 2}, /* * And also turn off the OMAP3 PLLs and the sysclk output. */ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_OFF), 3}, {MSG_SINGULAR(DEV_GRP_P1, 0x17, RES_STATE_OFF), 3}, }; 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 = {