On Wed, May 8, 2024 at 6:40 AM Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> wrote: > > On Tue, 7 May 2024 14:02:08 -0500 > David Lechner <dlechner@xxxxxxxxxxxx> wrote: > > > The AD783x chips have a resolution boost feature that allows for 2 > > extra bits of resolution. Previously, we had to choose a scan type to > > fit the largest resolution and manipulate the raw data to fit when the > > resolution was lower. This patch adds support for multiple scan types > > for the voltage input channels so that we can support both resolutions > > without having to manipulate the raw data. > > > > Signed-off-by: David Lechner <dlechner@xxxxxxxxxxxx> > > I'm wondering about the control mechanism. I was thinking we'd poke > the scan type directly but this may well make more sense. > > This is relying on _scale change to trigger the change in the scan type. > That may well be sufficient and I've been over thinking this for far too many > years :) > > It will get messy though in some cases as the device might have a PGA on the > front end so we will have a trade off between actual scaling control and > resolution related scale changes. We've had a few device where the scale > calculation is already complex and involves various different hardware > controls, but none have affected the storage format like this. > > I'll think some more. > Here is some more food for thought. The AD4630 family of chips we are working on is similar to this one in that it also has oversampling with increased resolution. Except in that case, they are strictly tied together. With oversampling disabled, we must only read 24-bits (or 16 depending on the exact model) and when oversampling is enabled, we must read 32-bits (30 real bits with 2-bit shift). So in that case, the scan_type would depend only on oversampling ratio > 0. (Writing the oversampling ratio attribute would affect scale, but scale wouldn't be writable like on ad7380.) It seems more intuitive to me that to enable oversampling, we would just write to the oversampling ratio attribute rather than having to write to a buffer _type attribute to enable oversampling in the first place. And other than requiring reading the documentation it would be pretty hard to guess that writing le:s30/32>>2 is what you need to do to enable oversampling.