Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * twl4030.h - header for TWL4030 PM and audio CODEC device
0004  *
0005  * Copyright (C) 2005-2006 Texas Instruments, Inc.
0006  *
0007  * Based on tlv320aic23.c:
0008  * Copyright (c) by Kai Svahn <kai.svahn@nokia.com>
0009  */
0010 
0011 #ifndef __TWL_H_
0012 #define __TWL_H_
0013 
0014 #include <linux/types.h>
0015 #include <linux/input/matrix_keypad.h>
0016 
0017 /*
0018  * Using the twl4030 core we address registers using a pair
0019  *  { module id, relative register offset }
0020  * which that core then maps to the relevant
0021  *  { i2c slave, absolute register address }
0022  *
0023  * The module IDs are meaningful only to the twl4030 core code,
0024  * which uses them as array indices to look up the first register
0025  * address each module uses within a given i2c slave.
0026  */
0027 
0028 /* Module IDs for similar functionalities found in twl4030/twl6030 */
0029 enum twl_module_ids {
0030     TWL_MODULE_USB,
0031     TWL_MODULE_PIH,
0032     TWL_MODULE_MAIN_CHARGE,
0033     TWL_MODULE_PM_MASTER,
0034     TWL_MODULE_PM_RECEIVER,
0035 
0036     TWL_MODULE_RTC,
0037     TWL_MODULE_PWM,
0038     TWL_MODULE_LED,
0039     TWL_MODULE_SECURED_REG,
0040 
0041     TWL_MODULE_LAST,
0042 };
0043 
0044 /* Modules only available in twl4030 series */
0045 enum twl4030_module_ids {
0046     TWL4030_MODULE_AUDIO_VOICE = TWL_MODULE_LAST,
0047     TWL4030_MODULE_GPIO,
0048     TWL4030_MODULE_INTBR,
0049     TWL4030_MODULE_TEST,
0050     TWL4030_MODULE_KEYPAD,
0051 
0052     TWL4030_MODULE_MADC,
0053     TWL4030_MODULE_INTERRUPTS,
0054     TWL4030_MODULE_PRECHARGE,
0055     TWL4030_MODULE_BACKUP,
0056     TWL4030_MODULE_INT,
0057 
0058     TWL5031_MODULE_ACCESSORY,
0059     TWL5031_MODULE_INTERRUPTS,
0060 
0061     TWL4030_MODULE_LAST,
0062 };
0063 
0064 /* Modules only available in twl6030 series */
0065 enum twl6030_module_ids {
0066     TWL6030_MODULE_ID0 = TWL_MODULE_LAST,
0067     TWL6030_MODULE_ID1,
0068     TWL6030_MODULE_ID2,
0069     TWL6030_MODULE_GPADC,
0070     TWL6030_MODULE_GASGAUGE,
0071 
0072     TWL6030_MODULE_LAST,
0073 };
0074 
0075 /* Until the clients has been converted to use TWL_MODULE_LED */
0076 #define TWL4030_MODULE_LED  TWL_MODULE_LED
0077 
0078 #define GPIO_INTR_OFFSET    0
0079 #define KEYPAD_INTR_OFFSET  1
0080 #define BCI_INTR_OFFSET     2
0081 #define MADC_INTR_OFFSET    3
0082 #define USB_INTR_OFFSET     4
0083 #define CHARGERFAULT_INTR_OFFSET 5
0084 #define BCI_PRES_INTR_OFFSET    9
0085 #define USB_PRES_INTR_OFFSET    10
0086 #define RTC_INTR_OFFSET     11
0087 
0088 /*
0089  * Offset from TWL6030_IRQ_BASE / pdata->irq_base
0090  */
0091 #define PWR_INTR_OFFSET     0
0092 #define HOTDIE_INTR_OFFSET  12
0093 #define SMPSLDO_INTR_OFFSET 13
0094 #define BATDETECT_INTR_OFFSET   14
0095 #define SIMDETECT_INTR_OFFSET   15
0096 #define MMCDETECT_INTR_OFFSET   16
0097 #define GASGAUGE_INTR_OFFSET    17
0098 #define USBOTG_INTR_OFFSET  4
0099 #define CHARGER_INTR_OFFSET 2
0100 #define RSV_INTR_OFFSET     0
0101 
0102 /* INT register offsets */
0103 #define REG_INT_STS_A           0x00
0104 #define REG_INT_STS_B           0x01
0105 #define REG_INT_STS_C           0x02
0106 
0107 #define REG_INT_MSK_LINE_A      0x03
0108 #define REG_INT_MSK_LINE_B      0x04
0109 #define REG_INT_MSK_LINE_C      0x05
0110 
0111 #define REG_INT_MSK_STS_A       0x06
0112 #define REG_INT_MSK_STS_B       0x07
0113 #define REG_INT_MSK_STS_C       0x08
0114 
0115 /* MASK INT REG GROUP A */
0116 #define TWL6030_PWR_INT_MASK        0x07
0117 #define TWL6030_RTC_INT_MASK        0x18
0118 #define TWL6030_HOTDIE_INT_MASK     0x20
0119 #define TWL6030_SMPSLDOA_INT_MASK   0xC0
0120 
0121 /* MASK INT REG GROUP B */
0122 #define TWL6030_SMPSLDOB_INT_MASK   0x01
0123 #define TWL6030_BATDETECT_INT_MASK  0x02
0124 #define TWL6030_SIMDETECT_INT_MASK  0x04
0125 #define TWL6030_MMCDETECT_INT_MASK  0x08
0126 #define TWL6030_GPADC_INT_MASK      0x60
0127 #define TWL6030_GASGAUGE_INT_MASK   0x80
0128 
0129 /* MASK INT REG GROUP C */
0130 #define TWL6030_USBOTG_INT_MASK     0x0F
0131 #define TWL6030_CHARGER_CTRL_INT_MASK   0x10
0132 #define TWL6030_CHARGER_FAULT_INT_MASK  0x60
0133 
0134 #define TWL6030_MMCCTRL     0xEE
0135 #define VMMC_AUTO_OFF           (0x1 << 3)
0136 #define SW_FC               (0x1 << 2)
0137 #define STS_MMC         0x1
0138 
0139 #define TWL6030_CFG_INPUT_PUPD3 0xF2
0140 #define MMC_PU              (0x1 << 3)
0141 #define MMC_PD              (0x1 << 2)
0142 
0143 #define TWL_SIL_TYPE(rev)       ((rev) & 0x00FFFFFF)
0144 #define TWL_SIL_REV(rev)        ((rev) >> 24)
0145 #define TWL_SIL_5030            0x09002F
0146 #define TWL5030_REV_1_0         0x00
0147 #define TWL5030_REV_1_1         0x10
0148 #define TWL5030_REV_1_2         0x30
0149 
0150 #define TWL4030_CLASS_ID        0x4030
0151 #define TWL6030_CLASS_ID        0x6030
0152 unsigned int twl_rev(void);
0153 #define GET_TWL_REV (twl_rev())
0154 #define TWL_CLASS_IS(class, id)         \
0155 static inline int twl_class_is_ ##class(void)   \
0156 {                       \
0157     return ((id) == (GET_TWL_REV)) ? 1 : 0; \
0158 }
0159 
0160 TWL_CLASS_IS(4030, TWL4030_CLASS_ID)
0161 TWL_CLASS_IS(6030, TWL6030_CLASS_ID)
0162 
0163 /* Set the regcache bypass for the regmap associated with the nodule */
0164 int twl_set_regcache_bypass(u8 mod_no, bool enable);
0165 
0166 /*
0167  * Read and write several 8-bit registers at once.
0168  */
0169 int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
0170 int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
0171 
0172 /*
0173  * Read and write single 8-bit registers
0174  */
0175 static inline int twl_i2c_write_u8(u8 mod_no, u8 val, u8 reg) {
0176     return twl_i2c_write(mod_no, &val, reg, 1);
0177 }
0178 
0179 static inline int twl_i2c_read_u8(u8 mod_no, u8 *val, u8 reg) {
0180     return twl_i2c_read(mod_no, val, reg, 1);
0181 }
0182 
0183 static inline int twl_i2c_write_u16(u8 mod_no, u16 val, u8 reg) {
0184     __le16 value;
0185 
0186     value = cpu_to_le16(val);
0187     return twl_i2c_write(mod_no, (u8 *) &value, reg, 2);
0188 }
0189 
0190 static inline int twl_i2c_read_u16(u8 mod_no, u16 *val, u8 reg) {
0191     int ret;
0192     __le16 value;
0193 
0194     ret = twl_i2c_read(mod_no, (u8 *) &value, reg, 2);
0195     *val = le16_to_cpu(value);
0196     return ret;
0197 }
0198 
0199 int twl_get_type(void);
0200 int twl_get_version(void);
0201 int twl_get_hfclk_rate(void);
0202 
0203 int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
0204 int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
0205 
0206 /* Card detect Configuration for MMC1 Controller on OMAP4 */
0207 #ifdef CONFIG_TWL4030_CORE
0208 int twl6030_mmc_card_detect_config(void);
0209 #else
0210 static inline int twl6030_mmc_card_detect_config(void)
0211 {
0212     pr_debug("twl6030_mmc_card_detect_config not supported\n");
0213     return 0;
0214 }
0215 #endif
0216 
0217 /* MMC1 Controller on OMAP4 uses Phoenix irq for Card detect */
0218 #ifdef CONFIG_TWL4030_CORE
0219 int twl6030_mmc_card_detect(struct device *dev, int slot);
0220 #else
0221 static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
0222 {
0223     pr_debug("Call back twl6030_mmc_card_detect not supported\n");
0224     return -EIO;
0225 }
0226 #endif
0227 /*----------------------------------------------------------------------*/
0228 
0229 /*
0230  * NOTE:  at up to 1024 registers, this is a big chip.
0231  *
0232  * Avoid putting register declarations in this file, instead of into
0233  * a driver-private file, unless some of the registers in a block
0234  * need to be shared with other drivers.  One example is blocks that
0235  * have Secondary IRQ Handler (SIH) registers.
0236  */
0237 
0238 #define TWL4030_SIH_CTRL_EXCLEN_MASK    BIT(0)
0239 #define TWL4030_SIH_CTRL_PENDDIS_MASK   BIT(1)
0240 #define TWL4030_SIH_CTRL_COR_MASK   BIT(2)
0241 
0242 /*----------------------------------------------------------------------*/
0243 
0244 /*
0245  * GPIO Block Register offsets (use TWL4030_MODULE_GPIO)
0246  */
0247 
0248 #define REG_GPIODATAIN1         0x0
0249 #define REG_GPIODATAIN2         0x1
0250 #define REG_GPIODATAIN3         0x2
0251 #define REG_GPIODATADIR1        0x3
0252 #define REG_GPIODATADIR2        0x4
0253 #define REG_GPIODATADIR3        0x5
0254 #define REG_GPIODATAOUT1        0x6
0255 #define REG_GPIODATAOUT2        0x7
0256 #define REG_GPIODATAOUT3        0x8
0257 #define REG_CLEARGPIODATAOUT1       0x9
0258 #define REG_CLEARGPIODATAOUT2       0xA
0259 #define REG_CLEARGPIODATAOUT3       0xB
0260 #define REG_SETGPIODATAOUT1     0xC
0261 #define REG_SETGPIODATAOUT2     0xD
0262 #define REG_SETGPIODATAOUT3     0xE
0263 #define REG_GPIO_DEBEN1         0xF
0264 #define REG_GPIO_DEBEN2         0x10
0265 #define REG_GPIO_DEBEN3         0x11
0266 #define REG_GPIO_CTRL           0x12
0267 #define REG_GPIOPUPDCTR1        0x13
0268 #define REG_GPIOPUPDCTR2        0x14
0269 #define REG_GPIOPUPDCTR3        0x15
0270 #define REG_GPIOPUPDCTR4        0x16
0271 #define REG_GPIOPUPDCTR5        0x17
0272 #define REG_GPIO_ISR1A          0x19
0273 #define REG_GPIO_ISR2A          0x1A
0274 #define REG_GPIO_ISR3A          0x1B
0275 #define REG_GPIO_IMR1A          0x1C
0276 #define REG_GPIO_IMR2A          0x1D
0277 #define REG_GPIO_IMR3A          0x1E
0278 #define REG_GPIO_ISR1B          0x1F
0279 #define REG_GPIO_ISR2B          0x20
0280 #define REG_GPIO_ISR3B          0x21
0281 #define REG_GPIO_IMR1B          0x22
0282 #define REG_GPIO_IMR2B          0x23
0283 #define REG_GPIO_IMR3B          0x24
0284 #define REG_GPIO_EDR1           0x28
0285 #define REG_GPIO_EDR2           0x29
0286 #define REG_GPIO_EDR3           0x2A
0287 #define REG_GPIO_EDR4           0x2B
0288 #define REG_GPIO_EDR5           0x2C
0289 #define REG_GPIO_SIH_CTRL       0x2D
0290 
0291 /* Up to 18 signals are available as GPIOs, when their
0292  * pins are not assigned to another use (such as ULPI/USB).
0293  */
0294 #define TWL4030_GPIO_MAX        18
0295 
0296 /*----------------------------------------------------------------------*/
0297 
0298 /*Interface Bit Register (INTBR) offsets
0299  *(Use TWL_4030_MODULE_INTBR)
0300  */
0301 
0302 #define REG_IDCODE_7_0          0x00
0303 #define REG_IDCODE_15_8         0x01
0304 #define REG_IDCODE_16_23        0x02
0305 #define REG_IDCODE_31_24        0x03
0306 #define REG_GPPUPDCTR1          0x0F
0307 #define REG_UNLOCK_TEST_REG     0x12
0308 
0309 /*I2C1 and I2C4(SR) SDA/SCL pull-up control bits */
0310 
0311 #define I2C_SCL_CTRL_PU         BIT(0)
0312 #define I2C_SDA_CTRL_PU         BIT(2)
0313 #define SR_I2C_SCL_CTRL_PU      BIT(4)
0314 #define SR_I2C_SDA_CTRL_PU      BIT(6)
0315 
0316 #define TWL_EEPROM_R_UNLOCK     0x49
0317 
0318 /*----------------------------------------------------------------------*/
0319 
0320 /*
0321  * Keypad register offsets (use TWL4030_MODULE_KEYPAD)
0322  * ... SIH/interrupt only
0323  */
0324 
0325 #define TWL4030_KEYPAD_KEYP_ISR1    0x11
0326 #define TWL4030_KEYPAD_KEYP_IMR1    0x12
0327 #define TWL4030_KEYPAD_KEYP_ISR2    0x13
0328 #define TWL4030_KEYPAD_KEYP_IMR2    0x14
0329 #define TWL4030_KEYPAD_KEYP_SIR     0x15    /* test register */
0330 #define TWL4030_KEYPAD_KEYP_EDR     0x16
0331 #define TWL4030_KEYPAD_KEYP_SIH_CTRL    0x17
0332 
0333 /*----------------------------------------------------------------------*/
0334 
0335 /*
0336  * Multichannel ADC register offsets (use TWL4030_MODULE_MADC)
0337  * ... SIH/interrupt only
0338  */
0339 
0340 #define TWL4030_MADC_ISR1       0x61
0341 #define TWL4030_MADC_IMR1       0x62
0342 #define TWL4030_MADC_ISR2       0x63
0343 #define TWL4030_MADC_IMR2       0x64
0344 #define TWL4030_MADC_SIR        0x65    /* test register */
0345 #define TWL4030_MADC_EDR        0x66
0346 #define TWL4030_MADC_SIH_CTRL       0x67
0347 
0348 /*----------------------------------------------------------------------*/
0349 
0350 /*
0351  * Battery charger register offsets (use TWL4030_MODULE_INTERRUPTS)
0352  */
0353 
0354 #define TWL4030_INTERRUPTS_BCIISR1A 0x0
0355 #define TWL4030_INTERRUPTS_BCIISR2A 0x1
0356 #define TWL4030_INTERRUPTS_BCIIMR1A 0x2
0357 #define TWL4030_INTERRUPTS_BCIIMR2A 0x3
0358 #define TWL4030_INTERRUPTS_BCIISR1B 0x4
0359 #define TWL4030_INTERRUPTS_BCIISR2B 0x5
0360 #define TWL4030_INTERRUPTS_BCIIMR1B 0x6
0361 #define TWL4030_INTERRUPTS_BCIIMR2B 0x7
0362 #define TWL4030_INTERRUPTS_BCISIR1  0x8 /* test register */
0363 #define TWL4030_INTERRUPTS_BCISIR2  0x9 /* test register */
0364 #define TWL4030_INTERRUPTS_BCIEDR1  0xa
0365 #define TWL4030_INTERRUPTS_BCIEDR2  0xb
0366 #define TWL4030_INTERRUPTS_BCIEDR3  0xc
0367 #define TWL4030_INTERRUPTS_BCISIHCTRL   0xd
0368 
0369 /*----------------------------------------------------------------------*/
0370 
0371 /*
0372  * Power Interrupt block register offsets (use TWL4030_MODULE_INT)
0373  */
0374 
0375 #define TWL4030_INT_PWR_ISR1        0x0
0376 #define TWL4030_INT_PWR_IMR1        0x1
0377 #define TWL4030_INT_PWR_ISR2        0x2
0378 #define TWL4030_INT_PWR_IMR2        0x3
0379 #define TWL4030_INT_PWR_SIR     0x4 /* test register */
0380 #define TWL4030_INT_PWR_EDR1        0x5
0381 #define TWL4030_INT_PWR_EDR2        0x6
0382 #define TWL4030_INT_PWR_SIH_CTRL    0x7
0383 
0384 /*----------------------------------------------------------------------*/
0385 
0386 /*
0387  * Accessory Interrupts
0388  */
0389 #define TWL5031_ACIIMR_LSB      0x05
0390 #define TWL5031_ACIIMR_MSB      0x06
0391 #define TWL5031_ACIIDR_LSB      0x07
0392 #define TWL5031_ACIIDR_MSB      0x08
0393 #define TWL5031_ACCISR1         0x0F
0394 #define TWL5031_ACCIMR1         0x10
0395 #define TWL5031_ACCISR2         0x11
0396 #define TWL5031_ACCIMR2         0x12
0397 #define TWL5031_ACCSIR          0x13
0398 #define TWL5031_ACCEDR1         0x14
0399 #define TWL5031_ACCSIHCTRL      0x15
0400 
0401 /*----------------------------------------------------------------------*/
0402 
0403 /*
0404  * Battery Charger Controller
0405  */
0406 
0407 #define TWL5031_INTERRUPTS_BCIISR1  0x0
0408 #define TWL5031_INTERRUPTS_BCIIMR1  0x1
0409 #define TWL5031_INTERRUPTS_BCIISR2  0x2
0410 #define TWL5031_INTERRUPTS_BCIIMR2  0x3
0411 #define TWL5031_INTERRUPTS_BCISIR   0x4
0412 #define TWL5031_INTERRUPTS_BCIEDR1  0x5
0413 #define TWL5031_INTERRUPTS_BCIEDR2  0x6
0414 #define TWL5031_INTERRUPTS_BCISIHCTRL   0x7
0415 
0416 /*----------------------------------------------------------------------*/
0417 
0418 /*
0419  * PM Master module register offsets (use TWL4030_MODULE_PM_MASTER)
0420  */
0421 
0422 #define TWL4030_PM_MASTER_CFG_P1_TRANSITION 0x00
0423 #define TWL4030_PM_MASTER_CFG_P2_TRANSITION 0x01
0424 #define TWL4030_PM_MASTER_CFG_P3_TRANSITION 0x02
0425 #define TWL4030_PM_MASTER_CFG_P123_TRANSITION   0x03
0426 #define TWL4030_PM_MASTER_STS_BOOT      0x04
0427 #define TWL4030_PM_MASTER_CFG_BOOT      0x05
0428 #define TWL4030_PM_MASTER_SHUNDAN       0x06
0429 #define TWL4030_PM_MASTER_BOOT_BCI      0x07
0430 #define TWL4030_PM_MASTER_CFG_PWRANA1       0x08
0431 #define TWL4030_PM_MASTER_CFG_PWRANA2       0x09
0432 #define TWL4030_PM_MASTER_BACKUP_MISC_STS   0x0b
0433 #define TWL4030_PM_MASTER_BACKUP_MISC_CFG   0x0c
0434 #define TWL4030_PM_MASTER_BACKUP_MISC_TST   0x0d
0435 #define TWL4030_PM_MASTER_PROTECT_KEY       0x0e
0436 #define TWL4030_PM_MASTER_STS_HW_CONDITIONS 0x0f
0437 #define TWL4030_PM_MASTER_P1_SW_EVENTS      0x10
0438 #define TWL4030_PM_MASTER_P2_SW_EVENTS      0x11
0439 #define TWL4030_PM_MASTER_P3_SW_EVENTS      0x12
0440 #define TWL4030_PM_MASTER_STS_P123_STATE    0x13
0441 #define TWL4030_PM_MASTER_PB_CFG        0x14
0442 #define TWL4030_PM_MASTER_PB_WORD_MSB       0x15
0443 #define TWL4030_PM_MASTER_PB_WORD_LSB       0x16
0444 #define TWL4030_PM_MASTER_SEQ_ADD_W2P       0x1c
0445 #define TWL4030_PM_MASTER_SEQ_ADD_P2A       0x1d
0446 #define TWL4030_PM_MASTER_SEQ_ADD_A2W       0x1e
0447 #define TWL4030_PM_MASTER_SEQ_ADD_A2S       0x1f
0448 #define TWL4030_PM_MASTER_SEQ_ADD_S2A12     0x20
0449 #define TWL4030_PM_MASTER_SEQ_ADD_S2A3      0x21
0450 #define TWL4030_PM_MASTER_SEQ_ADD_WARM      0x22
0451 #define TWL4030_PM_MASTER_MEMORY_ADDRESS    0x23
0452 #define TWL4030_PM_MASTER_MEMORY_DATA       0x24
0453 
0454 #define TWL4030_PM_MASTER_KEY_CFG1      0xc0
0455 #define TWL4030_PM_MASTER_KEY_CFG2      0x0c
0456 
0457 #define TWL4030_PM_MASTER_KEY_TST1      0xe0
0458 #define TWL4030_PM_MASTER_KEY_TST2      0x0e
0459 
0460 #define TWL4030_PM_MASTER_GLOBAL_TST        0xb6
0461 
0462 /*----------------------------------------------------------------------*/
0463 
0464 /* Power bus message definitions */
0465 
0466 /* The TWL4030/5030 splits its power-management resources (the various
0467  * regulators, clock and reset lines) into 3 processor groups - P1, P2 and
0468  * P3. These groups can then be configured to transition between sleep, wait-on
0469  * and active states by sending messages to the power bus.  See Section 5.4.2
0470  * Power Resources of TWL4030 TRM
0471  */
0472 
0473 /* Processor groups */
0474 #define DEV_GRP_NULL        0x0
0475 #define DEV_GRP_P1      0x1 /* P1: all OMAP devices */
0476 #define DEV_GRP_P2      0x2 /* P2: all Modem devices */
0477 #define DEV_GRP_P3      0x4 /* P3: all peripheral devices */
0478 
0479 /* Resource groups */
0480 #define RES_GRP_RES     0x0 /* Reserved */
0481 #define RES_GRP_PP      0x1 /* Power providers */
0482 #define RES_GRP_RC      0x2 /* Reset and control */
0483 #define RES_GRP_PP_RC       0x3
0484 #define RES_GRP_PR      0x4 /* Power references */
0485 #define RES_GRP_PP_PR       0x5
0486 #define RES_GRP_RC_PR       0x6
0487 #define RES_GRP_ALL     0x7 /* All resource groups */
0488 
0489 #define RES_TYPE2_R0        0x0
0490 #define RES_TYPE2_R1        0x1
0491 #define RES_TYPE2_R2        0x2
0492 
0493 #define RES_TYPE_R0     0x0
0494 #define RES_TYPE_ALL        0x7
0495 
0496 /* Resource states */
0497 #define RES_STATE_WRST      0xF
0498 #define RES_STATE_ACTIVE    0xE
0499 #define RES_STATE_SLEEP     0x8
0500 #define RES_STATE_OFF       0x0
0501 
0502 /* Power resources */
0503 
0504 /* Power providers */
0505 #define RES_VAUX1               1
0506 #define RES_VAUX2               2
0507 #define RES_VAUX3               3
0508 #define RES_VAUX4               4
0509 #define RES_VMMC1               5
0510 #define RES_VMMC2               6
0511 #define RES_VPLL1               7
0512 #define RES_VPLL2               8
0513 #define RES_VSIM                9
0514 #define RES_VDAC                10
0515 #define RES_VINTANA1            11
0516 #define RES_VINTANA2            12
0517 #define RES_VINTDIG             13
0518 #define RES_VIO                 14
0519 #define RES_VDD1                15
0520 #define RES_VDD2                16
0521 #define RES_VUSB_1V5            17
0522 #define RES_VUSB_1V8            18
0523 #define RES_VUSB_3V1            19
0524 #define RES_VUSBCP              20
0525 #define RES_REGEN               21
0526 /* Reset and control */
0527 #define RES_NRES_PWRON          22
0528 #define RES_CLKEN               23
0529 #define RES_SYSEN               24
0530 #define RES_HFCLKOUT            25
0531 #define RES_32KCLKOUT           26
0532 #define RES_RESET               27
0533 /* Power Reference */
0534 #define RES_MAIN_REF            28
0535 
0536 #define TOTAL_RESOURCES     28
0537 /*
0538  * Power Bus Message Format ... these can be sent individually by Linux,
0539  * but are usually part of downloaded scripts that are run when various
0540  * power events are triggered.
0541  *
0542  *  Broadcast Message (16 Bits):
0543  *    DEV_GRP[15:13] MT[12]  RES_GRP[11:9]  RES_TYPE2[8:7] RES_TYPE[6:4]
0544  *    RES_STATE[3:0]
0545  *
0546  *  Singular Message (16 Bits):
0547  *    DEV_GRP[15:13] MT[12]  RES_ID[11:4]  RES_STATE[3:0]
0548  */
0549 
0550 #define MSG_BROADCAST(devgrp, grp, type, type2, state) \
0551     ( (devgrp) << 13 | 1 << 12 | (grp) << 9 | (type2) << 7 \
0552     | (type) << 4 | (state))
0553 
0554 #define MSG_SINGULAR(devgrp, id, state) \
0555     ((devgrp) << 13 | 0 << 12 | (id) << 4 | (state))
0556 
0557 #define MSG_BROADCAST_ALL(devgrp, state) \
0558     ((devgrp) << 5 | (state))
0559 
0560 #define MSG_BROADCAST_REF MSG_BROADCAST_ALL
0561 #define MSG_BROADCAST_PROV MSG_BROADCAST_ALL
0562 #define MSG_BROADCAST__CLK_RST MSG_BROADCAST_ALL
0563 /*----------------------------------------------------------------------*/
0564 
0565 struct twl4030_clock_init_data {
0566     bool ck32k_lowpwr_enable;
0567 };
0568 
0569 struct twl4030_bci_platform_data {
0570     int *battery_tmp_tbl;
0571     unsigned int tblsize;
0572     int bb_uvolt;   /* voltage to charge backup battery */
0573     int bb_uamp;    /* current for backup battery charging */
0574 };
0575 
0576 /* TWL4030_GPIO_MAX (18) GPIOs, with interrupts */
0577 struct twl4030_gpio_platform_data {
0578     /* package the two LED signals as output-only GPIOs? */
0579     bool        use_leds;
0580 
0581     /* gpio-n should control VMMC(n+1) if BIT(n) in mmc_cd is set */
0582     u8      mmc_cd;
0583 
0584     /* if BIT(N) is set, or VMMC(n+1) is linked, debounce GPIO-N */
0585     u32     debounce;
0586 
0587     /* For gpio-N, bit (1 << N) in "pullups" is set if that pullup
0588      * should be enabled.  Else, if that bit is set in "pulldowns",
0589      * that pulldown is enabled.  Don't waste power by letting any
0590      * digital inputs float...
0591      */
0592     u32     pullups;
0593     u32     pulldowns;
0594 
0595     int     (*setup)(struct device *dev,
0596                 unsigned gpio, unsigned ngpio);
0597 };
0598 
0599 struct twl4030_madc_platform_data {
0600     int     irq_line;
0601 };
0602 
0603 /* Boards have unique mappings of {row, col} --> keycode.
0604  * Column and row are 8 bits each, but range only from 0..7.
0605  * a PERSISTENT_KEY is "always on" and never reported.
0606  */
0607 #define PERSISTENT_KEY(r, c)    KEY((r), (c), KEY_RESERVED)
0608 
0609 struct twl4030_keypad_data {
0610     const struct matrix_keymap_data *keymap_data;
0611     unsigned rows;
0612     unsigned cols;
0613     bool rep;
0614 };
0615 
0616 enum twl4030_usb_mode {
0617     T2_USB_MODE_ULPI = 1,
0618     T2_USB_MODE_CEA2011_3PIN = 2,
0619 };
0620 
0621 struct twl4030_usb_data {
0622     enum twl4030_usb_mode   usb_mode;
0623     unsigned long       features;
0624 
0625     int     (*phy_init)(struct device *dev);
0626     int     (*phy_exit)(struct device *dev);
0627     /* Power on/off the PHY */
0628     int     (*phy_power)(struct device *dev, int iD, int on);
0629     /* enable/disable  phy clocks */
0630     int     (*phy_set_clock)(struct device *dev, int on);
0631     /* suspend/resume of phy */
0632     int     (*phy_suspend)(struct device *dev, int suspend);
0633 };
0634 
0635 struct twl4030_ins {
0636     u16 pmb_message;
0637     u8 delay;
0638 };
0639 
0640 struct twl4030_script {
0641     struct twl4030_ins *script;
0642     unsigned size;
0643     u8 flags;
0644 #define TWL4030_WRST_SCRIPT (1<<0)
0645 #define TWL4030_WAKEUP12_SCRIPT (1<<1)
0646 #define TWL4030_WAKEUP3_SCRIPT  (1<<2)
0647 #define TWL4030_SLEEP_SCRIPT    (1<<3)
0648 };
0649 
0650 struct twl4030_resconfig {
0651     u8 resource;
0652     u8 devgroup;    /* Processor group that Power resource belongs to */
0653     u8 type;    /* Power resource addressed, 6 / broadcast message */
0654     u8 type2;   /* Power resource addressed, 3 / broadcast message */
0655     u8 remap_off;   /* off state remapping */
0656     u8 remap_sleep; /* sleep state remapping */
0657 };
0658 
0659 struct twl4030_power_data {
0660     struct twl4030_script **scripts;
0661     unsigned num;
0662     struct twl4030_resconfig *resource_config;
0663     struct twl4030_resconfig *board_config;
0664 #define TWL4030_RESCONFIG_UNDEF ((u8)-1)
0665     bool use_poweroff;  /* Board is wired for TWL poweroff */
0666     bool ac_charger_quirk;  /* Disable AC charger on board */
0667 };
0668 
0669 extern int twl4030_remove_script(u8 flags);
0670 extern void twl4030_power_off(void);
0671 
0672 struct twl4030_codec_data {
0673     unsigned int digimic_delay; /* in ms */
0674     unsigned int ramp_delay_value;
0675     unsigned int offset_cncl_path;
0676     unsigned int hs_extmute:1;
0677     int hs_extmute_gpio;
0678 };
0679 
0680 struct twl4030_vibra_data {
0681     unsigned int    coexist;
0682 };
0683 
0684 struct twl4030_audio_data {
0685     unsigned int    audio_mclk;
0686     struct twl4030_codec_data *codec;
0687     struct twl4030_vibra_data *vibra;
0688 
0689     /* twl6040 */
0690     int audpwron_gpio;  /* audio power-on gpio */
0691     int naudint_irq;    /* audio interrupt */
0692     unsigned int irq_base;
0693 };
0694 
0695 struct twl_regulator_driver_data {
0696     int     (*set_voltage)(void *data, int target_uV);
0697     int     (*get_voltage)(void *data);
0698     void        *data;
0699     unsigned long   features;
0700 };
0701 /* chip-specific feature flags, for twl_regulator_driver_data.features */
0702 #define TWL4030_VAUX2       BIT(0)  /* pre-5030 voltage ranges */
0703 #define TPS_SUBSET      BIT(1)  /* tps659[23]0 have fewer LDOs */
0704 #define TWL5031         BIT(2)  /* twl5031 has different registers */
0705 #define TWL6030_CLASS       BIT(3)  /* TWL6030 class */
0706 #define TWL6032_SUBCLASS    BIT(4)  /* TWL6032 has changed registers */
0707 #define TWL4030_ALLOW_UNSUPPORTED BIT(5) /* Some voltages are possible
0708                       * but not officially supported.
0709                       * This flag is necessary to
0710                       * enable them.
0711                       */
0712 
0713 /*----------------------------------------------------------------------*/
0714 
0715 int twl4030_sih_setup(struct device *dev, int module, int irq_base);
0716 
0717 /* Offsets to Power Registers */
0718 #define TWL4030_VDAC_DEV_GRP        0x3B
0719 #define TWL4030_VDAC_DEDICATED      0x3E
0720 #define TWL4030_VAUX1_DEV_GRP       0x17
0721 #define TWL4030_VAUX1_DEDICATED     0x1A
0722 #define TWL4030_VAUX2_DEV_GRP       0x1B
0723 #define TWL4030_VAUX2_DEDICATED     0x1E
0724 #define TWL4030_VAUX3_DEV_GRP       0x1F
0725 #define TWL4030_VAUX3_DEDICATED     0x22
0726 
0727 /*----------------------------------------------------------------------*/
0728 
0729 /* Linux-specific regulator identifiers ... for now, we only support
0730  * the LDOs, and leave the three buck converters alone.  VDD1 and VDD2
0731  * need to tie into hardware based voltage scaling (cpufreq etc), while
0732  * VIO is generally fixed.
0733  */
0734 
0735 /* TWL4030 SMPS/LDO's */
0736 /* EXTERNAL dc-to-dc buck converters */
0737 #define TWL4030_REG_VDD1    0
0738 #define TWL4030_REG_VDD2    1
0739 #define TWL4030_REG_VIO     2
0740 
0741 /* EXTERNAL LDOs */
0742 #define TWL4030_REG_VDAC    3
0743 #define TWL4030_REG_VPLL1   4
0744 #define TWL4030_REG_VPLL2   5   /* not on all chips */
0745 #define TWL4030_REG_VMMC1   6
0746 #define TWL4030_REG_VMMC2   7   /* not on all chips */
0747 #define TWL4030_REG_VSIM    8   /* not on all chips */
0748 #define TWL4030_REG_VAUX1   9   /* not on all chips */
0749 #define TWL4030_REG_VAUX2_4030  10  /* (twl4030-specific) */
0750 #define TWL4030_REG_VAUX2   11  /* (twl5030 and newer) */
0751 #define TWL4030_REG_VAUX3   12  /* not on all chips */
0752 #define TWL4030_REG_VAUX4   13  /* not on all chips */
0753 
0754 /* INTERNAL LDOs */
0755 #define TWL4030_REG_VINTANA1    14
0756 #define TWL4030_REG_VINTANA2    15
0757 #define TWL4030_REG_VINTDIG 16
0758 #define TWL4030_REG_VUSB1V5 17
0759 #define TWL4030_REG_VUSB1V8 18
0760 #define TWL4030_REG_VUSB3V1 19
0761 
0762 /* TWL6030 SMPS/LDO's */
0763 /* EXTERNAL dc-to-dc buck convertor controllable via SR */
0764 #define TWL6030_REG_VDD1    30
0765 #define TWL6030_REG_VDD2    31
0766 #define TWL6030_REG_VDD3    32
0767 
0768 /* Non SR compliant dc-to-dc buck convertors */
0769 #define TWL6030_REG_VMEM    33
0770 #define TWL6030_REG_V2V1    34
0771 #define TWL6030_REG_V1V29   35
0772 #define TWL6030_REG_V1V8    36
0773 
0774 /* EXTERNAL LDOs */
0775 #define TWL6030_REG_VAUX1_6030  37
0776 #define TWL6030_REG_VAUX2_6030  38
0777 #define TWL6030_REG_VAUX3_6030  39
0778 #define TWL6030_REG_VMMC    40
0779 #define TWL6030_REG_VPP     41
0780 #define TWL6030_REG_VUSIM   42
0781 #define TWL6030_REG_VANA    43
0782 #define TWL6030_REG_VCXIO   44
0783 #define TWL6030_REG_VDAC    45
0784 #define TWL6030_REG_VUSB    46
0785 
0786 /* INTERNAL LDOs */
0787 #define TWL6030_REG_VRTC    47
0788 #define TWL6030_REG_CLK32KG 48
0789 
0790 /* LDOs on 6025 have different names */
0791 #define TWL6032_REG_LDO2    49
0792 #define TWL6032_REG_LDO4    50
0793 #define TWL6032_REG_LDO3    51
0794 #define TWL6032_REG_LDO5    52
0795 #define TWL6032_REG_LDO1    53
0796 #define TWL6032_REG_LDO7    54
0797 #define TWL6032_REG_LDO6    55
0798 #define TWL6032_REG_LDOLN   56
0799 #define TWL6032_REG_LDOUSB  57
0800 
0801 /* 6025 DCDC supplies */
0802 #define TWL6032_REG_SMPS3   58
0803 #define TWL6032_REG_SMPS4   59
0804 #define TWL6032_REG_VIO     60
0805 
0806 
0807 #endif /* End of __TWL4030_H */