From 1ee30e3c419824f45dc52d67516274548548b574 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 13 Jan 2011 17:26:47 +0100 Subject: update to Linux Kernel 2.6.37 --- target/linux/patches/2.6.37/foxg20.patch | 522 +++++++++++++++++++++++++++++++ 1 file changed, 522 insertions(+) create mode 100644 target/linux/patches/2.6.37/foxg20.patch (limited to 'target/linux/patches/2.6.37/foxg20.patch') diff --git a/target/linux/patches/2.6.37/foxg20.patch b/target/linux/patches/2.6.37/foxg20.patch new file mode 100644 index 000000000..9a7d7afa0 --- /dev/null +++ b/target/linux/patches/2.6.37/foxg20.patch @@ -0,0 +1,522 @@ +diff -Nur linux-2.6.36.orig/arch/arm/Kconfig linux-2.6.36/arch/arm/Kconfig +--- linux-2.6.36.orig/arch/arm/Kconfig 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/Kconfig 2010-12-25 17:49:20.000000000 +0100 +@@ -21,6 +21,8 @@ + select HAVE_FUNCTION_TRACER 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_PERF_EVENTS +diff -Nur linux-2.6.36.orig/arch/arm/include/asm/setup.h linux-2.6.36/arch/arm/include/asm/setup.h +--- linux-2.6.36.orig/arch/arm/include/asm/setup.h 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/include/asm/setup.h 2010-12-25 17:49:20.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.36.orig/arch/arm/kernel/setup.c linux-2.6.36/arch/arm/kernel/setup.c +--- linux-2.6.36.orig/arch/arm/kernel/setup.c 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/kernel/setup.c 2010-12-25 17:49:20.000000000 +0100 +@@ -899,8 +899,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.36.orig/arch/arm/mach-at91/Kconfig linux-2.6.36/arch/arm/mach-at91/Kconfig +--- linux-2.6.36.orig/arch/arm/mach-at91/Kconfig 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/mach-at91/Kconfig 2010-12-25 17:49:20.000000000 +0100 +@@ -364,6 +364,15 @@ + evaluation board. + + ++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 ++ + endif + + if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20) +diff -Nur linux-2.6.36.orig/arch/arm/mach-at91/Makefile linux-2.6.36/arch/arm/mach-at91/Makefile +--- linux-2.6.36.orig/arch/arm/mach-at91/Makefile 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/mach-at91/Makefile 2010-12-25 17:49:20.000000000 +0100 +@@ -72,6 +72,9 @@ + # AT91SAM9G45 board-specific support + obj-$(CONFIG_MACH_AT91SAM9G45EKES) += 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.36.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.36/arch/arm/mach-at91/at91sam9260_devices.c +--- linux-2.6.36.orig/arch/arm/mach-at91/at91sam9260_devices.c 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/arch/arm/mach-at91/at91sam9260_devices.c 2010-12-25 17:49:20.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.36.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.36/arch/arm/mach-at91/board-foxg20.c +--- linux-2.6.36.orig/arch/arm/mach-at91/board-foxg20.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.36/arch/arm/mach-at91/board-foxg20.c 2010-12-25 17:49:20.000000000 +0100 +@@ -0,0 +1,376 @@ ++/* ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#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 */ ++ .phys_io = AT91_BASE_SYS, ++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, ++ .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_END +diff -Nur linux-2.6.36.orig/drivers/mmc/host/Kconfig linux-2.6.36/drivers/mmc/host/Kconfig +--- linux-2.6.36.orig/drivers/mmc/host/Kconfig 2010-10-20 22:30:22.000000000 +0200 ++++ linux-2.6.36/drivers/mmc/host/Kconfig 2010-12-25 19:15:17.000000000 +0100 +@@ -208,12 +208,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" +@@ -223,17 +223,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)" -- cgit v1.2.3