1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * (C) Copyright 2010 4 * Texas Instruments, <www.ti.com> 5 */ 6 7 #ifndef TWL6030_H 8 #define TWL6030_H 9 10 #include <common.h> 11 #include <i2c.h> 12 13 /* I2C chip addresses */ 14 #define TWL6030_CHIP_PM 0x48 15 16 #define TWL6030_CHIP_USB 0x49 17 #define TWL6030_CHIP_ADC 0x49 18 #define TWL6030_CHIP_CHARGER 0x49 19 #define TWL6030_CHIP_PWM 0x49 20 21 /* Slave Address 0x48 */ 22 #define TWL6030_STS_HW_CONDITIONS 0x21 23 24 #define TWL6030_STS_HW_CONDITIONS_PWRON (1 << 0) 25 26 #define TWL6030_PHOENIX_DEV_ON 0x25 27 28 #define TWL6030_PHOENIX_APP_DEVOFF (1 << 0) 29 #define TWL6030_PHOENIX_CON_DEVOFF (1 << 1) 30 #define TWL6030_PHOENIX_MOD_DEVOFF (1 << 2) 31 32 #define TWL6030_PH_STS_BOOT 0x29 33 34 #define TWL6030_PH_STS_BOOT0 (1 << 0) 35 #define TWL6030_PH_STS_BOOT1 (1 << 1) 36 #define TWL6030_PH_STS_BOOT2 (1 << 2) 37 #define TWL6030_PH_STS_BOOT3 (1 << 3) 38 39 #define TWL6030_VAUX1_CFG_STATE 0x86 40 #define TWL6030_VAUX1_CFG_VOLTAGE 0x87 41 #define TWL6030_VMMC_CFG_STATE 0x9A 42 #define TWL6030_VMMC_CFG_VOLTAGE 0x9B 43 #define TWL6030_VUSB_CFG_STATE 0xA2 44 #define TWL6030_VUSB_CFG_VOLTAGE 0xA3 45 46 #define TWL6030_CFG_GRP_P1 (1 << 0) 47 #define TWL6030_CFG_STATE_ON (1 << 0) 48 #define TWL6030_CFG_STATE_P1 (TWL6030_CFG_GRP_P1 << 5) 49 #define TWL6030_CFG_VOLTAGE_18 0x09 50 #define TWL6030_CFG_VOLTAGE_28 0x13 51 #define TWL6030_CFG_VOLTAGE_30 0x15 52 #define TWL6030_CFG_VOLTAGE_33 0x18 53 54 #define MISC1 0xE4 55 #define VAC_MEAS (1 << 2) 56 #define VBAT_MEAS (1 << 1) 57 #define BB_MEAS (1 << 0) 58 59 #define TWL6030_MISC2 0xE5 60 #define TWL6030_MISC2_VUSB_IN_PMID (1 << 3) 61 #define TWL6030_MISC2_VUSB_IN_VSYS (1 << 4) 62 63 /* Slave Address 0x49 */ 64 65 #define TWL6030_CONTROLLER_STAT1 0xE3 66 67 #define TWL6030_CONTROLLER_STAT1_VAC_DET (1 << 3) 68 #define TWL6030_CONTROLLER_STAT1_VBUS_DET (1 << 2) 69 70 /* Battery CHARGER REGISTERS */ 71 #define CONTROLLER_INT_MASK 0xE0 72 #define CONTROLLER_CTRL1 0xE1 73 #define CONTROLLER_WDG 0xE2 74 #define CONTROLLER_STAT1 0xE3 75 #define CHARGERUSB_INT_STATUS 0xE4 76 #define CHARGERUSB_INT_MASK 0xE5 77 #define CHARGERUSB_STATUS_INT1 0xE6 78 #define CHARGERUSB_STATUS_INT2 0xE7 79 #define CHARGERUSB_CTRL1 0xE8 80 #define CHARGERUSB_CTRL2 0xE9 81 #define CHARGERUSB_CTRL3 0xEA 82 #define CHARGERUSB_STAT1 0xEB 83 #define CHARGERUSB_VOREG 0xEC 84 #define CHARGERUSB_VICHRG 0xED 85 #define CHARGERUSB_CINLIMIT 0xEE 86 #define CHARGERUSB_CTRLLIMIT1 0xEF 87 88 /* CHARGERUSB_VICHRG */ 89 #define CHARGERUSB_VICHRG_500 0x4 90 #define CHARGERUSB_VICHRG_1500 0xE 91 /* CHARGERUSB_CINLIMIT */ 92 #define CHARGERUSB_CIN_LIMIT_100 0x1 93 #define CHARGERUSB_CIN_LIMIT_300 0x5 94 #define CHARGERUSB_CIN_LIMIT_500 0x9 95 #define CHARGERUSB_CIN_LIMIT_NONE 0xF 96 /* CONTROLLER_INT_MASK */ 97 #define MVAC_FAULT (1 << 6) 98 #define MAC_EOC (1 << 5) 99 #define MBAT_REMOVED (1 << 4) 100 #define MFAULT_WDG (1 << 3) 101 #define MBAT_TEMP (1 << 2) 102 #define MVBUS_DET (1 << 1) 103 #define MVAC_DET (1 << 0) 104 /* CHARGERUSB_INT_MASK */ 105 #define MASK_MCURRENT_TERM (1 << 3) 106 #define MASK_MCHARGERUSB_STAT (1 << 2) 107 #define MASK_MCHARGERUSB_THMREG (1 << 1) 108 #define MASK_MCHARGERUSB_FAULT (1 << 0) 109 /* CHARGERUSB_VOREG */ 110 #define CHARGERUSB_VOREG_3P52 0x01 111 #define CHARGERUSB_VOREG_4P0 0x19 112 #define CHARGERUSB_VOREG_4P2 0x23 113 #define CHARGERUSB_VOREG_4P76 0x3F 114 /* CHARGERUSB_CTRL1 */ 115 #define SUSPEND_BOOT (1 << 7) 116 #define OPA_MODE (1 << 6) 117 #define HZ_MODE (1 << 5) 118 #define TERM (1 << 4) 119 /* CHARGERUSB_CTRL2 */ 120 #define CHARGERUSB_CTRL2_VITERM_50 (0 << 5) 121 #define CHARGERUSB_CTRL2_VITERM_100 (1 << 5) 122 #define CHARGERUSB_CTRL2_VITERM_150 (2 << 5) 123 #define CHARGERUSB_CTRL2_VITERM_400 (7 << 5) 124 /* CONTROLLER_CTRL1 */ 125 #define CONTROLLER_CTRL1_EN_CHARGER (1 << 4) 126 #define CONTROLLER_CTRL1_SEL_CHARGER (1 << 3) 127 /* CONTROLLER_STAT1 */ 128 #define CHRG_EXTCHRG_STATZ (1 << 7) 129 #define CHRG_DET_N (1 << 5) 130 #define VAC_DET (1 << 3) 131 #define VBUS_DET (1 << 2) 132 133 #define FG_REG_10 0xCA 134 #define FG_REG_11 0xCB 135 136 #define TOGGLE1 0x90 137 #define FGS (1 << 5) 138 #define FGR (1 << 4) 139 #define GPADCS (1 << 1) 140 #define GPADCR (1 << 0) 141 142 #define CTRL_P2 0x34 143 #define CTRL_P2_SP2 (1 << 2) 144 #define CTRL_P2_EOCP2 (1 << 1) 145 #define CTRL_P2_BUSY (1 << 0) 146 147 #define TWL6032_CTRL_P1 0x36 148 #define CTRL_P1_SP1 (1 << 3) 149 150 #define GPCH0_LSB 0x57 151 #define GPCH0_MSB 0x58 152 153 #define TWL6032_GPCH0_LSB 0x3b 154 155 #define TWL6032_GPSELECT_ISB 0x35 156 157 #define USB_PRODUCT_ID_LSB 0x02 158 159 #define TWL6030_GPADC_VBAT_CHNL 0x07 160 #define TWL6032_GPADC_VBAT_CHNL 0x12 161 162 #define TWL6030_GPADC_CTRL 0x2e 163 #define TWL6032_GPADC_CTRL2 0x2f 164 #define GPADC_CTRL2_CH18_SCALER_EN (1 << 2) 165 #define GPADC_CTRL_SCALER_DIV4 (1 << 3) 166 167 #define TWL6030_VBAT_MULT 40 * 1000 168 #define TWL6032_VBAT_MULT 25 * 1000 169 170 #define TWL6030_VBAT_SHIFT (10 + 3) 171 #define TWL6032_VBAT_SHIFT (12 + 2) 172 173 enum twl603x_chip_type{ 174 chip_TWL6030, 175 chip_TWL6032, 176 chip_TWL603X_cnt 177 }; 178 179 struct twl6030_data{ 180 u8 chip_type; 181 u8 adc_rbase; 182 u8 adc_ctrl; 183 u8 adc_enable; 184 int vbat_mult; 185 int vbat_shift; 186 }; 187 188 /* Functions to read and write from TWL6030 */ 189 #ifndef CONFIG_DM_I2C 190 static inline int twl6030_i2c_write_u8(u8 chip_no, u8 reg, u8 val) 191 { 192 return i2c_write(chip_no, reg, 1, &val, 1); 193 } 194 195 static inline int twl6030_i2c_read_u8(u8 chip_no, u8 reg, u8 *val) 196 { 197 return i2c_read(chip_no, reg, 1, val, 1); 198 } 199 #else 200 int twl6030_i2c_write_u8(u8 chip_no, u8 reg, u8 val); 201 int twl6030_i2c_read_u8(u8 chip_no, u8 reg, u8 *val); 202 #endif 203 204 /* 205 * Power 206 */ 207 208 void twl6030_power_off(void); 209 void twl6030_init_battery_charging(void); 210 void twl6030_usb_device_settings(void); 211 void twl6030_start_usb_charging(void); 212 void twl6030_stop_usb_charging(void); 213 int twl6030_get_battery_voltage(void); 214 int twl6030_get_battery_current(void); 215 void twl6030_power_mmc_init(int dev_index); 216 217 /* 218 * Input 219 */ 220 221 int twl6030_input_power_button(void); 222 int twl6030_input_charger(void); 223 int twl6030_input_usb(void); 224 225 #endif /* TWL6030_H */ 226