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 24516799f6SSteve Sakoman #include <common.h> 25516799f6SSteve Sakoman #include <i2c.h> 26516799f6SSteve Sakoman 27516799f6SSteve Sakoman /* I2C chip addresses */ 28516799f6SSteve Sakoman #define TWL6030_CHIP_PM 0x48 29516799f6SSteve Sakoman 30516799f6SSteve Sakoman #define TWL6030_CHIP_USB 0x49 31516799f6SSteve Sakoman #define TWL6030_CHIP_ADC 0x49 32516799f6SSteve Sakoman #define TWL6030_CHIP_CHARGER 0x49 33516799f6SSteve Sakoman #define TWL6030_CHIP_PWM 0x49 34516799f6SSteve Sakoman 353e664f6dSBalaji T K /* Slave Address 0x48 */ 36*14fa2dd0SBalaji T K #define VMMC_CFG_STATE 0x9A 37*14fa2dd0SBalaji T K #define VMMC_CFG_VOLTATE 0x9B 383e664f6dSBalaji T K #define VUSB_CFG_STATE 0xA2 393e664f6dSBalaji T K 403e664f6dSBalaji T K #define MISC1 0xE4 413e664f6dSBalaji T K #define VAC_MEAS (1 << 2) 423e664f6dSBalaji T K #define VBAT_MEAS (1 << 1) 433e664f6dSBalaji T K #define BB_MEAS (1 << 0) 443e664f6dSBalaji T K 453e664f6dSBalaji T K #define MISC2 0xE5 463e664f6dSBalaji T K 473e664f6dSBalaji T K /* Slave Address 0x49 */ 483e664f6dSBalaji T K 49516799f6SSteve Sakoman /* Battery CHARGER REGISTERS */ 50516799f6SSteve Sakoman #define CONTROLLER_INT_MASK 0xE0 51516799f6SSteve Sakoman #define CONTROLLER_CTRL1 0xE1 52516799f6SSteve Sakoman #define CONTROLLER_WDG 0xE2 53516799f6SSteve Sakoman #define CONTROLLER_STAT1 0xE3 54516799f6SSteve Sakoman #define CHARGERUSB_INT_STATUS 0xE4 55516799f6SSteve Sakoman #define CHARGERUSB_INT_MASK 0xE5 56516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT1 0xE6 57516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT2 0xE7 58516799f6SSteve Sakoman #define CHARGERUSB_CTRL1 0xE8 59516799f6SSteve Sakoman #define CHARGERUSB_CTRL2 0xE9 60516799f6SSteve Sakoman #define CHARGERUSB_CTRL3 0xEA 61516799f6SSteve Sakoman #define CHARGERUSB_STAT1 0xEB 62516799f6SSteve Sakoman #define CHARGERUSB_VOREG 0xEC 63516799f6SSteve Sakoman #define CHARGERUSB_VICHRG 0xED 64516799f6SSteve Sakoman #define CHARGERUSB_CINLIMIT 0xEE 65516799f6SSteve Sakoman #define CHARGERUSB_CTRLLIMIT1 0xEF 66516799f6SSteve Sakoman 67516799f6SSteve Sakoman /* CHARGERUSB_VICHRG */ 68516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_500 0x4 69516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_1500 0xE 70516799f6SSteve Sakoman /* CHARGERUSB_CINLIMIT */ 71516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_100 0x1 72516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_300 0x5 73516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_500 0x9 74516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_NONE 0xF 75516799f6SSteve Sakoman /* CONTROLLER_INT_MASK */ 76516799f6SSteve Sakoman #define MVAC_FAULT (1 << 6) 77516799f6SSteve Sakoman #define MAC_EOC (1 << 5) 78516799f6SSteve Sakoman #define MBAT_REMOVED (1 << 4) 79516799f6SSteve Sakoman #define MFAULT_WDG (1 << 3) 80516799f6SSteve Sakoman #define MBAT_TEMP (1 << 2) 81516799f6SSteve Sakoman #define MVBUS_DET (1 << 1) 82516799f6SSteve Sakoman #define MVAC_DET (1 << 0) 83516799f6SSteve Sakoman /* CHARGERUSB_INT_MASK */ 84516799f6SSteve Sakoman #define MASK_MCURRENT_TERM (1 << 3) 85516799f6SSteve Sakoman #define MASK_MCHARGERUSB_STAT (1 << 2) 86516799f6SSteve Sakoman #define MASK_MCHARGERUSB_THMREG (1 << 1) 87516799f6SSteve Sakoman #define MASK_MCHARGERUSB_FAULT (1 << 0) 88516799f6SSteve Sakoman /* CHARGERUSB_VOREG */ 89516799f6SSteve Sakoman #define CHARGERUSB_VOREG_3P52 0x01 90516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P0 0x19 91516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P2 0x23 92516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P76 0x3F 933e664f6dSBalaji T K /* CHARGERUSB_CTRL1 */ 943e664f6dSBalaji T K #define SUSPEND_BOOT (1 << 7) 953e664f6dSBalaji T K #define OPA_MODE (1 << 6) 963e664f6dSBalaji T K #define HZ_MODE (1 << 5) 973e664f6dSBalaji T K #define TERM (1 << 4) 98516799f6SSteve Sakoman /* CHARGERUSB_CTRL2 */ 99516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_50 (0 << 5) 100516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_100 (1 << 5) 101516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_150 (2 << 5) 1023e664f6dSBalaji T K #define CHARGERUSB_CTRL2_VITERM_400 (7 << 5) 103516799f6SSteve Sakoman /* CONTROLLER_CTRL1 */ 104516799f6SSteve Sakoman #define CONTROLLER_CTRL1_EN_CHARGER (1 << 4) 105516799f6SSteve Sakoman #define CONTROLLER_CTRL1_SEL_CHARGER (1 << 3) 1063e664f6dSBalaji T K /* CONTROLLER_STAT1 */ 1073e664f6dSBalaji T K #define CHRG_EXTCHRG_STATZ (1 << 7) 1083e664f6dSBalaji T K #define CHRG_DET_N (1 << 5) 1093e664f6dSBalaji T K #define VAC_DET (1 << 3) 1103e664f6dSBalaji T K #define VBUS_DET (1 << 2) 111516799f6SSteve Sakoman 1123e664f6dSBalaji T K #define FG_REG_10 0xCA 1133e664f6dSBalaji T K #define FG_REG_11 0xCB 1143e664f6dSBalaji T K 1153e664f6dSBalaji T K #define TOGGLE1 0x90 1163e664f6dSBalaji T K #define FGS (1 << 5) 1173e664f6dSBalaji T K #define FGR (1 << 4) 1183e664f6dSBalaji T K #define GPADCS (1 << 1) 1193e664f6dSBalaji T K #define GPADCR (1 << 0) 1203e664f6dSBalaji T K 1213e664f6dSBalaji T K #define CTRL_P2 0x34 1223e664f6dSBalaji T K #define CTRL_P2_SP2 (1 << 2) 1233e664f6dSBalaji T K #define CTRL_P2_EOCP2 (1 << 1) 1243e664f6dSBalaji T K #define CTRL_P2_BUSY (1 << 0) 1253e664f6dSBalaji T K 1263e664f6dSBalaji T K #define GPCH0_LSB 0x57 1273e664f6dSBalaji T K #define GPCH0_MSB 0x58 128516799f6SSteve Sakoman 129516799f6SSteve Sakoman void twl6030_init_battery_charging(void); 130516799f6SSteve Sakoman void twl6030_usb_device_settings(void); 1313e664f6dSBalaji T K void twl6030_start_usb_charging(void); 1323e664f6dSBalaji T K void twl6030_stop_usb_charging(void); 1333e664f6dSBalaji T K int twl6030_get_battery_voltage(void); 1343e664f6dSBalaji T K int twl6030_get_battery_current(void); 135*14fa2dd0SBalaji T K void twl6030_power_mmc_init(void); 136