[meta-xilinx] gpio export from device tree

Alan Levy alan.levy at plextek.com
Thu Mar 2 07:46:29 PST 2017

The following DTS example fragment defines the EMIO pins used to control an external 8-way Mux:

/ {
     * Provide a set of aliases describing the GPIOs that are exported via sysfs for use by applications.
     * The format of each signal entry is as follows:
     * <name> = "<pin_no>,INPUT | OUTPUT, ACTIVE_HIGH | ACTIVE_LOW"
     * e.g:
     * pin1 = "10,OUTPUT,ACTIVE_HIGH";
     * pin2 = "25,INPUT,ACTIVE_LOW";
     * To make it easy to maintain this data, pin numbers are as seen by the EMIO GPIO controller,
     * not as known to SysFs, hence the need for  GPIO_OFFSET so that application code knows
     * how to calculate the correct number to pass to SysFs.
    aliases {
        GPIO_OFFSET =       "960"; /* = 1024 - 64 - due to the way that Linux allocates GPIO pin numbering for use with Sysfs. */

        /* Outputs - all EMIO pins */
        MUX_ADDR0 =     "30,OUTPUT,ACTIVE_HIGH";    /* Schematic Pin: MUX_SEL0          */
        MUX_ADDR1 =     "31,OUTPUT,ACTIVE_HIGH";    /* Schematic Pin: MUX _SEL1          */
        MUX_ADDR2 =     "32,OUTPUT,ACTIVE_HIGH";    /* Schematic Pin: MUX _SEL2          */
        MUX_ENABLE =    "29,OUTPUT,ACTIVE_LOW";     /* Schematic Pin: MUX _SEL_N         */

Apps read the value of GPIO_OFFSET and parse the individual MUX_xxx strings to extract the settings. The GPIO numbers are then GPIO_OFFSET + pin number. So for example MUX_ENABLE is on GPIO 989 (960 + 29).

-----Original Message-----
From: Jean-Francois Dagenais [mailto:jeff.dagenais at gmail.com] 
Sent: 02 March 2017 15:19
To: Alan Levy
Cc: Mike Looijmans; meta-xilinx at yoctoproject.org
Subject: Re: [meta-xilinx] gpio export from device tree

Hi Alan,

Thanks for this insight.

> On Mar 1, 2017, at 05:16, Alan Levy <alan.levy at plextek.com> wrote:
> In order to give userspace GPIOs sane names I use devicetree aliases which application code can access from /proc/device-tree/aliases. Each GPIO has an alias with a sensible name and the string I assign to it supplies the GPIO pin number and any other relevant info such as whether it's an input or an output and whether it's active high or active low.
> This technique can also be used to tell application the base pin numbers for MIO/EMIO if you wish. 

Can you point to an example? Or copy/paste a bit of it here?

More information about the meta-xilinx mailing list