xref: /linux/include/linux/mfd/max14577.h (revision d7d8d7a2)
1*d7d8d7a2SKrzysztof Kozlowski /* SPDX-License-Identifier: GPL-2.0+ */
23008ddbeSChanwoo Choi /*
3aee2a57cSKrzysztof Kozlowski  * max14577.h - Driver for the Maxim 14577/77836
43008ddbeSChanwoo Choi  *
5aee2a57cSKrzysztof Kozlowski  * Copyright (C) 2014 Samsung Electrnoics
63008ddbeSChanwoo Choi  * Chanwoo Choi <cw00.choi@samsung.com>
78c5d0571SKrzysztof Kozlowski  * Krzysztof Kozlowski <krzk@kernel.org>
83008ddbeSChanwoo Choi  *
93008ddbeSChanwoo Choi  * This driver is based on max8997.h
103008ddbeSChanwoo Choi  *
113008ddbeSChanwoo Choi  * MAX14577 has MUIC, Charger devices.
123008ddbeSChanwoo Choi  * The devices share the same I2C bus and interrupt line
133008ddbeSChanwoo Choi  * included in this mfd driver.
14aee2a57cSKrzysztof Kozlowski  *
15aee2a57cSKrzysztof Kozlowski  * MAX77836 has additional PMIC and Fuel-Gauge on different I2C slave
16aee2a57cSKrzysztof Kozlowski  * addresses.
173008ddbeSChanwoo Choi  */
183008ddbeSChanwoo Choi 
193008ddbeSChanwoo Choi #ifndef __MAX14577_H__
203008ddbeSChanwoo Choi #define __MAX14577_H__
213008ddbeSChanwoo Choi 
223008ddbeSChanwoo Choi #include <linux/regulator/consumer.h>
233008ddbeSChanwoo Choi 
243008ddbeSChanwoo Choi /* MAX14577 regulator IDs */
253008ddbeSChanwoo Choi enum max14577_regulators {
263008ddbeSChanwoo Choi 	MAX14577_SAFEOUT = 0,
273008ddbeSChanwoo Choi 	MAX14577_CHARGER,
283008ddbeSChanwoo Choi 
298a82b408SKrzysztof Kozlowski 	MAX14577_REGULATOR_NUM,
308a82b408SKrzysztof Kozlowski };
318a82b408SKrzysztof Kozlowski 
328a82b408SKrzysztof Kozlowski /* MAX77836 regulator IDs */
338a82b408SKrzysztof Kozlowski enum max77836_regulators {
348a82b408SKrzysztof Kozlowski 	MAX77836_SAFEOUT = 0,
358a82b408SKrzysztof Kozlowski 	MAX77836_CHARGER,
368a82b408SKrzysztof Kozlowski 	MAX77836_LDO1,
378a82b408SKrzysztof Kozlowski 	MAX77836_LDO2,
388a82b408SKrzysztof Kozlowski 
398a82b408SKrzysztof Kozlowski 	MAX77836_REGULATOR_NUM,
403008ddbeSChanwoo Choi };
413008ddbeSChanwoo Choi 
423008ddbeSChanwoo Choi struct max14577_regulator_platform_data {
433008ddbeSChanwoo Choi 	int id;
443008ddbeSChanwoo Choi 	struct regulator_init_data *initdata;
453008ddbeSChanwoo Choi 	struct device_node *of_node;
463008ddbeSChanwoo Choi };
473008ddbeSChanwoo Choi 
48e30110e9SKrzysztof Kozlowski struct max14577_charger_platform_data {
49e30110e9SKrzysztof Kozlowski 	u32 constant_uvolt;
50e30110e9SKrzysztof Kozlowski 	u32 fast_charge_uamp;
51e30110e9SKrzysztof Kozlowski 	u32 eoc_uamp;
52e30110e9SKrzysztof Kozlowski 	u32 ovp_uvolt;
53e30110e9SKrzysztof Kozlowski };
54e30110e9SKrzysztof Kozlowski 
553008ddbeSChanwoo Choi /*
563008ddbeSChanwoo Choi  * MAX14577 MFD platform data
573008ddbeSChanwoo Choi  */
583008ddbeSChanwoo Choi struct max14577_platform_data {
593008ddbeSChanwoo Choi 	/* IRQ */
603008ddbeSChanwoo Choi 	int irq_base;
613008ddbeSChanwoo Choi 
623008ddbeSChanwoo Choi 	/* current control GPIOs */
633008ddbeSChanwoo Choi 	int gpio_pogo_vbatt_en;
643008ddbeSChanwoo Choi 	int gpio_pogo_vbus_en;
653008ddbeSChanwoo Choi 
663008ddbeSChanwoo Choi 	/* current control GPIO control function */
673008ddbeSChanwoo Choi 	int (*set_gpio_pogo_vbatt_en) (int gpio_val);
683008ddbeSChanwoo Choi 	int (*set_gpio_pogo_vbus_en) (int gpio_val);
693008ddbeSChanwoo Choi 
703008ddbeSChanwoo Choi 	int (*set_gpio_pogo_cb) (int new_dev);
713008ddbeSChanwoo Choi 
723008ddbeSChanwoo Choi 	struct max14577_regulator_platform_data *regulators;
733008ddbeSChanwoo Choi };
743008ddbeSChanwoo Choi 
75b8f139f6SKrzysztof Kozlowski /*
76b8f139f6SKrzysztof Kozlowski  * Valid limits of current for max14577 and max77836 chargers.
77b8f139f6SKrzysztof Kozlowski  * They must correspond to MBCICHWRCL and MBCICHWRCH fields in CHGCTRL4
78b8f139f6SKrzysztof Kozlowski  * register for given chipset.
79b8f139f6SKrzysztof Kozlowski  */
80b8f139f6SKrzysztof Kozlowski struct maxim_charger_current {
81b8f139f6SKrzysztof Kozlowski 	/* Minimal current, set in CHGCTRL4/MBCICHWRCL, uA */
82b8f139f6SKrzysztof Kozlowski 	unsigned int min;
83b8f139f6SKrzysztof Kozlowski 	/*
84b8f139f6SKrzysztof Kozlowski 	 * Minimal current when high setting is active,
85b8f139f6SKrzysztof Kozlowski 	 * set in CHGCTRL4/MBCICHWRCH, uA
86b8f139f6SKrzysztof Kozlowski 	 */
87b8f139f6SKrzysztof Kozlowski 	unsigned int high_start;
88b8f139f6SKrzysztof Kozlowski 	/* Value of one step in high setting, uA */
89b8f139f6SKrzysztof Kozlowski 	unsigned int high_step;
90b8f139f6SKrzysztof Kozlowski 	/* Maximum current of high setting, uA */
91b8f139f6SKrzysztof Kozlowski 	unsigned int max;
92b8f139f6SKrzysztof Kozlowski };
93b8f139f6SKrzysztof Kozlowski 
94b8f139f6SKrzysztof Kozlowski extern const struct maxim_charger_current maxim_charger_currents[];
95b8f139f6SKrzysztof Kozlowski extern int maxim_charger_calc_reg_current(const struct maxim_charger_current *limits,
96b8f139f6SKrzysztof Kozlowski 		unsigned int min_ua, unsigned int max_ua, u8 *dst);
97b8f139f6SKrzysztof Kozlowski 
983008ddbeSChanwoo Choi #endif /* __MAX14577_H__ */
99