| # 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. |