[PATCH 0/3] Wiegand bus driver and GPIO controller driver

From: Martin Zaťovič
Date: Wed Jan 04 2023 - 08:42:56 EST


I would like to thank everyone that commented on my last RFC,
which made me realize the shortcuts in design I was making.
I think I have finally understood the concept of how bus drivers
operate and I have implemented a Wiegand bus driver. The driver
now manages controllers and devices connected to them. It attaches
drivers to Wiegand devices and provides an abstract API in
"include/linux/wiegand.h". Most of the Wiegand bus driver code is
inspired by the SPI bus driver written by David Brownell.

I have also implemented a driver for Wiegand GPIO bit-banging.
This driver gets the devicetree defined GPIO lines and sends
Wiegand formatted data through them.

I have also tested creating sample drivers for devices attached
to the bus and working with them.

CHANGELOG since RFCv3:
- implemented a proper bus driver for controller and device
allocation, devicetree probing and driver matching
- Wiegand bus is now represented as Wiegand controller node in the
devicetree
- re-wrote the old version of GPIO bit-banging driver as
a Wiegand controller
- used standard units for devicetree attributes
- removed global variables
- tested unbinding of drivers and fixed memory leaks
- created a Wiegand protocol sub-system - a folder "drivers/wiegand/"
for Wiegand controller drivers

I am not sure, whether this bus is complex enough to create a subsystem
for, however I do believe that this is the way most buses do it.

Martin Zaťovič (3):
dt-bindings: add Wiegand controller dt-binding documentation
bus: add Wiegand bus driver
wiegand: add Wiegand GPIO bit-banged controller driver

.../ABI/testing/sysfs-driver-wiegand-gpio | 17 +
.../bindings/wiegand/wiegand-controller.yaml | 83 ++
MAINTAINERS | 9 +
drivers/Kconfig | 2 +
drivers/bus/Kconfig | 5 +
drivers/bus/Makefile | 1 +
drivers/bus/wiegand.c | 768 ++++++++++++++++++
drivers/wiegand/Kconfig | 8 +
drivers/wiegand/Makefile | 1 +
drivers/wiegand/wiegand-gpio.c | 471 +++++++++++
include/linux/wiegand.h | 228 ++++++
11 files changed, 1593 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-driver-wiegand-gpio
create mode 100644 Documentation/devicetree/bindings/wiegand/wiegand-controller.yaml
create mode 100644 drivers/bus/wiegand.c
create mode 100644 drivers/wiegand/Kconfig
create mode 100644 drivers/wiegand/Makefile
create mode 100644 drivers/wiegand/wiegand-gpio.c
create mode 100644 include/linux/wiegand.h

--
2.38.1