Skip to content
Snippets Groups Projects
Commit c34346d8 authored by Bob Liu's avatar Bob Liu Committed by sonic
Browse files

blackfin: bf60x: add gpio support


Signed-off-by: default avatarBob Liu <lliubbo@gmail.com>
Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Signed-off-by: default avatarSonic Zhang <sonic.adi@gmail.com>
parent 7677d65f
No related branches found
No related tags found
No related merge requests found
...@@ -66,6 +66,14 @@ static struct gpio_port_t * const gpio_array[] = { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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);
......
/*
* 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_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment