A13 SOM enable 24MHz oscillator

Recommended Posts


I'm using Armbian (kernel version 5.0.21-sunxi) on an Olimex a13 SOM.

I'm trying to implement wiegand interface on GPIO pins, that means that I have to fire interrupts on 50uS pulses.

I solved my problem with writing down a driver capturing edge triggered inputs.

So, with some readers (200uS pulses, 1.5ms between pulses) i can get all data, but with other readers (e.g. 100uS pulse, 500uS between pulses) I miss some interrupts (e.g. I have a wiegand42 reader and sometimes I get 41 interrupts, sometimes I get 39 or 36).

I read that kernel fires new interrupt only when the previous interrupt function has returned, so I tested it with just adding a "counter++" and "if (counter>41)" and I'm still not able to get every interrupt.

I found on forums that allwinner a13 has an external 24MHz oscillator (Q1 in this schematic https://www.olimex.com/Products/SOM/A13/A13-SOM-512/resources/A13-SOM512_sch.pdf ) that can be configured to trigger interrupt events faster.

I tried to add to kernel sources patch found in here (https://linux-sunxi.org/External_interrupts), but gives me error while kernel compiles.

I've also read this topic ( https://forum.armbian.com/topic/4787-gpio-pa19-hardware-interrupts/?tab=comments#comment-36517 ), but I can't figure out how to enable 24MHz oscillator in device tree (I tried "input-debounce = <0x1>;" on "pinctrl@1c20800" without result).

Could someone help me in enabling 24MHz oscillator for firing external interrupts?

Here's my pinctrl section of device tree:


pinctrl@1c20800 {
            reg = <0x1c20800 0x400>;
            interrupts = <0x1c>;
            clocks = <0x2 0x35 0x14 0x15>;
            clock-names = "apb", "hosc", "losc";
            #interrupt-cells = <0x3>;
            #gpio-cells = <0x3>;
            input-debounce = <0x1 0x1 0x1>;
            compatible = "allwinner,sun5i-a13-pinctrl";
            phandle = <0xd>;

            emac-pd-pins {
                pins = "PD6", "PD7", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD18", "PD19", "PD20", "PD21", "PD22", "PD23", "PD24", "PD25", "PD26", "PD27";
                function = "emac";
                phandle = <0x3a>;

            i2c0-pins {
                pins = "PB0", "PB1";
                function = "i2c0";
                phandle = <0x17>;

            i2c1-pins {
                pins = "PB15", "PB16";
                function = "i2c1";
                phandle = <0x18>;

            i2c2-pins {
                pins = "PB17", "PB18";
                function = "i2c2";
                phandle = <0x19>;

            ir0-rx-pin {
                pins = "PB4";
                function = "ir0";
                phandle = <0x3b>;

            lcd-rgb565-pins {
                pins = "PD3", "PD4", "PD5", "PD6", "PD7", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD19", "PD20", "PD21", "PD22", "PD23", "PD24", "PD25", "PD26", "PD27";
                function = "lcd0";
                phandle = <0x3c>;

            lcd-rgb666-pins {
                pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PD18", "PD19", "PD20", "PD21", "PD22", "PD23", "PD24", "PD25", "PD26", "PD27";
                function = "lcd0";
                phandle = <0x6>;

            mmc0-pins {
                pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
                function = "mmc0";
                drive-strength = <0x1e>;
                phandle = <0xb>;

            mmc2-8bit-pins {
                pins = "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15";
                function = "mmc2";
                drive-strength = <0x1e>;
                phandle = <0x3d>;

            mmc2-4bit-pc-pins {
                pins = "PC6", "PC7", "PC8", "PC9", "PC10", "PC11";
                function = "mmc2";
                drive-strength = <0x1e>;
                phandle = <0x3e>;

            nand-pins {
                pins = "PC0", "PC1", "PC2", "PC5", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15";
                function = "nand0";
                phandle = <0x3f>;

            nand-cs0-pin {
                pins = "PC4";
                function = "nand0";
                phandle = <0x40>;

            nand-rb0-pin {
                pins = "PC6";
                function = "nand0";
                phandle = <0x41>;

            spi2-pe-pins {
                pins = "PE1", "PE2", "PE3";
                function = "spi2";
                phandle = <0x42>;

            spi2-cs0-pe-pin {
                pins = "PE0";
                function = "spi2";
                phandle = <0x43>;

            uart1-pe-pins {
                pins = "PE10", "PE11";
                function = "uart1";
                phandle = <0x44>;

            uart1-pg-pins {
                pins = "PG3", "PG4";
                function = "uart1";
                phandle = <0x16>;

            uart2-pd-pins {
                pins = "PD2", "PD3";
                function = "uart2";
                phandle = <0x45>;

            uart2-cts-rts-pd-pins {
                pins = "PD4", "PD5";
                function = "uart2";
                phandle = <0x46>;

            uart3-pg-pins {
                pins = "PG9", "PG10";
                function = "uart3";
                phandle = <0x47>;

            uart3-cts-rts-pg-pins {
                pins = "PG11", "PG12";
                function = "uart3";
                phandle = <0x48>;

            pwm0-pin {
                pins = "PB2";
                function = "pwm";
                phandle = <0x1d>;

            led-pin {
                pins = "PG9";
                function = "gpio_out";
                drive-strength = <0x14>;
                phandle = <0x22>;

            usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                phandle = <0x10>;

            usb0-vbus-detect-pin {
                pins = "PG1";
                function = "gpio_in";
                phandle = <0x11>;
            wiegand1-D0-pin    {
                phandle = <0x5f>;
            wiegand1-D1-pin    {
                phandle = <0x60>;


Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.