Message ID | 20241111-tgamblin-ad4695_improvements-v1-0-698af4512635@baylibre.com (mailing list archive) |
---|---|
Headers | show |
Series | iio: adc: ad4695: add new regmap callbacks, timing improvements | expand |
On 2024-11-11 10:59, Trevor Gamblin wrote: > The AD4695 driver currently operates all SPI reads/writes at the speed > appropriate for register access, rather than the max rate for the bus. > Data reads should ideally operate at the latter speed, but making this > change universally makes it possible for data to be corrupted during use > and for unexpected behavior to occur on driver subsequent driver > binds/unbinds. To solve this, introduce custom regmap bus callbacks for > the driver that explicitly set a lower speed only for these operations. > > The first patch in this series is a fix introduced after discovering the > corresponding issue during testing of the callbacks. This is a timing > fix that ensures the AD4695 datasheet's timing specs are met, as before > the busy signal would sometimes fail to toggle again following the end > of the conversion sequence. Adding an extra delay in the form of a blank > transfer before every CS deassert in ad4695_buffer_preenable() allows > this requirement to be met. > > The second patch is an improvement that increases the robustness of the > exit message in ad4695_exit_conversion_mode(), this time by adding a > delay before the actual exit command. This helps avoid the possibility > that the exit message will be read as data, causing corruption on some > buffered reads. > > For additional context, see: > https://lore.kernel.org/linux-iio/20241028163907.00007e12@Huawei.com/ > > Suggested-by: David Lechner <dlechner@baylibre.com> > Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> > --- > Trevor Gamblin (3): > iio: adc: ad4695: fix buffered read timing in ad4695_buffer_preenable() > iio: adc: ad4695: make ad4695_exit_conversion_mode() more robust > iio: adc: ad4695: add custom regmap bus callbacks > > drivers/iio/adc/Kconfig | 2 +- > drivers/iio/adc/ad4695.c | 135 ++++++++++++++++++++++++++++++++++++++++------- > 2 files changed, 118 insertions(+), 19 deletions(-) > --- > base-commit: 2d5404caa8c7bb5c4e0435f94b28834ae5456623 > change-id: 20241111-tgamblin-ad4695_improvements-7a32a6268c26 > > Best regards, FYI, there is now a v2, so if anyone's currently reviewing this, please don't spend any additional time. v2: https://lore.kernel.org/linux-iio/20241113-tgamblin-ad4695_improvements-v2-0-b6bb7c758fc4@baylibre.com/T/#
The AD4695 driver currently operates all SPI reads/writes at the speed appropriate for register access, rather than the max rate for the bus. Data reads should ideally operate at the latter speed, but making this change universally makes it possible for data to be corrupted during use and for unexpected behavior to occur on driver subsequent driver binds/unbinds. To solve this, introduce custom regmap bus callbacks for the driver that explicitly set a lower speed only for these operations. The first patch in this series is a fix introduced after discovering the corresponding issue during testing of the callbacks. This is a timing fix that ensures the AD4695 datasheet's timing specs are met, as before the busy signal would sometimes fail to toggle again following the end of the conversion sequence. Adding an extra delay in the form of a blank transfer before every CS deassert in ad4695_buffer_preenable() allows this requirement to be met. The second patch is an improvement that increases the robustness of the exit message in ad4695_exit_conversion_mode(), this time by adding a delay before the actual exit command. This helps avoid the possibility that the exit message will be read as data, causing corruption on some buffered reads. For additional context, see: https://lore.kernel.org/linux-iio/20241028163907.00007e12@Huawei.com/ Suggested-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> --- Trevor Gamblin (3): iio: adc: ad4695: fix buffered read timing in ad4695_buffer_preenable() iio: adc: ad4695: make ad4695_exit_conversion_mode() more robust iio: adc: ad4695: add custom regmap bus callbacks drivers/iio/adc/Kconfig | 2 +- drivers/iio/adc/ad4695.c | 135 ++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 118 insertions(+), 19 deletions(-) --- base-commit: 2d5404caa8c7bb5c4e0435f94b28834ae5456623 change-id: 20241111-tgamblin-ad4695_improvements-7a32a6268c26 Best regards,