1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * LED driver for TI lp3952 controller |
4 | * |
5 | * Copyright (C) 2016, DAQRI, LLC. |
6 | * Author: Tony Makkiel <tony.makkiel@daqri.com> |
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_ */ |
122 | |