Skip to content

scottellis/omap3-mux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A small kernel module that lets you look at the current PADCONF register value for a given GPIO. It also shows the GPIO_OE register status for the GPIO in question.

It should work for any OMAP34XX board, but I've only tested it with Overo's. I wrote it because I keep forgetting to mark the microSD cards with the different u-boot muxings I've been playing around with.

The output is similar to the u-boot muxing file board/overo/overo.h

To build it, you need a cross-compile environment and the source tree for the current kernel that you are running on the device.

If you are using OE, then you can source the appropriate -source-me.txt file in the project. There is one for overo and another for the beagleboard. That's all I've tested.

After that, run make to build.

Here's an example.

$ git clone git://github.com/scottellis/omap3-mux.git
$ cd omap3-mux
$ [optional] export OETMP=/oe1
$ . overo-source-me.txt 
$ make
make -C /oe1/sysroots/overo-angstrom-linux-gnueabi/kernel M=/home/scott/examples/omap3-mux modules 
make[1]: Entering directory `/oe1/sysroots/overo-angstrom-linux-gnueabi/kernel'
  CC [M]  /home/scott/examples/omap3-mux/mux.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/scott/examples/omap3-mux/mux.mod.o
  LD [M]  /home/scott/examples/omap3-mux/mux.ko
make[1]: Leaving directory `/oe1/sysroots/overo-angstrom-linux-gnueabi/kernel'

The module will be called mux.ko

Copy it to your device and load it with insmod.

When the module loads a /dev/mux special file will be created.

Send it a gpio number and it will give you back the PADCONF register value corresponding to the GPIO on the console.

Write is the only I/O operation the module responds to.

A few GPIO appear more then once in table 7.5 of the OMAP3 TRM, for those pins you will get two lines of output.

You can find the TRM here [http://www-s.ti.com/sc/techlit/spruf98]

Output format

[padconf_register_address] GPIO_XXX ([16-bit padconf_reg_value]) : [flags]		
[gpio_oe_register_address] GPIO_OE[bank] : [gpio_oe_reg_value] (bit state) 

The address is at 16-bit resolution as opposed to the TRM Table 7.5's 32-bit level.

Flags

IEN - Input Enable
IDIS - Input Disable
PTD - Pull type Down
PTU - Pull type Up
DIS - Pull type selection is inactive
EN - Pull type selection is active

If for some reason the value the module is putting out doesn't look right, verify that I got the gpio to padconf register mapping correct (gp_map) in mux.c. There was plenty of opportunity for typos there. I've really only verified the GPIO I'm interested in.

Sample session

[copy mux.ko to the overo]

root@overo:~# ls
mux.ko

root@overo:~# insmod mux.ko 

root@overo:~# ls -all /dev/mux
crw-r--r-- 1 root root 251, 0 Feb  7 12:42 /dev/mux

root@overo:~# echo 170 > /dev/mux
0x480021c6  GPIO_170 (0x001c) : IDIS | PTU | EN | M4
0x49058034 GPIO_OE[5] : 0xFF7FFEEF bit 10 is ON (input)

root@overo:/sys/class/gpio# echo 170 > export

root@overo:/sys/class/gpio# echo 170 > /dev/mux
0x480021c6  GPIO_170 (0x001c) : IDIS | PTU | EN | M4
0x49058034 GPIO_OE[5] : 0xFF7FFEEF bit 10 is ON (input)

root@overo:/sys/class/gpio# echo out > gpio170/direction

root@overo:/sys/class/gpio# echo 170 > /dev/mux
0x480021c6  GPIO_170 (0x001c) : IDIS | PTU | EN | M4
0x49058034 GPIO_OE[5] : 0xFF7FFAEF bit 10 is OFF (output)

root@overo:~# echo 146 > /dev/mux
0x48002178  GPIO_146 (0x0104) : IEN | PTD | DIS | M4
0x49056034 GPIO_OE[4] : 0xFFFFFFFF bit 18 is ON (input)

root@overo:~# rmmod mux

About

Read the PADCONF register configuration for GPIO

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages