[PATCHv4 0/4] Wiegand bus driver and GPIO bitbanged Wiegand

From: Martin Zaťovič
Date: Wed May 10 2023 - 12:24:38 EST


Hello,

thank you for the feedback regarding the previous version of this patch series.
I have tried to follow all of the advice I got and fix all the pointed issues.
One of the main issues was the usage of of API for device registration. This
has now been fixed to use fwnode API, however I was not yet able to get rid of
the of_device include, since it is required for of_driver_match_device. Please
let me know if this is correct.

CHANGELOG:

wiegand.c:
- changed ID allocation API from IDR to IDA, since the references associated to
the IDs are not needed
- removed the board_lock mutex, because it was only guarding the allocacion
and freeing of IDs, which is already supported by IDA API
- restructured the file, so that most functions are close to their caller, or
defined them at the top for better code readability
- in the function devm_wiegand_register_controller, the devres management of
the pointer to wiegand_controller structure has been replaced with
devm_add_action_or_reset function. It was intended to do the same with
devm_wiegand_alloc_controller, however, the kernel kept panicing, despite the
call order of the unregister and release functions being proper(same as with
devres managed pointer). Please let me know if this is an absolute must, if so
I will look into it further.
- moved the miscdevice from wiegand-gpio driver to be a part of the bus
driver. Now every controller is associated a /dev file. The file operation
functions were simply moved and renamed and the miscdevice structure was moved
to be a part of wiegand_controller structure
- since now every controller has a miscdevice assosciated, the data_buffer was
also moved to be a part of the controller structure, and it was made a bitmap
- used fwnode API for device registration instead of of API
- removed warnings when driver fails to get wiegand properties, instead
implemented mechanism for setting a default value similar I2C
- removed the driver matching code in register driver, as
of_driver_match_device does that already
- made wiegand_device and opaque pointer
- changed the terminology to primary and secondary

wiegand.h
- reordered the wiegand_driver structure so that miscdevice is first

wiegand-gpio.c
- removed of.h include
- changed udelay to usleep_range for longer wait times in wiegand_gpio_send_bit
- moved wiegand_gpio_groups to dev groups of the struct driver
- style changes(no commas for terminator entries, removed redundant blank
lines etc.)
- changed the names of gpio_descs from gpio_data_hi and gpio_data_lo to
data1_gpio and data0_gpio

Martin Zaťovič (4):
dt-bindings: wiegand: add Wiegand controller common properties
wiegand: add Wiegand bus driver
dt-bindings: wiegand: add GPIO bitbanged Wiegand controller
wiegand: add Wiegand GPIO bitbanged controller driver

.../ABI/testing/sysfs-driver-wiegand-gpio | 9 +
.../bindings/wiegand/wiegand-controller.yaml | 39 ++
.../bindings/wiegand/wiegand-gpio.yaml | 51 ++
MAINTAINERS | 14 +
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/wiegand/Kconfig | 28 +
drivers/wiegand/Makefile | 2 +
drivers/wiegand/wiegand-gpio.c | 189 ++++++
drivers/wiegand/wiegand.c | 609 ++++++++++++++++++
include/linux/wiegand.h | 144 +++++
11 files changed, 1088 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-driver-wiegand-gpio
create mode 100644 Documentation/devicetree/bindings/wiegand/wiegand-controller.yaml
create mode 100644 Documentation/devicetree/bindings/wiegand/wiegand-gpio.yaml
create mode 100644 drivers/wiegand/Kconfig
create mode 100644 drivers/wiegand/Makefile
create mode 100644 drivers/wiegand/wiegand-gpio.c
create mode 100644 drivers/wiegand/wiegand.c
create mode 100644 include/linux/wiegand.h

--
2.40.0