xref: /openbmc/linux/include/linux/leds-lp3952.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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