| /* |
| * SDK7786 FPGA USRGPIR Support. |
| * |
| * Copyright (C) 2010 Paul Mundt |
| * |
| * This file is subject to the terms and conditions of the GNU General Public |
| * License. See the file "COPYING" in the main directory of this archive |
| * for more details. |
| */ |
| #include <linux/init.h> |
| #include <linux/interrupt.h> |
| #include <linux/gpio/driver.h> |
| #include <linux/irq.h> |
| #include <linux/kernel.h> |
| #include <linux/spinlock.h> |
| #include <linux/io.h> |
| #include <mach/fpga.h> |
| |
| #define NR_FPGA_GPIOS 8 |
| |
| static const char *usrgpir_gpio_names[NR_FPGA_GPIOS] = { |
| "in0", "in1", "in2", "in3", "in4", "in5", "in6", "in7", |
| }; |
| |
| static int usrgpir_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) |
| { |
| /* always in */ |
| return 0; |
| } |
| |
| static int usrgpir_gpio_get(struct gpio_chip *chip, unsigned gpio) |
| { |
| return !!(fpga_read_reg(USRGPIR) & (1 << gpio)); |
| } |
| |
| static struct gpio_chip usrgpir_gpio_chip = { |
| .label = "sdk7786-fpga", |
| .names = usrgpir_gpio_names, |
| .direction_input = usrgpir_gpio_direction_input, |
| .get = usrgpir_gpio_get, |
| .base = -1, /* don't care */ |
| .ngpio = NR_FPGA_GPIOS, |
| }; |
| |
| static int __init usrgpir_gpio_setup(void) |
| { |
| return gpiochip_add_data(&usrgpir_gpio_chip, NULL); |
| } |
| device_initcall(usrgpir_gpio_setup); |