• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/mach-sa1100/
1/*
2 * linux/arch/arm/mach-sa1100/gpio.c
3 *
4 * Generic SA-1100 GPIO handling
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/init.h>
12#include <linux/module.h>
13
14#include <asm/gpio.h>
15#include <mach/hardware.h>
16#include "generic.h"
17
18static int sa1100_gpio_get(struct gpio_chip *chip, unsigned offset)
19{
20	return GPLR & GPIO_GPIO(offset);
21}
22
23static void sa1100_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
24{
25	if (value)
26		GPSR = GPIO_GPIO(offset);
27	else
28		GPCR = GPIO_GPIO(offset);
29}
30
31static int sa1100_direction_input(struct gpio_chip *chip, unsigned offset)
32{
33	unsigned long flags;
34
35	local_irq_save(flags);
36	GPDR &= ~GPIO_GPIO(offset);
37	local_irq_restore(flags);
38	return 0;
39}
40
41static int sa1100_direction_output(struct gpio_chip *chip, unsigned offset, int value)
42{
43	unsigned long flags;
44
45	local_irq_save(flags);
46	sa1100_gpio_set(chip, offset, value);
47	GPDR |= GPIO_GPIO(offset);
48	local_irq_restore(flags);
49	return 0;
50}
51
52static struct gpio_chip sa1100_gpio_chip = {
53	.label			= "gpio",
54	.direction_input	= sa1100_direction_input,
55	.direction_output	= sa1100_direction_output,
56	.set			= sa1100_gpio_set,
57	.get			= sa1100_gpio_get,
58	.base			= 0,
59	.ngpio			= GPIO_MAX + 1,
60};
61
62void __init sa1100_init_gpio(void)
63{
64	gpiochip_add(&sa1100_gpio_chip);
65}
66