xref: /OK3568_Linux_fs/kernel/include/linux/mfd/abx500/ux500_chargalg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) ST-Ericsson SA 2012
4*4882a593Smuzhiyun  * Author: Johan Gardsmark <johan.gardsmark@stericsson.com> for ST-Ericsson.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _UX500_CHARGALG_H
8*4882a593Smuzhiyun #define _UX500_CHARGALG_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/power_supply.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /*
13*4882a593Smuzhiyun  * Valid only for supplies of type:
14*4882a593Smuzhiyun  * - POWER_SUPPLY_TYPE_MAINS,
15*4882a593Smuzhiyun  * - POWER_SUPPLY_TYPE_USB,
16*4882a593Smuzhiyun  * because only them store as drv_data pointer to struct ux500_charger.
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun #define psy_to_ux500_charger(x) power_supply_get_drvdata(x)
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* Forward declaration */
21*4882a593Smuzhiyun struct ux500_charger;
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun struct ux500_charger_ops {
24*4882a593Smuzhiyun 	int (*enable) (struct ux500_charger *, int, int, int);
25*4882a593Smuzhiyun 	int (*check_enable) (struct ux500_charger *, int, int);
26*4882a593Smuzhiyun 	int (*kick_wd) (struct ux500_charger *);
27*4882a593Smuzhiyun 	int (*update_curr) (struct ux500_charger *, int);
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /**
31*4882a593Smuzhiyun  * struct ux500_charger - power supply ux500 charger sub class
32*4882a593Smuzhiyun  * @psy			power supply base class
33*4882a593Smuzhiyun  * @ops			ux500 charger operations
34*4882a593Smuzhiyun  * @max_out_volt	maximum output charger voltage in mV
35*4882a593Smuzhiyun  * @max_out_curr	maximum output charger current in mA
36*4882a593Smuzhiyun  * @enabled		indicates if this charger is used or not
37*4882a593Smuzhiyun  * @external		external charger unit (pm2xxx)
38*4882a593Smuzhiyun  */
39*4882a593Smuzhiyun struct ux500_charger {
40*4882a593Smuzhiyun 	struct power_supply *psy;
41*4882a593Smuzhiyun 	struct ux500_charger_ops ops;
42*4882a593Smuzhiyun 	int max_out_volt;
43*4882a593Smuzhiyun 	int max_out_curr;
44*4882a593Smuzhiyun 	int wdt_refresh;
45*4882a593Smuzhiyun 	bool enabled;
46*4882a593Smuzhiyun 	bool external;
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun extern struct blocking_notifier_head charger_notifier_list;
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #endif
52