#include <linux/export.h>
#include <linux/power_supply.h>
#include <linux/of.h>
#include <linux/mfd/abx500.h>
#include <linux/mfd/abx500/ab8500.h>
#include <linux/mfd/abx500/ab8500-bm.h>

/*
 * These are the defined batteries that uses a NTC and ID resistor placed
 * inside of the battery pack.
 * Note that the res_to_temp table must be strictly sorted by falling resistance
 * values to work.
 */
static struct abx500_res_to_temp temp_tbl_A_thermistor[] = {
	{-5, 53407},
	{ 0, 48594},
	{ 5, 43804},
	{10, 39188},
	{15, 34870},
	{20, 30933},
	{25, 27422},
	{30, 24347},
	{35, 21694},
	{40, 19431},
	{45, 17517},
	{50, 15908},
	{55, 14561},
	{60, 13437},
	{65, 12500},
};

static struct abx500_res_to_temp temp_tbl_B_thermistor[] = {
	{-5, 200000},
	{ 0, 159024},
	{ 5, 151921},
	{10, 144300},
	{15, 136424},
	{20, 128565},
	{25, 120978},
	{30, 113875},
	{35, 107397},
	{40, 101629},
	{45,  96592},
	{50,  92253},
	{55,  88569},
	{60,  85461},
	{65,  82869},
};

static struct abx500_v_to_cap cap_tbl_A_thermistor[] = {
	{4171,	100},
	{4114,	 95},
	{4009,	 83},
	{3947,	 74},
	{3907,	 67},
	{3863,	 59},
	{3830,	 56},
	{3813,	 53},
	{3791,	 46},
	{3771,	 33},
	{3754,	 25},
	{3735,	 20},
	{3717,	 17},
	{3681,	 13},
	{3664,	  8},
	{3651,	  6},
	{3635,	  5},
	{3560,	  3},
	{3408,    1},
	{3247,	  0},
};

static struct abx500_v_to_cap cap_tbl_B_thermistor[] = {
	{4161,	100},
	{4124,	 98},
	{4044,	 90},
	{4003,	 85},
	{3966,	 80},
	{3933,	 75},
	{3888,	 67},
	{3849,	 60},
	{3813,	 55},
	{3787,	 47},
	{3772,	 30},
	{3751,	 25},
	{3718,	 20},
	{3681,	 16},
	{3660,	 14},
	{3589,	 10},
	{3546,	  7},
	{3495,	  4},
	{3404,	  2},
	{3250,	  0},
};

static struct abx500_v_to_cap cap_tbl[] = {
	{4186,	100},
	{4163,	 99},
	{4114,	 95},
	{4068,	 90},
	{3990,	 80},
	{3926,	 70},
	{3898,	 65},
	{3866,	 60},
	{3833,	 55},
	{3812,	 50},
	{3787,	 40},
	{3768,	 30},
	{3747,	 25},
	{3730,	 20},
	{3705,	 15},
	{3699,	 14},
	{3684,	 12},
	{3672,	  9},
	{3657,	  7},
	{3638,	  6},
	{3556,	  4},
	{3424,	  2},
	{3317,	  1},
	{3094,	  0},
};

/*
 * Note that the res_to_temp table must be strictly sorted by falling
 * resistance values to work.
 */
static struct abx500_res_to_temp temp_tbl[] = {
	{-5, 214834},
	{ 0, 162943},
	{ 5, 124820},
	{10,  96520},
	{15,  75306},
	{20,  59254},
	{25,  47000},
	{30,  37566},
	{35,  30245},
	{40,  24520},
	{45,  20010},
	{50,  16432},
	{55,  13576},
	{60,  11280},
	{65,   9425},
};

/*
 * Note that the batres_vs_temp table must be strictly sorted by falling
 * temperature values to work.
 */
static struct batres_vs_temp temp_to_batres_tbl_thermistor[] = {
	{ 40, 120},
	{ 30, 135},
	{ 20, 165},
	{ 10, 230},
	{ 00, 325},
	{-10, 445},
	{-20, 595},
};

/*
 * Note that the batres_vs_temp table must be strictly sorted by falling
 * temperature values to work.
 */
static struct batres_vs_temp temp_to_batres_tbl_ext_thermistor[] = {
	{ 60, 300},
	{ 30, 300},
	{ 20, 300},
	{ 10, 300},
	{ 00, 300},
	{-10, 300},
	{-20, 300},
};

/* battery resistance table for LI ION 9100 battery */
static struct batres_vs_temp temp_to_batres_tbl_9100[] = {
	{ 60, 180},
	{ 30, 180},
	{ 20, 180},
	{ 10, 180},
	{ 00, 180},
	{-10, 180},
	{-20, 180},
};

static struct abx500_battery_type bat_type_thermistor[] = {
[BATTERY_UNKNOWN] = {
	/* First element always represent the UNKNOWN battery */
	.name = POWER_SUPPLY_TECHNOLOGY_UNKNOWN,
	.resis_high = 0,
	.resis_low = 0,
	.battery_resistance = 300,
	.charge_full_design = 612,
	.nominal_voltage = 3700,
	.termination_vol = 4050,
	.termination_curr = 200,
	.recharge_vol = 3990,
	.normal_cur_lvl = 400,
	.normal_vol_lvl = 4100,
	.maint_a_cur_lvl = 400,
	.maint_a_vol_lvl = 4050,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 400,
	.maint_b_vol_lvl = 4000,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
	.r_to_t_tbl = temp_tbl,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
	.v_to_cap_tbl = cap_tbl,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
{
	.name = POWER_SUPPLY_TECHNOLOGY_LIPO,
	.resis_high = 53407,
	.resis_low = 12500,
	.battery_resistance = 300,
	.charge_full_design = 900,
	.nominal_voltage = 3600,
	.termination_vol = 4150,
	.termination_curr = 80,
	.recharge_vol = 4130,
	.normal_cur_lvl = 700,
	.normal_vol_lvl = 4200,
	.maint_a_cur_lvl = 600,
	.maint_a_vol_lvl = 4150,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 600,
	.maint_b_vol_lvl = 4100,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl_A_thermistor),
	.r_to_t_tbl = temp_tbl_A_thermistor,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_A_thermistor),
	.v_to_cap_tbl = cap_tbl_A_thermistor,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,

},
{
	.name = POWER_SUPPLY_TECHNOLOGY_LIPO,
	.resis_high = 200000,
	.resis_low = 82869,
	.battery_resistance = 300,
	.charge_full_design = 900,
	.nominal_voltage = 3600,
	.termination_vol = 4150,
	.termination_curr = 80,
	.recharge_vol = 4130,
	.normal_cur_lvl = 700,
	.normal_vol_lvl = 4200,
	.maint_a_cur_lvl = 600,
	.maint_a_vol_lvl = 4150,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 600,
	.maint_b_vol_lvl = 4100,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl_B_thermistor),
	.r_to_t_tbl = temp_tbl_B_thermistor,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_B_thermistor),
	.v_to_cap_tbl = cap_tbl_B_thermistor,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
};

static struct abx500_battery_type bat_type_ext_thermistor[] = {
[BATTERY_UNKNOWN] = {
	/* First element always represent the UNKNOWN battery */
	.name = POWER_SUPPLY_TECHNOLOGY_UNKNOWN,
	.resis_high = 0,
	.resis_low = 0,
	.battery_resistance = 300,
	.charge_full_design = 612,
	.nominal_voltage = 3700,
	.termination_vol = 4050,
	.termination_curr = 200,
	.recharge_vol = 3990,
	.normal_cur_lvl = 400,
	.normal_vol_lvl = 4100,
	.maint_a_cur_lvl = 400,
	.maint_a_vol_lvl = 4050,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 400,
	.maint_b_vol_lvl = 4000,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
	.r_to_t_tbl = temp_tbl,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
	.v_to_cap_tbl = cap_tbl,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
/*
 * These are the batteries that doesn't have an internal NTC resistor to measure
 * its temperature. The temperature in this case is measure with a NTC placed
 * near the battery but on the PCB.
 */
{
	.name = POWER_SUPPLY_TECHNOLOGY_LIPO,
	.resis_high = 76000,
	.resis_low = 53000,
	.battery_resistance = 300,
	.charge_full_design = 900,
	.nominal_voltage = 3700,
	.termination_vol = 4150,
	.termination_curr = 100,
	.recharge_vol = 4130,
	.normal_cur_lvl = 700,
	.normal_vol_lvl = 4200,
	.maint_a_cur_lvl = 600,
	.maint_a_vol_lvl = 4150,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 600,
	.maint_b_vol_lvl = 4100,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
	.r_to_t_tbl = temp_tbl,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
	.v_to_cap_tbl = cap_tbl,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
{
	.name = POWER_SUPPLY_TECHNOLOGY_LION,
	.resis_high = 30000,
	.resis_low = 10000,
	.battery_resistance = 300,
	.charge_full_design = 950,
	.nominal_voltage = 3700,
	.termination_vol = 4150,
	.termination_curr = 100,
	.recharge_vol = 4130,
	.normal_cur_lvl = 700,
	.normal_vol_lvl = 4200,
	.maint_a_cur_lvl = 600,
	.maint_a_vol_lvl = 4150,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 600,
	.maint_b_vol_lvl = 4100,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
	.r_to_t_tbl = temp_tbl,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
	.v_to_cap_tbl = cap_tbl,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
{
	.name = POWER_SUPPLY_TECHNOLOGY_LION,
	.resis_high = 95000,
	.resis_low = 76001,
	.battery_resistance = 300,
	.charge_full_design = 950,
	.nominal_voltage = 3700,
	.termination_vol = 4150,
	.termination_curr = 100,
	.recharge_vol = 4130,
	.normal_cur_lvl = 700,
	.normal_vol_lvl = 4200,
	.maint_a_cur_lvl = 600,
	.maint_a_vol_lvl = 4150,
	.maint_a_chg_timer_h = 60,
	.maint_b_cur_lvl = 600,
	.maint_b_vol_lvl = 4100,
	.maint_b_chg_timer_h = 200,
	.low_high_cur_lvl = 300,
	.low_high_vol_lvl = 4000,
	.n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
	.r_to_t_tbl = temp_tbl,
	.n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
	.v_to_cap_tbl = cap_tbl,
	.n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
	.batres_tbl = temp_to_batres_tbl_thermistor,
},
};

static const struct abx500_bm_capacity_levels cap_levels = {
	.critical	= 2,
	.low		= 10,
	.normal		= 70,
	.high		= 95,
	.full		= 100,
};

static const struct abx500_fg_parameters fg = {
	.recovery_sleep_timer = 10,
	.recovery_total_time = 100,
	.init_timer = 1,
	.init_discard_time = 5,
	.init_total_time = 40,
	.high_curr_time = 60,
	.accu_charging = 30,
	.accu_high_curr = 30,
	.high_curr_threshold = 50,
	.lowbat_threshold = 3100,
	.battok_falling_th_sel0 = 2860,
	.battok_raising_th_sel1 = 2860,
	.user_cap_limit = 15,
	.maint_thres = 97,
};

static const struct abx500_maxim_parameters maxi_params = {
	.ena_maxi = true,
	.chg_curr = 910,
	.wait_cycles = 10,
	.charger_curr_step = 100,
};

static const struct abx500_bm_charger_parameters chg = {
	.usb_volt_max		= 5500,
	.usb_curr_max		= 1500,
	.ac_volt_max		= 7500,
	.ac_curr_max		= 1500,
};

struct abx500_bm_data ab8500_bm_data = {
	.temp_under		= 3,
	.temp_low		= 8,
	.temp_high		= 43,
	.temp_over		= 48,
	.main_safety_tmr_h	= 4,
	.temp_interval_chg	= 20,
	.temp_interval_nochg	= 120,
	.usb_safety_tmr_h	= 4,
	.bkup_bat_v		= BUP_VCH_SEL_2P6V,
	.bkup_bat_i		= BUP_ICH_SEL_150UA,
	.no_maintenance		= false,
	.adc_therm		= ABx500_ADC_THERM_BATCTRL,
	.chg_unknown_bat	= false,
	.enable_overshoot	= false,
	.fg_res			= 100,
	.cap_levels		= &cap_levels,
	.bat_type		= bat_type_thermistor,
	.n_btypes		= 3,
	.batt_id		= 0,
	.interval_charging	= 5,
	.interval_not_charging	= 120,
	.temp_hysteresis	= 3,
	.gnd_lift_resistance	= 34,
	.maxi			= &maxi_params,
	.chg_params		= &chg,
	.fg_params		= &fg,
};

int __devinit
bmdevs_of_probe(struct device *dev,
		struct device_node *np,
		struct abx500_bm_data **battery)
{
	struct	abx500_battery_type *btype;
	struct  device_node *np_bat_supply;
	struct	abx500_bm_data *bat;
	const char *btech;
	char bat_tech[8];
	int i, thermistor;

	*battery = &ab8500_bm_data;

	/* get phandle to 'battery-info' node */
	np_bat_supply = of_parse_phandle(np, "battery", 0);
	if (!np_bat_supply) {
		dev_err(dev, "missing property battery\n");
		return -EINVAL;
	}
	if (of_property_read_bool(np_bat_supply,
			"thermistor-on-batctrl"))
		thermistor = NTC_INTERNAL;
	else
		thermistor = NTC_EXTERNAL;

	bat = *battery;
	if (thermistor == NTC_EXTERNAL) {
		bat->n_btypes  = 4;
		bat->bat_type  = bat_type_ext_thermistor;
		bat->adc_therm = ABx500_ADC_THERM_BATTEMP;
	}
	btech = of_get_property(np_bat_supply,
		"stericsson,battery-type", NULL);
	if (!btech) {
		dev_warn(dev, "missing property battery-name/type\n");
		strcpy(bat_tech, "UNKNOWN");
	} else {
		strcpy(bat_tech, btech);
	}

	if (strncmp(bat_tech, "LION", 4) == 0) {
		bat->no_maintenance  = true;
		bat->chg_unknown_bat = true;
		bat->bat_type[BATTERY_UNKNOWN].charge_full_design = 2600;
		bat->bat_type[BATTERY_UNKNOWN].termination_vol    = 4150;
		bat->bat_type[BATTERY_UNKNOWN].recharge_vol	  = 4130;
		bat->bat_type[BATTERY_UNKNOWN].normal_cur_lvl	  = 520;
		bat->bat_type[BATTERY_UNKNOWN].normal_vol_lvl	  = 4200;
	}
	/* select the battery resolution table */
	for (i = 0; i < bat->n_btypes; ++i) {
		btype = (bat->bat_type + i);
		if (thermistor == NTC_EXTERNAL) {
			btype->batres_tbl =
				temp_to_batres_tbl_ext_thermistor;
		} else if (strncmp(bat_tech, "LION", 4) == 0) {
			btype->batres_tbl =
				temp_to_batres_tbl_9100;
		} else {
			btype->batres_tbl =
				temp_to_batres_tbl_thermistor;
		}
	}
	of_node_put(np_bat_supply);
	return 0;
}
