Skip to contentSkip to conversation

xilinx gpio in kernel 2.6

DISCUSSION Mirek23 1 participant 3 messages Apr 30, 2007 – Jul 10, 2007

lore
Share & tools
lore

Mirek23

author
#0 lore raw

Hi All,

I am trying to build the kernel 2.6 for my ml403 board. I use the
kernel 2.6 by Grant.
The ethernet (Temac) and serial drivers work fine. It is however no support for xilinx gpio in the kernel tree.

To satisfy that I have generated the xilinx_gpio driver by means of the EDK 8.2 .

I have tried to place the xilinx_gpio to the kernel 2.6 tree under drivers/char/xilinx_gpio.

I have done the suitable configuration on the Makefile and Kconfig level. When I build the kernel, the crosscompiler complaines about the xgpio_ioctl.h which comes
from the adapter.c file.

It seems to be that xgpio_ioctl.h conatins the missing macros:
XGPIO_IN
XGPIO_OUT
XGPIO_TRISTATE
XGPIO_OPEN_DRAIN
.
.
.

Does sombody of you faced the same problem?
The second thing is that I did not find any documentation how to use GPIO on the user level to access things like LEDS and Swiches on my xilinx board. Do you have an idea how to do that (ie. which function calls to use).

Many thanks in advance for any hint.

Best Regards

Mirek

Signature · 2 lines
View this message in context: http://www.nabble.com/xilinx-gpio-in-kernel-2.6-tf3670122.html#a10254948
Sent from the linuxppc-embedded mailing list archive at Nabble.com.
author
#1 lore raw

Finally I was able to incorporate the xilinx_gpio driver to the kernel 2.6 tree.
To do so I have created the file xgpio_ioctl.h which is basically identical to
the file include/linux/ibm_ocp_gpio.h in the kernel linuxppc_2_4. The differences are
the macro names (I have replaced IBM with X and ibm_ with x).

I have modified also arch/ppc/syslib/virtex_devices.c. I have added into this file the entries which refer to GPIO definitions.

At the end I have modified the drivers/char/Kconfig and the drivers/char/xilinx_gpio/Makefile.

After all I was able to compile the kernel.

I did not find however how to deal with the GPIO driver on the user's level. I am sure that I have to use: open and ioctl function calls but I do not know how to distinguish between
two differenet GPIO interfaces to control respectively (LEDs and DIP switches).

I would appreciate very much any hint on that

Best Regards

Mierk

Quoted 47 lines · Mirek23 wrote:

Hi All,

I am trying to build the kernel 2.6 for my ml403 board. I use
the kernel 2.6 by Grant.
The ethernet (Temac) and serial drivers work fine. It is however no support for xilinx gpio in the kernel tree.

To satisfy that I have generated the xilinx_gpio driver by means of the EDK 8.2 .

I have tried to place the xilinx_gpio to the kernel 2.6 tree under drivers/char/xilinx_gpio.

I have done the suitable configuration on the Makefile and Kconfig level. When I build the kernel, the crosscompiler complaines about the xgpio_ioctl.h which comes
from the adapter.c file.

It seems to be that xgpio_ioctl.h conatins the missing macros:
XGPIO_IN
XGPIO_OUT
XGPIO_TRISTATE
XGPIO_OPEN_DRAIN
.
.
.

Does sombody of you faced the same problem?
The second thing is that I did not find any documentation how to use GPIO on the user level to access things like LEDS and Swiches on my xilinx board. Do you have an idea how to do that (ie. which function calls to use).

Many thanks in advance for any hint.

Best Regards

Mirek

Signature · 2 lines
View this message in context: http://www.nabble.com/xilinx-gpio-in-kernel-2.6-tf3670122.html#a10285090
Sent from the linuxppc-embedded mailing list archive at Nabble.com.
author
#2 lore raw

Hi All,

After some time I have found the way how to deal with GPIO driver from the
user space:

First you have to mknod xgpio under /dev :
crw-rw-rw- 1 root root 10, 185 Jun 1 13:59 /dev/xgpio

Example program below shows how to read from the GPIO channel. To write to the channel change the call:
ioctl(fgpio,XGPIO_IN,&sGpioData); to ioctl(fgpio,XGPIO_OUT,&sGpioData);

#include <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>

#include <linux/xgpio_ioctl.h>

main(){

  int fgpio =0;
  struct xgpio_ioctl_data sGpioData;
    /* {
        __u32 device;
        __u32 mask;
        __u32 data;
        }*/

sGpioData.device=0; /* N=0,1,2,3-> GPIO DEV NR 2*N (Lower 32 bit part
)

                                                   2*N+1 (Upper 32 bit part

)*/
sGpioData.mask=0xffffffff;
sGpioData.data=0x55555555;

fgpio = open ("/dev/xgpio",O_RDWR);
if( fgpio != -1){

ioctl(fgpio,XGPIO_IN,&sGpioData);//pointer here to xgpio_ioctl_data printf("Dip Swich readout 0x%X\n",sGpioData.data);
}
else
printf("Can not open GPIO\n");

close(fgpio);
}// end main

Signature · 2 lines
View this message in context: http://www.nabble.com/xilinx-gpio-in-kernel-2.6-tf3670122.html#a11523745
Sent from the linuxppc-embedded mailing list archive at Nabble.com.