diff options
Diffstat (limited to 'arch/blackfin/mach-bf538')
-rw-r--r-- | arch/blackfin/mach-bf538/boards/ezkit.c | 25 | ||||
-rw-r--r-- | arch/blackfin/mach-bf538/ext-gpio.c | 37 | ||||
-rw-r--r-- | arch/blackfin/mach-bf538/include/mach/anomaly.h | 38 | ||||
-rw-r--r-- | arch/blackfin/mach-bf538/include/mach/gpio.h | 3 |
4 files changed, 65 insertions, 38 deletions
diff --git a/arch/blackfin/mach-bf538/boards/ezkit.c b/arch/blackfin/mach-bf538/boards/ezkit.c index e61424ef35e..629f3c33341 100644 --- a/arch/blackfin/mach-bf538/boards/ezkit.c +++ b/arch/blackfin/mach-bf538/boards/ezkit.c | |||
@@ -502,7 +502,6 @@ static struct flash_platform_data bfin_spi_flash_data = { | |||
502 | 502 | ||
503 | static struct bfin5xx_spi_chip spi_flash_chip_info = { | 503 | static struct bfin5xx_spi_chip spi_flash_chip_info = { |
504 | .enable_dma = 0, /* use dma transfer with this chip*/ | 504 | .enable_dma = 0, /* use dma transfer with this chip*/ |
505 | .bits_per_word = 8, | ||
506 | }; | 505 | }; |
507 | #endif | 506 | #endif |
508 | 507 | ||
@@ -523,13 +522,6 @@ static const struct ad7879_platform_data bfin_ad7879_ts_info = { | |||
523 | }; | 522 | }; |
524 | #endif | 523 | #endif |
525 | 524 | ||
526 | #if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE) | ||
527 | static struct bfin5xx_spi_chip spi_ad7879_chip_info = { | ||
528 | .enable_dma = 0, | ||
529 | .bits_per_word = 16, | ||
530 | }; | ||
531 | #endif | ||
532 | |||
533 | #if defined(CONFIG_FB_BFIN_LQ035Q1) || defined(CONFIG_FB_BFIN_LQ035Q1_MODULE) | 525 | #if defined(CONFIG_FB_BFIN_LQ035Q1) || defined(CONFIG_FB_BFIN_LQ035Q1_MODULE) |
534 | #include <asm/bfin-lq035q1.h> | 526 | #include <asm/bfin-lq035q1.h> |
535 | 527 | ||
@@ -559,20 +551,6 @@ static struct platform_device bfin_lq035q1_device = { | |||
559 | }; | 551 | }; |
560 | #endif | 552 | #endif |
561 | 553 | ||
562 | #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE) | ||
563 | static struct bfin5xx_spi_chip spidev_chip_info = { | ||
564 | .enable_dma = 0, | ||
565 | .bits_per_word = 8, | ||
566 | }; | ||
567 | #endif | ||
568 | |||
569 | #if defined(CONFIG_FB_BFIN_LQ035Q1) || defined(CONFIG_FB_BFIN_LQ035Q1_MODULE) | ||
570 | static struct bfin5xx_spi_chip lq035q1_spi_chip_info = { | ||
571 | .enable_dma = 0, | ||
572 | .bits_per_word = 8, | ||
573 | }; | ||
574 | #endif | ||
575 | |||
576 | static struct spi_board_info bf538_spi_board_info[] __initdata = { | 554 | static struct spi_board_info bf538_spi_board_info[] __initdata = { |
577 | #if defined(CONFIG_MTD_M25P80) \ | 555 | #if defined(CONFIG_MTD_M25P80) \ |
578 | || defined(CONFIG_MTD_M25P80_MODULE) | 556 | || defined(CONFIG_MTD_M25P80_MODULE) |
@@ -595,7 +573,6 @@ static struct spi_board_info bf538_spi_board_info[] __initdata = { | |||
595 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ | 573 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ |
596 | .bus_num = 0, | 574 | .bus_num = 0, |
597 | .chip_select = 1, | 575 | .chip_select = 1, |
598 | .controller_data = &spi_ad7879_chip_info, | ||
599 | .mode = SPI_CPHA | SPI_CPOL, | 576 | .mode = SPI_CPHA | SPI_CPOL, |
600 | }, | 577 | }, |
601 | #endif | 578 | #endif |
@@ -605,7 +582,6 @@ static struct spi_board_info bf538_spi_board_info[] __initdata = { | |||
605 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ | 582 | .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */ |
606 | .bus_num = 0, | 583 | .bus_num = 0, |
607 | .chip_select = 2, | 584 | .chip_select = 2, |
608 | .controller_data = &lq035q1_spi_chip_info, | ||
609 | .mode = SPI_CPHA | SPI_CPOL, | 585 | .mode = SPI_CPHA | SPI_CPOL, |
610 | }, | 586 | }, |
611 | #endif | 587 | #endif |
@@ -615,7 +591,6 @@ static struct spi_board_info bf538_spi_board_info[] __initdata = { | |||
615 | .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ | 591 | .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ |
616 | .bus_num = 0, | 592 | .bus_num = 0, |
617 | .chip_select = 1, | 593 | .chip_select = 1, |
618 | .controller_data = &spidev_chip_info, | ||
619 | }, | 594 | }, |
620 | #endif | 595 | #endif |
621 | }; | 596 | }; |
diff --git a/arch/blackfin/mach-bf538/ext-gpio.c b/arch/blackfin/mach-bf538/ext-gpio.c index 180b1252679..471a9b184d5 100644 --- a/arch/blackfin/mach-bf538/ext-gpio.c +++ b/arch/blackfin/mach-bf538/ext-gpio.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GPIOLIB interface for BF538/9 PORT C, D, and E GPIOs | 2 | * GPIOLIB interface for BF538/9 PORT C, D, and E GPIOs |
3 | * | 3 | * |
4 | * Copyright 2009 Analog Devices Inc. | 4 | * Copyright 2009-2011 Analog Devices Inc. |
5 | * | 5 | * |
6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
7 | */ | 7 | */ |
@@ -121,3 +121,38 @@ static int __init bf538_extgpio_setup(void) | |||
121 | gpiochip_add(&bf538_porte_chip); | 121 | gpiochip_add(&bf538_porte_chip); |
122 | } | 122 | } |
123 | arch_initcall(bf538_extgpio_setup); | 123 | arch_initcall(bf538_extgpio_setup); |
124 | |||
125 | #ifdef CONFIG_PM | ||
126 | static struct { | ||
127 | u16 data, dir, inen; | ||
128 | } gpio_bank_saved[3]; | ||
129 | |||
130 | static void __iomem * const port_bases[3] = { | ||
131 | (void *)PORTCIO, | ||
132 | (void *)PORTDIO, | ||
133 | (void *)PORTEIO, | ||
134 | }; | ||
135 | |||
136 | void bfin_special_gpio_pm_hibernate_suspend(void) | ||
137 | { | ||
138 | int i; | ||
139 | |||
140 | for (i = 0; i < ARRAY_SIZE(port_bases); ++i) { | ||
141 | gpio_bank_saved[i].data = read_PORTIO(port_bases[i]); | ||
142 | gpio_bank_saved[i].inen = read_PORTIO_INEN(port_bases[i]); | ||
143 | gpio_bank_saved[i].dir = read_PORTIO_DIR(port_bases[i]); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | void bfin_special_gpio_pm_hibernate_restore(void) | ||
148 | { | ||
149 | int i; | ||
150 | |||
151 | for (i = 0; i < ARRAY_SIZE(port_bases); ++i) { | ||
152 | write_PORTIO_INEN(port_bases[i], gpio_bank_saved[i].inen); | ||
153 | write_PORTIO_SET(port_bases[i], | ||
154 | gpio_bank_saved[i].data & gpio_bank_saved[i].dir); | ||
155 | write_PORTIO_DIR(port_bases[i], gpio_bank_saved[i].dir); | ||
156 | } | ||
157 | } | ||
158 | #endif | ||
diff --git a/arch/blackfin/mach-bf538/include/mach/anomaly.h b/arch/blackfin/mach-bf538/include/mach/anomaly.h index 55e7d0712a9..b6ca9978871 100644 --- a/arch/blackfin/mach-bf538/include/mach/anomaly.h +++ b/arch/blackfin/mach-bf538/include/mach/anomaly.h | |||
@@ -11,8 +11,8 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | /* This file should be up to date with: | 13 | /* This file should be up to date with: |
14 | * - Revision I, 05/25/2010; ADSP-BF538/BF538F Blackfin Processor Anomaly List | 14 | * - Revision J, 05/23/2011; ADSP-BF538/BF538F Blackfin Processor Anomaly List |
15 | * - Revision N, 05/25/2010; ADSP-BF539/BF539F Blackfin Processor Anomaly List | 15 | * - Revision O, 05/23/2011; ADSP-BF539/BF539F Blackfin Processor Anomaly List |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #ifndef _MACH_ANOMALY_H_ | 18 | #ifndef _MACH_ANOMALY_H_ |
@@ -56,25 +56,21 @@ | |||
56 | #define ANOMALY_05000229 (1) | 56 | #define ANOMALY_05000229 (1) |
57 | /* PPI_FS3 Is Not Driven in 2 or 3 Internal Frame Sync Transmit Modes */ | 57 | /* PPI_FS3 Is Not Driven in 2 or 3 Internal Frame Sync Transmit Modes */ |
58 | #define ANOMALY_05000233 (1) | 58 | #define ANOMALY_05000233 (1) |
59 | /* If I-Cache Is On, CSYNC/SSYNC/IDLE Around Change of Control Causes Failures */ | ||
60 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 3) | ||
61 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ | 59 | /* False Hardware Error from an Access in the Shadow of a Conditional Branch */ |
62 | #define ANOMALY_05000245 (1) | 60 | #define ANOMALY_05000245 (1) |
63 | /* Maximum External Clock Speed for Timers */ | 61 | /* Maximum External Clock Speed for Timers */ |
64 | #define ANOMALY_05000253 (1) | 62 | #define ANOMALY_05000253 (1) |
65 | /* DCPLB_FAULT_ADDR MMR Register May Be Corrupted */ | ||
66 | #define ANOMALY_05000261 (__SILICON_REVISION__ < 3) | ||
67 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Decrease */ | 63 | /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Decrease */ |
68 | #define ANOMALY_05000270 (__SILICON_REVISION__ < 4) | 64 | #define ANOMALY_05000270 (__SILICON_REVISION__ < 4) |
69 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ | 65 | /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */ |
70 | #define ANOMALY_05000272 (1) | 66 | #define ANOMALY_05000272 (ANOMALY_BF538) |
71 | /* Writes to Synchronous SDRAM Memory May Be Lost */ | 67 | /* Writes to Synchronous SDRAM Memory May Be Lost */ |
72 | #define ANOMALY_05000273 (__SILICON_REVISION__ < 4) | 68 | #define ANOMALY_05000273 (__SILICON_REVISION__ < 4) |
73 | /* Writes to an I/O Data Register One SCLK Cycle after an Edge Is Detected May Clear Interrupt */ | 69 | /* Writes to an I/O Data Register One SCLK Cycle after an Edge Is Detected May Clear Interrupt */ |
74 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 4) | 70 | #define ANOMALY_05000277 (__SILICON_REVISION__ < 4) |
75 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ | 71 | /* Disabling Peripherals with DMA Running May Cause DMA System Instability */ |
76 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 4) | 72 | #define ANOMALY_05000278 (__SILICON_REVISION__ < 4) |
77 | /* False Hardware Error Exception when ISR Context Is Not Restored */ | 73 | /* False Hardware Error when ISR Context Is Not Restored */ |
78 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 4) | 74 | #define ANOMALY_05000281 (__SILICON_REVISION__ < 4) |
79 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ | 75 | /* Memory DMA Corruption with 32-Bit Data and Traffic Control */ |
80 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 4) | 76 | #define ANOMALY_05000282 (__SILICON_REVISION__ < 4) |
@@ -102,8 +98,10 @@ | |||
102 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 4) | 98 | #define ANOMALY_05000313 (__SILICON_REVISION__ < 4) |
103 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ | 99 | /* Killed System MMR Write Completes Erroneously on Next System MMR Access */ |
104 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 4) | 100 | #define ANOMALY_05000315 (__SILICON_REVISION__ < 4) |
101 | /* PFx Glitch on Write to PORTFIO or PORTFIO_TOGGLE */ | ||
102 | #define ANOMALY_05000317 (__SILICON_REVISION__ < 4) /* XXX: Same as 05000318 */ | ||
105 | /* PFx Glitch on Write to FIO_FLAG_D or FIO_FLAG_T */ | 103 | /* PFx Glitch on Write to FIO_FLAG_D or FIO_FLAG_T */ |
106 | #define ANOMALY_05000318 (ANOMALY_BF539 && __SILICON_REVISION__ < 4) | 104 | #define ANOMALY_05000318 (__SILICON_REVISION__ < 4) /* XXX: Same as 05000317 */ |
107 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | 105 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ |
108 | #define ANOMALY_05000355 (__SILICON_REVISION__ < 5) | 106 | #define ANOMALY_05000355 (__SILICON_REVISION__ < 5) |
109 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | 107 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ |
@@ -134,16 +132,32 @@ | |||
134 | #define ANOMALY_05000461 (1) | 132 | #define ANOMALY_05000461 (1) |
135 | /* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */ | 133 | /* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */ |
136 | #define ANOMALY_05000462 (1) | 134 | #define ANOMALY_05000462 (1) |
137 | /* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */ | 135 | /* Interrupted SPORT Receive Data Register Read Results In Underflow when SLEN > 15 */ |
138 | #define ANOMALY_05000473 (1) | 136 | #define ANOMALY_05000473 (1) |
139 | /* Possible Lockup Condition whem Modifying PLL from External Memory */ | 137 | /* Possible Lockup Condition when Modifying PLL from External Memory */ |
140 | #define ANOMALY_05000475 (1) | 138 | #define ANOMALY_05000475 (1) |
141 | /* TESTSET Instruction Cannot Be Interrupted */ | 139 | /* TESTSET Instruction Cannot Be Interrupted */ |
142 | #define ANOMALY_05000477 (1) | 140 | #define ANOMALY_05000477 (1) |
143 | /* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */ | 141 | /* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */ |
144 | #define ANOMALY_05000481 (1) | 142 | #define ANOMALY_05000481 (1) |
145 | /* IFLUSH sucks at life */ | 143 | /* PLL May Latch Incorrect Values Coming Out of Reset */ |
144 | #define ANOMALY_05000489 (1) | ||
145 | /* Instruction Memory Stalls Can Cause IFLUSH to Fail */ | ||
146 | #define ANOMALY_05000491 (1) | 146 | #define ANOMALY_05000491 (1) |
147 | /* EXCPT Instruction May Be Lost If NMI Happens Simultaneously */ | ||
148 | #define ANOMALY_05000494 (1) | ||
149 | /* RXS Bit in SPI_STAT May Become Stuck In RX DMA Modes */ | ||
150 | #define ANOMALY_05000501 (1) | ||
151 | |||
152 | /* | ||
153 | * These anomalies have been "phased" out of analog.com anomaly sheets and are | ||
154 | * here to show running on older silicon just isn't feasible. | ||
155 | */ | ||
156 | |||
157 | /* If I-Cache Is On, CSYNC/SSYNC/IDLE Around Change of Control Causes Failures */ | ||
158 | #define ANOMALY_05000244 (__SILICON_REVISION__ < 3) | ||
159 | /* DCPLB_FAULT_ADDR MMR Register May Be Corrupted */ | ||
160 | #define ANOMALY_05000261 (__SILICON_REVISION__ < 3) | ||
147 | 161 | ||
148 | /* Anomalies that don't exist on this proc */ | 162 | /* Anomalies that don't exist on this proc */ |
149 | #define ANOMALY_05000099 (0) | 163 | #define ANOMALY_05000099 (0) |
diff --git a/arch/blackfin/mach-bf538/include/mach/gpio.h b/arch/blackfin/mach-bf538/include/mach/gpio.h index 8a5beeece99..3561c7d8935 100644 --- a/arch/blackfin/mach-bf538/include/mach/gpio.h +++ b/arch/blackfin/mach-bf538/include/mach/gpio.h | |||
@@ -8,7 +8,10 @@ | |||
8 | #define _MACH_GPIO_H_ | 8 | #define _MACH_GPIO_H_ |
9 | 9 | ||
10 | #define MAX_BLACKFIN_GPIOS 16 | 10 | #define MAX_BLACKFIN_GPIOS 16 |
11 | #ifdef CONFIG_GPIOLIB | ||
12 | /* We only use the special logic with GPIOLIB devices */ | ||
11 | #define BFIN_SPECIAL_GPIO_BANKS 3 | 13 | #define BFIN_SPECIAL_GPIO_BANKS 3 |
14 | #endif | ||
12 | 15 | ||
13 | #define GPIO_PF0 0 /* PF */ | 16 | #define GPIO_PF0 0 /* PF */ |
14 | #define GPIO_PF1 1 | 17 | #define GPIO_PF1 1 |