The Enhanced Capture (ECAP) module can be used to timestamp events detected on signal input pin. It can be used for time measurements of pulse train signals. ECAP module includes 4 timestamp capture registers. For all 4 sequenced timestamp capture events (1->2->3->4->1->...), edge polarity (falling/rising edge) can be selected. This driver leverages counter subsystem to : - select edge polarity for all 4 capture events (event mode) - log timestamps for each capture event Event polarity, and CAP1/2/3/4 timestamps give all the information about the input pulse train. Further information can easily be computed : period and/or duty cycle if frequency is constant, elapsed time between pulses, etc... Modifications since v4: - Modify yaml commit message prefix (dt-bindings) - Modify driver file name & Makefile (ti-ecap-capture) - Modify compilation flag name in Kconfig (TI_ECAP_CAPTURE) - Select REGMAP_MMIO in Kconfig - Add capture items to sysfs-bus-counter ABI documentation - Cleanup probe function (dev_err_probe & devm_clk_get_enabled & devm_add_action_or_reset for PM) - Enable/Disable device clock in suspend/resume functions - Add PM explanations - Add ECAP clock signal & 'frequency' sysfs entry - Replace elapsed_time & spinlock by nb_ovf (atomic_t) & 'count_cumul' sysfs entry - Add counter overflow event - Modify 'name' sysfs entry for signal0 & signal1 & count0 - Modify watch_validate function - Add macros for callbacks related to cap1/2/3/4 Userspace commands : ### SIGNAL INPUT ### cd /sys/bus/counter/devices/counter0/signal0 # Get available polarities for each capture event cat polarity1_available cat polarity2_available cat polarity3_available cat polarity4_available # Get polarity for each capture event cat polarity1 cat polarity2 cat polarity3 cat polarity4 # Set polarity for each capture event echo rising edge > polarity1 echo falling edge > polarity2 echo rising edge > polarity3 echo falling edge > polarity4 ### SIGNAL CLOCK ### cd /sys/bus/counter/devices/counter0/signal1 # Get clock rate cat frequency ### COUNT ### cd /sys/bus/counter/devices/counter0/count0 # Run ECAP echo 1 > enable # Get current timebase counter value cat count # Get cumulated counter value cat count_cumul # Get captured timestamps cat capture1 cat capture2 cat capture3 cat capture4 # Note that counter watches can also be used to get # data from userspace application # -> see tools/counter/counter_example.c # Stop ECAP echo 0 > enable Julien Panis (3): dt-bindings: counter: add ti,am62-ecap-capture.yaml Documentation: ABI: sysfs-bus-counter: add capture items counter: ti-ecap-capture: capture driver support for ECAP Documentation/ABI/testing/sysfs-bus-counter | 49 ++ .../counter/ti,am62-ecap-capture.yaml | 61 ++ drivers/counter/Kconfig | 15 + drivers/counter/Makefile | 1 + drivers/counter/ti-ecap-capture.c | 624 ++++++++++++++++++ include/uapi/linux/counter.h | 2 + 6 files changed, 752 insertions(+) create mode 100644 Documentation/devicetree/bindings/counter/ti,am62-ecap-capture.yaml create mode 100644 drivers/counter/ti-ecap-capture.c -- 2.25.1