Skip to contentSkip to conversation

at91: merge board usb-a9260 and usb-a9263 together

PATCH Superseded Nicolas Ferre 2 participants 7 messages Aug 25, 2011 – Aug 31, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 at91: merge board usb-a9260 and usb-a9263 together

From: Nico Erfurth <[email protected]>

Merge boards together as they are barely the same.

[[email protected]: updated to new machine_desc structure]
Cc Gregory Hermant <[email protected]>

---
Hi,

I come back to this patch in the process of collecting things that has been left on the mailing-list.
Gregory, can you have a loot at it?

v3: update the machine_desc structure to match latest improvements.
v2: update against new common init
we must use it as we can detect the cpu type only after mapping the system controler.

 arch/arm/mach-at91/Makefile                        |    4 +-
 arch/arm/mach-at91/board-usb-a9260.c               |  230 --------------------
 .../{board-usb-a9263.c => board-usb-a926x.c}       |   56 +++++-
 3 files changed, 52 insertions(+), 238 deletions(-)
 delete mode 100644 arch/arm/mach-at91/board-usb-a9260.c
 rename arch/arm/mach-at91/{board-usb-a9263.c => board-usb-a926x.c} (84%)
arch/arm/mach-at91/Makefile +2 -2
index ecd64792..0b1b379 100644
@@ -42,7 +42,7 @@ obj-$(CONFIG_MACH_RSI_EWS)	+= board-rsi-ews.o
 obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
 obj-$(CONFIG_MACH_CAM60)	+= board-cam60.o
 obj-$(CONFIG_MACH_SAM9_L9260)	+= board-sam9-l9260.o
-obj-$(CONFIG_MACH_USB_A9260)	+= board-usb-a9260.o
+obj-$(CONFIG_MACH_USB_A9260)	+= board-usb-a926x.o
 obj-$(CONFIG_MACH_QIL_A9260)	+= board-qil-a9260.o
 obj-$(CONFIG_MACH_AFEB9260)	+= board-afeb-9260v1.o
 obj-$(CONFIG_MACH_CPU9260)	+= board-cpu9krea.o
@@ -54,7 +54,7 @@ obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o
 
 # AT91SAM9263 board-specific support
 obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
-obj-$(CONFIG_MACH_USB_A9263)	+= board-usb-a9263.o
+obj-$(CONFIG_MACH_USB_A9263)	+= board-usb-a926x.o
 obj-$(CONFIG_MACH_NEOCORE926)	+= board-neocore926.o
 
 # AT91SAM9RL board-specific support
arch/arm/mach-at91/board-usb-a9260.c deleted +0 -230

230 lines not on this page · raw message

arch/arm/mach-at91/board-usb-a926x.c renamed from arch/arm/mach-at91/board-usb-a9263.c +50 -6

112 lines not on this page · raw message

Signature · 1 line
1.7.3
#1 lore raw
Quoted 12 lines · Nicolas Ferre

From: Nico Erfurth <[email protected]>

Merge boards together as they are barely the same.

[nicolas.ferre at atmel.com: updated to new machine_desc structure]
Cc Gregory Hermant <[email protected]>

---
Hi,

Quoted 8 lines

I come back to this patch in the process of collecting things that has been left on the mailing-list.
Gregory, can you have a loot at it?

v3: update the machine_desc structure to match latest improvements.
v2: update against new common init
we must use it as we can detect the cpu type only after mapping the system controler.

I've the hardware now

I'll re test it myself

I'm adding the usb-a9g20 right now too in the same fime

Best Regards,
J.

#2 lore raw
In reply to Nicolas Ferre
Quoted 9 lines · Nicolas Ferre

From: Nico Erfurth <[email protected]>

Merge boards together as they are barely the same.

[nicolas.ferre at atmel.com: updated to new machine_desc structure]
Cc Gregory Hermant <[email protected]>

Tested

Best Regards,
J.

#3 lore raw

PATCH v4 1/2 at91: merge board usb-a9260 and usb-a9263 together

In reply to Nicolas Ferre

From: Nico Erfurth <[email protected]>

Merge boards together as they are barely the same.

[nicolas.ferre at atmel.com: updated to new machine_desc structure]
Cc Gregory Hermant <[email protected]>

---
v4:
fix for 9260

	.map_io		= at91_map_io

Best Regards,
J.

 arch/arm/mach-at91/Makefile                        |    4 +-
 arch/arm/mach-at91/board-usb-a9260.c               |  230 --------------------
 .../{board-usb-a9263.c => board-usb-a926x.c}       |   56 +++++-
 3 files changed, 52 insertions(+), 238 deletions(-)
 delete mode 100644 arch/arm/mach-at91/board-usb-a9260.c
 rename arch/arm/mach-at91/{board-usb-a9263.c => board-usb-a926x.c} (84%)
arch/arm/mach-at91/Makefile +2 -2
index bf57e8b..adcb9a0 100644
@@ -41,7 +41,7 @@ obj-$(CONFIG_MACH_ECO920)	+= board-eco920.o
 obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
 obj-$(CONFIG_MACH_CAM60)	+= board-cam60.o
 obj-$(CONFIG_MACH_SAM9_L9260)	+= board-sam9-l9260.o
-obj-$(CONFIG_MACH_USB_A9260)	+= board-usb-a9260.o
+obj-$(CONFIG_MACH_USB_A9260)	+= board-usb-a926x.o
 obj-$(CONFIG_MACH_QIL_A9260)	+= board-qil-a9260.o
 obj-$(CONFIG_MACH_AFEB9260)	+= board-afeb-9260v1.o
 obj-$(CONFIG_MACH_CPU9260)	+= board-cpu9krea.o
@@ -53,7 +53,7 @@ obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o
 
 # AT91SAM9263 board-specific support
 obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
-obj-$(CONFIG_MACH_USB_A9263)	+= board-usb-a9263.o
+obj-$(CONFIG_MACH_USB_A9263)	+= board-usb-a926x.o
 obj-$(CONFIG_MACH_NEOCORE926)	+= board-neocore926.o
 
 # AT91SAM9RL board-specific support
arch/arm/mach-at91/board-usb-a9260.c deleted +0 -230

230 lines not on this page · raw message

arch/arm/mach-at91/board-usb-a926x.c renamed from arch/arm/mach-at91/board-usb-a9263.c +50 -6

112 lines not on this page · raw message

Signature · 1 line
1.7.5.4
#4 lore raw

PATCH v4 1/2 at91: merge board usb-a9260 and usb-a9263 together

Le 30/08/2011 18:25, Jean-Christophe PLAGNIOL-VILLARD :

Quoted 9 lines

From: Nico Erfurth <[email protected]>

Merge boards together as they are barely the same.

[nicolas.ferre at atmel.com: updated to new machine_desc structure]
Cc Gregory Hermant <[email protected]>
Quoted 4 lines

---
v4:
fix for 9260

	.map_io		= at91_map_io

Ok, thanks for correcting this.

BR,

Signature · 1 line
Nicolas Ferre
#5 lore raw

PATCH 2/2 at91: USB-A9G20 C01 & C11 board support

In reply to Nicolas Ferre

http://www.calao-systems.com

---
 arch/arm/mach-at91/Kconfig              |    8 ++
 arch/arm/mach-at91/Makefile             |    1 +
 arch/arm/mach-at91/board-usb-a926x.c    |  145 +++++++++++++++++++++++++------
 arch/arm/mach-at91/include/mach/timex.h |    5 +
 4 files changed, 133 insertions(+), 26 deletions(-)
arch/arm/mach-at91/Kconfig +8 -0
index 2248467..e27d160 100644
@@ -381,6 +381,14 @@ config MACH_GSIA18S
 	  This enables support for the GS_IA18_S board
 	  produced by GeoSIG Ltd company. This is an internet accelerograph.
 	  <http://www.geosig.com>
+
+config MACH_USB_A9G20
+	bool "CALAO USB-A9G20"
+	depends on ARCH_AT91SAM9G20
+	help
+	  Select this if you are using a Calao Systems USB-A9G20.
+	  <http://www.calao-systems.com>
+
 endif
 
 if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
arch/arm/mach-at91/Makefile +1 -0
index adcb9a0..ff8a283 100644
@@ -67,6 +67,7 @@ obj-$(CONFIG_MACH_STAMP9G20)	+= board-stamp9g20.o
 obj-$(CONFIG_MACH_PORTUXG20)	+= board-stamp9g20.o
 obj-$(CONFIG_MACH_PCONTROL_G20)	+= board-pcontrol-g20.o board-stamp9g20.o
 obj-$(CONFIG_MACH_GSIA18S)	+= board-gsia18s.o board-stamp9g20.o
+obj-$(CONFIG_MACH_USB_A9G20)	+= board-usb-a926x.o
 
 # AT91SAM9260/AT91SAM9G20 board-specific support
 obj-$(CONFIG_MACH_SNAPPER_9260)	+= board-snapper9260.o
arch/arm/mach-at91/board-usb-a926x.c +119 -26

242 lines not on this page · raw message

arch/arm/mach-at91/include/mach/timex.h +5 -0
index 31ac2d9..85820ad 100644
@@ -64,7 +64,12 @@
 
 #elif defined(CONFIG_ARCH_AT91SAM9G20)
 
+#if defined(CONFIG_MACH_USB_A9G20)
+#define AT91SAM9_MASTER_CLOCK	133000000
+#else
 #define AT91SAM9_MASTER_CLOCK	132096000
+#endif
+
 #define CLOCK_TICK_RATE		(AT91SAM9_MASTER_CLOCK/16)
 
 #elif defined(CONFIG_ARCH_AT91SAM9G45)
Signature · 1 line
1.7.5.4
#6 lore raw

PATCH 2/2 at91: USB-A9G20 C01 & C11 board support

Le 30/08/2011 18:25, Jean-Christophe PLAGNIOL-VILLARD :

Quoted 1 line

http://www.calao-systems.com

Well, it is a bit short. Before submitting to at91-l2, I rephrase it to:
"Add support for Calao USB-A9G20 boards. It will be integrated in existing support for board of same form factor using at91sam9260 or at91sam9263."

Quoted 1 line
Quoted 312 lines
---
 arch/arm/mach-at91/Kconfig              |    8 ++
 arch/arm/mach-at91/Makefile             |    1 +
 arch/arm/mach-at91/board-usb-a926x.c    |  145 +++++++++++++++++++++++++------
 arch/arm/mach-at91/include/mach/timex.h |    5 +
 4 files changed, 133 insertions(+), 26 deletions(-)
arch/arm/mach-at91/Kconfig +8 -0
index 2248467..e27d160 100644
@@ -381,6 +381,14 @@ config MACH_GSIA18S
 	  This enables support for the GS_IA18_S board
 	  produced by GeoSIG Ltd company. This is an internet accelerograph.
 	  <http://www.geosig.com>
+
+config MACH_USB_A9G20
+	bool "CALAO USB-A9G20"
+	depends on ARCH_AT91SAM9G20
+	help
+	  Select this if you are using a Calao Systems USB-A9G20.
+	  <http://www.calao-systems.com>
+
 endif
 
 if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
arch/arm/mach-at91/Makefile +1 -0
index adcb9a0..ff8a283 100644
@@ -67,6 +67,7 @@ obj-$(CONFIG_MACH_STAMP9G20)	+= board-stamp9g20.o
 obj-$(CONFIG_MACH_PORTUXG20)	+= board-stamp9g20.o
 obj-$(CONFIG_MACH_PCONTROL_G20)	+= board-pcontrol-g20.o board-stamp9g20.o
 obj-$(CONFIG_MACH_GSIA18S)	+= board-gsia18s.o board-stamp9g20.o
+obj-$(CONFIG_MACH_USB_A9G20)	+= board-usb-a926x.o
 
 # AT91SAM9260/AT91SAM9G20 board-specific support
 obj-$(CONFIG_MACH_SNAPPER_9260)	+= board-snapper9260.o
arch/arm/mach-at91/board-usb-a926x.c +119 -26
index b9b9847..260260b 100644
@@ -4,6 +4,7 @@
  *  Copyright (C) 2005 SAN People
  *  Copyright (C) 2007 Atmel Corporation.
  *  Copyright (C) 2007 Calao-systems
+ *  Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -28,6 +29,7 @@
 #include <linux/spi/spi.h>
 #include <linux/gpio_keys.h>
 #include <linux/input.h>
+#include <linux/spi/mmc_spi.h>
 
 #include <asm/setup.h>
 #include <asm/mach-types.h>
@@ -74,18 +76,42 @@ static struct at91_udc_data __initdata ek_udc_data = {
 	.pullup_pin	= 0,		/* pull-up driven by UDC */
 };
 
-void ek_add_device_udc(void)
+static void __init ek_add_device_udc(void)
 {
-	if (machine_is_usb_a9260())
+	if (machine_is_usb_a9260() || machine_is_usb_a9g20())
 		ek_udc_data.vbus_pin = AT91_PIN_PC5;
 
 	at91_add_device_udc(&ek_udc_data);
 }
 
+#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+#define MMC_SPI_CARD_DETECT_INT AT91_PIN_PC4
+static int at91_mmc_spi_init(struct device *dev,
+	irqreturn_t (*detect_int)(int, void *), void *data)
+{
+	/* Configure Interrupt pin as input, no pull-up */
+	at91_set_gpio_input(MMC_SPI_CARD_DETECT_INT, 0);
+	return request_irq(gpio_to_irq(MMC_SPI_CARD_DETECT_INT), detect_int,
+		IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
+		"mmc-spi-detect", data);
+}
+
+static void at91_mmc_spi_exit(struct device *dev, void *data)
+{
+	free_irq(gpio_to_irq(MMC_SPI_CARD_DETECT_INT), data);
+}
+
+static struct mmc_spi_platform_data at91_mmc_spi_pdata = {
+	.init = at91_mmc_spi_init,
+	.exit = at91_mmc_spi_exit,
+	.detect_delay = 100, /* msecs */
+};
+#endif
+
 /*
  * SPI devices.
  */
-static struct spi_board_info ek_spi_devices[] = {
+static struct spi_board_info usb_a9263_spi_devices[] = {
 #if !defined(CONFIG_MMC_AT91)
 	{	/* DataFlash chip */
 		.modalias	= "mtd_dataflash",
@@ -96,10 +122,25 @@ static struct spi_board_info ek_spi_devices[] = {
 #endif
 };
 
-void ek_add_device_spi(void)
+static struct spi_board_info usb_a9g20_spi_devices[] = {
+#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
+	{
+		.modalias = "mmc_spi",
+		.max_speed_hz = 20000000,	/* max spi clock (SCK) speed in HZ */
+		.bus_num = 1,
+		.chip_select = 0,
+		.platform_data = &at91_mmc_spi_pdata,
+		.mode = SPI_MODE_3,
+	},
+#endif
+};
+
+static void __init ek_add_device_spi(void)
 {
 	if (machine_is_usb_a9263())
-		at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
+		at91_add_device_spi(usb_a9263_spi_devices, ARRAY_SIZE(usb_a9263_spi_devices));
+	else if (machine_is_usb_a9g20())
+		at91_add_device_spi(usb_a9g20_spi_devices, ARRAY_SIZE(usb_a9g20_spi_devices));
 }
 
 /*
@@ -110,9 +151,9 @@ static struct at91_eth_data __initdata ek_macb_data = {
 	.is_rmii	= 1,
 };
 
-void ek_add_device_eth(void)
+static void __init ek_add_device_eth(void)
 {
-	if (machine_is_usb_a9260())
+	if (machine_is_usb_a9260() || machine_is_usb_a9g20())
 		ek_macb_data.phy_irq_pin = AT91_PIN_PA31;
 
 	at91_add_device_eth(&ek_macb_data);
@@ -123,19 +164,29 @@ void ek_add_device_eth(void)
  */
 static struct mtd_partition __initdata ek_nand_partition[] = {
 	{
-		.name	= "Uboot & Kernel",
+		.name	= "barebox",
 		.offset	= 0,
-		.size	= SZ_16M,
-	},
-	{
-		.name	= "Root FS",
+		.size	= 3 * SZ_128K,
+	}, {
+		.name	= "bareboxenv",
 		.offset	= MTDPART_OFS_NXTBLK,
-		.size	= 120 * SZ_1M,
-	},
-	{
-		.name	= "FS",
+		.size	= SZ_128K,
+	}, {
+		.name	= "bareboxenv2",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= SZ_128K,
+	}, {
+		.name	= "kernel",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 4 * SZ_1M,
+	}, {
+		.name	= "rootfs",
 		.offset	= MTDPART_OFS_NXTBLK,
 		.size	= 120 * SZ_1M,
+	}, {
+		.name	= "data",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= MTDPART_SIZ_FULL,
 	}
 };
 
@@ -154,7 +205,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.partition_info	= nand_partitions,
 };
 
-static struct sam9_smc_config __initdata ek_nand_smc_config = {
+static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = {
 	.ncs_read_setup		= 0,
 	.nrd_setup		= 1,
 	.ncs_write_setup	= 0,
@@ -172,15 +223,36 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 	.tdf_cycles		= 2,
 };
 
+static struct sam9_smc_config __initdata usb_a9g20_nand_smc_config = {
+	.ncs_read_setup		= 0,
+	.nrd_setup		= 2,
+	.ncs_write_setup	= 0,
+	.nwe_setup		= 2,
+
+	.ncs_read_pulse		= 4,
+	.nrd_pulse		= 4,
+	.ncs_write_pulse	= 4,
+	.nwe_pulse		= 4,
+
+	.read_cycle		= 7,
+	.write_cycle		= 7,
+
+	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
+	.tdf_cycles		= 3,
+};
+
 static void __init ek_add_device_nand(void)
 {
-	if (machine_is_usb_a9260()) {
+	if (machine_is_usb_a9260() || machine_is_usb_a9g20()) {
 		ek_nand_data.rdy_pin	= AT91_PIN_PC13;
 		ek_nand_data.enable_pin	= AT91_PIN_PC14;
 	}
 
 	/* configure chip-select 3 (NAND) */
-	sam9_smc_configure(3, &ek_nand_smc_config);
+	if (machine_is_usb_a9g20())
+		sam9_smc_configure(3, &usb_a9g20_nand_smc_config);
+	else
+		sam9_smc_configure(3, &usb_a9260_nand_smc_config);
 
 	at91_add_device_nand(&ek_nand_data);
 }
@@ -237,15 +309,20 @@ static struct gpio_led ek_leds[] = {
 	}
 };
 
-void ek_add_device_leds(void)
+static struct i2c_board_info __initdata ek_i2c_devices[] = {
+	{
+		I2C_BOARD_INFO("rv3029c2", 0x56),
+	},
+};
+
+static void __init ek_add_device_leds(void)
 {
-	if (machine_is_usb_a9260())
+	if (machine_is_usb_a9260() || machine_is_usb_a9g20())
 		ek_leds[0].active_low = 0;
 
 	at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
 }
 
-
 static void __init ek_board_init(void)
 {
 	/* Serial */
@@ -260,15 +337,22 @@ static void __init ek_board_init(void)
 	ek_add_device_eth();
 	/* NAND */
 	ek_add_device_nand();
-	/* I2C */
-	at91_add_device_i2c(NULL, 0);
 	/* Push Buttons */
 	ek_add_device_buttons();
 	/* LEDs */
 	ek_add_device_leds();
-	/* shutdown controller, wakeup button (5 msec low) */
-	at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
+
+	if (machine_is_usb_a9g20()) {
+		/* I2C */
+		at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
+	} else {
+		/* I2C */
+		at91_add_device_i2c(NULL, 0);
+		/* shutdown controller, wakeup button (5 msec low) */
+		at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10)
+				| AT91_SHDW_WKMODE0_LOW
 				| AT91_SHDW_RTTWKEN);
+	}
 }
 
 MACHINE_START(USB_A9263, "CALAO USB_A9263")
@@ -288,3 +372,12 @@ MACHINE_START(USB_A9260, "CALAO USB_A9260")
 	.init_irq	= at91_init_irq_default,
 	.init_machine	= ek_board_init,
 MACHINE_END
+
+MACHINE_START(USB_A9G20, "CALAO USB_A92G0")
+	/* Maintainer: Jean-Christophe PLAGNIOL-VILLARD */
+	.timer		= &at91sam926x_timer,
+	.map_io		= at91_map_io,
+	.init_early	= ek_init_early,
+	.init_irq	= at91_init_irq_default,
+	.init_machine	= ek_board_init,
+MACHINE_END
arch/arm/mach-at91/include/mach/timex.h +5 -0
index 31ac2d9..85820ad 100644
@@ -64,7 +64,12 @@
 
 #elif defined(CONFIG_ARCH_AT91SAM9G20)
 
+#if defined(CONFIG_MACH_USB_A9G20)
+#define AT91SAM9_MASTER_CLOCK	133000000
+#else
 #define AT91SAM9_MASTER_CLOCK	132096000
+#endif
+
 #define CLOCK_TICK_RATE		(AT91SAM9_MASTER_CLOCK/16)
 
 #elif defined(CONFIG_ARCH_AT91SAM9G45)
Signature · 1 line
Nicolas Ferre