Skip to content

Commit 4379a3c

Browse files
justephnunojsa
authored andcommitted
iio: adc: ad7380: add missing supplies
vcc and vlogic are required but are not retrieved and enabled in the probe. Add them. In order to prepare support for additional parts requiring different supplies, add vcc and vlogic to the platform specific structures Reviewed-by: Nuno Sa <nuno.sa@analog.com> Reviewed-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> Link: https://patch.msgid.link/20241022-ad7380-fix-supplies-v3-3-f0cefe1b7fa6@baylibre.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 4d94de2 commit 4379a3c

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

drivers/iio/adc/ad7380.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
#define T_CONVERT_NS 190 /* conversion time */
7676
#define T_CONVERT_0_NS 10 /* 1st conversion start time (oversampling) */
7777
#define T_CONVERT_X_NS 500 /* xth conversion start time (oversampling) */
78+
#define T_POWERUP_US 5000 /* Power up */
7879

7980
struct ad7380_timing_specs {
8081
const unsigned int t_csh_ns; /* CS minimum high time */
@@ -86,6 +87,8 @@ struct ad7380_chip_info {
8687
unsigned int num_channels;
8788
unsigned int num_simult_channels;
8889
bool has_mux;
90+
const char * const *supplies;
91+
unsigned int num_supplies;
8992
const char * const *vcm_supplies;
9093
unsigned int num_vcm_supplies;
9194
const unsigned long *available_scan_masks;
@@ -243,6 +246,10 @@ DEFINE_AD7380_8_CHANNEL(ad7386_4_channels, 16, 0, u);
243246
DEFINE_AD7380_8_CHANNEL(ad7387_4_channels, 14, 0, u);
244247
DEFINE_AD7380_8_CHANNEL(ad7388_4_channels, 12, 0, u);
245248

249+
static const char * const ad7380_supplies[] = {
250+
"vcc", "vlogic",
251+
};
252+
246253
static const char * const ad7380_2_channel_vcm_supplies[] = {
247254
"aina", "ainb",
248255
};
@@ -338,6 +345,8 @@ static const struct ad7380_chip_info ad7380_chip_info = {
338345
.channels = ad7380_channels,
339346
.num_channels = ARRAY_SIZE(ad7380_channels),
340347
.num_simult_channels = 2,
348+
.supplies = ad7380_supplies,
349+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
341350
.available_scan_masks = ad7380_2_channel_scan_masks,
342351
.timing_specs = &ad7380_timing,
343352
};
@@ -347,6 +356,8 @@ static const struct ad7380_chip_info ad7381_chip_info = {
347356
.channels = ad7381_channels,
348357
.num_channels = ARRAY_SIZE(ad7381_channels),
349358
.num_simult_channels = 2,
359+
.supplies = ad7380_supplies,
360+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
350361
.available_scan_masks = ad7380_2_channel_scan_masks,
351362
.timing_specs = &ad7380_timing,
352363
};
@@ -356,6 +367,8 @@ static const struct ad7380_chip_info ad7383_chip_info = {
356367
.channels = ad7383_channels,
357368
.num_channels = ARRAY_SIZE(ad7383_channels),
358369
.num_simult_channels = 2,
370+
.supplies = ad7380_supplies,
371+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
359372
.vcm_supplies = ad7380_2_channel_vcm_supplies,
360373
.num_vcm_supplies = ARRAY_SIZE(ad7380_2_channel_vcm_supplies),
361374
.available_scan_masks = ad7380_2_channel_scan_masks,
@@ -367,6 +380,8 @@ static const struct ad7380_chip_info ad7384_chip_info = {
367380
.channels = ad7384_channels,
368381
.num_channels = ARRAY_SIZE(ad7384_channels),
369382
.num_simult_channels = 2,
383+
.supplies = ad7380_supplies,
384+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
370385
.vcm_supplies = ad7380_2_channel_vcm_supplies,
371386
.num_vcm_supplies = ARRAY_SIZE(ad7380_2_channel_vcm_supplies),
372387
.available_scan_masks = ad7380_2_channel_scan_masks,
@@ -378,6 +393,8 @@ static const struct ad7380_chip_info ad7386_chip_info = {
378393
.channels = ad7386_channels,
379394
.num_channels = ARRAY_SIZE(ad7386_channels),
380395
.num_simult_channels = 2,
396+
.supplies = ad7380_supplies,
397+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
381398
.has_mux = true,
382399
.available_scan_masks = ad7380_2x2_channel_scan_masks,
383400
.timing_specs = &ad7380_timing,
@@ -388,6 +405,8 @@ static const struct ad7380_chip_info ad7387_chip_info = {
388405
.channels = ad7387_channels,
389406
.num_channels = ARRAY_SIZE(ad7387_channels),
390407
.num_simult_channels = 2,
408+
.supplies = ad7380_supplies,
409+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
391410
.has_mux = true,
392411
.available_scan_masks = ad7380_2x2_channel_scan_masks,
393412
.timing_specs = &ad7380_timing,
@@ -398,6 +417,8 @@ static const struct ad7380_chip_info ad7388_chip_info = {
398417
.channels = ad7388_channels,
399418
.num_channels = ARRAY_SIZE(ad7388_channels),
400419
.num_simult_channels = 2,
420+
.supplies = ad7380_supplies,
421+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
401422
.has_mux = true,
402423
.available_scan_masks = ad7380_2x2_channel_scan_masks,
403424
.timing_specs = &ad7380_timing,
@@ -408,6 +429,8 @@ static const struct ad7380_chip_info ad7380_4_chip_info = {
408429
.channels = ad7380_4_channels,
409430
.num_channels = ARRAY_SIZE(ad7380_4_channels),
410431
.num_simult_channels = 4,
432+
.supplies = ad7380_supplies,
433+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
411434
.available_scan_masks = ad7380_4_channel_scan_masks,
412435
.timing_specs = &ad7380_4_timing,
413436
};
@@ -417,6 +440,8 @@ static const struct ad7380_chip_info ad7381_4_chip_info = {
417440
.channels = ad7381_4_channels,
418441
.num_channels = ARRAY_SIZE(ad7381_4_channels),
419442
.num_simult_channels = 4,
443+
.supplies = ad7380_supplies,
444+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
420445
.available_scan_masks = ad7380_4_channel_scan_masks,
421446
.timing_specs = &ad7380_4_timing,
422447
};
@@ -426,6 +451,8 @@ static const struct ad7380_chip_info ad7383_4_chip_info = {
426451
.channels = ad7383_4_channels,
427452
.num_channels = ARRAY_SIZE(ad7383_4_channels),
428453
.num_simult_channels = 4,
454+
.supplies = ad7380_supplies,
455+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
429456
.vcm_supplies = ad7380_4_channel_vcm_supplies,
430457
.num_vcm_supplies = ARRAY_SIZE(ad7380_4_channel_vcm_supplies),
431458
.available_scan_masks = ad7380_4_channel_scan_masks,
@@ -437,6 +464,8 @@ static const struct ad7380_chip_info ad7384_4_chip_info = {
437464
.channels = ad7384_4_channels,
438465
.num_channels = ARRAY_SIZE(ad7384_4_channels),
439466
.num_simult_channels = 4,
467+
.supplies = ad7380_supplies,
468+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
440469
.vcm_supplies = ad7380_4_channel_vcm_supplies,
441470
.num_vcm_supplies = ARRAY_SIZE(ad7380_4_channel_vcm_supplies),
442471
.available_scan_masks = ad7380_4_channel_scan_masks,
@@ -448,6 +477,8 @@ static const struct ad7380_chip_info ad7386_4_chip_info = {
448477
.channels = ad7386_4_channels,
449478
.num_channels = ARRAY_SIZE(ad7386_4_channels),
450479
.num_simult_channels = 4,
480+
.supplies = ad7380_supplies,
481+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
451482
.has_mux = true,
452483
.available_scan_masks = ad7380_2x4_channel_scan_masks,
453484
.timing_specs = &ad7380_4_timing,
@@ -458,6 +489,8 @@ static const struct ad7380_chip_info ad7387_4_chip_info = {
458489
.channels = ad7387_4_channels,
459490
.num_channels = ARRAY_SIZE(ad7387_4_channels),
460491
.num_simult_channels = 4,
492+
.supplies = ad7380_supplies,
493+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
461494
.has_mux = true,
462495
.available_scan_masks = ad7380_2x4_channel_scan_masks,
463496
.timing_specs = &ad7380_4_timing,
@@ -468,6 +501,8 @@ static const struct ad7380_chip_info ad7388_4_chip_info = {
468501
.channels = ad7388_4_channels,
469502
.num_channels = ARRAY_SIZE(ad7388_4_channels),
470503
.num_simult_channels = 4,
504+
.supplies = ad7380_supplies,
505+
.num_supplies = ARRAY_SIZE(ad7380_supplies),
471506
.has_mux = true,
472507
.available_scan_masks = ad7380_2x4_channel_scan_masks,
473508
.timing_specs = &ad7380_4_timing,
@@ -1004,6 +1039,14 @@ static int ad7380_probe(struct spi_device *spi)
10041039
if (!st->chip_info)
10051040
return dev_err_probe(&spi->dev, -EINVAL, "missing match data\n");
10061041

1042+
ret = devm_regulator_bulk_get_enable(&spi->dev, st->chip_info->num_supplies,
1043+
st->chip_info->supplies);
1044+
1045+
if (ret)
1046+
return dev_err_probe(&spi->dev, ret,
1047+
"Failed to enable power supplies\n");
1048+
fsleep(T_POWERUP_US);
1049+
10071050
/*
10081051
* If there is no REFIO supply, then it means that we are using
10091052
* the internal 2.5V reference, otherwise REFIO is reference voltage.

0 commit comments

Comments
 (0)