1717 * MCP3204
1818 * MCP3208
1919 * ------------
20+ * 13 bit converter
21+ * MCP3301
2022 *
2123 * Datasheet can be found here:
2224 * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001
@@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index,
9698}
9799
98100static int mcp320x_adc_conversion (struct mcp320x * adc , u8 channel ,
99- bool differential , int device_index )
101+ bool differential , int device_index , int * val )
100102{
101103 int ret ;
102104
@@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
117119
118120 switch (device_index ) {
119121 case mcp3001 :
120- return (adc -> rx_buf [0 ] << 5 | adc -> rx_buf [1 ] >> 3 );
122+ * val = (adc -> rx_buf [0 ] << 5 | adc -> rx_buf [1 ] >> 3 );
123+ return 0 ;
121124 case mcp3002 :
122125 case mcp3004 :
123126 case mcp3008 :
124- return (adc -> rx_buf [0 ] << 2 | adc -> rx_buf [1 ] >> 6 );
127+ * val = (adc -> rx_buf [0 ] << 2 | adc -> rx_buf [1 ] >> 6 );
128+ return 0 ;
125129 case mcp3201 :
126- return (adc -> rx_buf [0 ] << 7 | adc -> rx_buf [1 ] >> 1 );
130+ * val = (adc -> rx_buf [0 ] << 7 | adc -> rx_buf [1 ] >> 1 );
131+ return 0 ;
127132 case mcp3202 :
128133 case mcp3204 :
129134 case mcp3208 :
130- return (adc -> rx_buf [0 ] << 4 | adc -> rx_buf [1 ] >> 4 );
135+ * val = (adc -> rx_buf [0 ] << 4 | adc -> rx_buf [1 ] >> 4 );
136+ return 0 ;
131137 case mcp3301 :
132- return sign_extend32 ((adc -> rx_buf [0 ] & 0x1f ) << 8 | adc -> rx_buf [1 ], 12 );
138+ * val = sign_extend32 ((adc -> rx_buf [0 ] & 0x1f ) << 8
139+ | adc -> rx_buf [1 ], 12 );
140+ return 0 ;
133141 default :
134142 return - EINVAL ;
135143 }
@@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev,
150158 switch (mask ) {
151159 case IIO_CHAN_INFO_RAW :
152160 ret = mcp320x_adc_conversion (adc , channel -> address ,
153- channel -> differential , device_index );
154-
161+ channel -> differential , device_index , val );
155162 if (ret < 0 )
156163 goto out ;
157164
158- * val = ret ;
159165 ret = IIO_VAL_INT ;
160166 break ;
161167
@@ -304,6 +310,7 @@ static int mcp320x_probe(struct spi_device *spi)
304310 indio_dev -> name = spi_get_device_id (spi )-> name ;
305311 indio_dev -> modes = INDIO_DIRECT_MODE ;
306312 indio_dev -> info = & mcp320x_info ;
313+ spi_set_drvdata (spi , indio_dev );
307314
308315 chip_info = & mcp320x_chip_infos [spi_get_device_id (spi )-> driver_data ];
309316 indio_dev -> channels = chip_info -> channels ;
0 commit comments