1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * linux/include/linux/mfd/aat2870.h |
4 | * |
5 | * Copyright (c) 2011, NVIDIA Corporation. |
6 | * Author: Jin Park <jinyoungp@nvidia.com> |
7 | */ |
8 | |
9 | #ifndef __LINUX_MFD_AAT2870_H |
10 | #define __LINUX_MFD_AAT2870_H |
11 | |
12 | #include <linux/debugfs.h> |
13 | #include <linux/i2c.h> |
14 | |
15 | /* Register offsets */ |
16 | #define AAT2870_BL_CH_EN 0x00 |
17 | #define AAT2870_BLM 0x01 |
18 | #define AAT2870_BLS 0x02 |
19 | #define AAT2870_BL1 0x03 |
20 | #define AAT2870_BL2 0x04 |
21 | #define AAT2870_BL3 0x05 |
22 | #define AAT2870_BL4 0x06 |
23 | #define AAT2870_BL5 0x07 |
24 | #define AAT2870_BL6 0x08 |
25 | #define AAT2870_BL7 0x09 |
26 | #define AAT2870_BL8 0x0A |
27 | #define AAT2870_FLR 0x0B |
28 | #define AAT2870_FM 0x0C |
29 | #define AAT2870_FS 0x0D |
30 | #define AAT2870_ALS_CFG0 0x0E |
31 | #define AAT2870_ALS_CFG1 0x0F |
32 | #define AAT2870_ALS_CFG2 0x10 |
33 | #define AAT2870_AMB 0x11 |
34 | #define AAT2870_ALS0 0x12 |
35 | #define AAT2870_ALS1 0x13 |
36 | #define AAT2870_ALS2 0x14 |
37 | #define AAT2870_ALS3 0x15 |
38 | #define AAT2870_ALS4 0x16 |
39 | #define AAT2870_ALS5 0x17 |
40 | #define AAT2870_ALS6 0x18 |
41 | #define AAT2870_ALS7 0x19 |
42 | #define AAT2870_ALS8 0x1A |
43 | #define AAT2870_ALS9 0x1B |
44 | #define AAT2870_ALSA 0x1C |
45 | #define AAT2870_ALSB 0x1D |
46 | #define AAT2870_ALSC 0x1E |
47 | #define AAT2870_ALSD 0x1F |
48 | #define AAT2870_ALSE 0x20 |
49 | #define AAT2870_ALSF 0x21 |
50 | #define AAT2870_SUB_SET 0x22 |
51 | #define AAT2870_SUB_CTRL 0x23 |
52 | #define AAT2870_LDO_AB 0x24 |
53 | #define AAT2870_LDO_CD 0x25 |
54 | #define AAT2870_LDO_EN 0x26 |
55 | #define AAT2870_REG_NUM 0x27 |
56 | |
57 | /* Device IDs */ |
58 | enum aat2870_id { |
59 | AAT2870_ID_BL, |
60 | AAT2870_ID_LDOA, |
61 | AAT2870_ID_LDOB, |
62 | AAT2870_ID_LDOC, |
63 | AAT2870_ID_LDOD |
64 | }; |
65 | |
66 | /* Backlight channels */ |
67 | #define AAT2870_BL_CH1 0x01 |
68 | #define AAT2870_BL_CH2 0x02 |
69 | #define AAT2870_BL_CH3 0x04 |
70 | #define AAT2870_BL_CH4 0x08 |
71 | #define AAT2870_BL_CH5 0x10 |
72 | #define AAT2870_BL_CH6 0x20 |
73 | #define AAT2870_BL_CH7 0x40 |
74 | #define AAT2870_BL_CH8 0x80 |
75 | #define AAT2870_BL_CH_ALL 0xFF |
76 | |
77 | /* Backlight current magnitude (mA) */ |
78 | enum aat2870_current { |
79 | AAT2870_CURRENT_0_45 = 1, |
80 | AAT2870_CURRENT_0_90, |
81 | AAT2870_CURRENT_1_80, |
82 | AAT2870_CURRENT_2_70, |
83 | AAT2870_CURRENT_3_60, |
84 | AAT2870_CURRENT_4_50, |
85 | AAT2870_CURRENT_5_40, |
86 | AAT2870_CURRENT_6_30, |
87 | AAT2870_CURRENT_7_20, |
88 | AAT2870_CURRENT_8_10, |
89 | AAT2870_CURRENT_9_00, |
90 | AAT2870_CURRENT_9_90, |
91 | AAT2870_CURRENT_10_8, |
92 | AAT2870_CURRENT_11_7, |
93 | AAT2870_CURRENT_12_6, |
94 | AAT2870_CURRENT_13_5, |
95 | AAT2870_CURRENT_14_4, |
96 | AAT2870_CURRENT_15_3, |
97 | AAT2870_CURRENT_16_2, |
98 | AAT2870_CURRENT_17_1, |
99 | AAT2870_CURRENT_18_0, |
100 | AAT2870_CURRENT_18_9, |
101 | AAT2870_CURRENT_19_8, |
102 | AAT2870_CURRENT_20_7, |
103 | AAT2870_CURRENT_21_6, |
104 | AAT2870_CURRENT_22_5, |
105 | AAT2870_CURRENT_23_4, |
106 | AAT2870_CURRENT_24_3, |
107 | AAT2870_CURRENT_25_2, |
108 | AAT2870_CURRENT_26_1, |
109 | AAT2870_CURRENT_27_0, |
110 | AAT2870_CURRENT_27_9 |
111 | }; |
112 | |
113 | struct aat2870_register { |
114 | bool readable; |
115 | bool writeable; |
116 | u8 value; |
117 | }; |
118 | |
119 | struct aat2870_data { |
120 | struct device *dev; |
121 | struct i2c_client *client; |
122 | |
123 | struct mutex io_lock; |
124 | struct aat2870_register *reg_cache; /* register cache */ |
125 | int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ |
126 | bool is_enable; |
127 | |
128 | /* init and uninit for platform specified */ |
129 | int (*init)(struct aat2870_data *aat2870); |
130 | void (*uninit)(struct aat2870_data *aat2870); |
131 | |
132 | /* i2c io funcntions */ |
133 | int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val); |
134 | int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val); |
135 | int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val); |
136 | |
137 | /* for debugfs */ |
138 | struct dentry *dentry_root; |
139 | }; |
140 | |
141 | struct aat2870_subdev_info { |
142 | int id; |
143 | const char *name; |
144 | void *platform_data; |
145 | }; |
146 | |
147 | struct aat2870_platform_data { |
148 | int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ |
149 | |
150 | struct aat2870_subdev_info *subdevs; |
151 | int num_subdevs; |
152 | |
153 | /* init and uninit for platform specified */ |
154 | int (*init)(struct aat2870_data *aat2870); |
155 | void (*uninit)(struct aat2870_data *aat2870); |
156 | }; |
157 | |
158 | struct aat2870_bl_platform_data { |
159 | /* backlight channels, default is AAT2870_BL_CH_ALL */ |
160 | int channels; |
161 | /* backlight current magnitude, default is AAT2870_CURRENT_27_9 */ |
162 | int max_current; |
163 | /* maximum brightness, default is 255 */ |
164 | int max_brightness; |
165 | }; |
166 | |
167 | #endif /* __LINUX_MFD_AAT2870_H */ |
168 | |