xref: /openbmc/linux/include/linux/mfd/abx500.h (revision 95e9fd10)
1 /*
2  * Copyright (C) 2007-2009 ST-Ericsson AB
3  * License terms: GNU General Public License (GPL) version 2
4  * AB3100 core access functions
5  * Author: Linus Walleij <linus.walleij@stericsson.com>
6  *
7  * ABX500 core access functions.
8  * The abx500 interface is used for the Analog Baseband chip
9  * ab3100 and ab8500.
10  *
11  * Author: Mattias Wallin <mattias.wallin@stericsson.com>
12  * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
13  * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
14  * Author: Rickard Andersson <rickard.andersson@stericsson.com>
15  */
16 
17 #include <linux/regulator/machine.h>
18 
19 struct device;
20 
21 #ifndef MFD_ABX500_H
22 #define MFD_ABX500_H
23 
24 #define AB3100_P1A	0xc0
25 #define AB3100_P1B	0xc1
26 #define AB3100_P1C	0xc2
27 #define AB3100_P1D	0xc3
28 #define AB3100_P1E	0xc4
29 #define AB3100_P1F	0xc5
30 #define AB3100_P1G	0xc6
31 #define AB3100_R2A	0xc7
32 #define AB3100_R2B	0xc8
33 
34 /*
35  * AB3100, EVENTA1, A2 and A3 event register flags
36  * these are catenated into a single 32-bit flag in the code
37  * for event notification broadcasts.
38  */
39 #define AB3100_EVENTA1_ONSWA				(0x01<<16)
40 #define AB3100_EVENTA1_ONSWB				(0x02<<16)
41 #define AB3100_EVENTA1_ONSWC				(0x04<<16)
42 #define AB3100_EVENTA1_DCIO				(0x08<<16)
43 #define AB3100_EVENTA1_OVER_TEMP			(0x10<<16)
44 #define AB3100_EVENTA1_SIM_OFF				(0x20<<16)
45 #define AB3100_EVENTA1_VBUS				(0x40<<16)
46 #define AB3100_EVENTA1_VSET_USB				(0x80<<16)
47 
48 #define AB3100_EVENTA2_READY_TX				(0x01<<8)
49 #define AB3100_EVENTA2_READY_RX				(0x02<<8)
50 #define AB3100_EVENTA2_OVERRUN_ERROR			(0x04<<8)
51 #define AB3100_EVENTA2_FRAMING_ERROR			(0x08<<8)
52 #define AB3100_EVENTA2_CHARG_OVERCURRENT		(0x10<<8)
53 #define AB3100_EVENTA2_MIDR				(0x20<<8)
54 #define AB3100_EVENTA2_BATTERY_REM			(0x40<<8)
55 #define AB3100_EVENTA2_ALARM				(0x80<<8)
56 
57 #define AB3100_EVENTA3_ADC_TRIG5			(0x01)
58 #define AB3100_EVENTA3_ADC_TRIG4			(0x02)
59 #define AB3100_EVENTA3_ADC_TRIG3			(0x04)
60 #define AB3100_EVENTA3_ADC_TRIG2			(0x08)
61 #define AB3100_EVENTA3_ADC_TRIGVBAT			(0x10)
62 #define AB3100_EVENTA3_ADC_TRIGVTX			(0x20)
63 #define AB3100_EVENTA3_ADC_TRIG1			(0x40)
64 #define AB3100_EVENTA3_ADC_TRIG0			(0x80)
65 
66 /* AB3100, STR register flags */
67 #define AB3100_STR_ONSWA				(0x01)
68 #define AB3100_STR_ONSWB				(0x02)
69 #define AB3100_STR_ONSWC				(0x04)
70 #define AB3100_STR_DCIO					(0x08)
71 #define AB3100_STR_BOOT_MODE				(0x10)
72 #define AB3100_STR_SIM_OFF				(0x20)
73 #define AB3100_STR_BATT_REMOVAL				(0x40)
74 #define AB3100_STR_VBUS					(0x80)
75 
76 /*
77  * AB3100 contains 8 regulators, one external regulator controller
78  * and a buck converter, further the LDO E and buck converter can
79  * have separate settings if they are in sleep mode, this is
80  * modeled as a separate regulator.
81  */
82 #define AB3100_NUM_REGULATORS				10
83 
84 /**
85  * struct ab3100
86  * @access_mutex: lock out concurrent accesses to the AB3100 registers
87  * @dev: pointer to the containing device
88  * @i2c_client: I2C client for this chip
89  * @testreg_client: secondary client for test registers
90  * @chip_name: name of this chip variant
91  * @chip_id: 8 bit chip ID for this chip variant
92  * @event_subscribers: event subscribers are listed here
93  * @startup_events: a copy of the first reading of the event registers
94  * @startup_events_read: whether the first events have been read
95  *
96  * This struct is PRIVATE and devices using it should NOT
97  * access ANY fields. It is used as a token for calling the
98  * AB3100 functions.
99  */
100 struct ab3100 {
101 	struct mutex access_mutex;
102 	struct device *dev;
103 	struct i2c_client *i2c_client;
104 	struct i2c_client *testreg_client;
105 	char chip_name[32];
106 	u8 chip_id;
107 	struct blocking_notifier_head event_subscribers;
108 	u8 startup_events[3];
109 	bool startup_events_read;
110 };
111 
112 /**
113  * struct ab3100_platform_data
114  * Data supplied to initialize board connections to the AB3100
115  * @reg_constraints: regulator constraints for target board
116  *     the order of these constraints are: LDO A, C, D, E,
117  *     F, G, H, K, EXT and BUCK.
118  * @reg_initvals: initial values for the regulator registers
119  *     plus two sleep settings for LDO E and the BUCK converter.
120  *     exactly AB3100_NUM_REGULATORS+2 values must be sent in.
121  *     Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK,
122  *     BUCK sleep, LDO D. (LDO D need to be initialized last.)
123  * @external_voltage: voltage level of the external regulator.
124  */
125 struct ab3100_platform_data {
126 	struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS];
127 	u8 reg_initvals[AB3100_NUM_REGULATORS+2];
128 	int external_voltage;
129 };
130 
131 int ab3100_event_register(struct ab3100 *ab3100,
132 			  struct notifier_block *nb);
133 int ab3100_event_unregister(struct ab3100 *ab3100,
134 			    struct notifier_block *nb);
135 
136 /**
137  * struct abx500_init_setting
138  * Initial value of the registers for driver to use during setup.
139  */
140 struct abx500_init_settings {
141 	u8 bank;
142 	u8 reg;
143 	u8 setting;
144 };
145 
146 /* Battery driver related data */
147 /*
148  * ADC for the battery thermistor.
149  * When using the ABx500_ADC_THERM_BATCTRL the battery ID resistor is combined
150  * with a NTC resistor to both identify the battery and to measure its
151  * temperature. Different phone manufactures uses different techniques to both
152  * identify the battery and to read its temperature.
153  */
154 enum abx500_adc_therm {
155 	ABx500_ADC_THERM_BATCTRL,
156 	ABx500_ADC_THERM_BATTEMP,
157 };
158 
159 /**
160  * struct abx500_res_to_temp - defines one point in a temp to res curve. To
161  * be used in battery packs that combines the identification resistor with a
162  * NTC resistor.
163  * @temp:			battery pack temperature in Celcius
164  * @resist:			NTC resistor net total resistance
165  */
166 struct abx500_res_to_temp {
167 	int temp;
168 	int resist;
169 };
170 
171 /**
172  * struct abx500_v_to_cap - Table for translating voltage to capacity
173  * @voltage:		Voltage in mV
174  * @capacity:		Capacity in percent
175  */
176 struct abx500_v_to_cap {
177 	int voltage;
178 	int capacity;
179 };
180 
181 /* Forward declaration */
182 struct abx500_fg;
183 
184 /**
185  * struct abx500_fg_parameters - Fuel gauge algorithm parameters, in seconds
186  * if not specified
187  * @recovery_sleep_timer:	Time between measurements while recovering
188  * @recovery_total_time:	Total recovery time
189  * @init_timer:			Measurement interval during startup
190  * @init_discard_time:		Time we discard voltage measurement at startup
191  * @init_total_time:		Total init time during startup
192  * @high_curr_time:		Time current has to be high to go to recovery
193  * @accu_charging:		FG accumulation time while charging
194  * @accu_high_curr:		FG accumulation time in high current mode
195  * @high_curr_threshold:	High current threshold, in mA
196  * @lowbat_threshold:		Low battery threshold, in mV
197  * @overbat_threshold:		Over battery threshold, in mV
198  * @battok_falling_th_sel0	Threshold in mV for battOk signal sel0
199  *				Resolution in 50 mV step.
200  * @battok_raising_th_sel1	Threshold in mV for battOk signal sel1
201  *				Resolution in 50 mV step.
202  * @user_cap_limit		Capacity reported from user must be within this
203  *				limit to be considered as sane, in percentage
204  *				points.
205  * @maint_thres			This is the threshold where we stop reporting
206  *				battery full while in maintenance, in per cent
207  */
208 struct abx500_fg_parameters {
209 	int recovery_sleep_timer;
210 	int recovery_total_time;
211 	int init_timer;
212 	int init_discard_time;
213 	int init_total_time;
214 	int high_curr_time;
215 	int accu_charging;
216 	int accu_high_curr;
217 	int high_curr_threshold;
218 	int lowbat_threshold;
219 	int overbat_threshold;
220 	int battok_falling_th_sel0;
221 	int battok_raising_th_sel1;
222 	int user_cap_limit;
223 	int maint_thres;
224 };
225 
226 /**
227  * struct abx500_charger_maximization - struct used by the board config.
228  * @use_maxi:		Enable maximization for this battery type
229  * @maxi_chg_curr:	Maximum charger current allowed
230  * @maxi_wait_cycles:	cycles to wait before setting charger current
231  * @charger_curr_step	delta between two charger current settings (mA)
232  */
233 struct abx500_maxim_parameters {
234 	bool ena_maxi;
235 	int chg_curr;
236 	int wait_cycles;
237 	int charger_curr_step;
238 };
239 
240 /**
241  * struct abx500_battery_type - different batteries supported
242  * @name:			battery technology
243  * @resis_high:			battery upper resistance limit
244  * @resis_low:			battery lower resistance limit
245  * @charge_full_design:		Maximum battery capacity in mAh
246  * @nominal_voltage:		Nominal voltage of the battery in mV
247  * @termination_vol:		max voltage upto which battery can be charged
248  * @termination_curr		battery charging termination current in mA
249  * @recharge_vol		battery voltage limit that will trigger a new
250  *				full charging cycle in the case where maintenan-
251  *				-ce charging has been disabled
252  * @normal_cur_lvl:		charger current in normal state in mA
253  * @normal_vol_lvl:		charger voltage in normal state in mV
254  * @maint_a_cur_lvl:		charger current in maintenance A state in mA
255  * @maint_a_vol_lvl:		charger voltage in maintenance A state in mV
256  * @maint_a_chg_timer_h:	charge time in maintenance A state
257  * @maint_b_cur_lvl:		charger current in maintenance B state in mA
258  * @maint_b_vol_lvl:		charger voltage in maintenance B state in mV
259  * @maint_b_chg_timer_h:	charge time in maintenance B state
260  * @low_high_cur_lvl:		charger current in temp low/high state in mA
261  * @low_high_vol_lvl:		charger voltage in temp low/high state in mV'
262  * @battery_resistance:		battery inner resistance in mOhm.
263  * @n_r_t_tbl_elements:		number of elements in r_to_t_tbl
264  * @r_to_t_tbl:			table containing resistance to temp points
265  * @n_v_cap_tbl_elements:	number of elements in v_to_cap_tbl
266  * @v_to_cap_tbl:		Voltage to capacity (in %) table
267  * @n_batres_tbl_elements	number of elements in the batres_tbl
268  * @batres_tbl			battery internal resistance vs temperature table
269  */
270 struct abx500_battery_type {
271 	int name;
272 	int resis_high;
273 	int resis_low;
274 	int charge_full_design;
275 	int nominal_voltage;
276 	int termination_vol;
277 	int termination_curr;
278 	int recharge_vol;
279 	int normal_cur_lvl;
280 	int normal_vol_lvl;
281 	int maint_a_cur_lvl;
282 	int maint_a_vol_lvl;
283 	int maint_a_chg_timer_h;
284 	int maint_b_cur_lvl;
285 	int maint_b_vol_lvl;
286 	int maint_b_chg_timer_h;
287 	int low_high_cur_lvl;
288 	int low_high_vol_lvl;
289 	int battery_resistance;
290 	int n_temp_tbl_elements;
291 	struct abx500_res_to_temp *r_to_t_tbl;
292 	int n_v_cap_tbl_elements;
293 	struct abx500_v_to_cap *v_to_cap_tbl;
294 	int n_batres_tbl_elements;
295 	struct batres_vs_temp *batres_tbl;
296 };
297 
298 /**
299  * struct abx500_bm_capacity_levels - abx500 capacity level data
300  * @critical:		critical capacity level in percent
301  * @low:		low capacity level in percent
302  * @normal:		normal capacity level in percent
303  * @high:		high capacity level in percent
304  * @full:		full capacity level in percent
305  */
306 struct abx500_bm_capacity_levels {
307 	int critical;
308 	int low;
309 	int normal;
310 	int high;
311 	int full;
312 };
313 
314 /**
315  * struct abx500_bm_charger_parameters - Charger specific parameters
316  * @usb_volt_max:	maximum allowed USB charger voltage in mV
317  * @usb_curr_max:	maximum allowed USB charger current in mA
318  * @ac_volt_max:	maximum allowed AC charger voltage in mV
319  * @ac_curr_max:	maximum allowed AC charger current in mA
320  */
321 struct abx500_bm_charger_parameters {
322 	int usb_volt_max;
323 	int usb_curr_max;
324 	int ac_volt_max;
325 	int ac_curr_max;
326 };
327 
328 /**
329  * struct abx500_bm_data - abx500 battery management data
330  * @temp_under		under this temp, charging is stopped
331  * @temp_low		between this temp and temp_under charging is reduced
332  * @temp_high		between this temp and temp_over charging is reduced
333  * @temp_over		over this temp, charging is stopped
334  * @temp_now		present battery temperature
335  * @temp_interval_chg	temperature measurement interval in s when charging
336  * @temp_interval_nochg	temperature measurement interval in s when not charging
337  * @main_safety_tmr_h	safety timer for main charger
338  * @usb_safety_tmr_h	safety timer for usb charger
339  * @bkup_bat_v		voltage which we charge the backup battery with
340  * @bkup_bat_i		current which we charge the backup battery with
341  * @no_maintenance	indicates that maintenance charging is disabled
342  * @abx500_adc_therm	placement of thermistor, batctrl or battemp adc
343  * @chg_unknown_bat	flag to enable charging of unknown batteries
344  * @enable_overshoot	flag to enable VBAT overshoot control
345  * @auto_trig		flag to enable auto adc trigger
346  * @fg_res		resistance of FG resistor in 0.1mOhm
347  * @n_btypes		number of elements in array bat_type
348  * @batt_id		index of the identified battery in array bat_type
349  * @interval_charging	charge alg cycle period time when charging (sec)
350  * @interval_not_charging charge alg cycle period time when not charging (sec)
351  * @temp_hysteresis	temperature hysteresis
352  * @gnd_lift_resistance	Battery ground to phone ground resistance (mOhm)
353  * @maxi:		maximization parameters
354  * @cap_levels		capacity in percent for the different capacity levels
355  * @bat_type		table of supported battery types
356  * @chg_params		charger parameters
357  * @fg_params		fuel gauge parameters
358  */
359 struct abx500_bm_data {
360 	int temp_under;
361 	int temp_low;
362 	int temp_high;
363 	int temp_over;
364 	int temp_now;
365 	int temp_interval_chg;
366 	int temp_interval_nochg;
367 	int main_safety_tmr_h;
368 	int usb_safety_tmr_h;
369 	int bkup_bat_v;
370 	int bkup_bat_i;
371 	bool no_maintenance;
372 	bool chg_unknown_bat;
373 	bool enable_overshoot;
374 	bool auto_trig;
375 	enum abx500_adc_therm adc_therm;
376 	int fg_res;
377 	int n_btypes;
378 	int batt_id;
379 	int interval_charging;
380 	int interval_not_charging;
381 	int temp_hysteresis;
382 	int gnd_lift_resistance;
383 	const struct abx500_maxim_parameters *maxi;
384 	const struct abx500_bm_capacity_levels *cap_levels;
385 	const struct abx500_battery_type *bat_type;
386 	const struct abx500_bm_charger_parameters *chg_params;
387 	const struct abx500_fg_parameters *fg_params;
388 };
389 
390 struct abx500_chargalg_platform_data {
391 	char **supplied_to;
392 	size_t num_supplicants;
393 };
394 
395 struct abx500_charger_platform_data {
396 	char **supplied_to;
397 	size_t num_supplicants;
398 	bool autopower_cfg;
399 };
400 
401 struct abx500_btemp_platform_data {
402 	char **supplied_to;
403 	size_t num_supplicants;
404 };
405 
406 struct abx500_fg_platform_data {
407 	char **supplied_to;
408 	size_t num_supplicants;
409 };
410 
411 struct abx500_bm_plat_data {
412 	struct abx500_bm_data *battery;
413 	struct abx500_charger_platform_data *charger;
414 	struct abx500_btemp_platform_data *btemp;
415 	struct abx500_fg_platform_data *fg;
416 	struct abx500_chargalg_platform_data *chargalg;
417 };
418 
419 int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg,
420 	u8 value);
421 int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg,
422 	u8 *value);
423 int abx500_get_register_page_interruptible(struct device *dev, u8 bank,
424 	u8 first_reg, u8 *regvals, u8 numregs);
425 int abx500_set_register_page_interruptible(struct device *dev, u8 bank,
426 	u8 first_reg, u8 *regvals, u8 numregs);
427 /**
428  * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a
429  *	target register
430  *
431  * @dev: The AB sub device.
432  * @bank: The i2c bank number.
433  * @bitmask: The bit mask to use.
434  * @bitvalues: The new bit values.
435  *
436  * Updates the value of an AB register:
437  * value -> ((value & ~bitmask) | (bitvalues & bitmask))
438  */
439 int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank,
440 	u8 reg, u8 bitmask, u8 bitvalues);
441 int abx500_get_chip_id(struct device *dev);
442 int abx500_event_registers_startup_state_get(struct device *dev, u8 *event);
443 int abx500_startup_irq_enabled(struct device *dev, unsigned int irq);
444 
445 struct abx500_ops {
446 	int (*get_chip_id) (struct device *);
447 	int (*get_register) (struct device *, u8, u8, u8 *);
448 	int (*set_register) (struct device *, u8, u8, u8);
449 	int (*get_register_page) (struct device *, u8, u8, u8 *, u8);
450 	int (*set_register_page) (struct device *, u8, u8, u8 *, u8);
451 	int (*mask_and_set_register) (struct device *, u8, u8, u8, u8);
452 	int (*event_registers_startup_state_get) (struct device *, u8 *);
453 	int (*startup_irq_enabled) (struct device *, unsigned int);
454 };
455 
456 int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops);
457 void abx500_remove_ops(struct device *dev);
458 #endif
459