Skip to content

Commit

Permalink
[ARM] 4275/1: generic gpio layer for ixp4xx
Browse files Browse the repository at this point in the history
This patch brings generic gpio layer support to ixp4xx. It creates
functions needed for gpio->irq and irq->gpio translation.

It expects and initial value to be passed to
gpio_direction_output() which has been introduced by
commit 28735a7 in Linus git tree.

Generic gpio layer is going to be used by pxa2xx_udc driver.

Signed-off-by: Milan Svoboda <msvoboda@ra.rockwell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Milan Svoboda authored and Russell King committed Apr 21, 2007
1 parent 235b185 commit 25735d1
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
23 changes: 23 additions & 0 deletions arch/arm/mach-ixp4xx/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,29 @@ static signed char irq2gpio[32] = {
7, 8, 9, 10, 11, 12, -1, -1,
};

int gpio_to_irq(int gpio)
{
int irq;

for (irq = 0; irq < 32; irq++) {
if (irq2gpio[irq] == gpio)
return irq;
}
return -EINVAL;
}
EXPORT_SYMBOL(gpio_to_irq);

int irq_to_gpio(int irq)
{
int gpio = (irq < 32) ? irq2gpio[irq] : -EINVAL;

if (gpio == -1)
return -EINVAL;

return gpio;
}
EXPORT_SYMBOL(irq_to_gpio);

static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
{
int line = irq2gpio[irq];
Expand Down
73 changes: 73 additions & 0 deletions include/asm-arm/arch-ixp4xx/gpio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* linux/include/asm-arm/arch-ixp4xx/gpio.h
*
* IXP4XX GPIO wrappers for arch-neutral GPIO calls
*
* Written by Milan Svoboda <msvoboda@ra.rockwell.com>
* Based on PXA implementation by Philipp Zabel <philipp.zabel@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/

#ifndef __ASM_ARCH_IXP4XX_GPIO_H
#define __ASM_ARCH_IXP4XX_GPIO_H

#include <asm/hardware.h>

static inline int gpio_request(unsigned gpio, const char *label)
{
return 0;
}

static inline void gpio_free(unsigned gpio)
{
return;
}

static inline int gpio_direction_input(unsigned gpio)
{
gpio_line_config(gpio, IXP4XX_GPIO_IN);
return 0;
}

static inline int gpio_direction_output(unsigned gpio, int level)
{
gpio_line_set(gpio, level);
gpio_line_config(gpio, IXP4XX_GPIO_OUT);
return 0;
}

static inline int gpio_get_value(unsigned gpio)
{
int value;

gpio_line_get(gpio, &value);

return value;
}

static inline void gpio_set_value(unsigned gpio, int value)
{
gpio_line_set(gpio, value);
}

#include <asm-generic/gpio.h> /* cansleep wrappers */

extern int gpio_to_irq(int gpio);
extern int irq_to_gpio(int gpio);

#endif

0 comments on commit 25735d1

Please sign in to comment.