summaryrefslogtreecommitdiff
path: root/multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch
diff options
context:
space:
mode:
Diffstat (limited to 'multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch')
-rw-r--r--multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch396
1 files changed, 396 insertions, 0 deletions
diff --git a/multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch b/multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch
new file mode 100644
index 0000000..1ca54a8
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39-at91/mtocgd/linux-2.6.39.4-mach-at91-mtocgd.patch
@@ -0,0 +1,396 @@
+Index: git/arch/arm/mach-at91/board-sam9x5cm.c
+===================================================================
+--- git.orig/arch/arm/mach-at91/board-sam9x5cm.c 2013-04-17 17:15:13.000000000 -0500
++++ git/arch/arm/mach-at91/board-sam9x5cm.c 2013-05-01 15:08:26.536469850 -0500
+@@ -18,6 +18,9 @@
+ #include <linux/platform_device.h>
+ #include <linux/spi/flash.h>
+ #include <linux/spi/spi.h>
++#include <linux/spi/eeprom.h>
++#include <linux/i2c/at24.h>
++#include <linux/delay.h>
+ #include <linux/fb.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/input.h>
+@@ -111,13 +114,48 @@
+ */
+ static struct mtd_partition __initdata cm_nand_partition[] = {
+ {
+- .name = "Partition 1",
++ .name = "NANDFlash",
+ .offset = 0,
+- .size = SZ_64M,
++ .size = 256*1024*1024,
+ },
+ {
+- .name = "Partition 2",
+- .offset = MTDPART_OFS_NXTBLK,
++ .name = "AT91Bootstrap",
++ .offset = 0,
++ .size = 256*1024,
++ },
++ {
++ .name = "UBoot",
++ .offset = 256*1024,
++ .size = 512*1024,
++ },
++ {
++ .name = "UBoot Config",
++ .offset = 768*1024,
++ .size = 640*1024,
++ },
++ {
++ .name = "UBoot Redundant Config",
++ .offset = 1408*1024,
++ .size = 640*1024,
++ },
++ {
++ .name = "uImage",
++ .offset = 2*1024*1024,
++ .size = 6*1024*1024,
++ },
++ {
++ .name = "Config",
++ .offset = 8*1024*1024,
++ .size = 8*1024*1024,
++ },
++ {
++ .name = "Oem Config",
++ .offset = 16*1024*1024,
++ .size = 8*1024*1024,
++ },
++ {
++ .name = "Rootfs",
++ .offset = 24*1024*1024,
+ .size = MTDPART_SIZ_FULL,
+ },
+ };
+@@ -135,7 +173,8 @@
+ .enable_pin = AT91_PIN_PD4,
+ .ecc_mode = NAND_ECC_HW,
+ .has_pmecc = 1,
+- .pmecc_corr_cap = 2,
++// MTR: use 4-bit PMECC
++ .pmecc_corr_cap = 4,
+ .pmecc_sector_size = 512,
+ .pmecc_lookup_table_offset = 0x8000,
+ .partition_info = nand_partitions,
+@@ -170,7 +209,13 @@
+ else
+ cm_nand_smc_config.mode |= AT91_SMC_DBW_8;
+
++ // MTR: nand flash config
++ cm_nand_data.bus_on_d0 = 0;
++ cm_nand_data.rdy_pin = AT91_PIN_PC31;
++
++ // MTR: disable
+ /* revision of board modify NAND wiring */
++ /*
+ if (cm_is_revA()) {
+ cm_nand_data.bus_on_d0 = 1;
+ cm_nand_data.rdy_pin = AT91_PIN_PD6;
+@@ -178,6 +223,7 @@
+ cm_nand_data.bus_on_d0 = 0;
+ cm_nand_data.rdy_pin = AT91_PIN_PD5;
+ }
++ */
+
+ /* configure chip-select 3 (NAND) */
+ sam9_smc_configure(3, &cm_nand_smc_config);
+@@ -189,25 +235,71 @@
+ * LEDs
+ */
+ static struct gpio_led cm_leds[] = {
+- { /* "left" led, blue, userled1 */
+- .name = "d1",
+- .gpio = AT91_PIN_PB18,
++ { /* default status LED */
++ .name = "led-a",
++ .gpio = AT91_PIN_PC21,
+ .default_trigger = "heartbeat",
++ .active_low = 1
++ },
++ {
++ .name = "led-b",
++ .gpio = AT91_PIN_PC15,
++ .active_low = 1
++ },
++ {
++ .name = "led-c",
++ .gpio = AT91_PIN_PC20,
++ .active_low = 1
++ },
++ {
++ .name = "led-d",
++ .gpio = AT91_PIN_PC19,
++ .active_low = 1
++ },
++ {
++ .name = "led-e",
++ .gpio = AT91_PIN_PC18,
++ .active_low = 1
+ },
+- { /* "right" led, red, userled2 */
+- .name = "d2",
+- .gpio = AT91_PIN_PD21,
+- .active_low = 1,
+- .default_trigger = "mmc0",
++ {
++ .name = "led-f",
++ .gpio = AT91_PIN_PC17,
++ .active_low = 1
+ },
+ };
+
++
++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 "sam9x5: id eeprom read failed: %d\n", tmp);
++ } else {
++ printk(KERN_INFO "sam9x5: 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,
++};
++
+ /*
+ * I2C Devices
+ */
+ static struct i2c_board_info __initdata cm_i2c_devices[] = {
+ {
+- I2C_BOARD_INFO("24c512", 0x50)
++ I2C_BOARD_INFO("24c04", 0x56),
++ .platform_data = &at24c04_data,
+ },
+ };
+
+@@ -234,8 +326,12 @@
+ /* LEDs */
+ at91_gpio_leds(cm_leds, ARRAY_SIZE(cm_leds));
+
++ printk(KERN_CRIT "AT91: MTR board\n");
++
++ /* MTR: disable
+ if (cm_is_revA())
+ printk(KERN_CRIT "AT91: CM rev A\n");
+ else
+ printk(KERN_CRIT "AT91: CM rev B and higher\n");
++ */
+ }
+Index: git/arch/arm/mach-at91/board-sam9x5ek.c
+===================================================================
+--- git.orig/arch/arm/mach-at91/board-sam9x5ek.c 2013-04-17 17:15:13.000000000 -0500
++++ git/arch/arm/mach-at91/board-sam9x5ek.c 2013-05-02 17:03:25.395026565 -0500
+@@ -23,6 +23,7 @@
+ #include <linux/leds.h>
+ #include <linux/clk.h>
+ #include <linux/delay.h>
++#include <linux/wl12xx.h>
+ #include <mach/cpu.h>
+
+ #include <video/atmel_lcdfb.h>
+@@ -53,12 +54,8 @@
+ /* Initialize processor and DBGU */
+ cm_map_io();
+
+- /* USART0 on ttyS1. (Rx, Tx) */
+- at91_register_uart(AT91SAM9X5_ID_USART0, 1, 0);
+- /* USART1 on ttyS2. (Rx, Tx) */
+- at91_register_uart(AT91SAM9X5_ID_USART1, 2, 0);
+- /* USART2 on ttyS3. (Rx, Tx) */
+- at91_register_uart(AT91SAM9X5_ID_USART2, 3, 0);
++ // MTR: GPS on UART0 as ttyS1 with Rx/Tx only
++ at91_register_uart(AT91SAM9X5_ID_UART0, 1, 0);
+ }
+
+ /*
+@@ -89,26 +86,31 @@
+ * MACB Ethernet devices
+ */
+ static struct at91_eth_data __initdata ek_macb0_data = {
+- .is_rmii = 1,
++ .is_rmii = 0,
++ .phy_irq_pin = AT91_PIN_PC10,
+ };
+
++/* MTR: no macb1
+ static struct at91_eth_data __initdata ek_macb1_data = {
+ .phy_irq_pin = AT91_PIN_PC26,
+ .is_rmii = 1,
+ };
++*/
+
+
+ /*
+ * MCI (SD/MMC)
+ */
+-/* mci0 detect_pin is revision dependent */
++// MTR: MCI0 is BT/Wifi
+ static struct mci_platform_data __initdata mci0_data = {
+ .slot[0] = {
+ .bus_width = 4,
++ .detect_pin = -1,
+ .wp_pin = -1,
+ },
+ };
+
++/* MTR: MCI1 is not used
+ static struct mci_platform_data __initdata mci1_data = {
+ .slot[0] = {
+ .bus_width = 4,
+@@ -116,6 +118,33 @@
+ .wp_pin = -1,
+ },
+ };
++*/
++
++// MTR: Wi-fi
++static void wl12xx_enable(int poweron)
++{
++ if (poweron) {
++ at91_set_gpio_output_with_pullup(AT91_PIN_PA27, 0, 0);
++ msleep(10);
++ at91_set_gpio_output_with_pullup(AT91_PIN_PA27, 1, 0);
++ msleep(100);
++ printk(KERN_INFO "sam9x5: WLAN Enabled\n");
++ }
++ else {
++ at91_set_gpio_output_with_pullup(AT91_PIN_PA27, 0, 0);
++ msleep(10);
++ printk(KERN_INFO "sam9x5: WLAN Disabled\n");
++ }
++};
++
++// MTR: Wi-fi
++struct wl12xx_platform_data mtr_wlan_data __initdata = {
++ .irq = AT91_PIN_PA26,
++ /* ref clock is 38.4 MHz */
++ .board_ref_clock = WL12XX_REFCLOCK_38,
++ /* toggles the WLAN_ENABLE pin */
++ .set_power = wl12xx_enable,
++};
+
+ /*
+ * ISI
+@@ -330,9 +359,11 @@
+ * I2C Devices
+ */
+ static struct i2c_board_info __initdata ek_i2c_devices[] = {
++#if 0
+ {
+ I2C_BOARD_INFO("wm8731", 0x1a)
+ },
++#endif
+ #if defined(CONFIG_KEYBOARD_QT1070)
+ {
+ I2C_BOARD_INFO("qt1070", 0x1b),
+@@ -388,18 +419,24 @@
+ bool config_isi_enabled = false;
+
+ cm_board_init(&cm_config);
+- ek_board_configure_pins();
++ // MTR: disable
++ // ek_board_configure_pins();
+ /* Serial */
+ at91_add_device_serial();
+ /* USB HS Host */
+ at91_add_device_usbh_ohci(&ek_usbh_fs_data);
+ at91_add_device_usbh_ehci(&ek_usbh_hs_data);
+ /* USB HS Device */
++ /* MTR: No USB Device */
+ at91_add_device_usba(&ek_usba_udc_data);
++
+ /* Ethernet */
+ at91_add_device_eth(0, &ek_macb0_data);
++ /* MTR: no macb1
+ at91_add_device_eth(1, &ek_macb1_data);
++ */
+ /* MMC0 */
++ // MTR: SDIO A to BT/Wifi
+ at91_add_device_mci(0, &mci0_data);
+ /* I2C */
+ if (cm_config & CM_CONFIG_I2C0_ENABLE)
+@@ -409,6 +446,15 @@
+ at91_add_device_i2c(0,
+ ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
+
++ // MTR: Wi-fi
++ at91_set_gpio_input(mtr_wlan_data.irq, 0);
++ at91_set_deglitch(mtr_wlan_data.irq, 1);
++
++ if (wl12xx_set_platform_data(&mtr_wlan_data))
++ pr_err("error setting wl12xx data\n");
++
++/* MTR: no LCD */
++#if 0
+ if (cpu_is_at91sam9g25()) {
+ /* ISI */
+ /* NOTE: PCK0 provides ISI_MCK to the ISI module.
+@@ -434,13 +480,16 @@
+ /* Touch Screen */
+ at91_add_device_tsadcc(&ek_tsadcc_data);
+ }
++#endif
+
+ /* MMC1 */
+ /* Conflict between SPI0, MCI1 and ISI pins.
+ * add MCI1 only if SPI0 and ISI are both disabled.
+ */
++ /* MTR: no mci1
+ if (!(cm_config & CM_CONFIG_SPI0_ENABLE) && !config_isi_enabled)
+ at91_add_device_mci(1, &mci1_data);
++ */
+
+ #if 0
+ if (cpu_is_at91sam9x25() || cpu_is_at91sam9x35())
+@@ -452,6 +501,8 @@
+ at91_add_device_can(0, NULL);
+ #endif
+
++/* MTR: disable things we don't have */
++#if 0
+ if (cpu_is_at91sam9x25() || cpu_is_at91sam9x35())
+ /* this conflicts with usart.1 */
+ at91_add_device_can(1, NULL);
+@@ -478,6 +529,9 @@
+ else if (config_isi_enabled)
+ printk(KERN_CRIT
+ "AT91: ISI conficts with MCI1, disable MCI1\n");
++#endif
++
++ printk(KERN_CRIT "AT91: MTR board EK init\n");
+ }
+
+ MACHINE_START(AT91SAM9X5EK, "Atmel AT91SAM9X5-EK")
+Index: git/arch/arm/mach-at91/at91sam9x5_devices.c
+===================================================================
+--- git.orig/arch/arm/mach-at91/at91sam9x5_devices.c 2013-04-17 17:15:13.000000000 -0500
++++ git/arch/arm/mach-at91/at91sam9x5_devices.c 2013-05-01 15:08:26.536469850 -0500
+@@ -543,11 +543,11 @@
+ #endif
+
+ /* input/irq */
+- if (data->slot[0].detect_pin) {
++ if (data->slot[0].detect_pin > 0) {
+ at91_set_gpio_input(data->slot[0].detect_pin, 1);
+ at91_set_deglitch(data->slot[0].detect_pin, 1);
+ }
+- if (data->slot[0].wp_pin)
++ if (data->slot[0].wp_pin > 0)
+ at91_set_gpio_input(data->slot[0].wp_pin, 1);
+
+ if (mmc_id == 0) { /* MCI0 */