12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 216c5c023SJohan Hovold /* 316c5c023SJohan Hovold * lm3533.h -- LM3533 interface 416c5c023SJohan Hovold * 516c5c023SJohan Hovold * Copyright (C) 2011-2012 Texas Instruments 616c5c023SJohan Hovold * 716c5c023SJohan Hovold * Author: Johan Hovold <jhovold@gmail.com> 816c5c023SJohan Hovold */ 916c5c023SJohan Hovold 1016c5c023SJohan Hovold #ifndef __LINUX_MFD_LM3533_H 1116c5c023SJohan Hovold #define __LINUX_MFD_LM3533_H 1216c5c023SJohan Hovold 1316c5c023SJohan Hovold #define LM3533_ATTR_RO(_name) \ 1416c5c023SJohan Hovold DEVICE_ATTR(_name, S_IRUGO, show_##_name, NULL) 1516c5c023SJohan Hovold #define LM3533_ATTR_RW(_name) \ 1616c5c023SJohan Hovold DEVICE_ATTR(_name, S_IRUGO | S_IWUSR , show_##_name, store_##_name) 1716c5c023SJohan Hovold 1816c5c023SJohan Hovold struct device; 1916c5c023SJohan Hovold struct regmap; 2016c5c023SJohan Hovold 2116c5c023SJohan Hovold struct lm3533 { 2216c5c023SJohan Hovold struct device *dev; 2316c5c023SJohan Hovold 2416c5c023SJohan Hovold struct regmap *regmap; 2516c5c023SJohan Hovold 2616c5c023SJohan Hovold int gpio_hwen; 2716c5c023SJohan Hovold int irq; 2816c5c023SJohan Hovold 2916c5c023SJohan Hovold unsigned have_als:1; 3016c5c023SJohan Hovold unsigned have_backlights:1; 3116c5c023SJohan Hovold unsigned have_leds:1; 3216c5c023SJohan Hovold }; 3316c5c023SJohan Hovold 3416c5c023SJohan Hovold struct lm3533_ctrlbank { 3516c5c023SJohan Hovold struct lm3533 *lm3533; 3616c5c023SJohan Hovold struct device *dev; 3716c5c023SJohan Hovold int id; 3816c5c023SJohan Hovold }; 3916c5c023SJohan Hovold 4016c5c023SJohan Hovold struct lm3533_als_platform_data { 4116c5c023SJohan Hovold unsigned pwm_mode:1; /* PWM input mode (default analog) */ 42730a3d01SJohan Hovold u8 r_select; /* 1 - 127 (ignored in PWM-mode) */ 4316c5c023SJohan Hovold }; 4416c5c023SJohan Hovold 4516c5c023SJohan Hovold struct lm3533_bl_platform_data { 4616c5c023SJohan Hovold char *name; 476fa4b9d8SJohan Hovold u16 max_current; /* 5000 - 29800 uA (800 uA step) */ 4816c5c023SJohan Hovold u8 default_brightness; /* 0 - 255 */ 4916c5c023SJohan Hovold u8 pwm; /* 0 - 0x3f */ 5016c5c023SJohan Hovold }; 5116c5c023SJohan Hovold 5216c5c023SJohan Hovold struct lm3533_led_platform_data { 5316c5c023SJohan Hovold char *name; 5416c5c023SJohan Hovold const char *default_trigger; 556fa4b9d8SJohan Hovold u16 max_current; /* 5000 - 29800 uA (800 uA step) */ 5616c5c023SJohan Hovold u8 pwm; /* 0 - 0x3f */ 5716c5c023SJohan Hovold }; 5816c5c023SJohan Hovold 59d9055dc5SJohan Hovold enum lm3533_boost_freq { 60d9055dc5SJohan Hovold LM3533_BOOST_FREQ_500KHZ, 61d9055dc5SJohan Hovold LM3533_BOOST_FREQ_1000KHZ, 62d9055dc5SJohan Hovold }; 63d9055dc5SJohan Hovold 64d9055dc5SJohan Hovold enum lm3533_boost_ovp { 65d9055dc5SJohan Hovold LM3533_BOOST_OVP_16V, 66d9055dc5SJohan Hovold LM3533_BOOST_OVP_24V, 67d9055dc5SJohan Hovold LM3533_BOOST_OVP_32V, 68d9055dc5SJohan Hovold LM3533_BOOST_OVP_40V, 69d9055dc5SJohan Hovold }; 70d9055dc5SJohan Hovold 7116c5c023SJohan Hovold struct lm3533_platform_data { 7216c5c023SJohan Hovold int gpio_hwen; 7316c5c023SJohan Hovold 74d9055dc5SJohan Hovold enum lm3533_boost_ovp boost_ovp; 75d9055dc5SJohan Hovold enum lm3533_boost_freq boost_freq; 76d9055dc5SJohan Hovold 7716c5c023SJohan Hovold struct lm3533_als_platform_data *als; 7816c5c023SJohan Hovold 7916c5c023SJohan Hovold struct lm3533_bl_platform_data *backlights; 8016c5c023SJohan Hovold int num_backlights; 8116c5c023SJohan Hovold 8216c5c023SJohan Hovold struct lm3533_led_platform_data *leds; 8316c5c023SJohan Hovold int num_leds; 8416c5c023SJohan Hovold }; 8516c5c023SJohan Hovold 8616c5c023SJohan Hovold extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); 8716c5c023SJohan Hovold extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); 8816c5c023SJohan Hovold 8916c5c023SJohan Hovold extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u8 val); 9016c5c023SJohan Hovold extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u8 *val); 916fa4b9d8SJohan Hovold extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, 926fa4b9d8SJohan Hovold u16 imax); 9316c5c023SJohan Hovold extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u8 val); 9416c5c023SJohan Hovold extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u8 *val); 9516c5c023SJohan Hovold 9616c5c023SJohan Hovold extern int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val); 9716c5c023SJohan Hovold extern int lm3533_write(struct lm3533 *lm3533, u8 reg, u8 val); 9816c5c023SJohan Hovold extern int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 val, u8 mask); 9916c5c023SJohan Hovold 10016c5c023SJohan Hovold #endif /* __LINUX_MFD_LM3533_H */ 101