| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 | diff -Nur linux-2.6.37.orig/arch/arm/Kconfig linux-2.6.37/arch/arm/Kconfig--- linux-2.6.37.orig/arch/arm/Kconfig	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/Kconfig	2011-01-19 22:07:18.000000000 +0100@@ -16,6 +16,8 @@ 	select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL) 	select HAVE_GENERIC_DMA_COHERENT 	select HAVE_KERNEL_GZIP+	select HAVE_KERNEL_BZIP2+	select HAVE_KERNEL_LZMA 	select HAVE_KERNEL_LZO 	select HAVE_KERNEL_LZMA 	select HAVE_IRQ_WORKdiff -Nur linux-2.6.37.orig/arch/arm/include/asm/setup.h linux-2.6.37/arch/arm/include/asm/setup.h--- linux-2.6.37.orig/arch/arm/include/asm/setup.h	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/include/asm/setup.h	2011-01-19 22:07:18.000000000 +0100@@ -18,6 +18,8 @@  #define COMMAND_LINE_SIZE 1024 +const char *get_system_type(void);+ /* The list ends with an ATAG_NONE node. */ #define ATAG_NONE	0x00000000 diff -Nur linux-2.6.37.orig/arch/arm/kernel/setup.c linux-2.6.37/arch/arm/kernel/setup.c--- linux-2.6.37.orig/arch/arm/kernel/setup.c	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/kernel/setup.c	2011-01-19 22:07:18.000000000 +0100@@ -935,8 +935,12 @@  static int c_show(struct seq_file *m, void *v) {+	unsigned long n = (unsigned long) v - 1; 	int i; +	if (n == 0)+		seq_printf(m, "system type\t\t: %s\n", get_system_type());+ 	seq_printf(m, "Processor\t: %s rev %d (%s)\n", 		   cpu_name, read_cpuid_id() & 15, elf_platform); diff -Nur linux-2.6.37.orig/arch/arm/mach-at91/Kconfig linux-2.6.37/arch/arm/mach-at91/Kconfig--- linux-2.6.37.orig/arch/arm/mach-at91/Kconfig	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/mach-at91/Kconfig	2011-01-19 22:08:47.000000000 +0100@@ -347,6 +347,15 @@ 	  Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit 	  that embeds only one SD/MMC slot. +config MACH_FOXG20+	bool "Acme Systems FOX G20"+	select HAVE_AT91_DATAFLASH_CARD+	select HAVE_NAND_ATMEL_BUSWIDTH_16+	depends on ARCH_AT91SAM9G20+	help+	  Select this if you are using Acme Systems+	  FOX Board G20 <http://netus.acmesystems.it>+ config MACH_AT91SAM9G20EK_2MMC 	depends on MACH_AT91SAM9G20EK 	bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"diff -Nur linux-2.6.37.orig/arch/arm/mach-at91/Makefile linux-2.6.37/arch/arm/mach-at91/Makefile--- linux-2.6.37.orig/arch/arm/mach-at91/Makefile	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/mach-at91/Makefile	2011-01-19 22:07:18.000000000 +0100@@ -73,6 +73,9 @@ # AT91SAM9G45 board-specific support obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o +# FOXG20 board-specific support+obj-$(CONFIG_MACH_FOXG20) += board-foxg20.o+ # AT91CAP9 board-specific support obj-$(CONFIG_MACH_AT91CAP9ADK)	+= board-cap9adk.o diff -Nur linux-2.6.37.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.37/arch/arm/mach-at91/at91sam9260_devices.c--- linux-2.6.37.orig/arch/arm/mach-at91/at91sam9260_devices.c	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/arch/arm/mach-at91/at91sam9260_devices.c	2011-01-19 22:07:18.000000000 +0100@@ -454,7 +454,15 @@ 	.sda_is_open_drain	= 1, 	.scl_pin		= AT91_PIN_PA24, 	.scl_is_open_drain	= 1,+#if defined(CONFIG_MACH_FOXG20)+	/* Some I2C devices are limited to 100 kHz and i2c-gpio.h+	 * says "frequency is (500 / udelay) kHz" so 5 is best (and is+	 * used in i2c-gpio.c)+	 */+	.udelay			= 5,		/* ~100 kHz */+#else 	.udelay			= 2,		/* ~100 kHz */+#endif };  static struct platform_device at91sam9260_twi_device = {diff -Nur linux-2.6.37.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.37/arch/arm/mach-at91/board-foxg20.c--- linux-2.6.37.orig/arch/arm/mach-at91/board-foxg20.c	1970-01-01 01:00:00.000000000 +0100+++ linux-2.6.37/arch/arm/mach-at91/board-foxg20.c	2011-01-19 22:30:43.000000000 +0100@@ -0,0 +1,374 @@+/*+ *  Copyright (C) 2005 SAN People+ *  Copyright (C) 2008 Atmel+ *  Copyright (C) 2010 Lee McLoughlin - lee@lmmrtech.com+ *+ * 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+ */++#include <linux/types.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/spi/at73c213.h>+#include <linux/gpio_keys.h>+#include <linux/input.h>+#include <linux/clk.h>+#include <linux/w1-gpio.h>++#include <mach/hardware.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/board.h>+#include <mach/gpio.h>+#include <mach/at91sam9_smc.h>++#include "sam9_smc.h"+#include "generic.h"++/*+ * The FOX hardware comes as the "Netus" board with just the cpu, ram,+ * dataflash and two header connectors. This is plugged into the Fox board+ * which provides the ethernet, usb, rtc, leds, switch, ...+ * Other version of the Fox board are planned which could contain+ * both NAND and sound (WM8731).+ *+ * By default USART4 and USART5 are not enabled (freeing up those pins+ * for general use)+ *+ * Note: Enabling the NAND without a NAND device present doesn't cause+ * any issues as on boot the probe will fail.+ */+/* #define FOXG20_NAND */+/* #define FOXG20_WM8731 */+/* #define FOX_USART4 */+/* #define FOX_USART5 */++const char *get_system_type(void)+{+        return "FoxBoard FOXG20";+}++static void __init foxg20_map_io(void)+{+	/* Initialize processor: 18.432 MHz crystal */+	at91sam9260_initialize(18432000);++	/* DBGU on ttyS0. (Rx & Tx only) */+	at91_register_uart(0, 0, 0);++	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */+	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS+			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD+			   | ATMEL_UART_RI);++	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */+	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);++	/* USART2 on ttyS3. (Rx & Tx only) */+	at91_register_uart(AT91SAM9260_ID_US2, 3, 0);++	/* USART3 on ttyS4. (Rx, Tx, RTS, CTS) */+	at91_register_uart(AT91SAM9260_ID_US3, 4, ATMEL_UART_CTS | ATMEL_UART_RTS);++#if defined(FOX_USART4)+	/* USART4 on ttyS5. (Rx & Tx only) */+	at91_register_uart(AT91SAM9260_ID_US4, 5, 0);+#endif++#if defined(FOX_USART5)+	/* USART5 on ttyS6. (Rx & Tx only) */+	at91_register_uart(AT91SAM9260_ID_US5, 6, 0);+#endif++	/* set serial console to ttyS0 (ie, DBGU) */+	at91_set_serial_console(0);+}++static void __init foxg20_init_irq(void)+{+	at91sam9260_init_interrupts(NULL);+}+++/*+ * USB Host port+ */+static struct at91_usbh_data __initdata foxg20_usbh_data = {+	.ports		= 2,+};++/*+ * USB Device port+ */+static struct at91_udc_data __initdata foxg20_udc_data = {+	.vbus_pin	= AT91_PIN_PC6,+	.pullup_pin	= 0,		/* pull-up driven by UDC */+};+++/*+ * SPI devices.+ */+static struct spi_board_info foxg20_spi_devices[] = {+#if !defined(CONFIG_MMC_AT91)+	{	+		.modalias	= "mtd_dataflash",+		.chip_select	= 1,+		.max_speed_hz	= 15 * 1000 * 1000,+		.bus_num	= 0,+	},+#endif+};+++/*+ * MACB Ethernet device+ */+static struct at91_eth_data __initdata foxg20_macb_data = {+	.phy_irq_pin	= AT91_PIN_PA7,+	.is_rmii	= 1,+};+++#ifdef FOXG20_NAND+/* The Fox doesn't have NAND memory */+/*+ * NAND flash+ */+static struct mtd_partition __initdata foxg20_nand_partition[] = {+	{+		.name   = "Bootstrap",+		.offset = 0,+		.size   = 4 * SZ_1M,+	},+	{+		.name	= "Partition 1",+		.offset	= MTDPART_OFS_NXTBLK,+		.size	= 60 * SZ_1M,+	},+	{+		.name	= "Partition 2",+		.offset	= MTDPART_OFS_NXTBLK,+		.size	= MTDPART_SIZ_FULL,+	},+};++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)+{+	*num_partitions = ARRAY_SIZE(foxg20_nand_partition);+	return foxg20_nand_partition;+}++/* det_pin is not connected */+static struct atmel_nand_data __initdata foxg20_nand_data = {+	.ale		= 21,+	.cle		= 22,+	.rdy_pin	= AT91_PIN_PC13,+	.enable_pin	= AT91_PIN_PC14,+	.partition_info	= nand_partitions,+#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)+	.bus_width_16	= 1,+#else+	.bus_width_16	= 0,+#endif+};++static struct sam9_smc_config __initdata foxg20_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,+	.tdf_cycles		= 3,+};++static void __init foxg20_add_device_nand(void)+{+	/* setup bus-width (8 or 16) */+	if (foxg20_nand_data.bus_width_16)+		foxg20_nand_smc_config.mode |= AT91_SMC_DBW_16;+	else+		foxg20_nand_smc_config.mode |= AT91_SMC_DBW_8;++	/* configure chip-select 3 (NAND) */+	sam9_smc_configure(3, &foxg20_nand_smc_config);++	at91_add_device_nand(&foxg20_nand_data);+}+#endif+++/*+ * MCI (SD/MMC)+ * det_pin, wp_pin and vcc_pin are not connected+ */+static struct at91_mmc_data __initdata foxg20_mmc_data = {+	.slot_b		= 1,+	.wire4		= 1,+};+++/*+ * LEDs+ */+static struct gpio_led foxg20_leds[] = {+	{	/* user led, red */+		.name			= "user_led",+		.gpio			= AT91_PIN_PC7,+		.active_low		= 0,+		.default_trigger	= "heartbeat",+	},+};+++/*+ * GPIO Buttons+ */+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)+static struct gpio_keys_button foxg20_buttons[] = {+	{+		.gpio		= AT91_PIN_PC4,+		.code		= BTN_1,+		.desc		= "Button 1",+		.active_low	= 1,+		.wakeup		= 1,+	},+};++static struct gpio_keys_platform_data foxg20_button_data = {+	.buttons	= foxg20_buttons,+	.nbuttons	= ARRAY_SIZE(foxg20_buttons),+};++static struct platform_device foxg20_button_device = {+	.name		= "gpio-keys",+	.id		= -1,+	.num_resources	= 0,+	.dev		= {+		.platform_data	= &foxg20_button_data,+	}+};++static void __init foxg20_add_device_buttons(void)+{+	at91_set_gpio_input(AT91_PIN_PC4, 1);	/* btn1 */+	at91_set_deglitch(AT91_PIN_PC4, 1);++	platform_device_register(&foxg20_button_device);+}+#else+static void __init foxg20_add_device_buttons(void) {}+#endif+++#if !defined(FOXG20_WM8731)+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)+static struct w1_gpio_platform_data w1_gpio_pdata = {+	/* If you choose to use a pin other than PB16 it needs to be 3.3V */+        .pin            = AT91_PIN_PB16,+        .is_open_drain  = 1,+};++static struct platform_device w1_device = {+        .name                   = "w1-gpio",+        .id                     = -1,+        .dev.platform_data      = &w1_gpio_pdata,+};++static void __init at91_add_device_w1(void)+{+        at91_set_GPIO_periph(w1_gpio_pdata.pin, 1);+        at91_set_multi_drive(w1_gpio_pdata.pin, 1);+        platform_device_register(&w1_device);+}++#endif+#endif+++static struct i2c_board_info __initdata foxg20_i2c_devices[] = {+	{+		I2C_BOARD_INFO("24c512", 0x50),+#ifdef FOXG20_WM8731+		I2C_BOARD_INFO("wm8731", 0x1b),+#endif+	},+};+++static void __init foxg20_board_init(void)+{+	/* Serial */+	at91_add_device_serial();+	/* USB Host */+	at91_add_device_usbh(&foxg20_usbh_data);+	/* USB Device */+	at91_add_device_udc(&foxg20_udc_data);+	/* SPI */+	at91_add_device_spi(foxg20_spi_devices, ARRAY_SIZE(foxg20_spi_devices));+#ifdef FOXG20_NAND+	/* The Fox doesn't have NAND memory */+	/* NAND */+	foxg20_add_device_nand();+#endif+	/* Ethernet */+	at91_add_device_eth(&foxg20_macb_data);+	/* MMC */+	at91_add_device_mmc(0, &foxg20_mmc_data);+	/* I2C */+	at91_add_device_i2c(foxg20_i2c_devices, ARRAY_SIZE(foxg20_i2c_devices));+	/* LEDs */+	at91_gpio_leds(foxg20_leds, ARRAY_SIZE(foxg20_leds));+	/* Push Buttons */+	foxg20_add_device_buttons();+#ifdef FOXG20_WM8731+	/* The Fox doesn't have this sound chip */+	/* PCK0 provides MCLK to the WM8731 */+	at91_set_B_periph(AT91_PIN_PC1, 0);+	/* SSC (for WM8731) */+	at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX);+#else+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)+	at91_add_device_w1();+#endif+#endif+}++MACHINE_START(AT91SAM9G20EK, "Acme Systems FOXG20")+	/* Maintainer: Lee McLoughlin */+	.boot_params	= AT91_SDRAM_BASE + 0x100,+	.timer		= &at91sam926x_timer,+	.map_io		= foxg20_map_io,+	.init_irq	= foxg20_init_irq,+	.init_machine	= foxg20_board_init,+MACHINE_ENDdiff -Nur linux-2.6.37.orig/drivers/mmc/host/Kconfig linux-2.6.37/drivers/mmc/host/Kconfig--- linux-2.6.37.orig/drivers/mmc/host/Kconfig	2011-01-05 01:50:19.000000000 +0100+++ linux-2.6.37/drivers/mmc/host/Kconfig	2011-01-19 22:07:18.000000000 +0100@@ -230,12 +230,12 @@  	  If unsure, say N. -choice-	prompt "Atmel SD/MMC Driver"-	depends on AVR32 || ARCH_AT91-	default MMC_ATMELMCI if AVR32-	help-	  Choose which driver to use for the Atmel MCI Silicon+#choice+#	prompt "Atmel SD/MMC Driver"+#	depends on AVR32 || ARCH_AT91+#	default MMC_ATMELMCI if AVR32+#	help+#	  Choose which driver to use for the Atmel MCI Silicon  config MMC_AT91 	tristate "AT91 SD/MMC Card Interface support"@@ -245,17 +245,17 @@  	  If unsure, say N. -config MMC_ATMELMCI-	tristate "Atmel Multimedia Card Interface support"-	depends on AVR32 || ARCH_AT91-	help-	  This selects the Atmel Multimedia Card Interface driver. If-	  you have an AT32 (AVR32) or AT91 platform with a Multimedia-	  Card slot, say Y or M here.--	  If unsure, say N.--endchoice+#config MMC_ATMELMCI+#	tristate "Atmel Multimedia Card Interface support"+#	depends on AVR32 || ARCH_AT91+#	help+#	  This selects the Atmel Multimedia Card Interface driver. If+#	  you have an AT32 (AVR32) or AT91 platform with a Multimedia+#	  Card slot, say Y or M here.+#+#	  If unsure, say N.+#+#endchoice  config MMC_ATMELMCI_DMA 	bool "Atmel MCI DMA support (EXPERIMENTAL)"
 |