Jump to content

m9aertner

Validating
  • Posts

    1
  • Joined

  • Last visited

Posts posted by m9aertner

  1. TL;DR *Works* with a minor amendment to the DTS overlay pin reference.

     

    $ uname -a
    Linux nanopineo 5.10.13-sunxi #trunk SMP Mon Feb 8 21:56:43 CET 2021 armv7l armv7l armv7l GNU/Linux
    
    $ dmesg | grep Machine
    [    0.000000] OF: fdt: Machine model: FriendlyARM NanoPi NEO
    
    # Baked current kernel. Configuration ... CIR module appears to NOT be enabled by default for NanoPI NEO.
    $ grep -iE  "^CONFIG_IR_.*(CIR|SUN)" /boot/config-5.10.13-sunxi
    CONFIG_IR_GPIO_CIR=m
    CONFIG_IR_SUNXI=m
    
    # Connected Vishay TSOP4838 IR Receiver to 3V3 (via 100R, with C100nF to GND), GND, OUT -> PL11
    #              +----------+
    # 1 --- OUT ---!     /--\ !
    # 2 --- GND ---!     |  | !
    # 3 --- 3V3 ---!     \__/ !
    #              +----------+
    
    # Get DTS and install as user overlay (commit 0ff3217)
    $ wget -O sun8i-h3-cir.dts https://raw.githubusercontent.com/armbian/sunxi-DT-overlays/master/sun8i-h3/sun8i-h3-cir.dts
    # Fix pin reference
    # from     ir_pins_a             (from DTS file)
    #   to               r_ir_rx_pin (from dtc -I fs -O dts /proc/device-tree)
    $ sed -e "s/ir_pins_a/r_ir_rx_pin/" sun8i-h3-cir.dts > sun8i-h3-cir-nanopineo.dts
    
    $ cat sun8i-h3-cir-nanopineo.dts
    /dts-v1/;
    /plugin/;
    
    / {
            compatible = "allwinner,sun8i-h3";
    
            fragment@0 {
                    target = <&ir>;
                    __overlay__ {
                            pinctrl-names = "default";
                            pinctrl-0 = <&r_ir_rx_pin>;
                            status = "okay";
                    };
            };
    };
    
    $ armbian-add-overlay sun8i-h3-cir-nanopineo.dts
    Compiling the overlay
    Copying the compiled overlay file to /boot/overlay-user/
    Reboot is required to apply the changes
    
    $ shutdown -r now
    
    $ dmesg | grep sunxi-ir
    [   10.653323] rc rc0: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0
    [   10.653692] rc rc0: lirc_dev: driver sunxi-ir registered at minor = 0, raw IR receiver, no transmitter
    [   10.653883] input: sunxi-ir as /devices/platform/soc/1f02000.ir/rc/rc0/input3
    [   10.665297] sunxi-ir 1f02000.ir: initialized sunXi IR driver
    
    # Protocols file is there == driver present and overlay loaded OK.
    $ cat /sys/class/rc/rc0/protocols
    rc-5 nec rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon rc-mm [lirc]
    
    # Enable "nec" protocol.
    # I tried them all to find out what encoding is used by the remote that I happened to have here.
    # There may be a smarter way where the IR subsystem tells you what encoding an incoming signal has.
    $ echo "+nec" > /sys/class/rc/rc0/protocols
    
    # The bracketed items appear to be [enabled]
    $ cat /sys/class/rc/rc0/protocols
    rc-5 [nec] rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon rc-mm [lirc]
    
    # Test:
    $ apt-get install ir-keytable
    
    $ ir-keytable
    Found /sys/class/rc/rc0/ with:
            Name: sunxi-ir
            Driver: sunxi-ir
            Default keymap: rc-empty
            Input device: /dev/input/event3
            LIRC device: /dev/lirc0
            Attached BPF protocols: Operation not supported
            Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon rc-mm
            Enabled kernel protocols: lirc nec
            bus: 25, vendor/product: 0001:0001, version: 0x0100
            Repeat delay = 500 ms, repeat period = 125 ms
    
    $  ir-keytable -t
    Testing events. Please, press CTRL-C to abort.
    147.355171: lirc protocol(necx): scancode = 0xe31947
    147.355225: event type EV_MSC(0x04): scancode = 0xe31947
    147.355225: event type EV_SYN(0x00).
    ^C
    
    
    # Test using event system (adjust Input device, cf. above):
    $ evtest /dev/input/event3
    Input driver version is 1.0.1
    Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
    Input device name: "sunxi-ir"
    Supported events:
      Event type 0 (EV_SYN)
      Event type 1 (EV_KEY)
        Event code 152 (KEY_SCREENLOCK)
      Event type 2 (EV_REL)
        Event code 0 (REL_X)
        Event code 1 (REL_Y)
      Event type 4 (EV_MSC)
        Event code 4 (MSC_SCAN)
    Key repeat handling:
      Repeat type 20 (EV_REP)
        Repeat code 0 (REP_DELAY)
          Value    500
        Repeat code 1 (REP_PERIOD)
          Value    125
    Properties:
      Property type 5 (INPUT_PROP_POINTING_STICK)
    Testing ... (interrupt to exit)
    Event: time 1612923728.916182, type 4 (EV_MSC), code 4 (MSC_SCAN), value e31948
    Event: time 1612923728.916182, -------------- SYN_REPORT ------------
    Event: time 1612923728.967737, type 4 (EV_MSC), code 4 (MSC_SCAN), value e31948
    Event: time 1612923728.967737, -------------- SYN_REPORT ------------
    ^C
    
    # From here on, use LIRC and/or adjust /etc/rc_maps.cfg et al. to map scan
    # codes to key codes. This makes the IR receiver compatible with media player
    # software. For the IoT device that I am building currently the scan codes
    # suffice, so I won't describe this here.
    


    (I am not really sure if that name change is a bug in the DTS repository, or if that name "ir_pins_a" refers to an older kernel, or if one is supposed to have another DT fragment somewhere that maps "ir_pins_a" to "r_ir_rx_pin", please comment if above is not the _right solution_.)

×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines