1516799f6SSteve Sakoman /* 2516799f6SSteve Sakoman * (C) Copyright 2010 3516799f6SSteve Sakoman * Texas Instruments, <www.ti.com> 4516799f6SSteve Sakoman * 5516799f6SSteve Sakoman * See file CREDITS for list of people who contributed to this 6516799f6SSteve Sakoman * project. 7516799f6SSteve Sakoman * 8516799f6SSteve Sakoman * This program is free software; you can redistribute it and/or 9516799f6SSteve Sakoman * modify it under the terms of the GNU General Public License as 10516799f6SSteve Sakoman * published by the Free Software Foundation; either version 2 of 11516799f6SSteve Sakoman * the License, or (at your option) any later version. 12516799f6SSteve Sakoman * 13516799f6SSteve Sakoman * This program is distributed in the hope that it will be useful, 14516799f6SSteve Sakoman * but WITHOUT ANY WARRANTY; without even the implied warranty of 15516799f6SSteve Sakoman * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16516799f6SSteve Sakoman * GNU General Public License for more details. 17516799f6SSteve Sakoman * 18516799f6SSteve Sakoman * You should have received a copy of the GNU General Public License 19516799f6SSteve Sakoman * along with this program; if not, write to the Free Software 20516799f6SSteve Sakoman * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21516799f6SSteve Sakoman * MA 02111-1307 USA 22516799f6SSteve Sakoman */ 23516799f6SSteve Sakoman 24*502dac55SNishanth Menon #ifndef TWL6030_H 25*502dac55SNishanth Menon #define TWL6030_H 26*502dac55SNishanth Menon 27516799f6SSteve Sakoman #include <common.h> 28516799f6SSteve Sakoman #include <i2c.h> 29516799f6SSteve Sakoman 30516799f6SSteve Sakoman /* I2C chip addresses */ 31516799f6SSteve Sakoman #define TWL6030_CHIP_PM 0x48 32516799f6SSteve Sakoman 33516799f6SSteve Sakoman #define TWL6030_CHIP_USB 0x49 34516799f6SSteve Sakoman #define TWL6030_CHIP_ADC 0x49 35516799f6SSteve Sakoman #define TWL6030_CHIP_CHARGER 0x49 36516799f6SSteve Sakoman #define TWL6030_CHIP_PWM 0x49 37516799f6SSteve Sakoman 383e664f6dSBalaji T K /* Slave Address 0x48 */ 3914fa2dd0SBalaji T K #define VMMC_CFG_STATE 0x9A 4014fa2dd0SBalaji T K #define VMMC_CFG_VOLTATE 0x9B 413e664f6dSBalaji T K #define VUSB_CFG_STATE 0xA2 423e664f6dSBalaji T K 433e664f6dSBalaji T K #define MISC1 0xE4 443e664f6dSBalaji T K #define VAC_MEAS (1 << 2) 453e664f6dSBalaji T K #define VBAT_MEAS (1 << 1) 463e664f6dSBalaji T K #define BB_MEAS (1 << 0) 473e664f6dSBalaji T K 483e664f6dSBalaji T K #define MISC2 0xE5 493e664f6dSBalaji T K 503e664f6dSBalaji T K /* Slave Address 0x49 */ 513e664f6dSBalaji T K 52516799f6SSteve Sakoman /* Battery CHARGER REGISTERS */ 53516799f6SSteve Sakoman #define CONTROLLER_INT_MASK 0xE0 54516799f6SSteve Sakoman #define CONTROLLER_CTRL1 0xE1 55516799f6SSteve Sakoman #define CONTROLLER_WDG 0xE2 56516799f6SSteve Sakoman #define CONTROLLER_STAT1 0xE3 57516799f6SSteve Sakoman #define CHARGERUSB_INT_STATUS 0xE4 58516799f6SSteve Sakoman #define CHARGERUSB_INT_MASK 0xE5 59516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT1 0xE6 60516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT2 0xE7 61516799f6SSteve Sakoman #define CHARGERUSB_CTRL1 0xE8 62516799f6SSteve Sakoman #define CHARGERUSB_CTRL2 0xE9 63516799f6SSteve Sakoman #define CHARGERUSB_CTRL3 0xEA 64516799f6SSteve Sakoman #define CHARGERUSB_STAT1 0xEB 65516799f6SSteve Sakoman #define CHARGERUSB_VOREG 0xEC 66516799f6SSteve Sakoman #define CHARGERUSB_VICHRG 0xED 67516799f6SSteve Sakoman #define CHARGERUSB_CINLIMIT 0xEE 68516799f6SSteve Sakoman #define CHARGERUSB_CTRLLIMIT1 0xEF 69516799f6SSteve Sakoman 70516799f6SSteve Sakoman /* CHARGERUSB_VICHRG */ 71516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_500 0x4 72516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_1500 0xE 73516799f6SSteve Sakoman /* CHARGERUSB_CINLIMIT */ 74516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_100 0x1 75516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_300 0x5 76516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_500 0x9 77516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_NONE 0xF 78516799f6SSteve Sakoman /* CONTROLLER_INT_MASK */ 79516799f6SSteve Sakoman #define MVAC_FAULT (1 << 6) 80516799f6SSteve Sakoman #define MAC_EOC (1 << 5) 81516799f6SSteve Sakoman #define MBAT_REMOVED (1 << 4) 82516799f6SSteve Sakoman #define MFAULT_WDG (1 << 3) 83516799f6SSteve Sakoman #define MBAT_TEMP (1 << 2) 84516799f6SSteve Sakoman #define MVBUS_DET (1 << 1) 85516799f6SSteve Sakoman #define MVAC_DET (1 << 0) 86516799f6SSteve Sakoman /* CHARGERUSB_INT_MASK */ 87516799f6SSteve Sakoman #define MASK_MCURRENT_TERM (1 << 3) 88516799f6SSteve Sakoman #define MASK_MCHARGERUSB_STAT (1 << 2) 89516799f6SSteve Sakoman #define MASK_MCHARGERUSB_THMREG (1 << 1) 90516799f6SSteve Sakoman #define MASK_MCHARGERUSB_FAULT (1 << 0) 91516799f6SSteve Sakoman /* CHARGERUSB_VOREG */ 92516799f6SSteve Sakoman #define CHARGERUSB_VOREG_3P52 0x01 93516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P0 0x19 94516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P2 0x23 95516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P76 0x3F 963e664f6dSBalaji T K /* CHARGERUSB_CTRL1 */ 973e664f6dSBalaji T K #define SUSPEND_BOOT (1 << 7) 983e664f6dSBalaji T K #define OPA_MODE (1 << 6) 993e664f6dSBalaji T K #define HZ_MODE (1 << 5) 1003e664f6dSBalaji T K #define TERM (1 << 4) 101516799f6SSteve Sakoman /* CHARGERUSB_CTRL2 */ 102516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_50 (0 << 5) 103516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_100 (1 << 5) 104516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_150 (2 << 5) 1053e664f6dSBalaji T K #define CHARGERUSB_CTRL2_VITERM_400 (7 << 5) 106516799f6SSteve Sakoman /* CONTROLLER_CTRL1 */ 107516799f6SSteve Sakoman #define CONTROLLER_CTRL1_EN_CHARGER (1 << 4) 108516799f6SSteve Sakoman #define CONTROLLER_CTRL1_SEL_CHARGER (1 << 3) 1093e664f6dSBalaji T K /* CONTROLLER_STAT1 */ 1103e664f6dSBalaji T K #define CHRG_EXTCHRG_STATZ (1 << 7) 1113e664f6dSBalaji T K #define CHRG_DET_N (1 << 5) 1123e664f6dSBalaji T K #define VAC_DET (1 << 3) 1133e664f6dSBalaji T K #define VBUS_DET (1 << 2) 114516799f6SSteve Sakoman 1153e664f6dSBalaji T K #define FG_REG_10 0xCA 1163e664f6dSBalaji T K #define FG_REG_11 0xCB 1173e664f6dSBalaji T K 1183e664f6dSBalaji T K #define TOGGLE1 0x90 1193e664f6dSBalaji T K #define FGS (1 << 5) 1203e664f6dSBalaji T K #define FGR (1 << 4) 1213e664f6dSBalaji T K #define GPADCS (1 << 1) 1223e664f6dSBalaji T K #define GPADCR (1 << 0) 1233e664f6dSBalaji T K 1243e664f6dSBalaji T K #define CTRL_P2 0x34 1253e664f6dSBalaji T K #define CTRL_P2_SP2 (1 << 2) 1263e664f6dSBalaji T K #define CTRL_P2_EOCP2 (1 << 1) 1273e664f6dSBalaji T K #define CTRL_P2_BUSY (1 << 0) 1283e664f6dSBalaji T K 1293e664f6dSBalaji T K #define GPCH0_LSB 0x57 1303e664f6dSBalaji T K #define GPCH0_MSB 0x58 131516799f6SSteve Sakoman 132ebce10e5SNishanth Menon /* Functions to read and write from TWL6030 */ 133ebce10e5SNishanth Menon static inline int twl6030_i2c_write_u8(u8 chip_no, u8 reg, u8 val) 134ebce10e5SNishanth Menon { 135ebce10e5SNishanth Menon return i2c_write(chip_no, reg, 1, &val, 1); 136ebce10e5SNishanth Menon } 137ebce10e5SNishanth Menon 138ebce10e5SNishanth Menon static inline int twl6030_i2c_read_u8(u8 chip_no, u8 reg, u8 *val) 139ebce10e5SNishanth Menon { 140ebce10e5SNishanth Menon return i2c_read(chip_no, reg, 1, val, 1); 141ebce10e5SNishanth Menon } 142ebce10e5SNishanth Menon 143516799f6SSteve Sakoman void twl6030_init_battery_charging(void); 144516799f6SSteve Sakoman void twl6030_usb_device_settings(void); 1453e664f6dSBalaji T K void twl6030_start_usb_charging(void); 1463e664f6dSBalaji T K void twl6030_stop_usb_charging(void); 1473e664f6dSBalaji T K int twl6030_get_battery_voltage(void); 1483e664f6dSBalaji T K int twl6030_get_battery_current(void); 14914fa2dd0SBalaji T K void twl6030_power_mmc_init(void); 150*502dac55SNishanth Menon 151*502dac55SNishanth Menon #endif /* TWL6030_H */ 152