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