diff options
Diffstat (limited to 'multitech/recipes/linux/linux-2.6.35/mt100eocg/linux-2.6.35.14-mach-at91-mt100eocg.patch')
-rw-r--r-- | multitech/recipes/linux/linux-2.6.35/mt100eocg/linux-2.6.35.14-mach-at91-mt100eocg.patch | 366 |
1 files changed, 366 insertions, 0 deletions
diff --git a/multitech/recipes/linux/linux-2.6.35/mt100eocg/linux-2.6.35.14-mach-at91-mt100eocg.patch b/multitech/recipes/linux/linux-2.6.35/mt100eocg/linux-2.6.35.14-mach-at91-mt100eocg.patch new file mode 100644 index 0000000..f46c6f7 --- /dev/null +++ b/multitech/recipes/linux/linux-2.6.35/mt100eocg/linux-2.6.35.14-mach-at91-mt100eocg.patch @@ -0,0 +1,366 @@ +Index: linux-2.6.35/arch/arm/mach-at91/at91sam9260_devices.c +=================================================================== +--- linux-2.6.35.orig/arch/arm/mach-at91/at91sam9260_devices.c 2011-08-12 14:37:24.056904132 -0500 ++++ linux-2.6.35/arch/arm/mach-at91/at91sam9260_devices.c 2011-08-12 14:39:25.459149746 -0500 +@@ -183,9 +183,9 @@ + at91_set_B_periph(AT91_PIN_PA25, 0); /* ERX2 */ + at91_set_B_periph(AT91_PIN_PA26, 0); /* ERX3 */ + at91_set_B_periph(AT91_PIN_PA27, 0); /* ERXCK */ +- at91_set_B_periph(AT91_PIN_PA23, 0); /* ETX2 */ +- at91_set_B_periph(AT91_PIN_PA24, 0); /* ETX3 */ +- at91_set_B_periph(AT91_PIN_PA22, 0); /* ETXER */ ++ at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */ ++ at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */ ++ /*at91_set_B_periph(AT91_PIN_PA22, 0);*/ /* ETXER */ + } + + eth_data = *data; +@@ -571,7 +571,15 @@ + .num_resources = ARRAY_SIZE(spi1_resources), + }; + +-static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB3, AT91_PIN_PC5, AT91_PIN_PC4, AT91_PIN_PC3 }; ++static const unsigned spi1_standard_cs[7] = { ++ AT91_PIN_PB21, // CS0 - external pin SPI_CS7 ++ AT91_PIN_PC5, // CS1 - GP output ++ AT91_PIN_PC4, // CS2 - temp sensor ++ AT91_PIN_PC6, // CS3 - unused/floating ++ AT91_PIN_PB12, // CS4 - GP input ++ AT91_PIN_PB13, // CS5 - external pin SPI_CS5 ++ AT91_PIN_PB16 // CS6 - external pin SPI_CS6 ++}; + + void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) + { +Index: linux-2.6.35/arch/arm/mach-at91/board-sam9g20ek.c +=================================================================== +--- linux-2.6.35.orig/arch/arm/mach-at91/board-sam9g20ek.c 2011-08-12 14:37:05.596941320 -0500 ++++ linux-2.6.35/arch/arm/mach-at91/board-sam9g20ek.c 2011-08-12 14:48:20.617283739 -0500 +@@ -27,6 +27,11 @@ + #include <linux/gpio_keys.h> + #include <linux/input.h> + #include <linux/clk.h> ++#include <linux/i2c/at24.h> ++#include <linux/spi/eeprom.h> ++#include <linux/spi/flash.h> ++#include <linux/delay.h> ++#include <mach/at91_rtt.h> + + #include <mach/hardware.h> + #include <asm/setup.h> +@@ -44,9 +49,12 @@ + #include "sam9_smc.h" + #include "generic.h" + ++static int i2c_present; + + static void __init ek_map_io(void) + { ++ int tmp; ++ + /* Initialize processor: 18.432 MHz crystal */ + at91sam9260_initialize(18432000); + +@@ -61,12 +69,55 @@ + /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ + at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); + ++ /* ++ * Reset any initiated i2c data transfers? ++ */ ++ at91_set_gpio_input(AT91_PIN_PA23, 0); ++ at91_set_gpio_output(AT91_PIN_PA24, 0); ++ for (tmp = 0; tmp < 11; tmp++) { ++ at91_set_gpio_value(AT91_PIN_PA24, 0); ++ udelay(20); ++ at91_set_gpio_value(AT91_PIN_PA24, 1); ++ udelay(20); ++ } ++ at91_set_gpio_input(AT91_PIN_PA24, 0); ++ ++ /* ++ * PA24 and PA23 are used as ID pins on MTCBA/MTCDP-0.0 and I2C pins on MTCDP-1.0. ++ * ++ * MTCBA Rev. B: 0x01, C: 0x02, D: 0x03 ++ * MTCDP Rev. A reads as 0x00 with TWCK and TWD pulled high ++ * ++ */ ++ tmp = !at91_get_gpio_value(AT91_PIN_PA24) << 1 | !at91_get_gpio_value(AT91_PIN_PA23); ++ ++ i2c_present = !tmp; ++ ++ /* ++ * The GPS receiver is either at US2 on MTCBA/MTCDP-0.0 and US3 on MTCDP-1.0. ++ */ ++ if (i2c_present) { ++ at91_register_uart(AT91SAM9260_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); ++ printk(KERN_INFO "sam9g20: i2c available\n"); ++ } else { ++ at91_register_uart(AT91SAM9260_ID_US2, 3, 0); ++ printk(KERN_INFO "sam9g20: i2c not available\n"); ++ } ++ + /* set serial console to ttyS0 (ie, DBGU) */ + at91_set_serial_console(0); + } + + static void __init ek_init_irq(void) + { ++ /* ++ * Ensure RTT interrupts are disabled ++ */ ++ u32 mr; ++ mr = __raw_readl(AT91_VA_BASE_SYS + AT91_RTT + AT91_RTT_MR); ++ __raw_writel(mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN), ++ AT91_VA_BASE_SYS + AT91_RTT + AT91_RTT_MR); ++ + at91sam9260_init_interrupts(NULL); + } + +@@ -82,10 +133,37 @@ + * USB Device port + */ + static struct at91_udc_data __initdata ek_udc_data = { +- .vbus_pin = AT91_PIN_PC5, +- .pullup_pin = 0, /* pull-up driven by UDC */ ++ .vbus_pin = AT91_PIN_PC12, ++ .pullup_pin = 0, /* pull-up driven by UDC */ ++}; ++ ++ ++#define MTS_EXT_AT25_TEST 0 ++#if MTS_EXT_AT25_TEST ++static struct spi_eeprom at25040b = { ++ .byte_len = SZ_4K / 8, ++ .name = "at25040b", ++ .page_size = 8, ++ .flags = EE_ADDR1, ++}; ++#endif ++ ++#define MTS_EXT_STT25_TEST 0 ++#if MTS_EXT_STT25_TEST ++static struct mtd_partition m25_partitions[] = { ++ { ++ .name = "flash", ++ .offset = 0x00000000, ++ .size = MTDPART_SIZ_FULL, ++ }, + }; + ++static struct flash_platform_data m25_spi_flash_data = { ++ .type = "sst25vf080b", ++ .nr_parts = ARRAY_SIZE(m25_partitions), ++ .parts = m25_partitions, ++}; ++#endif + + /* + * SPI devices. +@@ -107,6 +185,54 @@ + }, + #endif + #endif ++ { ++ .modalias = "mts-io-sout", ++ .chip_select = 0, ++ .bus_num = 1, ++ }, ++ { ++ .modalias = "mts-io-board-temp", ++ .chip_select = 2, ++ .bus_num = 1, ++ }, ++ { ++ .modalias = "mts-io-dout", ++ .chip_select = 1, ++ .bus_num = 1, ++ }, ++ { ++ .modalias = "mts-io-din", ++ .chip_select = 4, ++ .bus_num = 1, ++ }, ++#if MTS_EXT_AT25_TEST ++ { ++ .modalias = "at25", ++ .platform_data = &at25040b, ++ .max_speed_hz = 20 * 1000 * 1000, ++ .bus_num = 1, ++ .chip_select = 5, ++ .mode = SPI_MODE_0, ++ }, ++ { ++ .modalias = "at25", ++ .platform_data = &at25040b, ++ .max_speed_hz = 20 * 1000 * 1000, ++ .bus_num = 1, ++ .chip_select = 6, ++ .mode = SPI_MODE_0, ++ }, ++#endif ++#if MTS_EXT_STT25_TEST ++ { ++ .modalias = "m25p80", ++ .platform_data = &m25_spi_flash_data, ++ .irq = NO_IRQ, ++ .max_speed_hz = 33 * 1000 * 1000, ++ .bus_num = 1, ++ .chip_select = 5, ++ }, ++#endif + }; + + +@@ -115,7 +241,7 @@ + */ + static struct at91_eth_data __initdata ek_macb_data = { + .phy_irq_pin = AT91_PIN_PA7, +- .is_rmii = 1, ++ .is_rmii = 0, + }; + + +@@ -124,18 +250,48 @@ + */ + static struct mtd_partition __initdata ek_nand_partition[] = { + { +- .name = "Bootstrap", +- .offset = 0, +- .size = 4 * SZ_1M, ++ .name = "MTNCG-NANDFlash", ++ .offset = 0, ++ .size = 256*1024*1024, ++ }, ++ { ++ .name = "AT91Bootstrap", ++ .offset = 0, ++ .size = 128*1024, ++ }, ++ { ++ .name = "UBoot", ++ .offset = 128*1024, ++ .size = 256*1024, ++ }, ++ { ++ .name = "UBoot Config", ++ .offset = 384*1024, ++ .size = 128*1024, ++ }, ++ { ++ .name = "UBoot Redundant Config", ++ .offset = 512*1024, ++ .size = 128*1024, ++ }, ++ { ++ .name = "uImage", ++ .offset = 640*1024, ++ .size = 59*128*1024, + }, + { +- .name = "Partition 1", +- .offset = MTDPART_OFS_NXTBLK, +- .size = 60 * SZ_1M, ++ .name = "Config", ++ .offset = 64*128*1024, ++ .size = 64*128*1024, + }, + { +- .name = "Partition 2", +- .offset = MTDPART_OFS_NXTBLK, ++ .name = "Oem Config", ++ .offset = 128*128*1024, ++ .size = 64*128*1024, ++ }, ++ { ++ .name = "Rootfs", ++ .offset = 192*128*1024, + .size = MTDPART_SIZ_FULL, + }, + }; +@@ -195,11 +351,13 @@ + + /* + * MCI (SD/MMC) +- * det_pin, wp_pin and vcc_pin are not connected ++ * vcc_pin is not connected + */ + static struct at91_mmc_data __initdata ek_mmc_data = { + .slot_b = 1, + .wire4 = 1, ++ .det_pin = AT91_PIN_PA6, ++ .wp_pin = AT91_PIN_PA9, + }; + + +@@ -207,15 +365,10 @@ + * LEDs + */ + static struct gpio_led ek_leds[] = { +- { /* "bottom" led, green, userled1 to be defined */ +- .name = "ds5", +- .gpio = AT91_PIN_PA6, ++ { /* "status" led, green */ ++ .name = "status", ++ .gpio = AT91_PIN_PA30, + .active_low = 1, +- .default_trigger = "none", +- }, +- { /* "power" led, yellow */ +- .name = "ds1", +- .gpio = AT91_PIN_PA9, + .default_trigger = "heartbeat", + } + }; +@@ -269,14 +422,36 @@ + static void __init ek_add_device_buttons(void) {} + #endif + ++uint8_t mts_id_eeprom[512]; ++ ++EXPORT_SYMBOL(mts_id_eeprom); ++ ++static void mts_id_eeprom_load(struct memory_accessor *macc, void *context) ++{ ++ int tmp; ++ ++ memset(mts_id_eeprom, 0, sizeof(mts_id_eeprom)); ++ ++ tmp = macc->read(macc, mts_id_eeprom, 0, sizeof(mts_id_eeprom)); ++ if (tmp != sizeof(mts_id_eeprom)) { ++ printk(KERN_ERR "sam9g20: id eeprom read failed: %d\n", tmp); ++ } else { ++ printk(KERN_INFO "sam9g20: read %d bytes from id eeprom\n", tmp); ++ } ++} ++ ++static struct at24_platform_data at24c04_data = { ++ .byte_len = SZ_4K / 8, ++ .page_size = 16, ++ .setup = mts_id_eeprom_load, ++}; ++ + + static struct i2c_board_info __initdata ek_i2c_devices[] = { +- { +- I2C_BOARD_INFO("24c512", 0x50) +- }, +- { +- I2C_BOARD_INFO("wm8731", 0x1b) +- }, ++ { ++ I2C_BOARD_INFO("24c04", 0x56), ++ .platform_data = &at24c04_data, ++ }, + }; + + +@@ -305,7 +480,7 @@ + /* 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); ++ /* at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX); */ + } + + MACHINE_START(AT91SAM9G20EK, "Atmel AT91SAM9G20-EK") |