Merge tag 'ieee802154-for-davem-2019-11-13' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / include / linux / leds-lp3952.h
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_ */