NOTICE: The Processors Wiki will End-of-Life on January 15, 2021. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.

TI81XX PSP GPIO Driver User Guide

From Texas Instruments Wiki
Jump to: navigation, search
TIBanner.png
Linux PSP GPIO Driver Guide
Linux PSP

Introduction[edit]

This wiki page provides the usage information of GPIO Linux driver usage, both in user and kernel space.

Set pinmux configuration for GPIO pin usage, details of pinmux configuration are mentioned on PSP user guide. If the pinmux settings are not proper then expected functionality will not get.

NOTE

Linux GPIO numbers start from "0".


NOTE

Some TI SoCs have multiple banks of GPIOs.

For example the TI814x has 4 banks of 32 GPIOs, for a total of 128 GPIO, i.e Bank-0[0..31], Bank-1[0..31], Bank-2[0..31], Bank-3[0..31].

In this case Bank-1[0..31] maps to Linux GPIO numbers 32..63, Bank-2[0..31] to Linux GPIO numbers 64..95 etc.


Driver Configuration[edit]

This section describes about the kernel configurations for GPIO driver

The default kernel configuration enables support for GPIO driver (built into the kernel).

To enable or disable GPIO driver from kernel build, follow these steps:

$ make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm menuconfig
  • Select Device Drivers from the main menu.
    Power management options  --->
[*] Networking support  --->
    Device Drivers  --->
    File systems  --->
...
...
  • Select GPIO Support from the menu.
    PPS support  --->
    PTP clock support  --->
-*- GPIO Support  --->
< > Dallas's 1-wire support  --->
...
...


Sysfs entries configuration[edit]

GPIO can be access using SYSFS entries from User Space. For that Select /sys/class/gpio/... (sysfs interface) from the GPIO support.

[ ] Debug GPIO calls
[*] /sys/class/gpio/... (sysfs interface)
    *** Memory mapped GPIO drivers: ***
< > Basic memory-mapped GPIO controllers support
...
...
  • After doing driver selection, exit and save the kernel configuration when prompted.


IRQ handling[edit]

GPIO pin is also used as a interrupt source, these are the general usage of IRQ handling using GPIO lines.

  • Map GPIO number to corresponding IRQ number, GPIO 0 need not use IRQ 0
irq_num = gpio_to_irq(30)
  • Request IRQ, make sure that irq_num should be non-error value
request_irq(irq_num, handler, 0, "gpio_test", NULL);
  • Set IRQ type Raising/Falling/Level triggered
set_irq_type(irq_num, IRQ_TYPE_EDGE_RISING);
  • During the clean-up path free the IRQ and gpio
free_irq(irq_num, NULL);
gpio_free(30);


Driver Usage [edit]

Kernel Level[edit]

  • Allocate memory to GPIO line, can be achieved by doing gpio_request()
err = gpio_request(30, "sample_name");

  • Depending on the requirement set GPIO as input or output pin then set gpio value as high or low.

Setting the GPIO pin 30 as input

gpio_direction_input(30);

Make pin 30 as output and set the value as high.

gpio_direction_output(30, 1);

Exporting that particular pin (30) to sysfs entry then use this API

gpio_export(30, true);

Get value from GPIO pin

gpio_get_value(30);


User Space - Sysfs control[edit]

  • Enable GPIO sysfs support in kernel configuration and build the kernel
Device Drivers  ---> GPIO Support  ---> /sys/class/gpio/... (sysfs interface)
  • Sysfs entries
Export the particular GPIO pin for user control. GPIO30 is taken as example.
$ echo 30 > /sys/class/gpio/export
Change the GPIO pin direction to in/out
$ echo "out" > /sys/class/gpio/gpio30/direction

or

$ echo "in" > /sys/class/gpio/gpio30/direction
Change the value
$ echo 1 > /sys/class/gpio/gpio30/value

or

$ echo 0 > /sys/class/gpio/gpio30/value
Unexport the GPIO pin
$ echo 30 > /sys/class/gpio/unexport

Note: GPIO's which are used already in the drivers can not be control from sysfs, unless until driver export that particular pin.

Run these commands for knowing what are the GPIO's already requested in the drivers.

$ mount -t debugfs debugfs /sys/kernel/debug
$ cat /sys/kernel/debug/gpio


References[edit]

E2e.jpg {{
  1. switchcategory:MultiCore=
  • For technical support on MultiCore devices, please post your questions in the C6000 MultiCore Forum
  • For questions related to the BIOS MultiCore SDK (MCSDK), please use the BIOS Forum

Please post only comments related to the article TI81XX PSP GPIO Driver User Guide here.

Keystone=
  • For technical support on MultiCore devices, please post your questions in the C6000 MultiCore Forum
  • For questions related to the BIOS MultiCore SDK (MCSDK), please use the BIOS Forum

Please post only comments related to the article TI81XX PSP GPIO Driver User Guide here.

C2000=For technical support on the C2000 please post your questions on The C2000 Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. DaVinci=For technical support on DaVincoplease post your questions on The DaVinci Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. MSP430=For technical support on MSP430 please post your questions on The MSP430 Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. OMAP35x=For technical support on OMAP please post your questions on The OMAP Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. OMAPL1=For technical support on OMAP please post your questions on The OMAP Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. MAVRK=For technical support on MAVRK please post your questions on The MAVRK Toolbox Forum. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here. For technical support please post your questions at http://e2e.ti.com. Please post only comments about the article TI81XX PSP GPIO Driver User Guide here.

}}

Hyperlink blue.png Links

Amplifiers & Linear
Audio
Broadband RF/IF & Digital Radio
Clocks & Timers
Data Converters

DLP & MEMS
High-Reliability
Interface
Logic
Power Management

Processors

Switches & Multiplexers
Temperature Sensors & Control ICs
Wireless Connectivity