On 11/13/24 2:52 PM, 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 patch also makes similar changes in > ad4695_read_one_sample() (while also tidying that function somewhat) to > make sure that single reads are still functional with the regmap change. > > 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@xxxxxxxxxx/ > > Suggested-by: David Lechner <dlechner@xxxxxxxxxxxx> > Signed-off-by: Trevor Gamblin <tgamblin@xxxxxxxxxxxx> > --- Reviewed-by: David Lechner <dlechner@xxxxxxxxxxxx> Tested-by: David Lechner <dlechner@xxxxxxxxxxxx>