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 35*3e664f6dSBalaji T K /* Slave Address 0x48 */ 36*3e664f6dSBalaji T K #define VUSB_CFG_STATE 0xA2 37*3e664f6dSBalaji T K 38*3e664f6dSBalaji T K #define MISC1 0xE4 39*3e664f6dSBalaji T K #define VAC_MEAS (1 << 2) 40*3e664f6dSBalaji T K #define VBAT_MEAS (1 << 1) 41*3e664f6dSBalaji T K #define BB_MEAS (1 << 0) 42*3e664f6dSBalaji T K 43*3e664f6dSBalaji T K #define MISC2 0xE5 44*3e664f6dSBalaji T K 45*3e664f6dSBalaji T K /* Slave Address 0x49 */ 46*3e664f6dSBalaji T K 47516799f6SSteve Sakoman /* Battery CHARGER REGISTERS */ 48516799f6SSteve Sakoman #define CONTROLLER_INT_MASK 0xE0 49516799f6SSteve Sakoman #define CONTROLLER_CTRL1 0xE1 50516799f6SSteve Sakoman #define CONTROLLER_WDG 0xE2 51516799f6SSteve Sakoman #define CONTROLLER_STAT1 0xE3 52516799f6SSteve Sakoman #define CHARGERUSB_INT_STATUS 0xE4 53516799f6SSteve Sakoman #define CHARGERUSB_INT_MASK 0xE5 54516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT1 0xE6 55516799f6SSteve Sakoman #define CHARGERUSB_STATUS_INT2 0xE7 56516799f6SSteve Sakoman #define CHARGERUSB_CTRL1 0xE8 57516799f6SSteve Sakoman #define CHARGERUSB_CTRL2 0xE9 58516799f6SSteve Sakoman #define CHARGERUSB_CTRL3 0xEA 59516799f6SSteve Sakoman #define CHARGERUSB_STAT1 0xEB 60516799f6SSteve Sakoman #define CHARGERUSB_VOREG 0xEC 61516799f6SSteve Sakoman #define CHARGERUSB_VICHRG 0xED 62516799f6SSteve Sakoman #define CHARGERUSB_CINLIMIT 0xEE 63516799f6SSteve Sakoman #define CHARGERUSB_CTRLLIMIT1 0xEF 64516799f6SSteve Sakoman 65516799f6SSteve Sakoman /* CHARGERUSB_VICHRG */ 66516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_500 0x4 67516799f6SSteve Sakoman #define CHARGERUSB_VICHRG_1500 0xE 68516799f6SSteve Sakoman /* CHARGERUSB_CINLIMIT */ 69516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_100 0x1 70516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_300 0x5 71516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_500 0x9 72516799f6SSteve Sakoman #define CHARGERUSB_CIN_LIMIT_NONE 0xF 73516799f6SSteve Sakoman /* CONTROLLER_INT_MASK */ 74516799f6SSteve Sakoman #define MVAC_FAULT (1 << 6) 75516799f6SSteve Sakoman #define MAC_EOC (1 << 5) 76516799f6SSteve Sakoman #define MBAT_REMOVED (1 << 4) 77516799f6SSteve Sakoman #define MFAULT_WDG (1 << 3) 78516799f6SSteve Sakoman #define MBAT_TEMP (1 << 2) 79516799f6SSteve Sakoman #define MVBUS_DET (1 << 1) 80516799f6SSteve Sakoman #define MVAC_DET (1 << 0) 81516799f6SSteve Sakoman /* CHARGERUSB_INT_MASK */ 82516799f6SSteve Sakoman #define MASK_MCURRENT_TERM (1 << 3) 83516799f6SSteve Sakoman #define MASK_MCHARGERUSB_STAT (1 << 2) 84516799f6SSteve Sakoman #define MASK_MCHARGERUSB_THMREG (1 << 1) 85516799f6SSteve Sakoman #define MASK_MCHARGERUSB_FAULT (1 << 0) 86516799f6SSteve Sakoman /* CHARGERUSB_VOREG */ 87516799f6SSteve Sakoman #define CHARGERUSB_VOREG_3P52 0x01 88516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P0 0x19 89516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P2 0x23 90516799f6SSteve Sakoman #define CHARGERUSB_VOREG_4P76 0x3F 91*3e664f6dSBalaji T K /* CHARGERUSB_CTRL1 */ 92*3e664f6dSBalaji T K #define SUSPEND_BOOT (1 << 7) 93*3e664f6dSBalaji T K #define OPA_MODE (1 << 6) 94*3e664f6dSBalaji T K #define HZ_MODE (1 << 5) 95*3e664f6dSBalaji T K #define TERM (1 << 4) 96516799f6SSteve Sakoman /* CHARGERUSB_CTRL2 */ 97516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_50 (0 << 5) 98516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_100 (1 << 5) 99516799f6SSteve Sakoman #define CHARGERUSB_CTRL2_VITERM_150 (2 << 5) 100*3e664f6dSBalaji T K #define CHARGERUSB_CTRL2_VITERM_400 (7 << 5) 101516799f6SSteve Sakoman /* CONTROLLER_CTRL1 */ 102516799f6SSteve Sakoman #define CONTROLLER_CTRL1_EN_CHARGER (1 << 4) 103516799f6SSteve Sakoman #define CONTROLLER_CTRL1_SEL_CHARGER (1 << 3) 104*3e664f6dSBalaji T K /* CONTROLLER_STAT1 */ 105*3e664f6dSBalaji T K #define CHRG_EXTCHRG_STATZ (1 << 7) 106*3e664f6dSBalaji T K #define CHRG_DET_N (1 << 5) 107*3e664f6dSBalaji T K #define VAC_DET (1 << 3) 108*3e664f6dSBalaji T K #define VBUS_DET (1 << 2) 109516799f6SSteve Sakoman 110*3e664f6dSBalaji T K #define FG_REG_10 0xCA 111*3e664f6dSBalaji T K #define FG_REG_11 0xCB 112*3e664f6dSBalaji T K 113*3e664f6dSBalaji T K #define TOGGLE1 0x90 114*3e664f6dSBalaji T K #define FGS (1 << 5) 115*3e664f6dSBalaji T K #define FGR (1 << 4) 116*3e664f6dSBalaji T K #define GPADCS (1 << 1) 117*3e664f6dSBalaji T K #define GPADCR (1 << 0) 118*3e664f6dSBalaji T K 119*3e664f6dSBalaji T K #define CTRL_P2 0x34 120*3e664f6dSBalaji T K #define CTRL_P2_SP2 (1 << 2) 121*3e664f6dSBalaji T K #define CTRL_P2_EOCP2 (1 << 1) 122*3e664f6dSBalaji T K #define CTRL_P2_BUSY (1 << 0) 123*3e664f6dSBalaji T K 124*3e664f6dSBalaji T K #define GPCH0_LSB 0x57 125*3e664f6dSBalaji T K #define GPCH0_MSB 0x58 126516799f6SSteve Sakoman 127516799f6SSteve Sakoman void twl6030_init_battery_charging(void); 128516799f6SSteve Sakoman void twl6030_usb_device_settings(void); 129*3e664f6dSBalaji T K void twl6030_start_usb_charging(void); 130*3e664f6dSBalaji T K void twl6030_stop_usb_charging(void); 131*3e664f6dSBalaji T K int twl6030_get_battery_voltage(void); 132*3e664f6dSBalaji T K int twl6030_get_battery_current(void); 133