1
2
3
4
5
6
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
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
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
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
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;
125 int en_pin;
126 bool is_enable;
127
128
129 int (*init)(struct aat2870_data *aat2870);
130 void (*uninit)(struct aat2870_data *aat2870);
131
132
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
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;
149
150 struct aat2870_subdev_info *subdevs;
151 int num_subdevs;
152
153
154 int (*init)(struct aat2870_data *aat2870);
155 void (*uninit)(struct aat2870_data *aat2870);
156 };
157
158 struct aat2870_bl_platform_data {
159
160 int channels;
161
162 int max_current;
163
164 int max_brightness;
165 };
166
167 #endif