linux/arch/arm/plat-omap/include/plat/gpio.h
<<
>>
Prefs
   1/*
   2 * arch/arm/plat-omap/include/mach/gpio.h
   3 *
   4 * OMAP GPIO handling defines and functions
   5 *
   6 * Copyright (C) 2003-2005 Nokia Corporation
   7 *
   8 * Written by Juha Yrjölä <juha.yrjola@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 <linux/io.h>
  30#include <linux/platform_device.h>
  31#include <mach/irqs.h>
  32
  33#define OMAP1_MPUIO_BASE                        0xfffb5000
  34
  35/*
  36 * These are the omap15xx/16xx offsets. The omap7xx offset are
  37 * OMAP_MPUIO_ / 2 offsets below.
  38 */
  39#define OMAP_MPUIO_INPUT_LATCH          0x00
  40#define OMAP_MPUIO_OUTPUT               0x04
  41#define OMAP_MPUIO_IO_CNTL              0x08
  42#define OMAP_MPUIO_KBR_LATCH            0x10
  43#define OMAP_MPUIO_KBC                  0x14
  44#define OMAP_MPUIO_GPIO_EVENT_MODE      0x18
  45#define OMAP_MPUIO_GPIO_INT_EDGE        0x1c
  46#define OMAP_MPUIO_KBD_INT              0x20
  47#define OMAP_MPUIO_GPIO_INT             0x24
  48#define OMAP_MPUIO_KBD_MASKIT           0x28
  49#define OMAP_MPUIO_GPIO_MASKIT          0x2c
  50#define OMAP_MPUIO_GPIO_DEBOUNCING      0x30
  51#define OMAP_MPUIO_LATCH                0x34
  52
  53#define OMAP34XX_NR_GPIOS               6
  54
  55#define OMAP_MPUIO(nr)          (OMAP_MAX_GPIO_LINES + (nr))
  56#define OMAP_GPIO_IS_MPUIO(nr)  ((nr) >= OMAP_MAX_GPIO_LINES)
  57
  58#define OMAP_GPIO_IRQ(nr)       (OMAP_GPIO_IS_MPUIO(nr) ? \
  59                                 IH_MPUIO_BASE + ((nr) & 0x0f) : \
  60                                 IH_GPIO_BASE + (nr))
  61
  62#define METHOD_MPUIO            0
  63#define METHOD_GPIO_1510        1
  64#define METHOD_GPIO_1610        2
  65#define METHOD_GPIO_7XX         3
  66#define METHOD_GPIO_24XX        5
  67#define METHOD_GPIO_44XX        6
  68
  69struct omap_gpio_dev_attr {
  70        int bank_width;         /* GPIO bank width */
  71        bool dbck_flag;         /* dbck required or not - True for OMAP3&4 */
  72};
  73
  74struct omap_gpio_platform_data {
  75        u16 virtual_irq_start;
  76        int bank_type;
  77        int bank_width;         /* GPIO bank width */
  78        int bank_stride;        /* Only needed for omap1 MPUIO */
  79        bool dbck_flag;         /* dbck required or not - True for OMAP3&4 */
  80};
  81
  82/* TODO: Analyze removing gpio_bank_count usage from driver code */
  83extern int gpio_bank_count;
  84
  85extern void omap2_gpio_prepare_for_idle(int off_mode);
  86extern void omap2_gpio_resume_after_idle(void);
  87extern void omap_set_gpio_debounce(int gpio, int enable);
  88extern void omap_set_gpio_debounce_time(int gpio, int enable);
  89extern void omap_gpio_save_context(void);
  90extern void omap_gpio_restore_context(void);
  91/*-------------------------------------------------------------------------*/
  92
  93/* Wrappers for "new style" GPIO calls, using the new infrastructure
  94 * which lets us plug in FPGA, I2C, and other implementations.
  95 * *
  96 * The original OMAP-specfic calls should eventually be removed.
  97 */
  98
  99#include <linux/errno.h>
 100#include <asm-generic/gpio.h>
 101
 102static inline int gpio_get_value(unsigned gpio)
 103{
 104        return __gpio_get_value(gpio);
 105}
 106
 107static inline void gpio_set_value(unsigned gpio, int value)
 108{
 109        __gpio_set_value(gpio, value);
 110}
 111
 112static inline int gpio_cansleep(unsigned gpio)
 113{
 114        return __gpio_cansleep(gpio);
 115}
 116
 117static inline int gpio_to_irq(unsigned gpio)
 118{
 119        return __gpio_to_irq(gpio);
 120}
 121
 122static inline int irq_to_gpio(unsigned irq)
 123{
 124        int tmp;
 125
 126        /* omap1 SOC mpuio */
 127        if (cpu_class_is_omap1() && (irq < (IH_MPUIO_BASE + 16)))
 128                return (irq - IH_MPUIO_BASE) + OMAP_MAX_GPIO_LINES;
 129
 130        /* SOC gpio */
 131        tmp = irq - IH_GPIO_BASE;
 132        if (tmp < OMAP_MAX_GPIO_LINES)
 133                return tmp;
 134
 135        /* we don't supply reverse mappings for non-SOC gpios */
 136        return -EIO;
 137}
 138
 139#endif
 140