Hello, this is a patch set for a new bus type called SIOX created by the German company Eckelmann. This is a bus with four data lines. The signales DIN (from devices to master) and DOUT (from master to devices) are daisy chained through all devices. DLD and DCLK are shared. A pulse on DCLK pushs bits on the DIN and DOUT chains in the respective direction. A pulse on DLD makes the devices sample their input and output stated from/to DIN and DOUT.
There are still some open issues, at least: - the bus logic is still broken somehow. When a bus with two devices is instantiated and the siox-bus-gpio module is unloaded, the bus master (siox-0) disappears, but the two devices (siox-0-0 and siox-0-1) don't. - no device tree binding doc for bus driver - the devices should be polled each 25 ms, otherwise a per-device watchdog resets the device. I'm currently using a workqueue for that, and on a loaded machine sometimes the watchdog triggers. So maybe I need a different approach here? But I didn't debug that yet, so this is just FYI. - some mechanism (I thought about an uevent) to report that a watchdog triggered would be nice. I asked a few questions in #kernelnewbies to solve the first issue, Greg asked for a code drop, so here it is. Thanks for your time and interest, Uwe Uwe Kleine-König (3): siox: new driver/bus framework for Eckelmann SIOX siox: add gpio bus driver gpio: new driver to work with a 8x12 siox drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/gpio/Kconfig | 5 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-siox.c | 280 +++++++++++++++++++++ drivers/siox/Kconfig | 9 + drivers/siox/Makefile | 2 + drivers/siox/siox-bus-gpio.c | 168 +++++++++++++ drivers/siox/siox-core.c | 572 +++++++++++++++++++++++++++++++++++++++++++ drivers/siox/siox.h | 48 ++++ include/linux/siox.h | 53 ++++ 11 files changed, 1141 insertions(+) create mode 100644 drivers/gpio/gpio-siox.c create mode 100644 drivers/siox/Kconfig create mode 100644 drivers/siox/Makefile create mode 100644 drivers/siox/siox-bus-gpio.c create mode 100644 drivers/siox/siox-core.c create mode 100644 drivers/siox/siox.h create mode 100644 include/linux/siox.h -- 2.7.0