| /* |
| * nios2 gpio driver |
| * |
| * This gpio core is described in http://nioswiki.com/GPIO |
| * bit[0] data |
| * bit[1] output enable |
| * |
| * When CONFIG_SYS_GPIO_BASE is not defined, the board may either |
| * provide its own driver or the altera_pio driver may be used. |
| * |
| * Copyright (C) 2010 Thomas Chou <thomas@wytron.com.tw> |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| */ |
| |
| #ifndef _ASM_NIOS2_GPIO_H_ |
| #define _ASM_NIOS2_GPIO_H_ |
| |
| #ifdef CONFIG_SYS_GPIO_BASE |
| #include <asm/io.h> |
| |
| static inline int gpio_request(unsigned gpio, const char *label) |
| { |
| return 0; |
| } |
| |
| static inline int gpio_free(unsigned gpio) |
| { |
| return 0; |
| } |
| |
| static inline int gpio_direction_input(unsigned gpio) |
| { |
| writel(1, CONFIG_SYS_GPIO_BASE + (gpio << 2)); |
| return 0; |
| } |
| |
| static inline int gpio_direction_output(unsigned gpio, int value) |
| { |
| writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio << 2)); |
| return 0; |
| } |
| |
| static inline int gpio_get_value(unsigned gpio) |
| { |
| return readl(CONFIG_SYS_GPIO_BASE + (gpio << 2)); |
| } |
| |
| static inline void gpio_set_value(unsigned gpio, int value) |
| { |
| writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio << 2)); |
| } |
| |
| static inline int gpio_is_valid(int number) |
| { |
| return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH; |
| } |
| #else |
| #ifdef CONFIG_ALTERA_PIO |
| extern int altera_pio_init(u32 base, u8 width, char iot, |
| u32 rstval, u32 negmask, |
| const char *label); |
| |
| extern void altera_pio_info(void); |
| #define gpio_status() altera_pio_info() |
| #endif |
| |
| extern int gpio_request(unsigned gpio, const char *label); |
| extern int gpio_free(unsigned gpio); |
| extern int gpio_direction_input(unsigned gpio); |
| extern int gpio_direction_output(unsigned gpio, int value); |
| extern int gpio_get_value(unsigned gpio); |
| extern void gpio_set_value(unsigned gpio, int value); |
| extern int gpio_is_valid(int number); |
| #endif /* CONFIG_SYS_GPIO_BASE */ |
| |
| #endif /* _ASM_NIOS2_GPIO_H_ */ |