[ARM] 5289/1: [AT91] Convert boards to use sam9_smc_configure()
Convert the SAM9 and CAP9 board-specific files to make use of the sam9_smc_configure() method to configure the memory-controller for external peripherals. The following boards have been modified: cam60 : NAND cap9adk : NAND, NOR qil-a9260 : NAND sam9-l9260 : NAND sam9260ek : NAND sam9261ek : DM9000 Ethernet, NAND sam9263 : NAND sam9g20ek : NAND sam9rlek : NAND usb-a9260 : NAND usb-a9263 .: NAND Signed-off-by: Andrew Victor <linux@maxim.org.za> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Este commit está contenido en:

cometido por
Russell King

padre
461d3b4dcf
commit
8cdae51aa9
@@ -47,7 +47,9 @@
|
||||
#include <mach/board.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/at91sam9_smc.h>
|
||||
#include <mach/at91_shdwc.h>
|
||||
|
||||
#include "sam9_smc.h"
|
||||
#include "generic.h"
|
||||
|
||||
|
||||
@@ -76,7 +78,7 @@ static void __init ek_init_irq(void)
|
||||
* DM9000 ethernet device
|
||||
*/
|
||||
#if defined(CONFIG_DM9000)
|
||||
static struct resource at91sam9261_dm9000_resource[] = {
|
||||
static struct resource dm9000_resource[] = {
|
||||
[0] = {
|
||||
.start = AT91_CHIPSELECT_2,
|
||||
.end = AT91_CHIPSELECT_2 + 3,
|
||||
@@ -98,27 +100,42 @@ static struct dm9000_plat_data dm9000_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY,
|
||||
};
|
||||
|
||||
static struct platform_device at91sam9261_dm9000_device = {
|
||||
static struct platform_device dm9000_device = {
|
||||
.name = "dm9000",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(at91sam9261_dm9000_resource),
|
||||
.resource = at91sam9261_dm9000_resource,
|
||||
.num_resources = ARRAY_SIZE(dm9000_resource),
|
||||
.resource = dm9000_resource,
|
||||
.dev = {
|
||||
.platform_data = &dm9000_platdata,
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* SMC timings for the DM9000.
|
||||
* Note: These timings were calculated for MASTER_CLOCK = 100000000 according to the DM9000 timings.
|
||||
*/
|
||||
static struct sam9_smc_config __initdata dm9000_smc_config = {
|
||||
.ncs_read_setup = 0,
|
||||
.nrd_setup = 2,
|
||||
.ncs_write_setup = 0,
|
||||
.nwe_setup = 2,
|
||||
|
||||
.ncs_read_pulse = 8,
|
||||
.nrd_pulse = 4,
|
||||
.ncs_write_pulse = 8,
|
||||
.nwe_pulse = 4,
|
||||
|
||||
.read_cycle = 16,
|
||||
.write_cycle = 16,
|
||||
|
||||
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16,
|
||||
.tdf_cycles = 1,
|
||||
};
|
||||
|
||||
static void __init ek_add_device_dm9000(void)
|
||||
{
|
||||
/*
|
||||
* Configure Chip-Select 2 on SMC for the DM9000.
|
||||
* Note: These timings were calculated for MASTER_CLOCK = 100000000
|
||||
* according to the DM9000 timings.
|
||||
*/
|
||||
at91_sys_write(AT91_SMC_SETUP(2), AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) | AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
|
||||
at91_sys_write(AT91_SMC_PULSE(2), AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(8) | AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_(8));
|
||||
at91_sys_write(AT91_SMC_CYCLE(2), AT91_SMC_NWECYCLE_(16) | AT91_SMC_NRDCYCLE_(16));
|
||||
at91_sys_write(AT91_SMC_MODE(2), AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16 | AT91_SMC_TDF_(1));
|
||||
/* Configure chip-select 2 (DM9000) */
|
||||
sam9_smc_configure(2, &dm9000_smc_config);
|
||||
|
||||
/* Configure Reset signal as output */
|
||||
at91_set_gpio_output(AT91_PIN_PC10, 0);
|
||||
@@ -126,7 +143,7 @@ static void __init ek_add_device_dm9000(void)
|
||||
/* Configure Interrupt pin as input, no pull-up */
|
||||
at91_set_gpio_input(AT91_PIN_PC11, 0);
|
||||
|
||||
platform_device_register(&at91sam9261_dm9000_device);
|
||||
platform_device_register(&dm9000_device);
|
||||
}
|
||||
#else
|
||||
static void __init ek_add_device_dm9000(void) {}
|
||||
@@ -197,6 +214,39 @@ static struct atmel_nand_data __initdata ek_nand_data = {
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||
.ncs_read_setup = 0,
|
||||
.nrd_setup = 1,
|
||||
.ncs_write_setup = 0,
|
||||
.nwe_setup = 1,
|
||||
|
||||
.ncs_read_pulse = 3,
|
||||
.nrd_pulse = 3,
|
||||
.ncs_write_pulse = 3,
|
||||
.nwe_pulse = 3,
|
||||
|
||||
.read_cycle = 5,
|
||||
.write_cycle = 5,
|
||||
|
||||
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
|
||||
.tdf_cycles = 2,
|
||||
};
|
||||
|
||||
static void __init ek_add_device_nand(void)
|
||||
{
|
||||
/* setup bus-width (8 or 16) */
|
||||
if (ek_nand_data.bus_width_16)
|
||||
ek_nand_smc_config.mode |= AT91_SMC_DBW_16;
|
||||
else
|
||||
ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
|
||||
|
||||
/* configure chip-select 3 (NAND) */
|
||||
sam9_smc_configure(3, &ek_nand_smc_config);
|
||||
|
||||
at91_add_device_nand(&ek_nand_data);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ADS7846 Touchscreen
|
||||
*/
|
||||
@@ -525,7 +575,7 @@ static void __init ek_board_init(void)
|
||||
/* I2C */
|
||||
at91_add_device_i2c(NULL, 0);
|
||||
/* NAND */
|
||||
at91_add_device_nand(&ek_nand_data);
|
||||
ek_add_device_nand();
|
||||
/* DM9000 ethernet */
|
||||
ek_add_device_dm9000();
|
||||
|
||||
|
Referencia en una nueva incidencia
Block a user