mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-07-11 09:02:52 +00:00
blackfin: bf60x: add gpio support
Signed-off-by: Bob Liu <lliubbo@gmail.com> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> Signed-off-by: Sonic Zhang <sonic.adi@gmail.com>
This commit is contained in:
parent
7677d65f65
commit
c34346d85d
3 changed files with 181 additions and 8 deletions
|
@ -66,6 +66,14 @@ static struct gpio_port_t * const gpio_array[] = {
|
||||||
(struct gpio_port_t *)PORTH_FER,
|
(struct gpio_port_t *)PORTH_FER,
|
||||||
(struct gpio_port_t *)PORTI_FER,
|
(struct gpio_port_t *)PORTI_FER,
|
||||||
(struct gpio_port_t *)PORTJ_FER,
|
(struct gpio_port_t *)PORTJ_FER,
|
||||||
|
#elif defined(CONFIG_BF60x)
|
||||||
|
(struct gpio_port_t *)PORTA_FER,
|
||||||
|
(struct gpio_port_t *)PORTB_FER,
|
||||||
|
(struct gpio_port_t *)PORTC_FER,
|
||||||
|
(struct gpio_port_t *)PORTD_FER,
|
||||||
|
(struct gpio_port_t *)PORTE_FER,
|
||||||
|
(struct gpio_port_t *)PORTF_FER,
|
||||||
|
(struct gpio_port_t *)PORTG_FER,
|
||||||
#else
|
#else
|
||||||
# error no gpio arrays defined
|
# error no gpio arrays defined
|
||||||
#endif
|
#endif
|
||||||
|
@ -216,6 +224,12 @@ static void port_setup(unsigned gpio, unsigned short usage)
|
||||||
else
|
else
|
||||||
gpio_array[gpio_bank(gpio)]->port_fer |= gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->port_fer |= gpio_bit(gpio);
|
||||||
SSYNC();
|
SSYNC();
|
||||||
|
#elif defined(CONFIG_BF60x)
|
||||||
|
if (usage == GPIO_USAGE)
|
||||||
|
gpio_array[gpio_bank(gpio)]->port_fer_clear = gpio_bit(gpio);
|
||||||
|
else
|
||||||
|
gpio_array[gpio_bank(gpio)]->port_fer_set = gpio_bit(gpio);
|
||||||
|
SSYNC();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +304,7 @@ static void portmux_setup(unsigned short per)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined(CONFIG_BF54x)
|
#elif defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
||||||
inline void portmux_setup(unsigned short per)
|
inline void portmux_setup(unsigned short per)
|
||||||
{
|
{
|
||||||
u32 pmux;
|
u32 pmux;
|
||||||
|
@ -330,7 +344,7 @@ inline void portmux_setup(unsigned short per)
|
||||||
# define portmux_setup(...) do { } while (0)
|
# define portmux_setup(...) do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_BF54x
|
#if !defined(CONFIG_BF54x) && !defined(CONFIG_BF60x)
|
||||||
/***********************************************************
|
/***********************************************************
|
||||||
*
|
*
|
||||||
* FUNCTIONS: Blackfin General Purpose Ports Access Functions
|
* FUNCTIONS: Blackfin General Purpose Ports Access Functions
|
||||||
|
@ -534,7 +548,7 @@ int peripheral_request(unsigned short per, const char *label)
|
||||||
* be requested and used by several drivers
|
* be requested and used by several drivers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_BF54x
|
#if defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
||||||
if (!((per & P_MAYSHARE) && get_portmux(per) == P_FUNCT2MUX(per))) {
|
if (!((per & P_MAYSHARE) && get_portmux(per) == P_FUNCT2MUX(per))) {
|
||||||
#else
|
#else
|
||||||
if (!(per & P_MAYSHARE)) {
|
if (!(per & P_MAYSHARE)) {
|
||||||
|
@ -651,7 +665,7 @@ int bfin_gpio_request(unsigned gpio, const char *label)
|
||||||
gpio, get_label(gpio));
|
gpio, get_label(gpio));
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
#ifndef CONFIG_BF54x
|
#if !defined(CONFIG_BF54x) && !defined(CONFIG_BF60x)
|
||||||
else { /* Reset POLAR setting when acquiring a gpio for the first time */
|
else { /* Reset POLAR setting when acquiring a gpio for the first time */
|
||||||
set_gpio_polar(gpio, 0);
|
set_gpio_polar(gpio, 0);
|
||||||
}
|
}
|
||||||
|
@ -732,12 +746,16 @@ void bfin_special_gpio_free(unsigned gpio)
|
||||||
|
|
||||||
static inline void __bfin_gpio_direction_input(unsigned gpio)
|
static inline void __bfin_gpio_direction_input(unsigned gpio)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BF54x
|
#if defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
||||||
gpio_array[gpio_bank(gpio)]->dir_clear = gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->dir_clear = gpio_bit(gpio);
|
||||||
#else
|
#else
|
||||||
gpio_array[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(CONFIG_BF60x)
|
||||||
|
gpio_array[gpio_bank(gpio)]->inen_set = gpio_bit(gpio);
|
||||||
|
#else
|
||||||
gpio_array[gpio_bank(gpio)]->inen |= gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->inen |= gpio_bit(gpio);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int bfin_gpio_direction_input(unsigned gpio)
|
int bfin_gpio_direction_input(unsigned gpio)
|
||||||
|
@ -785,9 +803,13 @@ int bfin_gpio_direction_output(unsigned gpio, int value)
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
|
#if defined(CONFIG_BF60x)
|
||||||
|
gpio_array[gpio_bank(gpio)]->inen_clear = gpio_bit(gpio);
|
||||||
|
#else
|
||||||
gpio_array[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
|
||||||
|
#endif
|
||||||
gpio_set_value(gpio, value);
|
gpio_set_value(gpio, value);
|
||||||
#ifdef CONFIG_BF54x
|
#if defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
||||||
gpio_array[gpio_bank(gpio)]->dir_set = gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->dir_set = gpio_bit(gpio);
|
||||||
#else
|
#else
|
||||||
gpio_array[gpio_bank(gpio)]->dir |= gpio_bit(gpio);
|
gpio_array[gpio_bank(gpio)]->dir |= gpio_bit(gpio);
|
||||||
|
@ -801,7 +823,7 @@ int bfin_gpio_direction_output(unsigned gpio, int value)
|
||||||
|
|
||||||
int bfin_gpio_get_value(unsigned gpio)
|
int bfin_gpio_get_value(unsigned gpio)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_BF54x
|
#if defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
|
||||||
return (1 & (gpio_array[gpio_bank(gpio)]->data >> gpio_sub_n(gpio)));
|
return (1 & (gpio_array[gpio_bank(gpio)]->data >> gpio_sub_n(gpio)));
|
||||||
#else
|
#else
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#ifndef CONFIG_BF54x
|
#if !defined(CONFIG_BF54x) && !defined(CONFIG_BF60x)
|
||||||
void set_gpio_dir(unsigned, unsigned short);
|
void set_gpio_dir(unsigned, unsigned short);
|
||||||
void set_gpio_inen(unsigned, unsigned short);
|
void set_gpio_inen(unsigned, unsigned short);
|
||||||
void set_gpio_polar(unsigned, unsigned short);
|
void set_gpio_polar(unsigned, unsigned short);
|
||||||
|
|
151
arch/blackfin/include/asm/mach-bf609/gpio.h
Normal file
151
arch/blackfin/include/asm/mach-bf609/gpio.h
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2008 Analog Devices Inc.
|
||||||
|
* Licensed under the GPL-2 or later.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACH_GPIO_H_
|
||||||
|
#define _MACH_GPIO_H_
|
||||||
|
|
||||||
|
#define MAX_BLACKFIN_GPIOS 112
|
||||||
|
|
||||||
|
#define GPIO_PA0 0
|
||||||
|
#define GPIO_PA1 1
|
||||||
|
#define GPIO_PA2 2
|
||||||
|
#define GPIO_PA3 3
|
||||||
|
#define GPIO_PA4 4
|
||||||
|
#define GPIO_PA5 5
|
||||||
|
#define GPIO_PA6 6
|
||||||
|
#define GPIO_PA7 7
|
||||||
|
#define GPIO_PA8 8
|
||||||
|
#define GPIO_PA9 9
|
||||||
|
#define GPIO_PA10 10
|
||||||
|
#define GPIO_PA11 11
|
||||||
|
#define GPIO_PA12 12
|
||||||
|
#define GPIO_PA13 13
|
||||||
|
#define GPIO_PA14 14
|
||||||
|
#define GPIO_PA15 15
|
||||||
|
#define GPIO_PB0 16
|
||||||
|
#define GPIO_PB1 17
|
||||||
|
#define GPIO_PB2 18
|
||||||
|
#define GPIO_PB3 19
|
||||||
|
#define GPIO_PB4 20
|
||||||
|
#define GPIO_PB5 21
|
||||||
|
#define GPIO_PB6 22
|
||||||
|
#define GPIO_PB7 23
|
||||||
|
#define GPIO_PB8 24
|
||||||
|
#define GPIO_PB9 25
|
||||||
|
#define GPIO_PB10 26
|
||||||
|
#define GPIO_PB11 27
|
||||||
|
#define GPIO_PB12 28
|
||||||
|
#define GPIO_PB13 29
|
||||||
|
#define GPIO_PB14 30
|
||||||
|
#define GPIO_PB15 31
|
||||||
|
#define GPIO_PC0 32
|
||||||
|
#define GPIO_PC1 33
|
||||||
|
#define GPIO_PC2 34
|
||||||
|
#define GPIO_PC3 35
|
||||||
|
#define GPIO_PC4 36
|
||||||
|
#define GPIO_PC5 37
|
||||||
|
#define GPIO_PC6 38
|
||||||
|
#define GPIO_PC7 39
|
||||||
|
#define GPIO_PC8 40
|
||||||
|
#define GPIO_PC9 41
|
||||||
|
#define GPIO_PC10 42
|
||||||
|
#define GPIO_PC11 43
|
||||||
|
#define GPIO_PC12 44
|
||||||
|
#define GPIO_PC13 45
|
||||||
|
#define GPIO_PC14 46
|
||||||
|
#define GPIO_PC15 47
|
||||||
|
#define GPIO_PD0 48
|
||||||
|
#define GPIO_PD1 49
|
||||||
|
#define GPIO_PD2 50
|
||||||
|
#define GPIO_PD3 51
|
||||||
|
#define GPIO_PD4 52
|
||||||
|
#define GPIO_PD5 53
|
||||||
|
#define GPIO_PD6 54
|
||||||
|
#define GPIO_PD7 55
|
||||||
|
#define GPIO_PD8 56
|
||||||
|
#define GPIO_PD9 57
|
||||||
|
#define GPIO_PD10 58
|
||||||
|
#define GPIO_PD11 59
|
||||||
|
#define GPIO_PD12 60
|
||||||
|
#define GPIO_PD13 61
|
||||||
|
#define GPIO_PD14 62
|
||||||
|
#define GPIO_PD15 63
|
||||||
|
#define GPIO_PE0 64
|
||||||
|
#define GPIO_PE1 65
|
||||||
|
#define GPIO_PE2 66
|
||||||
|
#define GPIO_PE3 67
|
||||||
|
#define GPIO_PE4 68
|
||||||
|
#define GPIO_PE5 69
|
||||||
|
#define GPIO_PE6 70
|
||||||
|
#define GPIO_PE7 71
|
||||||
|
#define GPIO_PE8 72
|
||||||
|
#define GPIO_PE9 73
|
||||||
|
#define GPIO_PE10 74
|
||||||
|
#define GPIO_PE11 75
|
||||||
|
#define GPIO_PE12 76
|
||||||
|
#define GPIO_PE13 77
|
||||||
|
#define GPIO_PE14 78
|
||||||
|
#define GPIO_PE15 79
|
||||||
|
#define GPIO_PF0 80
|
||||||
|
#define GPIO_PF1 81
|
||||||
|
#define GPIO_PF2 82
|
||||||
|
#define GPIO_PF3 83
|
||||||
|
#define GPIO_PF4 84
|
||||||
|
#define GPIO_PF5 85
|
||||||
|
#define GPIO_PF6 86
|
||||||
|
#define GPIO_PF7 87
|
||||||
|
#define GPIO_PF8 88
|
||||||
|
#define GPIO_PF9 89
|
||||||
|
#define GPIO_PF10 90
|
||||||
|
#define GPIO_PF11 91
|
||||||
|
#define GPIO_PF12 92
|
||||||
|
#define GPIO_PF13 93
|
||||||
|
#define GPIO_PF14 94
|
||||||
|
#define GPIO_PF15 95
|
||||||
|
#define GPIO_PG0 96
|
||||||
|
#define GPIO_PG1 97
|
||||||
|
#define GPIO_PG2 98
|
||||||
|
#define GPIO_PG3 99
|
||||||
|
#define GPIO_PG4 100
|
||||||
|
#define GPIO_PG5 101
|
||||||
|
#define GPIO_PG6 102
|
||||||
|
#define GPIO_PG7 103
|
||||||
|
#define GPIO_PG8 104
|
||||||
|
#define GPIO_PG9 105
|
||||||
|
#define GPIO_PG10 106
|
||||||
|
#define GPIO_PG11 107
|
||||||
|
#define GPIO_PG12 108
|
||||||
|
#define GPIO_PG13 109
|
||||||
|
#define GPIO_PG14 110
|
||||||
|
#define GPIO_PG15 111
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
struct gpio_port_t {
|
||||||
|
unsigned long port_fer;
|
||||||
|
unsigned long port_fer_set;
|
||||||
|
unsigned long port_fer_clear;
|
||||||
|
unsigned long data;
|
||||||
|
unsigned long data_set;
|
||||||
|
unsigned long data_clear;
|
||||||
|
unsigned long dir;
|
||||||
|
unsigned long dir_set;
|
||||||
|
unsigned long dir_clear;
|
||||||
|
unsigned long inen;
|
||||||
|
unsigned long inen_set;
|
||||||
|
unsigned long inen_clear;
|
||||||
|
unsigned long port_mux;
|
||||||
|
unsigned long toggle;
|
||||||
|
unsigned long polar;
|
||||||
|
unsigned long polar_set;
|
||||||
|
unsigned long polar_clear;
|
||||||
|
unsigned long lock;
|
||||||
|
unsigned long spare;
|
||||||
|
unsigned long revid;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _MACH_GPIO_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue