[PATCH v5 0/3] ECAP support on TI AM62x SoC
From: Julien Panis
Date: Wed Aug 17 2022 - 10:16:42 EST
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