Thank you for all your suggestions and points. I have realized that I have approached implementing the Wiegand bus driver wrong. I have used the words 'GPIO controller', which made it seem like there was a GPIO controller for which another driver would be needed. What I meant to implement is a simple bit-banged Wiegand bus driver. There is no GPIO controller, instead the two GPIO lines are controlled by the bus. They are utilized to send messages following the Wiegand protocol and the bus driver should implement such bit-banging. Now only a single devicetree entry is needed instead of two as in the previous version - thanks to Krzysztof for pointing it out. The driver was based on similar drivers in the drivers/bus directory. There is also an abstract API in include/linux/wiegand.h that contains functions to write to the bus or set a particular format. This API is meant to be used in drivers of devices communicating using Wiegand protocol. The user can write on the bus using a device file or change the format and message payload length via sysfs files. The driver was tested on NXP Verdin iMX8MP Plus. With regards, Martin Zaťovič v1->v2: Split the driver into a bus driver a gpio driver and an abstract API. Fix issues pointed out in RFC v2->v3: Discard the bus driver. Implement new bus driver based on the gpio driver(the gpio driver was actually implementing the functionality of the bus). Fix make dt_bindings_check errors. Use devicetree properties for pulse_len, interval_len and frame_gap attributes. Martin Zaťovič (2): dt-bindings: bus: add Wiegand bus dt documentation bus: add bit banged Wiegand bus driver Documentation/ABI/testing/sysfs-bus-wiegand | 20 + .../devicetree/bindings/bus/wiegand.yaml | 75 +++ MAINTAINERS | 8 + drivers/bus/Kconfig | 7 + drivers/bus/Makefile | 1 + drivers/bus/wiegand.c | 509 ++++++++++++++++++ include/linux/wiegand.h | 58 ++ 7 files changed, 678 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-bus-wiegand create mode 100644 Documentation/devicetree/bindings/bus/wiegand.yaml create mode 100644 drivers/bus/wiegand.c create mode 100644 include/linux/wiegand.h -- 2.37.3