From 37af65e44ed8e28339f14e8f5b5b45e68a9b773d Mon Sep 17 00:00:00 2001 From: Jon Benson <hastarin@gmail.com> Date: Sun, 5 Dec 2010 14:19:10 +1100 Subject: [PATCH] EXPERIMENTAL: Initial (Alpha) support for extended battery in the new driver. USE AT YOUR OWN RISK! http://bit.ly/eDLk0g --- drivers/power/ds2746_battery.c | 2 +- drivers/power/ds2746_param.c | 12 +++++++++--- include/linux/ds2746_param_config.h | 18 ++++++++++++++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/drivers/power/ds2746_battery.c b/drivers/power/ds2746_battery.c index 931191b4..5f5c77b5 100644 --- a/drivers/power/ds2746_battery.c +++ b/drivers/power/ds2746_battery.c @@ -87,7 +87,7 @@ static struct poweralg_config_type debug_config = {0}; #define CHARGE_FAST 2 #define BATTERY_ID_UNKNOWN 0 -#define HTC_BATTERY_DS2746_DEBUG_ENABLE 0 +#define HTC_BATTERY_DS2746_DEBUG_ENABLE 1 /* DS2746 I2C BUS*/ #define DS2746_I2C_BUS_ID 0 diff --git a/drivers/power/ds2746_param.c b/drivers/power/ds2746_param.c index cfa8dc3e..6cc23271 100644 --- a/drivers/power/ds2746_param.c +++ b/drivers/power/ds2746_param.c @@ -52,7 +52,7 @@ build flags ========================================================================================*/ -#define HTC_ENABLE_POWER_DEBUG 0 +#define HTC_ENABLE_POWER_DEBUG 1 #define HTC_ENABLE_DUMMY_BATTERY 0 /*======================================================================================== @@ -661,6 +661,8 @@ static BOOL __battery_param_udpate(struct battery_type *battery) battery->discharge_mA = (battery->discharge_adc * discharge_adc_to_mv_coef / discharge_adc_to_mv_resl); battery->charge_counter_mAh = (battery->charge_counter_adc * acr_adc_to_mv_coef / acr_adc_to_mv_resl) - charge_counter_zero_base_mAh; battery->current_mA = battery->current_mA - battery->discharge_mA; + printk(DRIVER_ZONE " battery.id_adc pre clip: %d\n", battery->id_adc); + printk(DRIVER_ZONE " battery.temp_adc pre clip: %d\n", battery->temp_adc); /* prevent from adc out of range*/ if (battery->id_adc >= id_adc_resl) { battery->id_adc = id_adc_resl - 1; @@ -678,11 +680,11 @@ static BOOL __battery_param_udpate(struct battery_type *battery) /* battery ID shall be ready first for temp/kadc calculation*/ // if ( id_conversion ) battery->id_ohm = ((float)id_R_kohm / ((float)id_adc_resl/battery->id_adc - 1)) * 1000; // kohm -> ohm // else battery->id_ohm = battery->id_adc; - battery->id_ohm = battery->id_adc; + battery->id_ohm = battery->temp_adc; #if HTC_ENABLE_POWER_DEBUG printk(DRIVER_ZONE " battery.id_ohm pre calibrate: %d\n", battery->id_ohm); #endif /* HTC_ENABLE_POWER_DEBUG*/ - calibrate_id_ohm(battery); + //calibrate_id_ohm(battery); #if HTC_ENABLE_POWER_DEBUG printk(DRIVER_ZONE " battery.id_ohm post calibrate: %d\n", battery->id_ohm); #endif /* HTC_ENABLE_POWER_DEBUG*/ @@ -716,6 +718,10 @@ static BOOL __battery_param_udpate(struct battery_type *battery) } } + if (batt_id_index == 5) + { + battery->temp_adc = battery->temp_adc * 7; + } /* calculate temperature*/ // battery->temp_01c = get_temp_c((float)temp_R_kohm / ((float)temp_adc_resl/battery->temp_adc - 1))*10; temp_01c = get_temp_01c(battery); diff --git a/include/linux/ds2746_param_config.h b/include/linux/ds2746_param_config.h index eea2b3e2..9779340f 100644 --- a/include/linux/ds2746_param_config.h +++ b/include/linux/ds2746_param_config.h @@ -36,6 +36,7 @@ enum BATTERY_ID_ENUM { BATTERY_ID_SONY_1300MAH_HTE, BATTERY_ID_SANYO_1300MAH_HTE, BATTERY_ID_SANYO_1300MAH_TWS, + BATTERY_ID_HTC_EXTENDED_2300MAH_FORMOSA, BATTERY_ID_NUM /* include unknown battery*/ }; @@ -45,7 +46,8 @@ UINT32 ID_RANGE[] = 7150, 15500, /* Sony 1300mAh (Formosa) */ /* 7.1k~15k */ 27500, 49500, /* Sony 1300mAh (HTE) */ /* 28k~49.5k */ 15500, 27500, /* Sanyo 1300mAh (HTE) */ /* 16k~27k */ - 0, 7150, /* Samsung 1230mAh */ /* 0k~7k */ + 100, 7150, /* Samsung 1230mAh */ /* 1k~7k */ + 0, 100, /* HTC Extended 2300mAh */ /* 0k~1k */ }; /*This table is calculated according to temp formula for temp mapping. @@ -105,6 +107,7 @@ UINT32 FL_25[] = 1280, /* Sony 1300mAh (HTE) */ 1250, /* Sanyo 1300mAh (HTE) */ 1230, /* Samsung 1230mAh */ + 2350, /* HTC Extended 2300mAh */ }; UINT32 PD_M_COEF[] = @@ -115,6 +118,7 @@ UINT32 PD_M_COEF[] = 24, /* Sony 1300mAh (HTE) */ 27, /* Sanyo 1300mAh (HTE) */ 30, /* Samsung 1230mAh */ + 30, /* HTC Extended 2300mAh */ }; UINT32 PD_M_RESL[] = @@ -125,6 +129,7 @@ UINT32 PD_M_RESL[] = 100, /* Sony 1300mAh (HTE) */ 100, /* Sanyo 1300mAh (HTE) */ 100, /* Samsung 1230mAh */ + 100, /* HTC Extended 2300mAh */ }; UINT32 PD_T_COEF[] = @@ -135,6 +140,7 @@ UINT32 PD_T_COEF[] = 140, /* Sony 1300mAh (HTE) */ 156, /* Sanyo 1300mAh (HTE) */ 250, /* Samsung 1230mAh */ + 250, /* HTC Extended 2300mAh */ }; /*! star_lee 20100426 - update KADC discharge parameter */ @@ -150,6 +156,13 @@ UINT32 M_PARAMETER_Samsung_1230MAH_FORMOSA[] = 10000, 4135, 7500, 3960, 4700, 3800, 1700, 3727, 900, 3674, 300, 3640, 0, 3420, }; +UINT32 M_PARAMETER_HTC_2300MAH_FORMOSA[] = +{ + /* capacity (in 0.01%) -> voltage (in mV)*/ + 10000, 4196, 7500, 4165, 4700, 3986, 1700, 3879, 900, 3833, 300, 3740, 0, 3420, +}; + + UINT32 *M_PARAMTER_TABLE[] = { /* Unknown battery */ @@ -165,7 +178,8 @@ UINT32 *M_PARAMTER_TABLE[] = /* same as Sony 1300mAh (Formosa) currently... */ /* Samsung 1230mAh */ (UINT32 *) (M_PARAMETER_Samsung_1230MAH_FORMOSA), - /* same as Sony 1300mAh (Formosa) currently... */ + /* HTC Extended 2300mAh */ + (UINT32 *) (M_PARAMETER_HTC_2300MAH_FORMOSA), }; INT32 TEMP_RANGE[] =