Skip to content

Commit b56b6f4

Browse files
rbudai98amiclaus
authored andcommitted
drivers: adc: ad7091: adding delays for conversion
During value conversion the communication might be blocked in case the conversion is not yet finished and is still requested. Adding extra delays between register sets and reads in order to avoid these blockings. Signed-off-by: rbudai98 <[email protected]>
1 parent 8a7a574 commit b56b6f4

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

drivers/adc/ad7091r5/ad7091r5.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ int32_t ad7091r5_i2c_reg_read(struct ad7091r5_dev *dev,
5757
if (!dev || !reg_data)
5858
return -EINVAL;
5959

60-
ret = no_os_i2c_write(dev->i2c_desc, &reg_addr, 1, 1);
60+
ret = no_os_i2c_write(dev->i2c_desc, &reg_addr, 1, 0);
6161
if (ret < 0)
6262
return ret;
6363

@@ -144,6 +144,9 @@ int32_t ad7091r5_i2c_write_mask(struct ad7091r5_dev *dev,
144144
reg_data &= ~mask;
145145
reg_data |= data;
146146

147+
/* Allow time for register modification to take effect before write */
148+
no_os_udelay(100);
149+
147150
return ad7091r5_i2c_reg_write(dev, reg_addr, reg_data);
148151
}
149152

@@ -443,8 +446,8 @@ int32_t ad7091r5_reset(struct ad7091r5_dev *dev, bool is_software)
443446
if (ret < 0)
444447
return ret;
445448

446-
/* reset pulse width, at least 10 ns*/
447-
no_os_udelay(1);
449+
/* Reset pulse width extended to ensure proper device reset */
450+
no_os_udelay(100);
448451
return no_os_gpio_set_value(dev->gpio_resetn, NO_OS_GPIO_HIGH);
449452
}
450453
}
@@ -499,6 +502,9 @@ int32_t ad7091r5_read_one(struct ad7091r5_dev *dev,
499502
if (ret)
500503
return ret;
501504

505+
/* Wait for channel switch and conversion to complete before reading result */
506+
no_os_udelay(100);
507+
502508
ret = ad7091r5_i2c_reg_read(dev, AD7091R5_REG_RESULT, &val);
503509
if (ret)
504510
return ret;

0 commit comments

Comments
 (0)