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