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