| /* 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_ */ |