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