On Tue, Jun 28, 2022 at 12:06 PM Giedrius Trainavičius <giedrius@xxxxxxxxx> wrote: > > Hello, > > I am developing an extension board for Raspberry Pi, it has a > microcontroller on it and I'm trying to expose its pins as a I/O > expander via I²C bus. I've recently successfully implemented gpiochip > interface as well as irq_chip in a kernel module, and now I'm looking > at adding ADC support, Industrial IO seems like a good candidate for > exposing it, but I have a couple of questions: > > 1. Can the IIO channels be configured dynamically? On the > microcontroller, the same pins can be used for GPIO, ADC, etc... - can > things like the channel direction, the function (simple high or low > GPIO pin, ADC, PWM output) be configured by userspace programs? Can it > be configured within a kernel module, if I provide my own sysfs > interface for function setup? > > 2. Can IIO channels be appended and removed to/from the list during runtime? > > 3. Are encoders supported by IIO? I'd like to decode encoders within > the firmware of the microcontroller, and provide only > increments/decrements to the kernel module via I²C, can encoders built > in such a way be exposed via IIO? I've seen some patches on the > internet adding 'counter' interface to IIO, but it seems it never made > it to be within IIO, and instead the 'counter' in its own subsystem. > > 4. How does IIO interact with gpiochip? As I'm implementing gpiochip > interface, I could simply return -EBUSY for pins already used by the > other subsystem. We have a DLN2 adapter that provides 4 interfaces with overlapped GPIO pins, I don't remember how they solved this. Perhaps the microcontroller itself refuses GPIO line acquisition when it's in use for other functions. Hence, I recommend looking into the drivers for Diolan DLN2. -- With Best Regards, Andy Shevchenko