We are working with a Rotary encoder from Grayhill (62A15-02-040C).
The SOM we are using is SMARC conga-SMX8-Mini based on iMX8M Mini.
The Rotary encoder is interfaced to GPIOs 9 and 10 for Channel A and Channel B respectively.
The device tree for the same goes as below which is in reference with the document Documentation/devicetree/bindings/input/rotary-encoder.txt
compatible = "rotary-encoder";
gpios = <&gpio1 9 1>, <&gpio1 10 0>;
linux,axis = <0>; /* REL_X */
rotary-encoder,encoding = "gray";
rotary-encoder,steps-per-period = <2>;
status = "okay";
We are using the generic rotary encoder driver available in the kernel (drivers/input/misc/rotary_encoder.c).
The driver probes successfully with device registration and interrupts allocation.
root@imx8mm-cgt-sx8m: cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio:
gpio-1 ( |bkl pwm ) out hi
gpio-8 ( |enable ) out hi
gpio-9 ( |rotary@0 ) in lo IRQ ACTIVE LOW
gpio-10 ( |rotary@0 ) in lo IRQ
gpio-12 ( |regulator-usb ) out lo
And the interrupts being:
root@imx8mm-cgt-sx8m:~# cat /proc/interrupts
73: 0 gpio-mxc 9 Edge rotary-encoder
74: 0 gpio-mxc 10 Edge rotary-encoder
When tested with evtest tool no events are reported.
No device specified, trying to scan all of /dev/input/event*
/dev/input/event4: PixArt Dell MS116 USB Optical Mouse
Select the device event number [0-4]: 1
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "rotary@0"
Event type 0 (EV_SYN)
Event type 2 (EV_REL)
Event code 1 (REL_Y)
Testing ... (interrupt to exit)
The issue is from the rotary_encoder.c driver none of the interrupt handlers like rotary_encoder_irq, rotary_encoder_half_period_irq.. are called.
Is there anything else to be done for the rotary encoder to work? On the hardware we checked for the pulses when encoder is rotated.
Please provide leads since the issue is hindering our further development.
SOC: iMX8M Mini
Thanks for responding.
I tried with the interrupt-parent but no success.
Here rotary encoder is the input device, the device generates signals on GPIOs which have to be interpreted as interrupts. Is my understanding correct? Please through some light on this.
In my case there was an issue in configuring GPIOs for rotary encoder.
GPIO configuration in device tree ("gpios" property in DTS) must be proper in order for rotary to work.