Add device dependency for services

In Mihawk /dev/input/by-path/platform-gpio-keys-event is not created
by udev while phospho-gpio-monitor@id_button.service is running.
In Mihawk it takes much more time for udev to create device files
because there are more devices in Mihawk. Other platforms may hit the
same issue in the future  This patch adds the dependency of
platform-gpio-keys and platform-gpio-keys-polled to
phosphor-gpio-monitor@.service and phosphor-gpio-presence@.service to
fix the issue in Mihawk.

The timing of kernel, udev and id_button service. The
platform-gpio-keys-event is created at 09:32 while id_button service
in running at 09:31

Nov 01 09:31:11 mihawk kernel: input: gpio-keys as /devices/platform
/gpio-keys/input/input2

Nov 01 09:31:11 mihawk systemd[1]: Started udev Kernel Device Manager.

Nov 01 09:31:17 mihawk systemd[1]: Started udev Coldplug all Devices.

Nov 01 09:31:46 mihawk systemd[1]: phosphor-gpio-monitor@id_button.
service: Main process exited, code=killed, status=6/ABRT
Nov 01 09:31:46 mihawk systemd[1]: phosphor-gpio-monitor@id_button.
service: Failed with result 'signal'.

lrwxrwxrwx    1 root     root             9 Nov  1 09:32
/dev/input/by-path/platform-gpio-keys-event

Tested: The phosphor-gpio-monitor@id_button.service can be started
        successfully.

Signed-off-by: Alvin Wang <alvinwang@msn.com>
Change-Id: I3fd3422e06f39175cc7c5321dcfadc9ad184b9ae
4 files changed
tree: cd00ab4804a9b158f5b73346261bce8ede7be351
  1. gpio-util/
  2. presence/
  3. test/
  4. .clang-format
  5. .gitignore
  6. 99-gpio-keys.rules
  7. argument.cpp
  8. argument.hpp
  9. evdev.cpp
  10. evdev.hpp
  11. file.hpp
  12. gpioMon.cpp
  13. gpioMon.hpp
  14. gpioMonMain.cpp
  15. LICENSE
  16. mainapp.cpp
  17. MAINTAINERS
  18. meson.build
  19. meson_options.txt
  20. monitor.cpp
  21. monitor.hpp
  22. phosphor-gpio-monitor@.service
  23. phosphor-gpio-presence@.service
  24. phosphor-multi-gpio-monitor.json
  25. phosphor-multi-gpio-monitor.service
  26. README.md
README.md

phosphor-gpio-monitor

This daemon accepts a command line parameter for monitoring single gpio line and take action if requested. This implementation uses GPIO keys and only supports monitoring single GPIO line, for multiple lines, user has to run this daemon seperately for each gpio line.

phosphor-multi-gpio-monitor

This daemon accepts command line parameter as a well-defined GPIO configuration file in json format to monitor list of gpios from config file and take action defined in config based on gpio state change. It uses libgpiod library.

Difference

New implementation (phosphor-multi-gpio-monitor) provides multiple gpio line monitoring in single instance of phosphor-multi-gpio-monitor running. It is very easy to add list of gpios into JSON config file and it also supports of GPIO line by name defined in kernel.

Configuration

There is a phosphor-multi-gpio-monitor.json file that defines details of GPIOs which is required to be monitored. This file can be replaced with a platform specific configuration file via bbappend.

Following are fields in json file

  1. Name: Name of gpio for reference.
  2. LineName: this is the line name defined in device tree for specific gpio
  3. GpioNum: GPIO offset, this field is optional if LineName is defined.
  4. ChipId: This is device name either offset ("0") or complete gpio device ("gpiochip0"). This field is not required if LineName is defined.
  5. EventMon: Event of gpio to be monitored. This can be "FALLING", "RISING" OR "BOTH". Default value for this is "BOTH".
  6. Target: This is an optional systemd service which will get started after triggering event. A journal entry will be added for every event occurs irrespective of this definition.
  7. Continue: This is a optional flag and if it is defined as true then this gpio will be monitored continously. If not defined then monitoring of this gpio will stop after first event.

Sample config file

[ { "Name": "PowerButton", "LineName": "POWER_BUTTON", "GpioNum": 34, "ChipId": "gpiochip0", "EventMon": "BOTH", "Continue": true }, { "Name": "PowerGood", "LineName": "PS_PWROK", "EventMon": "FALLING", "Continue": false }, { "Name": "SystemReset", "GpioNum": 46, "ChipId": "0" } ]