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