xref: /OK3568_Linux_fs/kernel/include/linux/mfd/max14577.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * max14577.h - Driver for the Maxim 14577/77836
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2014 Samsung Electrnoics
6*4882a593Smuzhiyun  * Chanwoo Choi <cw00.choi@samsung.com>
7*4882a593Smuzhiyun  * Krzysztof Kozlowski <krzk@kernel.org>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This driver is based on max8997.h
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * MAX14577 has MUIC, Charger devices.
12*4882a593Smuzhiyun  * The devices share the same I2C bus and interrupt line
13*4882a593Smuzhiyun  * included in this mfd driver.
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  * MAX77836 has additional PMIC and Fuel-Gauge on different I2C slave
16*4882a593Smuzhiyun  * addresses.
17*4882a593Smuzhiyun  */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #ifndef __MAX14577_H__
20*4882a593Smuzhiyun #define __MAX14577_H__
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include <linux/regulator/consumer.h>
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /* MAX14577 regulator IDs */
25*4882a593Smuzhiyun enum max14577_regulators {
26*4882a593Smuzhiyun 	MAX14577_SAFEOUT = 0,
27*4882a593Smuzhiyun 	MAX14577_CHARGER,
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun 	MAX14577_REGULATOR_NUM,
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /* MAX77836 regulator IDs */
33*4882a593Smuzhiyun enum max77836_regulators {
34*4882a593Smuzhiyun 	MAX77836_SAFEOUT = 0,
35*4882a593Smuzhiyun 	MAX77836_CHARGER,
36*4882a593Smuzhiyun 	MAX77836_LDO1,
37*4882a593Smuzhiyun 	MAX77836_LDO2,
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 	MAX77836_REGULATOR_NUM,
40*4882a593Smuzhiyun };
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun struct max14577_regulator_platform_data {
43*4882a593Smuzhiyun 	int id;
44*4882a593Smuzhiyun 	struct regulator_init_data *initdata;
45*4882a593Smuzhiyun 	struct device_node *of_node;
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun struct max14577_charger_platform_data {
49*4882a593Smuzhiyun 	u32 constant_uvolt;
50*4882a593Smuzhiyun 	u32 fast_charge_uamp;
51*4882a593Smuzhiyun 	u32 eoc_uamp;
52*4882a593Smuzhiyun 	u32 ovp_uvolt;
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun /*
56*4882a593Smuzhiyun  * MAX14577 MFD platform data
57*4882a593Smuzhiyun  */
58*4882a593Smuzhiyun struct max14577_platform_data {
59*4882a593Smuzhiyun 	/* IRQ */
60*4882a593Smuzhiyun 	int irq_base;
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	/* current control GPIOs */
63*4882a593Smuzhiyun 	int gpio_pogo_vbatt_en;
64*4882a593Smuzhiyun 	int gpio_pogo_vbus_en;
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun 	/* current control GPIO control function */
67*4882a593Smuzhiyun 	int (*set_gpio_pogo_vbatt_en) (int gpio_val);
68*4882a593Smuzhiyun 	int (*set_gpio_pogo_vbus_en) (int gpio_val);
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 	int (*set_gpio_pogo_cb) (int new_dev);
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun 	struct max14577_regulator_platform_data *regulators;
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /*
76*4882a593Smuzhiyun  * Valid limits of current for max14577 and max77836 chargers.
77*4882a593Smuzhiyun  * They must correspond to MBCICHWRCL and MBCICHWRCH fields in CHGCTRL4
78*4882a593Smuzhiyun  * register for given chipset.
79*4882a593Smuzhiyun  */
80*4882a593Smuzhiyun struct maxim_charger_current {
81*4882a593Smuzhiyun 	/* Minimal current, set in CHGCTRL4/MBCICHWRCL, uA */
82*4882a593Smuzhiyun 	unsigned int min;
83*4882a593Smuzhiyun 	/*
84*4882a593Smuzhiyun 	 * Minimal current when high setting is active,
85*4882a593Smuzhiyun 	 * set in CHGCTRL4/MBCICHWRCH, uA
86*4882a593Smuzhiyun 	 */
87*4882a593Smuzhiyun 	unsigned int high_start;
88*4882a593Smuzhiyun 	/* Value of one step in high setting, uA */
89*4882a593Smuzhiyun 	unsigned int high_step;
90*4882a593Smuzhiyun 	/* Maximum current of high setting, uA */
91*4882a593Smuzhiyun 	unsigned int max;
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun extern const struct maxim_charger_current maxim_charger_currents[];
95*4882a593Smuzhiyun extern int maxim_charger_calc_reg_current(const struct maxim_charger_current *limits,
96*4882a593Smuzhiyun 		unsigned int min_ua, unsigned int max_ua, u8 *dst);
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #endif /* __MAX14577_H__ */
99