75
75
#define MAX14001_REG_WEN_WRITE_ENABLE 0x294
76
76
#define MAX14001_REG_WEN_WRITE_DISABLE 0x0
77
77
78
- enum max14001_chips {
78
+ enum max14001_chip_model {
79
79
max14001 ,
80
80
max14002 ,
81
81
};
82
82
83
+ struct max14001_chip_info {
84
+ const char * name ;
85
+ /* TODO: Add more information */
86
+ };
87
+
88
+ static struct max14001_chip_info max14001_chip_info_tbl [] = {
89
+ [max14001 ] = {
90
+ .name = "max14001" ,
91
+ },
92
+ [max14002 ] = {
93
+ .name = "max14002" ,
94
+ },
95
+ };
96
+
83
97
struct max14001_state {
84
98
struct spi_device * spi ;
99
+ const struct max14001_chip_info * chip_info ;
85
100
};
86
101
87
102
static int max14001_spi_read (struct max14001_state * st , u16 reg , u16 * val )
88
103
{
89
- u16 tx = 0 ;
90
- u16 rx = 0 ;
91
- u16 reversed = 0 ;
92
- int ret = 0 ;
104
+ u16 tx , rx , reversed ;
105
+ int ret ;
93
106
94
- pr_err ( "[Log Debug] max14001_spi_read : reg: %x, val: %x\n" , reg , * val );
107
+ dev_info ( & st -> spi -> dev , "%s : reg: %x, val: %x\n", __func__ , reg , * val );
95
108
96
109
tx |= FIELD_PREP (MAX14001_MASK_ADDR , reg );
97
110
tx |= FIELD_PREP (MAX14001_MASK_WR , MAX14001_REG_READ );
@@ -101,37 +114,34 @@ static int max14001_spi_read(struct max14001_state *st, u16 reg, u16 *val)
101
114
if (ret < 0 )
102
115
return ret ;
103
116
117
+ /* TODO: Validate this line in the hw, could be le16_to_cpu */
104
118
reversed = bitrev16 (be16_to_cpu (rx ));
105
- * val = MAX14001_MASK_ADDR & reversed ;
119
+ * val = FIELD_GET ( MAX14001_MASK_ADDR , reversed ) ;
106
120
107
121
return ret ;
108
122
}
109
123
110
124
static int max14001_spi_write (struct max14001_state * st , u16 reg , u16 val )
111
125
{
112
- u16 tx = 0 ;
126
+ struct spi_transfer xfer ;
127
+ int ret ;
128
+ u16 tx , reversed ;
113
129
u16 msg = 0 ;
114
- u16 reversed = 0 ;
115
- int ret = 0 ;
116
-
117
- pr_err ("[Log Debug] max14001_spi_write: reg: %x, val: %x\n" , reg , val );
118
130
119
- struct spi_transfer xfer = {
120
- .tx_buf = NULL ,
121
- .len = 0 ,
122
- };
131
+ dev_info (& st -> spi -> dev , "%s: reg: %x, val: %x\n" , __func__ , reg , val );
123
132
124
133
msg |= FIELD_PREP (MAX14001_MASK_ADDR , reg );
125
134
msg |= FIELD_PREP (MAX14001_MASK_WR , MAX14001_REG_WRITE );
126
135
msg |= FIELD_PREP (MAX14001_MASK_DATA , val );
127
136
128
137
reversed = bitrev16 (msg );
138
+ /* TODO: Validate this line in the hw, could be put_unaligned_le16 */
129
139
put_unaligned_be16 (reversed , & tx );
130
140
131
141
xfer .tx_buf = & tx ;
132
142
xfer .len = sizeof (tx );
133
143
134
- pr_err ( "[Log Debug] max14001_spi_write : msg: %x, tx: %x\n" , msg , tx );
144
+ dev_info ( & st -> spi -> dev , "%s : msg: %x, tx: %x\n", __func__ , msg , tx );
135
145
136
146
ret = spi_sync_transfer (st -> spi , & xfer , 1 );
137
147
if (ret < 0 )
@@ -140,6 +150,28 @@ static int max14001_spi_write(struct max14001_state *st, u16 reg, u16 val)
140
150
return ret ;
141
151
}
142
152
153
+ static int max14001_spi_write_single_reg (struct max14001_state * st , u16 reg , u16 val )
154
+ {
155
+ int ret ;
156
+
157
+ //Enable register write
158
+ ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_ENABLE );
159
+ if (ret < 0 )
160
+ return ret ;
161
+
162
+ //Write data into register
163
+ ret = max14001_spi_write (st , reg , val );
164
+ if (ret < 0 )
165
+ return ret ;
166
+
167
+ //Disable register write
168
+ ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_DISABLE );
169
+ if (ret < 0 )
170
+ return ret ;
171
+
172
+ return ret ;
173
+ }
174
+
143
175
static int max14001_read_raw (struct iio_dev * indio_dev ,
144
176
struct iio_chan_spec const * chan ,
145
177
int * val , int * val2 , long mask )
@@ -148,26 +180,25 @@ static int max14001_read_raw(struct iio_dev *indio_dev,
148
180
149
181
switch (mask ) {
150
182
case IIO_CHAN_INFO_RAW :
151
- pr_err ( "[Log Debug] max14001_read_raw : IIO_CHAN_INFO_RAW\n" );
183
+ dev_info ( & st -> spi -> dev , "%s : IIO_CHAN_INFO_RAW\n", __func__ );
152
184
return IIO_VAL_INT ;
153
185
case IIO_CHAN_INFO_SCALE :
154
- pr_err ( "[Log Debug] max14001_read_raw : IIO_CHAN_INFO_SCALE\n" );
186
+ dev_info ( & st -> spi -> dev , "%s : IIO_CHAN_INFO_SCALE\n", __func__ );
155
187
return IIO_VAL_INT ;
156
188
}
157
189
158
190
return - EINVAL ;
159
191
}
160
192
193
+ /* TODO: Check if this method is nedeed */
161
194
static int max14001_write_raw (struct iio_dev * indio_dev ,
162
195
struct iio_chan_spec const * chan ,
163
196
int val , int val2 , long mask )
164
197
{
165
198
struct max14001_state * st = iio_priv (indio_dev );
166
199
167
200
switch (mask ) {
168
- case IIO_CHAN_INFO_RAW :
169
- pr_err ("[Log Debug] max14001_write_raw: IIO_CHAN_INFO_RAW\n" );
170
- return 0 ;
201
+
171
202
}
172
203
173
204
return - EINVAL ;
@@ -183,7 +214,6 @@ static const struct iio_chan_spec max14001_channel_voltage[] = {
183
214
.type = IIO_VOLTAGE ,
184
215
.indexed = 1 ,
185
216
.channel = 0 ,
186
- .output = 0 ,
187
217
.info_mask_separate = BIT (IIO_CHAN_INFO_RAW ) |
188
218
BIT (IIO_CHAN_INFO_SCALE ),
189
219
}
@@ -194,32 +224,38 @@ static const struct iio_chan_spec max14001_channel_current[] = {
194
224
.type = IIO_CURRENT ,
195
225
.indexed = 1 ,
196
226
.channel = 0 ,
197
- .output = 0 ,
198
227
.info_mask_separate = BIT (IIO_CHAN_INFO_RAW ) |
199
228
BIT (IIO_CHAN_INFO_SCALE ),
200
229
}
201
230
};
202
231
203
232
static int max14001_probe (struct spi_device * spi )
204
233
{
205
- pr_err ( "[Log Debug] max14001_probe\n" ) ;
206
-
234
+ const struct max14001_chip_info * info ;
235
+ struct device * dev = & spi -> dev ;
207
236
struct max14001_state * st ;
208
237
struct iio_dev * indio_dev ;
209
238
bool current_channel = false;
210
239
int ret ;
211
240
241
+ info = spi_get_device_match_data (spi );
242
+ if (!dev )
243
+ return dev_err_probe (dev , - ENODEV , "Failed to get match data\n" );
244
+
212
245
indio_dev = devm_iio_device_alloc (& spi -> dev , sizeof (* st ));
213
246
if (!indio_dev )
214
247
return - ENOMEM ;
215
248
216
249
st = iio_priv (indio_dev );
217
250
st -> spi = spi ;
251
+ st -> chip_info = info ;
218
252
219
- indio_dev -> name = "max14001" ; //spi_get_device_id(spi) ->name;
253
+ indio_dev -> name = st -> chip_info -> name ;
220
254
indio_dev -> modes = INDIO_DIRECT_MODE ;
221
255
indio_dev -> info = & max14001_info ;
222
256
257
+ dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
258
+
223
259
for_each_available_child_of_node_scoped (spi -> dev .of_node , child ) {
224
260
current_channel = of_property_read_bool (child , "current-channel" );
225
261
if (current_channel )
@@ -234,21 +270,21 @@ static int max14001_probe(struct spi_device *spi)
234
270
indio_dev -> num_channels = ARRAY_SIZE (max14001_channel_voltage );
235
271
}
236
272
237
- //Enable register write
238
- max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_ENABLE );
239
273
return devm_iio_device_register (& spi -> dev , indio_dev );
240
274
}
241
275
242
276
static const struct spi_device_id max14001_id_table [] = {
243
- { "max14001" , max14001 },
244
- { "max14002" , max14002 },
277
+ { "max14001" , ( kernel_ulong_t ) & max14001_chip_info_tbl [ max14001 ] },
278
+ { "max14002" , ( kernel_ulong_t ) & max14001_chip_info_tbl [ max14002 ] },
245
279
{}
246
280
};
247
281
MODULE_DEVICE_TABLE (spi , max14001_id_table );
248
282
249
283
static const struct of_device_id max14001_of_match [] = {
250
- { .compatible = "adi,max14001" },
251
- { .compatible = "adi,max14002" },
284
+ { .compatible = "adi,max14001" ,
285
+ .data = & max14001_chip_info_tbl [max14001 ], },
286
+ { .compatible = "adi,max14002" ,
287
+ .data = & max14001_chip_info_tbl [max14002 ], },
252
288
{}
253
289
};
254
290
MODULE_DEVICE_TABLE (of , max14001_of_match );
@@ -265,4 +301,4 @@ module_spi_driver(max14001_driver);
265
301
266
302
MODULE_AUTHOR ("Marilene Andrade Garcia <marilene.agarcia@gmail.com>" );
267
303
MODULE_DESCRIPTION ("Analog Devices MAX14001/MAX14002 ADCs driver" );
268
- MODULE_LICENSE ("GPL v2" );
304
+ MODULE_LICENSE ("GPL v2" );
0 commit comments