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 */
39enum 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 */
51enum 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 % */
70enum lp3952_colour_I_log_0 {
71	I0,
72	I7,
73	I14,
74	I21,
75	I32,
76	I46,
77	I71,
78	I100
79};
80
81enum 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
91struct 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
98struct 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
114struct 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