1 /* 2 * SDK7786 FPGA USRGPIR Support. 3 * 4 * Copyright (C) 2010 Paul Mundt 5 * 6 * This file is subject to the terms and conditions of the GNU General Public 7 * License. See the file "COPYING" in the main directory of this archive 8 * for more details. 9 */ 10 #include <linux/init.h> 11 #include <linux/interrupt.h> 12 #include <linux/gpio/driver.h> 13 #include <linux/irq.h> 14 #include <linux/kernel.h> 15 #include <linux/spinlock.h> 16 #include <linux/io.h> 17 #include <mach/fpga.h> 18 19 #define NR_FPGA_GPIOS 8 20 21 static const char *usrgpir_gpio_names[NR_FPGA_GPIOS] = { 22 "in0", "in1", "in2", "in3", "in4", "in5", "in6", "in7", 23 }; 24 25 static int usrgpir_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) 26 { 27 /* always in */ 28 return 0; 29 } 30 31 static int usrgpir_gpio_get(struct gpio_chip *chip, unsigned gpio) 32 { 33 return !!(fpga_read_reg(USRGPIR) & (1 << gpio)); 34 } 35 36 static struct gpio_chip usrgpir_gpio_chip = { 37 .label = "sdk7786-fpga", 38 .names = usrgpir_gpio_names, 39 .direction_input = usrgpir_gpio_direction_input, 40 .get = usrgpir_gpio_get, 41 .base = -1, /* don't care */ 42 .ngpio = NR_FPGA_GPIOS, 43 }; 44 45 static int __init usrgpir_gpio_setup(void) 46 { 47 return gpiochip_add_data(&usrgpir_gpio_chip, NULL); 48 } 49 device_initcall(usrgpir_gpio_setup); 50