Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
d966c943 TM |
2 | /* |
3 | * LED driver for TI lp3952 controller | |
4 | * | |
5 | * Copyright (C) 2016, DAQRI, LLC. | |
6 | * Author: Tony Makkiel <tony.makkiel@daqri.com> | |
d966c943 TM |
7 | */ |
8 | ||
9 | #ifndef LEDS_LP3952_H_ | |
10 | #define LEDS_LP3952_H_ | |
11 | ||
12 | #define LP3952_NAME "lp3952" | |
13 | #define LP3952_CMD_REG_COUNT 8 | |
14 | #define LP3952_BRIGHT_MAX 4 | |
15 | #define LP3952_LABEL_MAX_LEN 15 | |
16 | ||
17 | #define LP3952_REG_LED_CTRL 0x00 | |
18 | #define LP3952_REG_R1_BLNK_TIME_CTRL 0x01 | |
19 | #define LP3952_REG_R1_BLNK_CYCLE_CTRL 0x02 | |
20 | #define LP3952_REG_G1_BLNK_TIME_CTRL 0x03 | |
21 | #define LP3952_REG_G1_BLNK_CYCLE_CTRL 0x04 | |
22 | #define LP3952_REG_B1_BLNK_TIME_CTRL 0x05 | |
23 | #define LP3952_REG_B1_BLNK_CYCLE_CTRL 0x06 | |
24 | #define LP3952_REG_ENABLES 0x0B | |
25 | #define LP3952_REG_PAT_GEN_CTRL 0x11 | |
26 | #define LP3952_REG_RGB1_MAX_I_CTRL 0x12 | |
27 | #define LP3952_REG_RGB2_MAX_I_CTRL 0x13 | |
28 | #define LP3952_REG_CMD_0 0x50 | |
29 | #define LP3952_REG_RESET 0x60 | |
30 | #define REG_MAX LP3952_REG_RESET | |
31 | ||
32 | #define LP3952_PATRN_LOOP BIT(1) | |
33 | #define LP3952_PATRN_GEN_EN BIT(2) | |
34 | #define LP3952_INT_B00ST_LDR BIT(2) | |
35 | #define LP3952_ACTIVE_MODE BIT(6) | |
36 | #define LP3952_LED_MASK_ALL 0x3f | |
37 | ||
38 | /* Transition Time in ms */ | |
39 | enum lp3952_tt { | |
40 | TT0, | |
41 | TT55, | |
42 | TT110, | |
43 | TT221, | |
44 | TT422, | |
45 | TT885, | |
46 | TT1770, | |
47 | TT3539 | |
48 | }; | |
49 | ||
50 | /* Command Execution Time in ms */ | |
51 | enum lp3952_cet { | |
52 | CET197, | |
53 | CET393, | |
54 | CET590, | |
55 | CET786, | |
56 | CET1180, | |
57 | CET1376, | |
58 | CET1573, | |
59 | CET1769, | |
60 | CET1966, | |
61 | CET2163, | |
62 | CET2359, | |
63 | CET2556, | |
64 | CET2763, | |
65 | CET2949, | |
66 | CET3146 | |
67 | }; | |
68 | ||
69 | /* Max Current in % */ | |
70 | enum lp3952_colour_I_log_0 { | |
71 | I0, | |
72 | I7, | |
73 | I14, | |
74 | I21, | |
75 | I32, | |
76 | I46, | |
77 | I71, | |
78 | I100 | |
79 | }; | |
80 | ||
81 | enum lp3952_leds { | |
82 | LP3952_BLUE_2, | |
83 | LP3952_GREEN_2, | |
84 | LP3952_RED_2, | |
85 | LP3952_BLUE_1, | |
86 | LP3952_GREEN_1, | |
87 | LP3952_RED_1, | |
88 | LP3952_LED_ALL | |
89 | }; | |
90 | ||
91 | struct lp3952_ctrl_hdl { | |
92 | struct led_classdev cdev; | |
93 | char name[LP3952_LABEL_MAX_LEN]; | |
94 | enum lp3952_leds channel; | |
95 | void *priv; | |
96 | }; | |
97 | ||
98 | struct ptrn_gen_cmd { | |
99 | union { | |
100 | struct { | |
101 | u16 tt:3; | |
102 | u16 b:3; | |
103 | u16 cet:4; | |
104 | u16 g:3; | |
105 | u16 r:3; | |
106 | }; | |
107 | struct { | |
108 | u8 lsb; | |
109 | u8 msb; | |
110 | } bytes; | |
111 | }; | |
112 | } __packed; | |
113 | ||
114 | struct lp3952_led_array { | |
115 | struct regmap *regmap; | |
116 | struct i2c_client *client; | |
117 | struct gpio_desc *enable_gpio; | |
118 | struct lp3952_ctrl_hdl leds[LP3952_LED_ALL]; | |
119 | }; | |
120 | ||
121 | #endif /* LEDS_LP3952_H_ */ |