1eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
2eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * TI LP8788 MFD Device
3eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
4eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * Copyright 2012 Texas Instruments
5eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
6eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
7eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
8eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * This program is free software; you can redistribute it and/or modify
9eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * it under the terms of the GNU General Public License version 2 as
10eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * published by the Free Software Foundation.
11eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
12eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
13eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
14eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#ifndef __MFD_LP8788_H__
15eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define __MFD_LP8788_H__
16eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
17eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#include <linux/gpio.h>
18eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#include <linux/irqdomain.h>
19c5a51053cf3b499ddba60a89ab067ea05ad15840Kim, Milo#include <linux/pwm.h>
20eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#include <linux/regmap.h>
21eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
22eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_BUCK		"lp8788-buck"
23eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_DLDO		"lp8788-dldo"
24eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_ALDO		"lp8788-aldo"
25eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_CHARGER	"lp8788-charger"
26eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_RTC		"lp8788-rtc"
27eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_BACKLIGHT	"lp8788-backlight"
28eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_VIBRATOR	"lp8788-vibrator"
29eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_KEYLED	"lp8788-keyled"
30eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_DEV_ADC		"lp8788-adc"
31eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
32eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_NUM_BUCKS	4
33eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_NUM_DLDOS	12
34eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_NUM_ALDOS	10
35eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_NUM_BUCK2_DVS	2
36eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
37eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_CHG_IRQ		"CHG_IRQ"
38eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_PRSW_IRQ		"PRSW_IRQ"
39eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_BATT_IRQ		"BATT_IRQ"
40eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#define LP8788_ALM_IRQ		"ALARM_IRQ"
41eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
42eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_int_id {
43eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* interrup register 1 : Addr 00h */
44eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_TSDL,
45eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_TSDH,
46eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_UVLO,
47eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_FLAGMON,
48eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_PWRON_TIME,
49eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_PWRON,
50eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_COMP1,
51eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_COMP2,
52eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
53eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* interrupt register 2 : Addr 01h */
54eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_CHG_INPUT_STATE,
55eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_CHG_STATE,
56eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_EOC,
57eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_CHG_RESTART,
58eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_RESTART_TIMEOUT,
59eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_FULLCHG_TIMEOUT,
60eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_PRECHG_TIMEOUT,
61eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
62eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* interrupt register 3 : Addr 02h */
63eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_RTC_ALARM1 = 17,
64eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_RTC_ALARM2,
65eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_ENTER_SYS_SUPPORT,
66eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_EXIT_SYS_SUPPORT,
67eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_BATT_LOW,
68eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_NO_BATT,
69eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
70eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_INT_MAX = 24,
71eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
72eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
73eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_dvs_sel {
74eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	DVS_SEL_V0,
75eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	DVS_SEL_V1,
76eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	DVS_SEL_V2,
77eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	DVS_SEL_V3,
78eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
79eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
80eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_ext_ldo_en_id {
81eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_ALDO1,
82eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_ALDO234,
83eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_ALDO5,
84eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_ALDO7,
85eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_DLDO7,
86eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_DLDO911,
87eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	EN_LDOS_MAX,
88eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
89eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
90eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_charger_event {
91eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	NO_CHARGER,
92eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	CHARGER_DETECTED,
93eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
94eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
95eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_bl_ctrl_mode {
96eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_BL_REGISTER_ONLY,
97eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_BL_COMB_PWM_BASED,	/* PWM + I2C, changed by PWM input */
98eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_BL_COMB_REGISTER_BASED,	/* PWM + I2C, changed by I2C */
99eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
100eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
101eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_bl_dim_mode {
102eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_DIM_EXPONENTIAL,
103eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_DIM_LINEAR,
104eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
105eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
106eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_bl_full_scale_current {
107eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_5000uA,
108eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_8500uA,
109eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_1200uA,
110eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_1550uA,
111eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_1900uA,
112eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_2250uA,
113eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_2600uA,
114eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_FULLSCALE_2950uA,
115eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
116eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
117eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_bl_ramp_step {
118eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_8us,
119eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_1024us,
120eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_2048us,
121eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_4096us,
122eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_8192us,
123eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_16384us,
124eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_32768us,
125eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_RAMP_65538us,
126eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
127eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
128eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_isink_scale {
129eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ISINK_SCALE_100mA,
130eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ISINK_SCALE_120mA,
131eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
132eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
133eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_isink_number {
134eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ISINK_1,
135eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ISINK_2,
136eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ISINK_3,
137eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
138eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
139eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_alarm_sel {
140eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ALARM_1,
141eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ALARM_2,
142eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LP8788_ALARM_MAX,
143eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
144eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
145eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimenum lp8788_adc_id {
146eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VBATT_5P5,
147eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VIN_CHG,
148eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_IBATT,
149eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_IC_TEMP,
150eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VBATT_6P0,
151eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VBATT_5P0,
152eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_ADC1,
153eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_ADC2,
154eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VDD,
155eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VCOIN,
156eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_VDD_LDO,
157eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_ADC3,
158eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_ADC4,
159eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	LPADC_MAX,
160eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
161eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
162eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788;
163eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
164eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
165eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * lp8788_buck1_dvs
166eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @gpio         : gpio pin number for dvs control
167eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @vsel         : dvs selector for buck v1 register
168eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
169eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_buck1_dvs {
170eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int gpio;
171eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_dvs_sel vsel;
172eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
173eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
174eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
175eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * lp8788_buck2_dvs
176eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @gpio         : two gpio pin numbers are used for dvs
177eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @vsel         : dvs selector for buck v2 register
178eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
179eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_buck2_dvs {
180eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int gpio[LP8788_NUM_BUCK2_DVS];
181eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_dvs_sel vsel;
182eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
183eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
184eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
185eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_ldo_enable_pin
186eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
187eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *   Basically, all LDOs are enabled through the I2C commands.
188eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *   But ALDO 1 ~ 5, 7, DLDO 7, 9, 11 can be enabled by external gpio pins.
189eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *
190eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @gpio         : gpio number which is used for enabling ldos
191eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @init_state   : initial gpio state (ex. GPIOF_OUT_INIT_LOW)
192eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
193eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_ldo_enable_pin {
194eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int gpio;
195eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int init_state;
196eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
197eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
198eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
199eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_chg_param
200eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @addr         : charging control register address (range : 0x11 ~ 0x1C)
201eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @val          : charging parameter value
202eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
203eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_chg_param {
204eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	u8 addr;
205eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	u8 val;
206eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
207eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
208eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
209eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_charger_platform_data
21008d816b8cb09de1fd8268c8f1dbc97c3cc435d67Kim, Milo * @adc_vbatt         : adc channel name for battery voltage
21108d816b8cb09de1fd8268c8f1dbc97c3cc435d67Kim, Milo * @adc_batt_temp     : adc channel name for battery temperature
212eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @max_vbatt_mv      : used for calculating battery capacity
213eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @chg_params        : initial charging parameters
214eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @num_chg_params    : numbers of charging parameters
215eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @charger_event     : the charger event can be reported to the platform side
216eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
217eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_charger_platform_data {
21808d816b8cb09de1fd8268c8f1dbc97c3cc435d67Kim, Milo	const char *adc_vbatt;
21908d816b8cb09de1fd8268c8f1dbc97c3cc435d67Kim, Milo	const char *adc_batt_temp;
220eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	unsigned int max_vbatt_mv;
221eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_chg_param *chg_params;
222eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int num_chg_params;
223eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	void (*charger_event) (struct lp8788 *lp,
224eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim				enum lp8788_charger_event event);
225eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
226eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
227eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
228eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_backlight_platform_data
229eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @name                  : backlight driver name. (default: "lcd-backlight")
230eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @initial_brightness    : initial value of backlight brightness
231eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @bl_mode               : brightness control by pwm or lp8788 register
232eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @dim_mode              : dimming mode selection
233eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @full_scale            : full scale current setting
234eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @rise_time             : brightness ramp up step time
235eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @fall_time             : brightness ramp down step time
236eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @pwm_pol               : pwm polarity setting when bl_mode is pwm based
237c5a51053cf3b499ddba60a89ab067ea05ad15840Kim, Milo * @period_ns             : platform specific pwm period value. unit is nano.
238c5a51053cf3b499ddba60a89ab067ea05ad15840Kim, Milo			    Only valid when bl_mode is LP8788_BL_COMB_PWM_BASED
239eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
240eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_backlight_platform_data {
241eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	char *name;
242eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int initial_brightness;
243eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_bl_ctrl_mode bl_mode;
244eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_bl_dim_mode dim_mode;
245eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_bl_full_scale_current full_scale;
246eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_bl_ramp_step rise_time;
247eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_bl_ramp_step fall_time;
248c5a51053cf3b499ddba60a89ab067ea05ad15840Kim, Milo	enum pwm_polarity pwm_pol;
249c5a51053cf3b499ddba60a89ab067ea05ad15840Kim, Milo	unsigned int period_ns;
250eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
251eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
252eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
253eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_led_platform_data
254eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @name         : led driver name. (default: "keyboard-backlight")
255eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @scale        : current scale
256eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @num          : current sink number
257eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @iout_code    : current output value (Addr 9Ah ~ 9Bh)
258eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
259eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_led_platform_data {
260eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	char *name;
261eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_isink_scale scale;
262eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_isink_number num;
263eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int iout_code;
264eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
265eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
266eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
267eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_vib_platform_data
268eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @name         : vibrator driver name
269eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @scale        : current scale
270eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @num          : current sink number
271eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @iout_code    : current output value (Addr 9Ah ~ 9Bh)
272eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @pwm_code     : PWM code value (Addr 9Ch ~ 9Eh)
273eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
274eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_vib_platform_data {
275eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	char *name;
276eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_isink_scale scale;
277eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_isink_number num;
278eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int iout_code;
279eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int pwm_code;
280eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
281eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
282eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
283eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788_platform_data
284eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @init_func    : used for initializing registers
285eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim *                 before mfd driver is registered
286eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @buck_data    : regulator initial data for buck
287eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @dldo_data    : regulator initial data for digital ldo
288eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @aldo_data    : regulator initial data for analog ldo
289eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @buck1_dvs    : gpio configurations for buck1 dvs
290eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @buck2_dvs    : gpio configurations for buck2 dvs
291eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @ldo_pin      : gpio configurations for enabling LDOs
292eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @chg_pdata    : platform data for charger driver
293eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @alarm_sel    : rtc alarm selection (1 or 2)
294eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @bl_pdata     : configurable data for backlight driver
295eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @led_pdata    : configurable data for led driver
296eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @vib_pdata    : configurable data for vibrator driver
297eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @adc_pdata    : iio map data for adc driver
298eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
299eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788_platform_data {
300eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* general system information */
301eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int (*init_func) (struct lp8788 *lp);
302eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
303eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* regulators */
304eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct regulator_init_data *buck_data[LP8788_NUM_BUCKS];
305eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct regulator_init_data *dldo_data[LP8788_NUM_DLDOS];
306eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct regulator_init_data *aldo_data[LP8788_NUM_ALDOS];
307eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_buck1_dvs *buck1_dvs;
308eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_buck2_dvs *buck2_dvs;
309eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_ldo_enable_pin *ldo_pin[EN_LDOS_MAX];
310eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
311eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* charger */
312eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_charger_platform_data *chg_pdata;
313eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
314eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* rtc alarm */
315eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	enum lp8788_alarm_sel alarm_sel;
316eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
317eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* backlight */
318eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_backlight_platform_data *bl_pdata;
319eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
320eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* current sinks */
321eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_led_platform_data *led_pdata;
322eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_vib_platform_data *vib_pdata;
323eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
324eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	/* adc iio map data */
325eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct iio_map *adc_pdata;
326eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
327eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
328eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim/*
329eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * struct lp8788
330eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @dev          : parent device pointer
331eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @regmap       : used for i2c communcation on accessing registers
332eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @irqdm        : interrupt domain for handling nested interrupt
333eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @irq          : pin number of IRQ_N
334eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim * @pdata        : lp8788 platform specific data
335eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim */
336eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimstruct lp8788 {
337eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct device *dev;
338eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct regmap *regmap;
339eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct irq_domain *irqdm;
340eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	int irq;
341eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim	struct lp8788_platform_data *pdata;
342eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim};
343eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim
344eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimint lp8788_irq_init(struct lp8788 *lp, int chip_irq);
345eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimvoid lp8788_irq_exit(struct lp8788 *lp);
346eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimint lp8788_read_byte(struct lp8788 *lp, u8 reg, u8 *data);
347eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimint lp8788_read_multi_bytes(struct lp8788 *lp, u8 reg, u8 *data, size_t count);
348eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimint lp8788_write_byte(struct lp8788 *lp, u8 reg, u8 data);
349eea6b7cc53aaecf868e1643058159807c744e04eMilo Kimint lp8788_update_bits(struct lp8788 *lp, u8 reg, u8 mask, u8 data);
350eea6b7cc53aaecf868e1643058159807c744e04eMilo Kim#endif
351