1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * lm3533.h -- LM3533 interface 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2011-2012 Texas Instruments 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: Johan Hovold <jhovold@gmail.com> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __LINUX_MFD_LM3533_H 11*4882a593Smuzhiyun #define __LINUX_MFD_LM3533_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define LM3533_ATTR_RO(_name) \ 14*4882a593Smuzhiyun DEVICE_ATTR(_name, S_IRUGO, show_##_name, NULL) 15*4882a593Smuzhiyun #define LM3533_ATTR_RW(_name) \ 16*4882a593Smuzhiyun DEVICE_ATTR(_name, S_IRUGO | S_IWUSR , show_##_name, store_##_name) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct device; 19*4882a593Smuzhiyun struct regmap; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun struct lm3533 { 22*4882a593Smuzhiyun struct device *dev; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct regmap *regmap; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun int gpio_hwen; 27*4882a593Smuzhiyun int irq; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun unsigned have_als:1; 30*4882a593Smuzhiyun unsigned have_backlights:1; 31*4882a593Smuzhiyun unsigned have_leds:1; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct lm3533_ctrlbank { 35*4882a593Smuzhiyun struct lm3533 *lm3533; 36*4882a593Smuzhiyun struct device *dev; 37*4882a593Smuzhiyun int id; 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct lm3533_als_platform_data { 41*4882a593Smuzhiyun unsigned pwm_mode:1; /* PWM input mode (default analog) */ 42*4882a593Smuzhiyun u8 r_select; /* 1 - 127 (ignored in PWM-mode) */ 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun struct lm3533_bl_platform_data { 46*4882a593Smuzhiyun char *name; 47*4882a593Smuzhiyun u16 max_current; /* 5000 - 29800 uA (800 uA step) */ 48*4882a593Smuzhiyun u8 default_brightness; /* 0 - 255 */ 49*4882a593Smuzhiyun u8 pwm; /* 0 - 0x3f */ 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct lm3533_led_platform_data { 53*4882a593Smuzhiyun char *name; 54*4882a593Smuzhiyun const char *default_trigger; 55*4882a593Smuzhiyun u16 max_current; /* 5000 - 29800 uA (800 uA step) */ 56*4882a593Smuzhiyun u8 pwm; /* 0 - 0x3f */ 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun enum lm3533_boost_freq { 60*4882a593Smuzhiyun LM3533_BOOST_FREQ_500KHZ, 61*4882a593Smuzhiyun LM3533_BOOST_FREQ_1000KHZ, 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun enum lm3533_boost_ovp { 65*4882a593Smuzhiyun LM3533_BOOST_OVP_16V, 66*4882a593Smuzhiyun LM3533_BOOST_OVP_24V, 67*4882a593Smuzhiyun LM3533_BOOST_OVP_32V, 68*4882a593Smuzhiyun LM3533_BOOST_OVP_40V, 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun struct lm3533_platform_data { 72*4882a593Smuzhiyun int gpio_hwen; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun enum lm3533_boost_ovp boost_ovp; 75*4882a593Smuzhiyun enum lm3533_boost_freq boost_freq; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun struct lm3533_als_platform_data *als; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun struct lm3533_bl_platform_data *backlights; 80*4882a593Smuzhiyun int num_backlights; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun struct lm3533_led_platform_data *leds; 83*4882a593Smuzhiyun int num_leds; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); 87*4882a593Smuzhiyun extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u8 val); 90*4882a593Smuzhiyun extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u8 *val); 91*4882a593Smuzhiyun extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, 92*4882a593Smuzhiyun u16 imax); 93*4882a593Smuzhiyun extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u8 val); 94*4882a593Smuzhiyun extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u8 *val); 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun extern int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val); 97*4882a593Smuzhiyun extern int lm3533_write(struct lm3533 *lm3533, u8 reg, u8 val); 98*4882a593Smuzhiyun extern int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 val, u8 mask); 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun #endif /* __LINUX_MFD_LM3533_H */ 101