[PATCH] Board support Pcontrol_G20, hardware revision 2
Peter Gsellmann
pgsellmann at portner-elektronik.at
Mon Jan 17 12:43:06 EST 2011
Backplane timings adjusted
Addition of specific platform devices and resources
Leds renamed
Minor bugfixes
this patch should not influence any other hardware
Signed-off-by: Peter Gsellmann <pgsellmann at portner-elektronik.at>
---
arch/arm/mach-at91/board-pcontrol-g20.c | 141 ++++++++++++++++++++++++++-----
1 files changed, 119 insertions(+), 22 deletions(-)
diff --git a/arch/arm/mach-at91/board-pcontrol-g20.c b/arch/arm/mach-at91/board-pcontrol-g20.c
index feb6578..42798af 100644
--- a/arch/arm/mach-at91/board-pcontrol-g20.c
+++ b/arch/arm/mach-at91/board-pcontrol-g20.c
@@ -26,6 +26,10 @@
#include <linux/gpio.h>
#include <linux/w1-gpio.h>
+#include <linux/input.h>
+#include <linux/uio_driver.h>
+#include <linux/mtd/plat-ram.h>
+
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -60,19 +64,22 @@ static void __init init_irq(void)
}
-static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
- .ncs_read_setup = 16,
- .nrd_setup = 18,
- .ncs_write_setup = 16,
- .nwe_setup = 18,
+/*
+ * Bus timings; unit = 7.57ns
+ */
+static struct sam9_smc_config __initdata pcontrol_smc_config[] = { {
+ .ncs_read_setup = 0,
+ .nrd_setup = 8,
+ .ncs_write_setup = 0,
+ .nwe_setup = 8,
.ncs_read_pulse = 63,
- .nrd_pulse = 55,
+ .nrd_pulse = 45,
.ncs_write_pulse = 63,
- .nwe_pulse = 55,
+ .nwe_pulse = 45,
- .read_cycle = 127,
- .write_cycle = 127,
+ .read_cycle = 100,
+ .write_cycle = 100,
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE
| AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_SELECT
@@ -100,15 +107,105 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
.tdf_cycles = 1,
} };
+
+static struct resource pcontrol_resources[] = {
+ {
+ .start = AT91_CHIPSELECT_4,
+ .end = AT91_CHIPSELECT_4 + SZ_256M - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = AT91_CHIPSELECT_7,
+ .end = AT91_CHIPSELECT_7 + SZ_256M - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = AT91_CHIPSELECT_4,
+ .end = AT91_CHIPSELECT_4 + 0x800 - 1,
+ .name = "bus51",
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = AT91_CHIPSELECT_4 + 0x800,
+ .end = AT91_CHIPSELECT_4 + 0x900 - 1,
+ .name = "lcd40x16bw",
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = AT91_CHIPSELECT_4 + 0x900,
+ .end = AT91_CHIPSELECT_4 + 0xa00 - 1,
+ .name = "kbd6x3+5",
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = AT91_CHIPSELECT_7,
+ .end = AT91_CHIPSELECT_7 + SZ_512K - 1,
+ .name = "ferroram",
+ .flags = IORESOURCE_MEM,
+ }
+};
+
+static struct uio_info uioconfig = {
+ .name = "pcontrol-uio",
+ .version = "1",
+};
+
+struct platdata_mtd_ram mtd_config = {
+ .mapname = "ferro",
+ .bankwidth = 2,
+};
+
+static struct platform_device pcontrol_devices[] = {
+ {
+ .name = "atmel_smc",
+ .id = 4,
+ .resource = &pcontrol_resources[0],
+ .num_resources = 1,
+ }, {
+ .name = "atmel_smc",
+ .id = 7,
+ .resource = &pcontrol_resources[1],
+ .num_resources = 1,
+ }, {
+ .name = "uio_pdrv",
+ .id = -1,
+ .resource = &pcontrol_resources[2],
+ .num_resources = 1,
+ .dev = {
+ .platform_data = &uioconfig,
+ },
+ }, {
+ .name = "mtd-ram",
+ .id = -1,
+ .resource = &pcontrol_resources[5],
+ .num_resources = 1,
+ .dev = {
+ .platform_data = &mtd_config,
+ },
+ }, {
+ .name = "lcd240x128",
+ .id = -1,
+ .resource = &pcontrol_resources[3],
+ .num_resources = 2,
+ }
+};
+
static void __init add_device_pcontrol(void)
{
+ /* set write protect pin for eeprom 24LC64 D7 */
+ at91_set_GPIO_periph(AT91_PIN_PB24, 1);
+ at91_set_gpio_output(AT91_PIN_PB24, 1);
/* configure chip-select 4 (IO compatible to 8051 X4 ) */
sam9_smc_configure(4, &pcontrol_smc_config[0]);
+ at91_set_A_periph(AT91_PIN_PC8, 0);
+ platform_device_register(&pcontrol_devices[0]);
+ /* add subdevices */
+ platform_device_register(&pcontrol_devices[2]);
+ platform_device_register(&pcontrol_devices[4]);
+
/* configure chip-select 7 (FerroRAM 256KiBx16bit MR2A16A D4 ) */
sam9_smc_configure(7, &pcontrol_smc_config[1]);
+ at91_set_B_periph(AT91_PIN_PC12, 0);
+ platform_device_register(&pcontrol_devices[1]);
+ /* add subdevices */
+ platform_device_register(&pcontrol_devices[3]);
}
-
/*
* USB Host port
*/
@@ -122,7 +219,8 @@ static struct at91_usbh_data __initdata usbh_data = {
*/
static struct at91_udc_data __initdata pcontrol_g20_udc_data = {
.vbus_pin = AT91_PIN_PA22, /* Detect +5V bus voltage */
- .pullup_pin = AT91_PIN_PA4, /* K-state, active low */
+ .pullup_pin = AT91_PIN_PA5, /* K-state, active low */
+ .pullup_active_low = 1,
};
@@ -130,7 +228,7 @@ static struct at91_udc_data __initdata pcontrol_g20_udc_data = {
* MACB Ethernet device
*/
static struct at91_eth_data __initdata macb_data = {
- .phy_irq_pin = AT91_PIN_PA28,
+ .phy_irq_pin = AT91_PIN_PA26,
.is_rmii = 1,
};
@@ -151,46 +249,45 @@ static struct i2c_board_info __initdata pcontrol_g20_i2c_devices[] = {
*/
static struct gpio_led pcontrol_g20_leds[] = {
{
- .name = "LED1", /* red H5 */
+ .name = "pcontrol:red:H5",
.gpio = AT91_PIN_PB18,
.active_low = 1,
.default_trigger = "none", /* supervisor */
}, {
- .name = "LED2", /* yellow H7 */
+ .name = "pcontrol:yellow:H7",
.gpio = AT91_PIN_PB19,
.active_low = 1,
.default_trigger = "mmc0", /* SD-card activity */
}, {
- .name = "LED3", /* green H2 */
+ .name = "pcontrol:green:H2",
.gpio = AT91_PIN_PB20,
.active_low = 1,
.default_trigger = "heartbeat", /* blinky */
}, {
- .name = "LED4", /* red H3 */
+ .name = "pcontrol:red:H3",
.gpio = AT91_PIN_PC6,
.active_low = 1,
.default_trigger = "none", /* connection lost */
}, {
- .name = "LED5", /* yellow H6 */
+ .name = "pcontrol:yellow:H6",
.gpio = AT91_PIN_PC7,
.active_low = 1,
.default_trigger = "none", /* unsent data */
}, {
- .name = "LED6", /* green H1 */
+ .name = "pcontrol:green:H1",
.gpio = AT91_PIN_PC9,
.active_low = 1,
.default_trigger = "none", /* snafu */
}
};
-
/*
* SPI devices
*/
-static struct spi_board_info pcontrol_g20_spi_devices[] = {
+static struct spi_board_info __initdata pcontrol_g20_spi_devices[] = {
{
.modalias = "spidev", /* HMI port X4 */
- .chip_select = 1,
+ .chip_select = 0,
.max_speed_hz = 50 * 1000 * 1000,
.bus_num = 0,
}, {
@@ -216,7 +313,7 @@ static void __init pcontrol_g20_board_init(void)
at91_gpio_leds(pcontrol_g20_leds,
ARRAY_SIZE(pcontrol_g20_leds));
/* piggyback A2 */
- at91_set_gpio_output(AT91_PIN_PB31, 1);
+ at91_set_A_periph(AT91_PIN_PB30, 0);
}
--
1.7.2.3
More information about the linux-arm-kernel
mailing list