Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions drivers/adc/ad7091r5/ad7091r5.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ int32_t ad7091r5_i2c_reg_read(struct ad7091r5_dev *dev,
if (!dev || !reg_data)
return -EINVAL;

ret = no_os_i2c_write(dev->i2c_desc, &reg_addr, 1, 1);
ret = no_os_i2c_write(dev->i2c_desc, &reg_addr, 1, 0);
if (ret < 0)
return ret;

Expand Down Expand Up @@ -144,6 +144,9 @@ int32_t ad7091r5_i2c_write_mask(struct ad7091r5_dev *dev,
reg_data &= ~mask;
reg_data |= data;

/* Allow time for register modification to take effect before write */
no_os_udelay(100);

return ad7091r5_i2c_reg_write(dev, reg_addr, reg_data);
}

Expand Down Expand Up @@ -443,8 +446,8 @@ int32_t ad7091r5_reset(struct ad7091r5_dev *dev, bool is_software)
if (ret < 0)
return ret;

/* reset pulse width, at least 10 ns*/
no_os_udelay(1);
/* Reset pulse width extended to ensure proper device reset */
no_os_udelay(100);
return no_os_gpio_set_value(dev->gpio_resetn, NO_OS_GPIO_HIGH);
}
}
Expand Down Expand Up @@ -499,6 +502,9 @@ int32_t ad7091r5_read_one(struct ad7091r5_dev *dev,
if (ret)
return ret;

/* Wait for channel switch and conversion to complete before reading result */
no_os_udelay(100);

ret = ad7091r5_i2c_reg_read(dev, AD7091R5_REG_RESULT, &val);
if (ret)
return ret;
Expand Down
Loading