Blame view

include/linux/mfd/abx500.h 11.7 KB
af873fcec   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
14fa56917   Linus Walleij   mfd: add U300 AB3...
2
3
  /*
   * Copyright (C) 2007-2009 ST-Ericsson AB
fa661258a   Mattias Wallin   mfd: AB3100 regis...
4
5
   *
   * ABX500 core access functions.
0fd0013cd   Marcus Cooper   mfd: ab3100: Spli...
6
   * The abx500 interface is used for the Analog Baseband chips.
fa661258a   Mattias Wallin   mfd: AB3100 regis...
7
8
9
10
11
   *
   * Author: Mattias Wallin <mattias.wallin@stericsson.com>
   * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
   * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
   * Author: Rickard Andersson <rickard.andersson@stericsson.com>
14fa56917   Linus Walleij   mfd: add U300 AB3...
12
   */
d619bc143   Linus Walleij   regulator: AB3100...
13
  #include <linux/regulator/machine.h>
14fa56917   Linus Walleij   mfd: add U300 AB3...
14

313162d0b   Paul Gortmaker   device.h: audit a...
15
  struct device;
fa661258a   Mattias Wallin   mfd: AB3100 regis...
16
17
  #ifndef MFD_ABX500_H
  #define MFD_ABX500_H
14fa56917   Linus Walleij   mfd: add U300 AB3...
18

fa661258a   Mattias Wallin   mfd: AB3100 regis...
19
20
21
22
23
24
25
26
27
  /**
   * struct abx500_init_setting
   * Initial value of the registers for driver to use during setup.
   */
  struct abx500_init_settings {
  	u8 bank;
  	u8 reg;
  	u8 setting;
  };
1668f8115   Arun Murthy   abx500-chargalg: ...
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  /* Battery driver related data */
  /*
   * ADC for the battery thermistor.
   * When using the ABx500_ADC_THERM_BATCTRL the battery ID resistor is combined
   * with a NTC resistor to both identify the battery and to measure its
   * temperature. Different phone manufactures uses different techniques to both
   * identify the battery and to read its temperature.
   */
  enum abx500_adc_therm {
  	ABx500_ADC_THERM_BATCTRL,
  	ABx500_ADC_THERM_BATTEMP,
  };
  
  /**
   * struct abx500_res_to_temp - defines one point in a temp to res curve. To
   * be used in battery packs that combines the identification resistor with a
   * NTC resistor.
a042a7a4e   Colin Ian King   mfd: abx500: Fix ...
45
   * @temp:			battery pack temperature in Celsius
1668f8115   Arun Murthy   abx500-chargalg: ...
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
   * @resist:			NTC resistor net total resistance
   */
  struct abx500_res_to_temp {
  	int temp;
  	int resist;
  };
  
  /**
   * struct abx500_v_to_cap - Table for translating voltage to capacity
   * @voltage:		Voltage in mV
   * @capacity:		Capacity in percent
   */
  struct abx500_v_to_cap {
  	int voltage;
  	int capacity;
  };
  
  /* Forward declaration */
  struct abx500_fg;
  
  /**
   * struct abx500_fg_parameters - Fuel gauge algorithm parameters, in seconds
   * if not specified
   * @recovery_sleep_timer:	Time between measurements while recovering
   * @recovery_total_time:	Total recovery time
   * @init_timer:			Measurement interval during startup
   * @init_discard_time:		Time we discard voltage measurement at startup
   * @init_total_time:		Total init time during startup
   * @high_curr_time:		Time current has to be high to go to recovery
   * @accu_charging:		FG accumulation time while charging
   * @accu_high_curr:		FG accumulation time in high current mode
   * @high_curr_threshold:	High current threshold, in mA
   * @lowbat_threshold:		Low battery threshold, in mV
   * @overbat_threshold:		Over battery threshold, in mV
   * @battok_falling_th_sel0	Threshold in mV for battOk signal sel0
   *				Resolution in 50 mV step.
   * @battok_raising_th_sel1	Threshold in mV for battOk signal sel1
   *				Resolution in 50 mV step.
   * @user_cap_limit		Capacity reported from user must be within this
   *				limit to be considered as sane, in percentage
   *				points.
   * @maint_thres			This is the threshold where we stop reporting
   *				battery full while in maintenance, in per cent
93ff722e8   Lee Jones   ab8500-fg: Add po...
89
90
91
92
93
   * @pcut_enable:			Enable power cut feature in ab8505
   * @pcut_max_time:		Max time threshold
   * @pcut_flag_time:		Flagtime threshold
   * @pcut_max_restart:		Max number of restarts
   * @pcut_debounce_time:		Sets battery debounce time
1668f8115   Arun Murthy   abx500-chargalg: ...
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
   */
  struct abx500_fg_parameters {
  	int recovery_sleep_timer;
  	int recovery_total_time;
  	int init_timer;
  	int init_discard_time;
  	int init_total_time;
  	int high_curr_time;
  	int accu_charging;
  	int accu_high_curr;
  	int high_curr_threshold;
  	int lowbat_threshold;
  	int overbat_threshold;
  	int battok_falling_th_sel0;
  	int battok_raising_th_sel1;
  	int user_cap_limit;
  	int maint_thres;
93ff722e8   Lee Jones   ab8500-fg: Add po...
111
112
113
114
115
  	bool pcut_enable;
  	u8 pcut_max_time;
  	u8 pcut_flag_time;
  	u8 pcut_max_restart;
  	u8 pcut_debounce_time;
1668f8115   Arun Murthy   abx500-chargalg: ...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
  };
  
  /**
   * struct abx500_charger_maximization - struct used by the board config.
   * @use_maxi:		Enable maximization for this battery type
   * @maxi_chg_curr:	Maximum charger current allowed
   * @maxi_wait_cycles:	cycles to wait before setting charger current
   * @charger_curr_step	delta between two charger current settings (mA)
   */
  struct abx500_maxim_parameters {
  	bool ena_maxi;
  	int chg_curr;
  	int wait_cycles;
  	int charger_curr_step;
  };
  
  /**
   * struct abx500_battery_type - different batteries supported
   * @name:			battery technology
   * @resis_high:			battery upper resistance limit
   * @resis_low:			battery lower resistance limit
   * @charge_full_design:		Maximum battery capacity in mAh
   * @nominal_voltage:		Nominal voltage of the battery in mV
   * @termination_vol:		max voltage upto which battery can be charged
   * @termination_curr		battery charging termination current in mA
ea4024017   Marcus Cooper   ab8500_bm: Rechar...
141
   * @recharge_cap		battery capacity limit that will trigger a new
1668f8115   Arun Murthy   abx500-chargalg: ...
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
   *				full charging cycle in the case where maintenan-
   *				-ce charging has been disabled
   * @normal_cur_lvl:		charger current in normal state in mA
   * @normal_vol_lvl:		charger voltage in normal state in mV
   * @maint_a_cur_lvl:		charger current in maintenance A state in mA
   * @maint_a_vol_lvl:		charger voltage in maintenance A state in mV
   * @maint_a_chg_timer_h:	charge time in maintenance A state
   * @maint_b_cur_lvl:		charger current in maintenance B state in mA
   * @maint_b_vol_lvl:		charger voltage in maintenance B state in mV
   * @maint_b_chg_timer_h:	charge time in maintenance B state
   * @low_high_cur_lvl:		charger current in temp low/high state in mA
   * @low_high_vol_lvl:		charger voltage in temp low/high state in mV'
   * @battery_resistance:		battery inner resistance in mOhm.
   * @n_r_t_tbl_elements:		number of elements in r_to_t_tbl
   * @r_to_t_tbl:			table containing resistance to temp points
   * @n_v_cap_tbl_elements:	number of elements in v_to_cap_tbl
   * @v_to_cap_tbl:		Voltage to capacity (in %) table
   * @n_batres_tbl_elements	number of elements in the batres_tbl
   * @batres_tbl			battery internal resistance vs temperature table
   */
  struct abx500_battery_type {
  	int name;
  	int resis_high;
  	int resis_low;
  	int charge_full_design;
  	int nominal_voltage;
  	int termination_vol;
  	int termination_curr;
ea4024017   Marcus Cooper   ab8500_bm: Rechar...
170
  	int recharge_cap;
1668f8115   Arun Murthy   abx500-chargalg: ...
171
172
173
174
175
176
177
178
179
180
181
182
  	int normal_cur_lvl;
  	int normal_vol_lvl;
  	int maint_a_cur_lvl;
  	int maint_a_vol_lvl;
  	int maint_a_chg_timer_h;
  	int maint_b_cur_lvl;
  	int maint_b_vol_lvl;
  	int maint_b_chg_timer_h;
  	int low_high_cur_lvl;
  	int low_high_vol_lvl;
  	int battery_resistance;
  	int n_temp_tbl_elements;
2c8994078   Hongbo Zhang   ab8500_{bmdata,fg...
183
  	const struct abx500_res_to_temp *r_to_t_tbl;
1668f8115   Arun Murthy   abx500-chargalg: ...
184
  	int n_v_cap_tbl_elements;
2c8994078   Hongbo Zhang   ab8500_{bmdata,fg...
185
  	const struct abx500_v_to_cap *v_to_cap_tbl;
1668f8115   Arun Murthy   abx500-chargalg: ...
186
  	int n_batres_tbl_elements;
2c8994078   Hongbo Zhang   ab8500_{bmdata,fg...
187
  	const struct batres_vs_temp *batres_tbl;
1668f8115   Arun Murthy   abx500-chargalg: ...
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
  };
  
  /**
   * struct abx500_bm_capacity_levels - abx500 capacity level data
   * @critical:		critical capacity level in percent
   * @low:		low capacity level in percent
   * @normal:		normal capacity level in percent
   * @high:		high capacity level in percent
   * @full:		full capacity level in percent
   */
  struct abx500_bm_capacity_levels {
  	int critical;
  	int low;
  	int normal;
  	int high;
  	int full;
  };
  
  /**
   * struct abx500_bm_charger_parameters - Charger specific parameters
   * @usb_volt_max:	maximum allowed USB charger voltage in mV
   * @usb_curr_max:	maximum allowed USB charger current in mA
   * @ac_volt_max:	maximum allowed AC charger voltage in mV
   * @ac_curr_max:	maximum allowed AC charger current in mA
   */
  struct abx500_bm_charger_parameters {
  	int usb_volt_max;
  	int usb_curr_max;
  	int ac_volt_max;
  	int ac_curr_max;
  };
  
  /**
   * struct abx500_bm_data - abx500 battery management data
   * @temp_under		under this temp, charging is stopped
   * @temp_low		between this temp and temp_under charging is reduced
   * @temp_high		between this temp and temp_over charging is reduced
   * @temp_over		over this temp, charging is stopped
   * @temp_now		present battery temperature
   * @temp_interval_chg	temperature measurement interval in s when charging
   * @temp_interval_nochg	temperature measurement interval in s when not charging
   * @main_safety_tmr_h	safety timer for main charger
   * @usb_safety_tmr_h	safety timer for usb charger
   * @bkup_bat_v		voltage which we charge the backup battery with
   * @bkup_bat_i		current which we charge the backup battery with
   * @no_maintenance	indicates that maintenance charging is disabled
ea4024017   Marcus Cooper   ab8500_bm: Rechar...
234
   * @capacity_scaling    indicates whether capacity scaling is to be used
1668f8115   Arun Murthy   abx500-chargalg: ...
235
236
237
238
239
240
241
242
243
244
245
   * @abx500_adc_therm	placement of thermistor, batctrl or battemp adc
   * @chg_unknown_bat	flag to enable charging of unknown batteries
   * @enable_overshoot	flag to enable VBAT overshoot control
   * @auto_trig		flag to enable auto adc trigger
   * @fg_res		resistance of FG resistor in 0.1mOhm
   * @n_btypes		number of elements in array bat_type
   * @batt_id		index of the identified battery in array bat_type
   * @interval_charging	charge alg cycle period time when charging (sec)
   * @interval_not_charging charge alg cycle period time when not charging (sec)
   * @temp_hysteresis	temperature hysteresis
   * @gnd_lift_resistance	Battery ground to phone ground resistance (mOhm)
861a30da5   Lee Jones   ab8500-bm: Add su...
246
247
248
249
250
   * @n_chg_out_curr		number of elements in array chg_output_curr
   * @n_chg_in_curr		number of elements in array chg_input_curr
   * @chg_output_curr	charger output current level map
   * @chg_input_curr		charger input current level map
   * @maxi		maximization parameters
1668f8115   Arun Murthy   abx500-chargalg: ...
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
   * @cap_levels		capacity in percent for the different capacity levels
   * @bat_type		table of supported battery types
   * @chg_params		charger parameters
   * @fg_params		fuel gauge parameters
   */
  struct abx500_bm_data {
  	int temp_under;
  	int temp_low;
  	int temp_high;
  	int temp_over;
  	int temp_now;
  	int temp_interval_chg;
  	int temp_interval_nochg;
  	int main_safety_tmr_h;
  	int usb_safety_tmr_h;
  	int bkup_bat_v;
  	int bkup_bat_i;
97034a1e0   Lee Jones   ab8500-bm: Remove...
268
269
270
  	bool autopower_cfg;
  	bool ac_enabled;
  	bool usb_enabled;
1668f8115   Arun Murthy   abx500-chargalg: ...
271
  	bool no_maintenance;
ea4024017   Marcus Cooper   ab8500_bm: Rechar...
272
  	bool capacity_scaling;
1668f8115   Arun Murthy   abx500-chargalg: ...
273
274
275
276
277
278
279
280
281
282
283
  	bool chg_unknown_bat;
  	bool enable_overshoot;
  	bool auto_trig;
  	enum abx500_adc_therm adc_therm;
  	int fg_res;
  	int n_btypes;
  	int batt_id;
  	int interval_charging;
  	int interval_not_charging;
  	int temp_hysteresis;
  	int gnd_lift_resistance;
861a30da5   Lee Jones   ab8500-bm: Add su...
284
285
286
287
  	int n_chg_out_curr;
  	int n_chg_in_curr;
  	int *chg_output_curr;
  	int *chg_input_curr;
1668f8115   Arun Murthy   abx500-chargalg: ...
288
289
  	const struct abx500_maxim_parameters *maxi;
  	const struct abx500_bm_capacity_levels *cap_levels;
e0f1abeba   Rajanikanth H.V   ab8500: Add devic...
290
  	struct abx500_battery_type *bat_type;
1668f8115   Arun Murthy   abx500-chargalg: ...
291
292
293
  	const struct abx500_bm_charger_parameters *chg_params;
  	const struct abx500_fg_parameters *fg_params;
  };
e0f1abeba   Rajanikanth H.V   ab8500: Add devic...
294
295
296
  enum {
  	NTC_EXTERNAL = 0,
  	NTC_INTERNAL,
1668f8115   Arun Murthy   abx500-chargalg: ...
297
  };
b0284de05   Lee Jones   ab8500_bm: Rename...
298
299
  int ab8500_bm_of_probe(struct device *dev,
  		       struct device_node *np,
23a04f9f4   Lee Jones   ab8500_bm: Always...
300
  		       struct abx500_bm_data *bm);
1668f8115   Arun Murthy   abx500-chargalg: ...
301

fa661258a   Mattias Wallin   mfd: AB3100 regis...
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
  int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg,
  	u8 value);
  int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg,
  	u8 *value);
  int abx500_get_register_page_interruptible(struct device *dev, u8 bank,
  	u8 first_reg, u8 *regvals, u8 numregs);
  int abx500_set_register_page_interruptible(struct device *dev, u8 bank,
  	u8 first_reg, u8 *regvals, u8 numregs);
  /**
   * abx500_mask_and_set_register_inerruptible() - Modifies selected bits of a
   *	target register
   *
   * @dev: The AB sub device.
   * @bank: The i2c bank number.
   * @bitmask: The bit mask to use.
   * @bitvalues: The new bit values.
   *
   * Updates the value of an AB register:
   * value -> ((value & ~bitmask) | (bitvalues & bitmask))
   */
  int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank,
  	u8 reg, u8 bitmask, u8 bitvalues);
  int abx500_get_chip_id(struct device *dev);
  int abx500_event_registers_startup_state_get(struct device *dev, u8 *event);
  int abx500_startup_irq_enabled(struct device *dev, unsigned int irq);
  
  struct abx500_ops {
  	int (*get_chip_id) (struct device *);
  	int (*get_register) (struct device *, u8, u8, u8 *);
  	int (*set_register) (struct device *, u8, u8, u8);
  	int (*get_register_page) (struct device *, u8, u8, u8 *, u8);
  	int (*set_register_page) (struct device *, u8, u8, u8 *, u8);
  	int (*mask_and_set_register) (struct device *, u8, u8, u8, u8);
  	int (*event_registers_startup_state_get) (struct device *, u8 *);
  	int (*startup_irq_enabled) (struct device *, unsigned int);
e0f4fec03   Mian Yousaf Kaukab   mfd: abx500-core:...
337
  	void (*dump_all_banks) (struct device *);
fa661258a   Mattias Wallin   mfd: AB3100 regis...
338
339
340
  };
  
  int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops);
c6252e9ce   Mark Brown   mfd: Declare abx5...
341
  void abx500_remove_ops(struct device *dev);
14fa56917   Linus Walleij   mfd: add U300 AB3...
342
  #endif