25
25
* http://ww1.microchip.com/downloads/en/DeviceDoc/21290D.pdf mcp3201
26
26
* http://ww1.microchip.com/downloads/en/DeviceDoc/21034D.pdf mcp3202
27
27
* http://ww1.microchip.com/downloads/en/DeviceDoc/21298c.pdf mcp3204/08
28
+ * http://ww1.microchip.com/downloads/en/DeviceDoc/21700E.pdf mcp3301
28
29
*
29
30
* This program is free software; you can redistribute it and/or modify
30
31
* it under the terms of the GNU General Public License version 2 as
47
48
mcp3202 ,
48
49
mcp3204 ,
49
50
mcp3208 ,
51
+ mcp3301 ,
50
52
};
51
53
52
54
struct mcp320x_chip_info {
@@ -76,6 +78,7 @@ static int mcp320x_channel_to_tx_data(int device_index,
76
78
switch (device_index ) {
77
79
case mcp3001 :
78
80
case mcp3201 :
81
+ case mcp3301 :
79
82
return 0 ;
80
83
case mcp3002 :
81
84
case mcp3202 :
@@ -102,7 +105,7 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
102
105
adc -> tx_buf = mcp320x_channel_to_tx_data (device_index ,
103
106
channel , differential );
104
107
105
- if (device_index != mcp3001 && device_index != mcp3201 ) {
108
+ if (device_index != mcp3001 && device_index != mcp3201 && device_index != mcp3301 ) {
106
109
ret = spi_sync (adc -> spi , & adc -> msg );
107
110
if (ret < 0 )
108
111
return ret ;
@@ -125,6 +128,8 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
125
128
case mcp3204 :
126
129
case mcp3208 :
127
130
return (adc -> rx_buf [0 ] << 4 | adc -> rx_buf [1 ] >> 4 );
131
+ case mcp3301 :
132
+ return sign_extend32 ((adc -> rx_buf [0 ] & 0x1f ) << 8 | adc -> rx_buf [1 ], 12 );
128
133
default :
129
134
return - EINVAL ;
130
135
}
@@ -274,6 +279,11 @@ static const struct mcp320x_chip_info mcp320x_chip_infos[] = {
274
279
.num_channels = ARRAY_SIZE (mcp3208_channels ),
275
280
.resolution = 12
276
281
},
282
+ [mcp3301 ] = {
283
+ .channels = mcp3201_channels ,
284
+ .num_channels = ARRAY_SIZE (mcp3201_channels ),
285
+ .resolution = 13
286
+ },
277
287
};
278
288
279
289
static int mcp320x_probe (struct spi_device * spi )
@@ -366,6 +376,9 @@ static const struct of_device_id mcp320x_dt_ids[] = {
366
376
}, {
367
377
.compatible = "mcp3208" ,
368
378
.data = & mcp320x_chip_infos [mcp3208 ],
379
+ }, {
380
+ .compatible = "mcp3301" ,
381
+ .data = & mcp320x_chip_infos [mcp3301 ],
369
382
}, {
370
383
}
371
384
};
@@ -381,6 +394,7 @@ static const struct spi_device_id mcp320x_id[] = {
381
394
{ "mcp3202" , mcp3202 },
382
395
{ "mcp3204" , mcp3204 },
383
396
{ "mcp3208" , mcp3208 },
397
+ { "mcp3301" , mcp3301 },
384
398
{ }
385
399
};
386
400
MODULE_DEVICE_TABLE (spi , mcp320x_id );
0 commit comments