Home | History | Annotate | Download | only in arch
      1 /*
      2  * linux/include/asm-arm/arch-omap/gpio.h
      3  *
      4  * OMAP GPIO handling defines and functions
      5  *
      6  * Copyright (C) 2003-2005 Nokia Corporation
      7  *
      8  * Written by Juha Yrjl <juha.yrjola (at) nokia.com>
      9  *
     10  * This program is free software; you can redistribute it and/or modify
     11  * it under the terms of the GNU General Public License as published by
     12  * the Free Software Foundation; either version 2 of the License, or
     13  * (at your option) any later version.
     14  *
     15  * This program is distributed in the hope that it will be useful,
     16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     18  * GNU General Public License for more details.
     19  *
     20  * You should have received a copy of the GNU General Public License
     21  * along with this program; if not, write to the Free Software
     22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     23  *
     24  */
     25 
     26 #ifndef __ASM_ARCH_OMAP_GPIO_H
     27 #define __ASM_ARCH_OMAP_GPIO_H
     28 
     29 #include <asm/hardware.h>
     30 #include <asm/arch/irqs.h>
     31 #include <asm/io.h>
     32 
     33 #define OMAP_MPUIO_BASE			(void __iomem *)0xfffb5000
     34 
     35 #ifdef CONFIG_ARCH_OMAP730
     36 #define OMAP_MPUIO_INPUT_LATCH		0x00
     37 #define OMAP_MPUIO_OUTPUT		0x02
     38 #define OMAP_MPUIO_IO_CNTL		0x04
     39 #define OMAP_MPUIO_KBR_LATCH		0x08
     40 #define OMAP_MPUIO_KBC			0x0a
     41 #define OMAP_MPUIO_GPIO_EVENT_MODE	0x0c
     42 #define OMAP_MPUIO_GPIO_INT_EDGE	0x0e
     43 #define OMAP_MPUIO_KBD_INT		0x10
     44 #define OMAP_MPUIO_GPIO_INT		0x12
     45 #define OMAP_MPUIO_KBD_MASKIT		0x14
     46 #define OMAP_MPUIO_GPIO_MASKIT		0x16
     47 #define OMAP_MPUIO_GPIO_DEBOUNCING	0x18
     48 #define OMAP_MPUIO_LATCH		0x1a
     49 #else
     50 #define OMAP_MPUIO_INPUT_LATCH		0x00
     51 #define OMAP_MPUIO_OUTPUT		0x04
     52 #define OMAP_MPUIO_IO_CNTL		0x08
     53 #define OMAP_MPUIO_KBR_LATCH		0x10
     54 #define OMAP_MPUIO_KBC			0x14
     55 #define OMAP_MPUIO_GPIO_EVENT_MODE	0x18
     56 #define OMAP_MPUIO_GPIO_INT_EDGE	0x1c
     57 #define OMAP_MPUIO_KBD_INT		0x20
     58 #define OMAP_MPUIO_GPIO_INT		0x24
     59 #define OMAP_MPUIO_KBD_MASKIT		0x28
     60 #define OMAP_MPUIO_GPIO_MASKIT		0x2c
     61 #define OMAP_MPUIO_GPIO_DEBOUNCING	0x30
     62 #define OMAP_MPUIO_LATCH		0x34
     63 #endif
     64 
     65 #define OMAP_MPUIO(nr)		(OMAP_MAX_GPIO_LINES + (nr))
     66 #define OMAP_GPIO_IS_MPUIO(nr)	((nr) >= OMAP_MAX_GPIO_LINES)
     67 
     68 #define OMAP_GPIO_IRQ(nr)	(OMAP_GPIO_IS_MPUIO(nr) ? \
     69 				 IH_MPUIO_BASE + ((nr) & 0x0f) : \
     70 				 IH_GPIO_BASE + (nr))
     71 
     72 struct omap_machine_gpio_bank {
     73 	int start;
     74 	int end;
     75 
     76 	void (*set_gpio_direction)(int gpio, int is_input);
     77 	void (*set_gpio_dataout)(int gpio, int enable);
     78 	int (*get_gpio_datain)(int gpio);
     79 };
     80 
     81 extern int omap_gpio_init(void);	/* Call from board init only */
     82 extern int omap_gpio_add_machine_gpio_bank(struct omap_machine_gpio_bank *gpio_bank);
     83 extern int omap_request_gpio(int gpio);
     84 extern void omap_free_gpio(int gpio);
     85 extern void omap_set_gpio_direction(int gpio, int is_input);
     86 extern void omap_set_gpio_dataout(int gpio, int enable);
     87 extern int omap_get_gpio_datain(int gpio);
     88 
     89 #endif
     90