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>
7 * ABX500 core access functions.
8 * The abx500 interface is used for the Analog Baseband chip
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>
17 #include <linux/regulator/machine.h>
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
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.
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)
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)
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)
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)
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.
82 #define AB3100_NUM_REGULATORS 10
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
96 * This struct is PRIVATE and devices using it should NOT
97 * access ANY fields. It is used as a token for calling the
101 struct mutex access_mutex
;
103 struct i2c_client
*i2c_client
;
104 struct i2c_client
*testreg_client
;
107 struct blocking_notifier_head event_subscribers
;
108 u8 startup_events
[3];
109 bool startup_events_read
;
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.
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
;
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
);
137 * struct abx500_init_setting
138 * Initial value of the registers for driver to use during setup.
140 struct abx500_init_settings
{
146 /* Battery driver related data */
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.
154 enum abx500_adc_therm
{
155 ABx500_ADC_THERM_BATCTRL
,
156 ABx500_ADC_THERM_BATTEMP
,
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
163 * @temp: battery pack temperature in Celcius
164 * @resist: NTC resistor net total resistance
166 struct abx500_res_to_temp
{
172 * struct abx500_v_to_cap - Table for translating voltage to capacity
173 * @voltage: Voltage in mV
174 * @capacity: Capacity in percent
176 struct abx500_v_to_cap
{
181 /* Forward declaration */
185 * struct abx500_fg_parameters - Fuel gauge algorithm parameters, in seconds
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
205 * @maint_thres This is the threshold where we stop reporting
206 * battery full while in maintenance, in per cent
208 struct abx500_fg_parameters
{
209 int recovery_sleep_timer
;
210 int recovery_total_time
;
212 int init_discard_time
;
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
;
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)
233 struct abx500_maxim_parameters
{
237 int charger_curr_step
;
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
270 struct abx500_battery_type
{
274 int charge_full_design
;
277 int termination_curr
;
283 int maint_a_chg_timer_h
;
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
;
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
306 struct abx500_bm_capacity_levels
{
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
321 struct abx500_bm_charger_parameters
{
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
359 struct abx500_bm_data
{
365 int temp_interval_chg
;
366 int temp_interval_nochg
;
367 int main_safety_tmr_h
;
368 int usb_safety_tmr_h
;
372 bool chg_unknown_bat
;
373 bool enable_overshoot
;
375 enum abx500_adc_therm adc_therm
;
379 int interval_charging
;
380 int interval_not_charging
;
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
;
390 struct abx500_chargalg_platform_data
{
392 size_t num_supplicants
;
395 struct abx500_charger_platform_data
{
397 size_t num_supplicants
;
401 struct abx500_btemp_platform_data
{
403 size_t num_supplicants
;
406 struct abx500_fg_platform_data
{
408 size_t num_supplicants
;
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
;
419 int abx500_set_register_interruptible(struct device
*dev
, u8 bank
, u8 reg
,
421 int abx500_get_register_interruptible(struct device
*dev
, u8 bank
, u8 reg
,
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
);
428 * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a
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.
436 * Updates the value of an AB register:
437 * value -> ((value & ~bitmask) | (bitvalues & bitmask))
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
);
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);
456 int abx500_register_ops(struct device
*core_dev
, struct abx500_ops
*ops
);
457 void abx500_remove_ops(struct device
*dev
);