diff options
author | Mike Frysinger <michael.frysinger@analog.com> | 2007-10-10 12:22:35 -0400 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-10-10 12:22:35 -0400 |
commit | 168f1212c098727f2509fe0f66bd30d7209a8159 (patch) | |
tree | e749898e8ab56131a12d8fc489081321abb3ff2f /arch/blackfin/kernel/bfin_gpio.c | |
parent | 27d875f2c134c4b26860ccdd03b4c52cce4efc2c (diff) |
Blackfin arch: rewrite our reboot code in C
rewrite our reboot code in C rather than assembly to be like
other architectures and to allow board maintainers to define
custom behavior
Signed-off-by: Mike Frysinger <michael.frysinger@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/kernel/bfin_gpio.c')
-rw-r--r-- | arch/blackfin/kernel/bfin_gpio.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c index 0182ce1fc4fb..d9284d7dc9fc 100644 --- a/arch/blackfin/kernel/bfin_gpio.c +++ b/arch/blackfin/kernel/bfin_gpio.c | |||
@@ -80,6 +80,7 @@ | |||
80 | * GPIO_47 PH15 PF47 | 80 | * GPIO_47 PH15 PF47 |
81 | */ | 81 | */ |
82 | 82 | ||
83 | #include <linux/delay.h> | ||
83 | #include <linux/module.h> | 84 | #include <linux/module.h> |
84 | #include <linux/err.h> | 85 | #include <linux/err.h> |
85 | #include <asm/blackfin.h> | 86 | #include <asm/blackfin.h> |
@@ -888,3 +889,20 @@ void gpio_direction_output(unsigned short gpio) | |||
888 | local_irq_restore(flags); | 889 | local_irq_restore(flags); |
889 | } | 890 | } |
890 | EXPORT_SYMBOL(gpio_direction_output); | 891 | EXPORT_SYMBOL(gpio_direction_output); |
892 | |||
893 | /* If we are booting from SPI and our board lacks a strong enough pull up, | ||
894 | * the core can reset and execute the bootrom faster than the resistor can | ||
895 | * pull the signal logically high. To work around this (common) error in | ||
896 | * board design, we explicitly set the pin back to GPIO mode, force /CS | ||
897 | * high, and wait for the electrons to do their thing. | ||
898 | * | ||
899 | * This function only makes sense to be called from reset code, but it | ||
900 | * lives here as we need to force all the GPIO states w/out going through | ||
901 | * BUG() checks and such. | ||
902 | */ | ||
903 | void bfin_gpio_reset_spi0_ssel1(void) | ||
904 | { | ||
905 | port_setup(P_SPI0_SSEL1, GPIO_USAGE); | ||
906 | gpio_bankb[gpio_bank(P_SPI0_SSEL1)]->data_set = gpio_bit(P_SPI0_SSEL1); | ||
907 | udelay(1); | ||
908 | } | ||