86 lines
2.6 KiB
YAML
86 lines
2.6 KiB
YAML
# Copyright 2023 Google LLC
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
description: |
|
|
GPIO based QDEC input device
|
|
|
|
Implement an input device generating relative axis event reports for a rotary
|
|
encoder connected to two GPIOs. The driver is normally idling until it sees a
|
|
transition on any of the encoder signal lines, then switches to polling mode
|
|
and samples the two signal lines periodically to track the encoder position,
|
|
and goes back to idling after the specified timeout.
|
|
|
|
Example configuration:
|
|
|
|
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
|
|
|
qdec {
|
|
compatible = "gpio-qdec";
|
|
gpios = <&gpio0 14 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>,
|
|
<&gpio0 13 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>;
|
|
steps-per-period = <4>;
|
|
zephyr,axis = <INPUT_REL_WHEEL>;
|
|
sample-time-us = <2000>;
|
|
idle-timeout-ms = <200>;
|
|
};
|
|
|
|
compatible: "gpio-qdec"
|
|
|
|
include: base.yaml
|
|
|
|
properties:
|
|
gpios:
|
|
type: phandle-array
|
|
required: true
|
|
description: |
|
|
GPIO for the A and B encoder signals.
|
|
|
|
led-gpios:
|
|
type: phandle-array
|
|
description: |
|
|
GPIOs for LED or other components needed for sensing the AB signals.
|
|
|
|
led-pre-us:
|
|
type: int
|
|
description: |
|
|
Time between enabling the led-gpios output pins and reading the encoder
|
|
state on the input pins, meant to give the state detector (such a
|
|
phototransistor) time to settle to right state. Required if led-gpios and
|
|
idle-poll-time-us are specified, can be explicitly set to 0 for no delay.
|
|
|
|
steps-per-period:
|
|
type: int
|
|
required: true
|
|
description: |
|
|
How many steps to count before reporting an input event.
|
|
|
|
zephyr,axis:
|
|
type: int
|
|
required: true
|
|
description: |
|
|
The input code for the axis to report for the device, typically any of
|
|
INPUT_REL_*.
|
|
|
|
sample-time-us:
|
|
type: int
|
|
required: true
|
|
description: |
|
|
How often to sample the A and B signal lines when tracking the encoder
|
|
movement.
|
|
|
|
idle-poll-time-us:
|
|
type: int
|
|
description: |
|
|
How often to sample the A and B signal while idling. If unset then the
|
|
driver will use the GPIO interrupt to exit idle state, and any GPIO
|
|
specified in led-gpios will be enabled all the time. If non zero, then
|
|
the driver will poll every idle-poll-time-us microseconds while idle, and
|
|
only activate led-gpios before sampling the encoder state.
|
|
|
|
idle-timeout-ms:
|
|
type: int
|
|
required: true
|
|
description: |
|
|
Timeout for the last detected transition before stopping the sampling
|
|
timer and going back to idle state.
|