1414#include <linux/spi/spi.h>
1515#include <linux/iio/iio.h>
1616#include <linux/of.h>
17+ #include <linux/regulator/consumer.h>
1718
1819/* MAX14001 registers definition */
1920#define MAX14001_REG_ADC 0x00
7576#define MAX14001_REG_WEN_WRITE_ENABLE 0x294
7677#define MAX14001_REG_WEN_WRITE_DISABLE 0x0
7778
79+ /* MAX14001 10-bit ADC */
80+ #define MAX14001_NUMBER_OF_DATA_BITS 10
81+ #define MAX14001_BIT_DIV (1 << 10)
82+
7883enum max14001_chip_model {
7984 max14001 ,
8085 max14002 ,
@@ -97,9 +102,51 @@ static struct max14001_chip_info max14001_chip_info_tbl[] = {
97102struct max14001_state {
98103 struct spi_device * spi ;
99104 const struct max14001_chip_info * chip_info ;
105+ int vref_mV ;
100106};
101107
102- static int max14001_spi_read (struct max14001_state * st , u16 reg , u16 * val )
108+ static int max14001_get_scale (struct max14001_state * st )
109+ {
110+ int scale ;
111+
112+ /* scale = range / 2^10 */
113+ scale = st -> vref_mV / MAX14001_BIT_DIV ;
114+ return scale ;
115+ }
116+ static int max14001_get_vref_mV (struct max14001_state * st )
117+ {
118+ struct device * dev = & st -> spi -> dev ;
119+ int ret = 0 ;
120+
121+ ret = devm_regulator_get_enable_read_voltage (dev , "vrefin" );
122+ if (ret < 0 ){
123+ st -> vref_mV = 1250000 / 1000 ;
124+ dev_info (& st -> spi -> dev , "%s: vrefin not found. vref_mV %d\n" , __func__ , st -> vref_mV );
125+ } else {
126+ st -> vref_mV = ret / 1000 ;
127+ dev_info (& st -> spi -> dev , "%s: vrefin found. vref_mV %d\n" , __func__ , st -> vref_mV );
128+ }
129+
130+ return ret ;
131+ }
132+
133+ static int max14001_init_required_regulators (struct max14001_state * st )
134+ {
135+ struct device * dev = & st -> spi -> dev ;
136+ int ret = 0 ;
137+
138+ ret = devm_regulator_get_enable (dev , "vdd" );
139+ if (ret )
140+ return dev_err_probe (dev , ret , "Failed to enable specified Vdd supply\n" );
141+
142+ ret = devm_regulator_get_enable (dev , "vddl" );
143+ if (ret )
144+ return dev_err_probe (dev , ret , "Failed to enable specified Vddl supply\n" );
145+
146+ return ret ;
147+ }
148+
149+ static int max14001_spi_read (struct max14001_state * st , u16 reg , int * val )
103150{
104151 u16 tx , rx , reversed ;
105152 int ret ;
@@ -116,7 +163,7 @@ static int max14001_spi_read(struct max14001_state *st, u16 reg, u16 *val)
116163
117164 /* TODO: Validate this line in the hw, could be le16_to_cpu */
118165 reversed = bitrev16 (be16_to_cpu (rx ));
119- * val = FIELD_GET (MAX14001_MASK_ADDR , reversed );
166+ * val = FIELD_GET (MAX14001_MASK_DATA , reversed );
120167
121168 return ret ;
122169}
@@ -154,17 +201,17 @@ static int max14001_spi_write_single_reg(struct max14001_state *st, u16 reg, u16
154201{
155202 int ret ;
156203
157- // Enable register write
204+ /* Enable register write */
158205 ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_ENABLE );
159206 if (ret < 0 )
160207 return ret ;
161208
162- // Write data into register
209+ /* Write data into register */
163210 ret = max14001_spi_write (st , reg , val );
164211 if (ret < 0 )
165212 return ret ;
166213
167- // Disable register write
214+ /* Disable register write */
168215 ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_DISABLE );
169216 if (ret < 0 )
170217 return ret ;
@@ -177,14 +224,30 @@ static int max14001_read_raw(struct iio_dev *indio_dev,
177224 int * val , int * val2 , long mask )
178225{
179226 struct max14001_state * st = iio_priv (indio_dev );
227+ int ret ;
180228
181229 switch (mask ) {
182230 case IIO_CHAN_INFO_RAW :
183- dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_RAW\n" , __func__ );
231+ ret = max14001_spi_read (st , MAX14001_REG_ADC , val );
232+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_RAW: channel: %d, val: %d\n" , __func__ , chan -> channel , val );
233+ if (ret < 0 )
234+ return ret ;
235+
184236 return IIO_VAL_INT ;
185- case IIO_CHAN_INFO_SCALE :
186- dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_SCALE\n" , __func__ );
237+ case IIO_CHAN_INFO_AVERAGE_RAW :
238+ ret = max14001_spi_read (st , MAX14001_REG_FADC , val );
239+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_AVERAGE_RAW: channel: %d, val: %d\n" , __func__ , chan -> channel , val );
240+ if (ret < 0 )
241+ return ret ;
242+
187243 return IIO_VAL_INT ;
244+ case IIO_CHAN_INFO_SCALE :
245+ ret = max14001_get_scale (st );
246+ * val = ret ;
247+ * val2 = MAX14001_NUMBER_OF_DATA_BITS ;
248+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_SCALE: val: %d, val2: %d\n" , __func__ , val , val2 );
249+
250+ return IIO_VAL_FRACTIONAL_LOG2 ;
188251 }
189252
190253 return - EINVAL ;
@@ -254,8 +317,6 @@ static int max14001_probe(struct spi_device *spi)
254317 indio_dev -> modes = INDIO_DIRECT_MODE ;
255318 indio_dev -> info = & max14001_info ;
256319
257- dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
258-
259320 for_each_available_child_of_node_scoped (spi -> dev .of_node , child ) {
260321 current_channel = of_property_read_bool (child , "current-channel" );
261322 if (current_channel )
@@ -270,6 +331,11 @@ static int max14001_probe(struct spi_device *spi)
270331 indio_dev -> num_channels = ARRAY_SIZE (max14001_channel_voltage );
271332 }
272333
334+ dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
335+
336+ max14001_init_required_regulators (st );
337+ max14001_get_vref_mV (st );
338+
273339 return devm_iio_device_register (& spi -> dev , indio_dev );
274340}
275341
0 commit comments