Skip to contentSkip to conversation

at91: Add new board

PATCH New Prchal Jiří 2 participants 2 messages Jun 29, 2012 – Jul 2, 2012

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

PATCH 5/5 at91: Add new board

Hi,
I'd like to add support for our board based up on Telit's module GE863 Pro3. Its like AT91SAM9260EK with 64MB RAM and 128MB NAND FLASH, many uarts, SD slot, eth phy...

---
  arch/arm/mach-at91/Kconfig     |    6 +
  arch/arm/mach-at91/Makefile    |    1 +
  arch/arm/mach-at91/board-cdu.c |  301 ++++++++++++++++++++++++++++++++++++++++
  3 files changed, 308 insertions(+), 0 deletions(-)

create mode 100644 arch/arm/mach-at91/board-cdu.c

arch/arm/mach-at91/Kconfig +6 -0
index 19505c0..7e072d7 100644
@@ -260,6 +260,12 @@ config MACH_AT91SAM9260EK
  	  Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
  	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
 
+config MACH_CDU
+	bool "CDU AKsignal board"
+	help
+	  Select this if you are using AKsignal CDU board
+	  <http://www.aksignal.cz>
+
  config MACH_CAM60
  	bool "KwikByte KB9260 (CAM60) board"
  	help
arch/arm/mach-at91/Makefile +1 -0
index 3bb7a51..b633748 100644
@@ -51,6 +51,7 @@ obj-$(CONFIG_MACH_RSI_EWS)	+= board-rsi-ews.o
 
  # AT91SAM9260 board-specific support
  obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
+obj-$(CONFIG_MACH_CDU)		 += board-cdu.o
  obj-$(CONFIG_MACH_CAM60)	+= board-cam60.o
  obj-$(CONFIG_MACH_SAM9_L9260)	+= board-sam9-l9260.o
  obj-$(CONFIG_MACH_USB_A9260)	+= board-usb-a926x.o
arch/arm/mach-at91/board-cdu.c new file +301 -0

301 lines not on this page · raw message

Signature · 1 line
1.7.7
#1 lore raw

PATCH 5/5 at91: Add new board

On 06/29/2012 01:32 PM, Prchal Ji?? :

Quoted 5 lines

Hi,
I'd like to add support for our board based up on Telit's module GE863 Pro3.
Its like AT91SAM9260EK with 64MB RAM and 128MB NAND FLASH, many uarts, SD slot, eth phy...

Prchal,

It seems that Telit's module is submitted as a Device Tree machine as submitted by Fabio Porcedda a few weeks ago.

AT91 will not include in mainline more boards based on previous descriptions. We are moving to device tree infrastructure when possible.

Please check the AT91 git tree:
git://github.com/at91linux/linux-at91.git at91-3.6-dt

And see if you can add your board on top of it...

Best regards,

Quoted 350 lines
---
 arch/arm/mach-at91/Kconfig     |    6 +
 arch/arm/mach-at91/Makefile    |    1 +
 arch/arm/mach-at91/board-cdu.c |  301
++++++++++++++++++++++++++++++++++++++++
 3 files changed, 308 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-at91/board-cdu.c
arch/arm/mach-at91/Kconfig +0 -0
index 19505c0..7e072d7 100644
@@ -260,6 +260,12 @@ config MACH_AT91SAM9260EK
       Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE

Evaluation Kit

       <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
arch/arm/mach-at91/Kconfig +6 -0
+config MACH_CDU
+    bool "CDU AKsignal board"
+    help
+      Select this if you are using AKsignal CDU board
+      <http://www.aksignal.cz>
+
 config MACH_CAM60
     bool "KwikByte KB9260 (CAM60) board"
     help
arch/arm/mach-at91/Makefile +1 -0
index 3bb7a51..b633748 100644
@@ -51,6 +51,7 @@ obj-$(CONFIG_MACH_RSI_EWS)    += board-rsi-ews.o
 
 # AT91SAM9260 board-specific support
 obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
+obj-$(CONFIG_MACH_CDU)         += board-cdu.o
 obj-$(CONFIG_MACH_CAM60)    += board-cam60.o
 obj-$(CONFIG_MACH_SAM9_L9260)    += board-sam9-l9260.o
 obj-$(CONFIG_MACH_USB_A9260)    += board-usb-a926x.o
arch/arm/mach-at91/board-cdu.c new file +21 -0
new file mode 100644
index 0000000..1f266a8
@@ -0,0 +1,301 @@
+/*
+ * linux/arch/arm/mach-at91/board-cdu.c
+ *
+ *  Copyright (C) 2005 SAN People
+ *  Copyright (C) 2006 Atmel
+ *  Copyright (C) 2011 AKsignal Brno
+ *                     jiri.prchal at aksignal.cz
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 

02111-1307 USA
+ */

arch/arm/mach-at91/board-cdu.c new file +41 -0
+
+#include <linux/types.h>
+#include <linux/gpio.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/spi/spi.h>
+#include <linux/clk.h>
+#include <linux/spi/mcp23s08.h>
+#include <linux/dma-mapping.h>
+
+#include <asm/setup.h>
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <mach/hardware.h>
+#include <mach/board.h>
+#include <mach/gpio.h>
+#include <mach/at91sam9_smc.h>
+#include <mach/at91_shdwc.h>
+#include <mach/system_rev.h>
+
+#include "sam9_smc.h"
+#include "generic.h"
+
+static void __init cdu_init_early(void)
+{
+    /* Initialize processor: 6 MHz crystal */
+    at91_initialize(6000000);
+
+    /* DBGU on ttyS0. (Rx & Tx only) */
+    at91_register_uart(0, 0, 0);
+
+    /* modem */
+    /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
+    at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS |

ATMEL_UART_RTS

arch/arm/mach-at91/board-cdu.c new file +225 -0
+               | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD
+               | ATMEL_UART_RI);
+
+    /* sbus */
+    /* USART1 on ttyS2. (Rx, Tx, RTS) */
+    at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_RTS);
+
+    /* aux RS485, pins 01,02 */
+    /* USART2 on ttyS3. (Rx, Tx, RTS) */
+    at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_RTS);
+
+    /* aux RS485, pins 05,06 */
+    /* USART3 on ttyS4. (Rx, Tx, RTS) */
+    at91_register_uart(AT91SAM9260_ID_US3, 4, ATMEL_UART_RTS);
+}
+
+/*
+ * USB Host port
+ */
+static struct at91_usbh_data __initdata cdu_usbh_data = {
+    .ports        = 2,
+    .vbus_pin    = {-EINVAL, -EINVAL},
+    .overcurrent_pin= {-EINVAL, -EINVAL},
+};
+
+/*
+ * USB Device port
+ */
+static struct at91_udc_data __initdata cdu_udc_data = {
+    .vbus_pin    = AT91_PIN_PC15,
+    .pullup_pin    = -EINVAL,        /* pull-up driven by UDC */
+};
+
+/*
+ * SPI devices.
+ */
+static struct spi_board_info cdu_spi_devices[] = {
+    { /* ADC LTC2488 */
+        .modalias    = "spidev",
+        .bus_num    = 1,
+        .chip_select    = 0,
+        .max_speed_hz    = 1 * 1000000,
+    },
+    { /* GPIO expander MCP23S08 */
+        .modalias    = "spidev",
+        .bus_num    = 1,
+        .chip_select    = 1,
+        .max_speed_hz    = 10 * 1000000,
+        .mode        = SPI_MODE_3,
+    },
+    { /* non volatile memory (F-RAM) FM25VN10 */
+        .modalias    = "spidev",
+        .bus_num    = 1,
+        .chip_select    = 2,
+        .max_speed_hz    = 10 * 1000000,
+    },
+};
+
+/*
+ * MACB Ethernet device
+ */
+static struct macb_platform_data __initdata cdu_macb_data = {
+    .phy_irq_pin    = -EINVAL,
+    .is_rmii    = 1,
+};
+
+/*
+ * NAND flash
+ */
+static struct mtd_partition __initdata cdu_nand_partition[] = {
+    {
+        .name   = "bootstrap",
+        .offset = 0,
+        .size   = SZ_256K,
+    },
+    {
+        .name   = "uboot",
+        .offset = MTDPART_OFS_APPEND,
+        .size   = SZ_512K,
+    },
+    {
+        .name   = "ubootenv",
+        .offset = MTDPART_OFS_APPEND,
+        .size   = SZ_256K,
+    },
+    {
+        .name   = "kernel",
+        .offset = MTDPART_OFS_APPEND,
+        .size   = SZ_4M,
+    },
+    {
+        .name   = "rootfs",
+        .offset = MTDPART_OFS_APPEND,
+        .size   = MTDPART_SIZ_FULL,
+    },
+};
+
+static struct atmel_nand_data __initdata cdu_nand_data = {
+    .ale        = 21,
+    .cle        = 22,
+    .det_pin    = -EINVAL,
+    .rdy_pin    = AT91_PIN_PC13,
+    .enable_pin    = AT91_PIN_PC14,
+    .bus_width_16    = 0,
+    .ecc_mode    = NAND_ECC_SOFT,
+    .parts        = cdu_nand_partition,
+    .num_parts    = ARRAY_SIZE(cdu_nand_partition),
+};
+
+static struct sam9_smc_config __initdata cdu_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,
+
+    .tdf_cycles        = 2,
+
+    .mode            = AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+                  AT91_SMC_EXNWMODE_DISABLE |
+                  AT91_SMC_DBW_8,
+};
+
+static void __init cdu_add_device_nand(void)
+{
+    sam9_smc_configure(0, 3, &cdu_nand_smc_config);
+    at91_add_device_nand(&cdu_nand_data);
+}
+
+/*
+* MCI (SD/MMC)
+*/
+static struct mci_platform_data __initdata cdu_mmc_data = {
+    .slot[0] = {
+        .bus_width    = 4,
+        .detect_pin    = -1,
+        .wp_pin        = -1,
+    },
+};
+
+/*
+ * LEDs
+ */
+static struct gpio_led cdu_leds[] = {
+    {
+        .name            = "red",
+        .gpio            = AT91_PIN_PC10,
+    },
+    {
+        .name            = "green",
+        .gpio            = AT91_PIN_PA5,
+        .active_low        = 1,
+    },
+    {
+        .name            = "yellow",
+        .gpio            = AT91_PIN_PB20,
+        .active_low        = 1,
+    },
+    {
+        .name            = "blue",
+        .gpio            = AT91_PIN_PB21,
+        .active_low        = 1,
+        .default_state        = LEDS_GPIO_DEFSTATE_ON,
+    },
+};
+
+/*
+ * GPIOs
+ */
+static struct gpio gpios[] = {
+    { AT91_PIN_PA0,  GPIOF_OUT_INIT_LOW,  "ebus_dir"},
+    { AT91_PIN_PA1,  GPIOF_OUT_INIT_LOW,  "time_dir"},
+    { AT91_PIN_PB12, GPIOF_OUT_INIT_LOW,  "gsm_rst"},
+    { AT91_PIN_PB13, GPIOF_OUT_INIT_LOW,  "gsm_on"},
+    { AT91_PIN_PC2,  GPIOF_IN,            "por"},
+    { AT91_PIN_PC7,  GPIOF_OUT_INIT_HIGH, "spk_shdn"},
+
+    { AT91_PIN_PC0,  GPIOF_IN,            "in13"},
+    { AT91_PIN_PC1,  GPIOF_IN,            "in14"},
+    { AT91_PIN_PA22, GPIOF_IN,            "in17"},
+    { AT91_PIN_PA23, GPIOF_IN,            "in18"},
+    { AT91_PIN_PA24, GPIOF_IN,            "in19"},
+    { AT91_PIN_PA25, GPIOF_IN,            "in20"},
+
+    { AT91_PIN_PA26, GPIOF_OUT_INIT_LOW,  "out15"},
+    { AT91_PIN_PA27, GPIOF_OUT_INIT_LOW,  "out16"},
+    { AT91_PIN_PA28, GPIOF_OUT_INIT_LOW,  "out17"},
+    { AT91_PIN_PA29, GPIOF_OUT_INIT_LOW,  "out18"},
+    { AT91_PIN_PA30, GPIOF_OUT_INIT_LOW,  "out19"},
+    { AT91_PIN_PB29, GPIOF_OUT_INIT_LOW,  "out20"},
+};
+
+static void __init cdu_add_gpio(void)
+{
+    int i;
+
+    for (i = 0; i < ARRAY_SIZE(gpios); i++) {
+        gpio_request_one(gpios[i].gpio, gpios[i].flags, gpios[i].label);
+        gpio_export(gpios[i].gpio, 0);
+        /* all inputs are active low */
+        if (gpios[i].label == strstr(gpios[i].label, "in"))
+            gpio_sysfs_set_active_low(gpios[i].gpio, 1);
+    }
+}
+
+/*
+ * init
+ */
+static void __init cdu_board_init(void)
+{
+    at91_add_device_serial();
+    at91_add_device_usbh(&cdu_usbh_data);
+    at91_add_device_udc(&cdu_udc_data);
+    at91_add_device_spi(cdu_spi_devices, ARRAY_SIZE(cdu_spi_devices));
+    cdu_add_device_nand();
+    at91_add_device_eth(&cdu_macb_data);
+    at91_add_device_mci(0, &cdu_mmc_data);
+    at91_add_device_ssc(AT91SAM9260_ID_SSC, (ATMEL_SSC_TF |

ATMEL_SSC_TK | ATMEL_SSC_TD | ATMEL_SSC_RD));

arch/arm/mach-at91/board-cdu.c new file +13 -0
+    at91_gpio_leds(cdu_leds, ARRAY_SIZE(cdu_leds));
+    cdu_add_gpio ();
+}
+
+MACHINE_START(AT91SAM9260EK, "CDU")
+    /* Maintainer: AKsignal Brno */
+    /* Jiri Prchal <[email protected]> */
+    .timer        = &at91sam926x_timer,
+    .map_io        = at91_map_io,
+    .init_early    = cdu_init_early,
+    .init_irq    = at91_init_irq_default,
+    .init_machine    = cdu_board_init,
+MACHINE_END
Signature · 1 line
Nicolas Ferre