/* SPDX-License-Identifier: GPL-2.0-only */ /* * LED driver for TI lp3952 controller * * Copyright (C) 2016, DAQRI, LLC. * Author: Tony Makkiel <tony.makkiel@daqri.com> */ #ifndef LEDS_LP3952_H_ #define LEDS_LP3952_H_ #define LP3952_NAME "lp3952" #define LP3952_CMD_REG_COUNT 8 #define LP3952_BRIGHT_MAX 4 #define LP3952_LABEL_MAX_LEN 15 #define LP3952_REG_LED_CTRL 0x00 #define LP3952_REG_R1_BLNK_TIME_CTRL 0x01 #define LP3952_REG_R1_BLNK_CYCLE_CTRL 0x02 #define LP3952_REG_G1_BLNK_TIME_CTRL 0x03 #define LP3952_REG_G1_BLNK_CYCLE_CTRL 0x04 #define LP3952_REG_B1_BLNK_TIME_CTRL 0x05 #define LP3952_REG_B1_BLNK_CYCLE_CTRL 0x06 #define LP3952_REG_ENABLES 0x0B #define LP3952_REG_PAT_GEN_CTRL 0x11 #define LP3952_REG_RGB1_MAX_I_CTRL 0x12 #define LP3952_REG_RGB2_MAX_I_CTRL 0x13 #define LP3952_REG_CMD_0 0x50 #define LP3952_REG_RESET 0x60 #define REG_MAX LP3952_REG_RESET #define LP3952_PATRN_LOOP BIT(1) #define LP3952_PATRN_GEN_EN BIT(2) #define LP3952_INT_B00ST_LDR BIT(2) #define LP3952_ACTIVE_MODE BIT(6) #define LP3952_LED_MASK_ALL 0x3f /* Transition Time in ms */ enum lp3952_tt { TT0, TT55, TT110, TT221, TT422, TT885, TT1770, TT3539 }; /* Command Execution Time in ms */ enum lp3952_cet { CET197, CET393, CET590, CET786, CET1180, CET1376, CET1573, CET1769, CET1966, CET2163, CET2359, CET2556, CET2763, CET2949, CET3146 }; /* Max Current in % */ enum lp3952_colour_I_log_0 { I0, I7, I14, I21, I32, I46, I71, I100 }; enum lp3952_leds { LP3952_BLUE_2, LP3952_GREEN_2, LP3952_RED_2, LP3952_BLUE_1, LP3952_GREEN_1, LP3952_RED_1, LP3952_LED_ALL }; struct lp3952_ctrl_hdl { struct led_classdev cdev; char name[LP3952_LABEL_MAX_LEN]; enum lp3952_leds channel; void *priv; }; struct ptrn_gen_cmd { union { struct { u16 tt:3; u16 b:3; u16 cet:4; u16 g:3; u16 r:3; }; struct { u8 lsb; u8 msb; } bytes; }; } __packed; struct lp3952_led_array { struct regmap *regmap; struct i2c_client *client; struct gpio_desc *enable_gpio; struct lp3952_ctrl_hdl leds[LP3952_LED_ALL]; }; #endif /* LEDS_LP3952_H_ */