Google
  Web www.spinics.net

update for TRIZEPS4 modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


hi folks,
i would like to submit an update for trizeps4 modules
The following work is included in this patch:
 - make use of MFP-ABI
 - support TRIZEPS4-WL module variant
 - adapt to changes till 2.6.24

If there is no objection to the following patch
i'll submit it to patch-system.
 
-- 
Jürgen Schindele
Linux for Trizeps Modules
www.schindele.name
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 914bb33..59ffeb3 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -102,9 +102,8 @@ config MACH_E800
 	  Say Y here if you intend to run this kernel on a Toshiba
 	  e800 family PDA.
 
-config MACH_TRIZEPS4
-	bool "Keith und Koep Trizeps4 DIMM-Module"
-	select PXA27x
+config PXA_TRIZEPS
+	bool "Keith und Koep Trizeps DIMM-Module"
 
 config MACH_EM_X270
 	bool "CompuLab EM-x270 platform"
@@ -181,7 +180,16 @@ endchoice
 endif
 
 
-if MACH_TRIZEPS4
+if PXA_TRIZEPS
+
+config MACH_TRIZEPS4
+	bool "Keith und Koep Trizeps4 DIMM-Module"
+	select PXA27x
+
+config MACH_TRIZEPS4WL
+	bool "Keith und Koep Trizeps4-WL DIMM-Module"
+	select PXA27x
+	select PXA_SSP
 
 choice
 	prompt "Select base board for Trizeps 4 module"
diff --git a/arch/arm/mach-pxa/trizeps4.c b/arch/arm/mach-pxa/trizeps4.c
index 61e2440..18cc23a 100644
--- a/arch/arm/mach-pxa/trizeps4.c
+++ b/arch/arm/mach-pxa/trizeps4.c
@@ -22,6 +22,7 @@
 #include <linux/fb.h>
 #include <linux/ioport.h>
 #include <linux/delay.h>
+#include <linux/dm9000.h>
 #include <linux/serial_8250.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/physmap.h>
@@ -42,95 +43,211 @@
 
 #include <asm/arch/pxa-regs.h>
 #include <asm/arch/pxa2xx-regs.h>
-#include <asm/arch/pxa2xx-gpio.h>
+#include <asm/arch/pxa2xx_spi.h> 
+#include <asm/arch/mfp-pxa2xx.h>
+#include <asm/arch/mfp-pxa27x.h>
 #include <asm/arch/trizeps4.h>
 #include <asm/arch/audio.h>
 #include <asm/arch/pxafb.h>
 #include <asm/arch/mmc.h>
 #include <asm/arch/irda.h>
 #include <asm/arch/ohci.h>
+#include <asm/arch/i2c.h>
 
 #include "generic.h"
 #include "devices.h"
 
+#define STATUS_LEDS_ON_STUART_PINS
+
+/********************************************************************************************
+ * MultiFunctionPins of CPU
+ ********************************************************************************************/
+static unsigned long trizeps4_pin_config[] __initdata = {
+    /* Chip Selects */
+    GPIO15_nCS_1,		/* DiskOnChip CS */
+    GPIO93_GPIO,		/* DOC irq */
+    GPIO94_GPIO,		/* DOC lock */
+
+    GPIO78_nCS_2,		/* DM9000 CS */
+    GPIO101_GPIO,		/* DM9000 irq */	
+
+    GPIO79_nCS_3,		/* Logic CS */
+    GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,	/* Logic irq */	
+
+    GPIO80_nCS_4,		/* ??? */
+
+    /* LCD - 16bpp Active TFT */
+    GPIO58_LCD_LDD_0,
+    GPIO59_LCD_LDD_1,
+    GPIO60_LCD_LDD_2,
+    GPIO61_LCD_LDD_3,
+    GPIO62_LCD_LDD_4,
+    GPIO63_LCD_LDD_5,
+    GPIO64_LCD_LDD_6,
+    GPIO65_LCD_LDD_7,
+    GPIO66_LCD_LDD_8,
+    GPIO67_LCD_LDD_9,
+    GPIO68_LCD_LDD_10,
+    GPIO69_LCD_LDD_11,
+    GPIO70_LCD_LDD_12,
+    GPIO71_LCD_LDD_13,
+    GPIO72_LCD_LDD_14,
+    GPIO73_LCD_LDD_15,
+    GPIO74_LCD_FCLK,
+    GPIO75_LCD_LCLK,
+    GPIO76_LCD_PCLK,
+    GPIO77_LCD_BIAS,
+
+    /* UART */
+    GPIO9_FFUART_CTS,
+    GPIO10_FFUART_DCD,
+    GPIO16_FFUART_TXD,
+    GPIO33_FFUART_DSR, 
+    GPIO38_FFUART_RI,
+    GPIO82_FFUART_DTR,
+    GPIO83_FFUART_RTS,
+    GPIO96_FFUART_RXD, 
+
+    GPIO42_BTUART_RXD,
+    GPIO43_BTUART_TXD,
+    GPIO44_BTUART_CTS,
+    GPIO45_BTUART_RTS,
+#ifdef STATUS_LEDS_ON_STUART_PINS
+    MFP_CFG_OUT(GPIO46, AF0, DRIVE_LOW),
+    MFP_CFG_OUT(GPIO47, AF0, DRIVE_LOW),
+#else
+    GPIO46_STUART_RXD,
+    GPIO47_STUART_TXD,
+#endif
+    /* PCMCIA */
+    GPIO11_GPIO,		/* Card Decect */
+    GPIO13_GPIO,		/* irq */
+    GPIO48_nPOE,
+    GPIO49_nPWE,
+    GPIO50_nPIOR,
+    GPIO51_nPIOW,
+    GPIO54_nPCE_2,
+    GPIO55_nPREG,
+    GPIO56_nPWAIT,
+    GPIO57_nIOIS16,
+    GPIO102_nPCE_1,
+    GPIO104_PSKTSEL, 
+
+    /* MultiMediaCard */
+    GPIO32_MMC_CLK,
+    GPIO92_MMC_DAT_0,
+    GPIO109_MMC_DAT_1,
+    GPIO110_MMC_DAT_2,
+    GPIO111_MMC_DAT_3,
+    GPIO112_MMC_CMD,
+    GPIO12_GPIO,		/* MMC DET irq */	
+
+    /* USB OHCI */
+    GPIO88_USBH1_PWR,		/* USBHPWR1 */
+    GPIO89_USBH1_PEN,		/* USBHPEN1 */
+
+    /* I2C */
+    GPIO117_I2C_SCL,
+    GPIO118_I2C_SDA,
+
+    /* MISC */	
+    GPIO100_DREQ_2,
+};
+
+static unsigned long trizeps4wl_pin_config[] __initdata = {
+    /* SSP 2 */
+    GPIO14_SSP2_SFRM,
+    GPIO19_SSP2_SCLK,
+    GPIO53_GPIO,		/* SSP irq */	
+    GPIO86_SSP2_RXD,
+    GPIO87_SSP2_TXD,
+};
+
 /********************************************************************************************
  * ONBOARD FLASH
  ********************************************************************************************/
 static struct mtd_partition trizeps4_partitions[] = {
-	{
-		.name =		"Bootloader",
-		.offset =	0x00000000,
-		.size =		0x00040000,
-		.mask_flags =	MTD_WRITEABLE  /* force read-only */
-	},{
-		.name =		"Backup",
-		.offset =	0x00040000,
-		.size =		0x00040000,
-	},{
-		.name =		"Image",
-		.offset =	0x00080000,
-		.size =		0x01080000,
-	},{
-		.name =		"IPSM",
-		.offset =	0x01100000,
-		.size =		0x00e00000,
-	},{
-		.name =		"Registry",
-		.offset =	0x01f00000,
-		.size =		MTDPART_SIZ_FULL,
-	}
+    {
+	.name =		"Bootloader",
+	.offset =	0x00000000,
+	.size =		0x00040000,
+	.mask_flags =	MTD_WRITEABLE  /* force read-only */
+    },{
+	.name =		"Backup",
+	.offset =	0x00040000,
+	.size =		0x00040000,
+    },{
+	.name =		"Image",
+	.offset =	0x00080000,
+	.size =		0x01080000,
+    },{
+	.name =		"IPSM",
+	.offset =	0x01100000,
+	.size =		0x00e00000,
+    },{
+	.name =		"Registry",
+	.offset =	0x01f00000,
+	.size =		MTDPART_SIZ_FULL,
+    }
 };
 
 static struct physmap_flash_data trizeps4_flash_data[] = {
-	{
-		.width		= 4,			/* bankwidth in bytes */
-		.parts		= trizeps4_partitions,
-		.nr_parts	= ARRAY_SIZE(trizeps4_partitions)
-	}
+    {
+	.width		= 4,			/* bankwidth in bytes */
+	.parts		= trizeps4_partitions,
+	.nr_parts	= ARRAY_SIZE(trizeps4_partitions)
+    }
 };
 
 static struct resource flash_resource = {
-	.start	= PXA_CS0_PHYS,
-	.end	= PXA_CS0_PHYS + SZ_32M - 1,
-	.flags	= IORESOURCE_MEM,
+    .start	= PXA_CS0_PHYS,
+    .end	= PXA_CS0_PHYS + SZ_32M - 1,
+    .flags	= IORESOURCE_MEM,
 };
 
 static struct platform_device flash_device = {
-	.name		= "physmap-flash",
-	.id		= 0,
-	.dev = {
-		.platform_data = trizeps4_flash_data,
-	},
-	.resource = &flash_resource,
-	.num_resources = 1,
+    .name		= "physmap-flash",
+    .id		= 0,
+    .dev = {
+	.platform_data = trizeps4_flash_data,
+    },
+    .resource = &flash_resource,
+    .num_resources = 1,
 };
 
 /********************************************************************************************
  * DAVICOM DM9000 Ethernet
  ********************************************************************************************/
 static struct resource dm9000_resources[] = {
-	[0] = {
-		.start	= TRIZEPS4_ETH_PHYS+0x300,
-		.end	= TRIZEPS4_ETH_PHYS+0x400-1,
-		.flags	= IORESOURCE_MEM,
-	},
-	[1] = {
-		.start	= TRIZEPS4_ETH_PHYS+0x8300,
-		.end	= TRIZEPS4_ETH_PHYS+0x8400-1,
-		.flags	= IORESOURCE_MEM,
-	},
-	[2] = {
-		.start	= TRIZEPS4_ETH_IRQ,
-		.end	= TRIZEPS4_ETH_IRQ,
-		.flags	= (IORESOURCE_IRQ | IRQT_RISING),
-	},
+    [0] = {
+	.start	= TRIZEPS4_ETH_PHYS+0x300,
+	.end	= TRIZEPS4_ETH_PHYS+0x400-1,
+	.flags	= IORESOURCE_MEM,
+    },
+    [1] = {
+	.start	= TRIZEPS4_ETH_PHYS+0x8300,
+	.end	= TRIZEPS4_ETH_PHYS+0x8400-1,
+	.flags	= IORESOURCE_MEM,
+    },
+    [2] = {
+	.start	= TRIZEPS4_ETH_IRQ,
+	.end	= TRIZEPS4_ETH_IRQ,
+	.flags	= (IORESOURCE_IRQ | IRQF_TRIGGER_RISING),
+    },
+};
+
+static struct dm9000_plat_data tri_dm9000_platdata = {
+	.flags		= DM9000_PLATF_32BITONLY,
 };
 
 static struct platform_device dm9000_device = {
-	.name		= "dm9000",
-	.id		= -1,
-	.num_resources	= ARRAY_SIZE(dm9000_resources),
-	.resource	= dm9000_resources,
+    .name		= "dm9000",
+    .id			= -1,
+    .num_resources	= ARRAY_SIZE(dm9000_resources),
+    .resource		= dm9000_resources,
+    .dev		= {
+	.platform_data = &tri_dm9000_platdata,
+    }
 };
 
 /********************************************************************************************
@@ -138,48 +255,102 @@ static struct platform_device dm9000_device = {
  ********************************************************************************************/
 static struct plat_serial8250_port tri_serial_ports[] = {
 #ifdef CONFIG_SERIAL_PXA
-	/* this uses the own PXA driver */
-	{
-		0,
-	},
+    /* this uses the own PXA driver */
+    {
+	0,
+    },
 #else
-	/* this uses the generic 8520 driver */
-	[0] = {
-		.membase	= (void *)&FFUART,
-		.irq		= IRQ_FFUART,
-		.flags		= UPF_BOOT_AUTOCONF,
-		.iotype		= UPIO_MEM32,
-		.regshift	= 2,
-		.uartclk	= (921600*16),
-	},
-	[1] = {
-		.membase	= (void *)&BTUART,
-		.irq		= IRQ_BTUART,
-		.flags		= UPF_BOOT_AUTOCONF,
-		.iotype		= UPIO_MEM32,
-		.regshift	= 2,
-		.uartclk	= (921600*16),
+    /* this uses the generic 8520 driver */
+    [0] = {
+	.membase	= (void *)&FFUART,
+	.irq		= IRQ_FFUART,
+	.flags		= UPF_BOOT_AUTOCONF,
+	.iotype		= UPIO_MEM32,
+	.regshift	= 2,
+	.uartclk	= (921600*16),
+    },
+    [1] = {
+	.membase	= (void *)&BTUART,
+	.irq		= IRQ_BTUART,
+	.flags		= UPF_BOOT_AUTOCONF,
+	.iotype		= UPIO_MEM32,
+	.regshift	= 2,
+	.uartclk	= (921600*16),
+    },
+#ifndef STATUS_LEDS_ON_STUART_PINS
+    [2] = {
+	.membase	= (void *)&STUART,
+	.irq		= IRQ_STUART,
+	.flags		= UPF_BOOT_AUTOCONF,
+	.iotype		= UPIO_MEM32,
+	.regshift	= 2,
+	.uartclk	= (921600*16),
+    },
+#endif
+    {
+	0,
+    },
+#endif
+};
+
+static struct platform_device uart_devices = {
+    .name		= "serial8250",
+    .id		= 0,
+    .dev		= {
+	.platform_data	= tri_serial_ports,
+    },
+    .num_resources	= 0,
+    .resource	= NULL,
+};
+
+/********************************************************************************************
+ * LED's on GPIO pins of PXA
+ ********************************************************************************************/
+#ifdef CONFIG_LEDS_GPIO
+static struct gpio_led trizeps4_led[] = {
+#ifdef STATUS_LEDS_ON_STUART_PINS
+	{
+		.name = "led0:orange",	/* */
+		.default_trigger = "heartbeat",
+		.gpio = GPIO_HEARTBEAT_LED,
 	},
 	{
-		0,
+		.name = "led1:yellow",	/* */
+		.default_trigger = "cpu-busy",
+		.gpio = GPIO_SYS_BUSY_LED,
 	},
 #endif
 };
 
-static struct platform_device uart_devices = {
-	.name		= "serial8250",
+static struct gpio_led_platform_data trizeps4_led_data = {
+	.leds		= trizeps4_led,
+	.num_leds	= ARRAY_SIZE(trizeps4_led),
+};
+
+static struct platform_device leds_devices = {
+	.name		= "leds-gpio",
 	.id		= 0,
 	.dev		= {
-		.platform_data	= tri_serial_ports,
+		.platform_data	= &trizeps4_led_data,
 	},
-	.num_resources	= 0,
-	.resource	= NULL,
 };
-
+#endif /* CONFIG_LEDS_GPIO */
+  
 static struct platform_device * trizeps4_devices[] __initdata = {
-	&flash_device,
-	&uart_devices,
-	&dm9000_device,
+    &flash_device,
+    &uart_devices,
+    &dm9000_device,
+#ifdef CONFIG_LEDS_GPIO
+    &leds_devices,
+#endif /* CONFIG_LEDS_GPIO */
+};
+
+static struct platform_device * trizeps4wl_devices[] __initdata = {
+    &flash_device,
+    &uart_devices,
+#ifdef CONFIG_LEDS_GPIO
+    &leds_devices,
+#endif /* CONFIG_LEDS_GPIO */
 };
 
 #ifdef CONFIG_MACH_TRIZEPS4_CONXS
@@ -188,55 +359,55 @@ static short trizeps_conxs_bcr;
 /* PCCARD power switching supports only 3,3V */
 void board_pcmcia_power(int power)
 {
-	if (power) {
-		/* switch power on, put in reset and enable buffers */
-		trizeps_conxs_bcr |= power;
-		trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
-		trizeps_conxs_bcr &= ~(ConXS_BCR_CF_BUF_EN);
-		ConXS_BCR = trizeps_conxs_bcr;
-		/* wait a little */
-		udelay(2000);
-		/* take reset away */
-		trizeps_conxs_bcr &= ~(ConXS_BCR_CF_RESET);
-		ConXS_BCR = trizeps_conxs_bcr;
-		udelay(2000);
-	} else {
-		/* put in reset */
-		trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
-		ConXS_BCR = trizeps_conxs_bcr;
-		udelay(1000);
-		/* switch power off */
-		trizeps_conxs_bcr &= ~(0xf);
-		ConXS_BCR = trizeps_conxs_bcr;
-
-	}
-	pr_debug("%s: o%s 0x%x\n", __func__, power ? "n": "ff", trizeps_conxs_bcr);
+    if (power) {
+	/* switch power on, put in reset and enable buffers */
+	trizeps_conxs_bcr |= power;
+	trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
+	trizeps_conxs_bcr &= ~(ConXS_BCR_CF_BUF_EN);
+	ConXS_BCR = trizeps_conxs_bcr;
+	/* wait a little */
+	udelay(2000);
+	/* take reset away */
+	trizeps_conxs_bcr &= ~(ConXS_BCR_CF_RESET);
+	ConXS_BCR = trizeps_conxs_bcr;
+	udelay(2000);
+    } else {
+	/* put in reset */
+	trizeps_conxs_bcr |= ConXS_BCR_CF_RESET;
+	ConXS_BCR = trizeps_conxs_bcr;
+	udelay(1000);
+	/* switch power off */
+	trizeps_conxs_bcr &= ~(0xf);
+	ConXS_BCR = trizeps_conxs_bcr;
+
+    }
+    pr_debug("%s: o%s 0x%x\n", __FUNCTION__, power ? "n": "ff", trizeps_conxs_bcr);
 }
 
 /* backlight power switching for LCD panel */
 static void board_backlight_power(int on)
 {
-	if (on) {
-		trizeps_conxs_bcr |= ConXS_BCR_L_DISP;
-	} else {
-		trizeps_conxs_bcr &= ~ConXS_BCR_L_DISP;
-	}
-	pr_debug("%s: o%s 0x%x\n", __func__, on ? "n" : "ff", trizeps_conxs_bcr);
-	ConXS_BCR = trizeps_conxs_bcr;
+    if (on) {
+	trizeps_conxs_bcr |= ConXS_BCR_L_DISP;
+    } else {
+	trizeps_conxs_bcr &= ~ConXS_BCR_L_DISP;
+    }
+    pr_debug("%s: o%s 0x%x\n", __FUNCTION__, on ? "n" : "ff", trizeps_conxs_bcr);
+    ConXS_BCR = trizeps_conxs_bcr;
 }
 
 /* Powersupply for MMC/SD cardslot */
 static void board_mci_power(struct device *dev, unsigned int vdd)
 {
-	struct pxamci_platform_data* p_d = dev->platform_data;
-
-	if (( 1 << vdd) & p_d->ocr_mask) {
-		pr_debug("%s: on\n", __func__);
-		/* FIXME fill in values here */
-	} else {
-		pr_debug("%s: off\n", __func__);
-		/* FIXME fill in values here */
-	}
+    struct pxamci_platform_data* p_d = dev->platform_data;
+
+    if (( 1 << vdd) & p_d->ocr_mask) {
+	pr_debug("%s: on\n", __FUNCTION__);
+	/* FIXME fill in values here */
+    } else {
+	pr_debug("%s: off\n", __FUNCTION__);
+	/* FIXME fill in values here */
+    }
 }
 
 static short trizeps_conxs_ircr;
@@ -244,25 +415,31 @@ static short trizeps_conxs_ircr;
 /* Switch modes and Power for IRDA receiver */
 static void board_irda_mode(struct device *dev, int mode)
 {
-	unsigned long flags;
-
-	local_irq_save(flags);
-	if (mode & IR_SIRMODE) {
-		/* Slow mode */
-		trizeps_conxs_ircr &= ~ConXS_IRCR_MODE;
-	} else if (mode & IR_FIRMODE) {
-		/* Fast mode */
-		trizeps_conxs_ircr |= ConXS_IRCR_MODE;
-	}
-	if (mode & IR_OFF) {
-		trizeps_conxs_ircr |= ConXS_IRCR_SD;
-	} else {
-		trizeps_conxs_ircr &= ~ConXS_IRCR_SD;
-	}
-	/* FIXME write values to register */
-	local_irq_restore(flags);
+    unsigned long flags;
+
+    local_irq_save(flags);
+    if (mode & IR_SIRMODE) {
+	/* Slow mode */
+	trizeps_conxs_ircr &= ~ConXS_IRCR_MODE;
+    } else if (mode & IR_FIRMODE) {
+	/* Fast mode */
+	trizeps_conxs_ircr |= ConXS_IRCR_MODE;
+    }
+    if (mode & IR_OFF) {
+	trizeps_conxs_ircr |= ConXS_IRCR_SD;
+    } else {
+	trizeps_conxs_ircr &= ~ConXS_IRCR_SD;
+    }
+    /* FIXME write values to register */
+    local_irq_restore(flags);
 }
 
+/* a I2C based RTC is known on CONXS board */
+static struct i2c_board_info trizeps4_i2c_devices[] __initdata = {
+    { I2C_BOARD_INFO("rtc-pcf8593", 0x51),
+	.type = "rtc-pcf8593",
+    },
+};
 #else
 /* for other baseboards define dummies */
 void board_pcmcia_power(int power)	{;}
@@ -270,104 +447,103 @@ void board_pcmcia_power(int power)	{;}
 #define board_mci_power			NULL
 #define board_irda_mode			NULL
 
+/* for other baseboards no known i2c devices */
+static struct i2c_board_info trizeps4_i2c_devices[] __initdata = {
+    { NULL },
+};
 #endif		/* CONFIG_MACH_TRIZEPS4_CONXS */
 EXPORT_SYMBOL(board_pcmcia_power);
 
 static int trizeps4_mci_init(struct device *dev, irq_handler_t mci_detect_int, void *data)
 {
-	int err;
-	/* setup GPIO for PXA27x MMC controller */
-	pxa_gpio_mode(GPIO32_MMCCLK_MD);
-	pxa_gpio_mode(GPIO112_MMCCMD_MD);
-	pxa_gpio_mode(GPIO92_MMCDAT0_MD);
-	pxa_gpio_mode(GPIO109_MMCDAT1_MD);
-	pxa_gpio_mode(GPIO110_MMCDAT2_MD);
-	pxa_gpio_mode(GPIO111_MMCDAT3_MD);
-
-	pxa_gpio_mode(GPIO_MMC_DET | GPIO_IN);
-
-	err = request_irq(TRIZEPS4_MMC_IRQ, mci_detect_int,
-			  IRQF_DISABLED | IRQF_TRIGGER_RISING,
-			  "MMC card detect", data);
-	if (err)
-		printk(KERN_ERR "trizeps4_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
-
-	return err;
+    int err;
+
+    err = request_irq(TRIZEPS4_MMC_IRQ, mci_detect_int,
+	    IRQF_DISABLED | IRQF_TRIGGER_RISING,
+	    "MMC card detect", data);
+    if (err) {
+	printk(KERN_ERR "trizeps4_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
+	return -1;
+    }
+    return 0;
 }
 
 static void trizeps4_mci_exit(struct device *dev, void *data)
 {
-	free_irq(TRIZEPS4_MMC_IRQ, data);
+    free_irq(TRIZEPS4_MMC_IRQ, data);
+}
+
+static int trizeps4_mci_get_ro(struct device *dev)
+{
+    return 0;
 }
 
 static struct pxamci_platform_data trizeps4_mci_platform_data = {
-	.ocr_mask	= MMC_VDD_32_33|MMC_VDD_33_34,
-	.init 		= trizeps4_mci_init,
-	.exit		= trizeps4_mci_exit,
-	.setpower 	= board_mci_power,
+    .ocr_mask		= MMC_VDD_32_33|MMC_VDD_33_34,
+    .detect_delay	= 1,
+    .init 		= trizeps4_mci_init,
+    .exit		= trizeps4_mci_exit,
+    .get_ro		= trizeps4_mci_get_ro,
+    .setpower	 	= board_mci_power,
 };
 
 static struct pxaficp_platform_data trizeps4_ficp_platform_data = {
-	.transceiver_cap  = IR_SIRMODE | IR_FIRMODE | IR_OFF,
-	.transceiver_mode = board_irda_mode,
+    .transceiver_cap  = IR_SIRMODE | IR_FIRMODE | IR_OFF,
+    .transceiver_mode = board_irda_mode,
 };
 
 static int trizeps4_ohci_init(struct device *dev)
 {
-	/* setup Port1 GPIO pin. */
-	pxa_gpio_mode( 88 | GPIO_ALT_FN_1_IN);	/* USBHPWR1 */
-	pxa_gpio_mode( 89 | GPIO_ALT_FN_2_OUT);	/* USBHPEN1 */
-
-	/* Set the Power Control Polarity Low and Power Sense
-	   Polarity Low to active low. */
-	UHCHR = (UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
-		~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
+    /* Set the Power Control Polarity Low and Power Sense
+       Polarity Low to active low. */
+    UHCHR = (UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
+	~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
 
-	return 0;
+    return 0;
 }
 
 static void trizeps4_ohci_exit(struct device *dev)
 {
-	;
+    ;
 }
 
 static struct pxaohci_platform_data trizeps4_ohci_platform_data = {
-	.port_mode	= PMM_PERPORT_MODE,
-	.init		= trizeps4_ohci_init,
-	.exit		= trizeps4_ohci_exit,
+    .port_mode	= PMM_PERPORT_MODE,
+    .init		= trizeps4_ohci_init,
+    .exit		= trizeps4_ohci_exit,
 };
 
 static struct map_desc trizeps4_io_desc[] __initdata = {
-	{ 	/* ConXS CFSR */
-		.virtual	= TRIZEPS4_CFSR_VIRT,
-		.pfn		= __phys_to_pfn(TRIZEPS4_CFSR_PHYS),
-		.length		= 0x00001000,
-		.type		= MT_DEVICE
-	},
-	{	/* ConXS BCR */
-		.virtual	= TRIZEPS4_BOCR_VIRT,
-		.pfn		= __phys_to_pfn(TRIZEPS4_BOCR_PHYS),
-		.length		= 0x00001000,
-		.type		= MT_DEVICE
-	},
-	{ 	/* ConXS IRCR */
-		.virtual	= TRIZEPS4_IRCR_VIRT,
-		.pfn		= __phys_to_pfn(TRIZEPS4_IRCR_PHYS),
-		.length		= 0x00001000,
-		.type		= MT_DEVICE
-	},
-	{	/* ConXS DCR */
-		.virtual	= TRIZEPS4_DICR_VIRT,
-		.pfn		= __phys_to_pfn(TRIZEPS4_DICR_PHYS),
-		.length		= 0x00001000,
-		.type		= MT_DEVICE
-	},
-	{	/* ConXS UPSR */
-		.virtual	= TRIZEPS4_UPSR_VIRT,
-		.pfn		= __phys_to_pfn(TRIZEPS4_UPSR_PHYS),
-		.length		= 0x00001000,
-		.type		= MT_DEVICE
-	}
+    { 	/* ConXS CFSR */
+	.virtual	= TRIZEPS4_CFSR_VIRT,
+	.pfn		= __phys_to_pfn(TRIZEPS4_CFSR_PHYS),
+	.length		= 0x00001000,
+	.type		= MT_DEVICE
+    },
+    {	/* ConXS BCR */
+	.virtual	= TRIZEPS4_BOCR_VIRT,
+	.pfn		= __phys_to_pfn(TRIZEPS4_BOCR_PHYS),
+	.length		= 0x00001000,
+	.type		= MT_DEVICE
+    },
+    { 	/* ConXS IRCR */
+	.virtual	= TRIZEPS4_IRCR_VIRT,
+	.pfn		= __phys_to_pfn(TRIZEPS4_IRCR_PHYS),
+	.length		= 0x00001000,
+	.type		= MT_DEVICE
+    },
+    {	/* ConXS DCR */
+	.virtual	= TRIZEPS4_DICR_VIRT,
+	.pfn		= __phys_to_pfn(TRIZEPS4_DICR_PHYS),
+	.length		= 0x00001000,
+	.type		= MT_DEVICE
+    },
+    {	/* ConXS UPSR */
+	.virtual	= TRIZEPS4_UPSR_VIRT,
+	.pfn		= __phys_to_pfn(TRIZEPS4_UPSR_PHYS),
+	.length		= 0x00001000,
+	.type		= MT_DEVICE
+    }
 };
 
 static struct pxafb_mode_info sharp_lcd_mode = {
@@ -387,7 +563,8 @@ static struct pxafb_mode_info sharp_lcd_mode = {
 
 static struct pxafb_mach_info sharp_lcd = {
     .modes		= &sharp_lcd_mode,
-    .num_modes	= 1,
+    .num_modes		= 1,
+    .lcd_conn		= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
     .cmap_inverse	= 0,
     .cmap_static	= 0,
     .lccr0		= LCCR0_Color | LCCR0_Pas | LCCR0_Dual,
@@ -413,92 +590,89 @@ static struct pxafb_mode_info toshiba_lcd_mode = {
 static struct pxafb_mach_info toshiba_lcd = {
     .modes		= &toshiba_lcd_mode,
     .num_modes	= 1,
+    .lcd_conn		= (LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL), 
     .cmap_inverse	= 0,
     .cmap_static	= 0,
     .lccr0		= LCCR0_Color | LCCR0_Act,
-    .lccr3		= 0x03400002,
-    .pxafb_backlight_power = board_backlight_power,
+    .lccr3		= 0x03400002, 
+    .pxafb_backlight_power = board_backlight_power, 
 };
 
 static void __init trizeps4_init(void)
 {
+    pxa2xx_mfp_config(ARRAY_AND_SIZE(trizeps4_pin_config)); 
+    if (machine_is_trizeps4wl())
+    {
+	pxa2xx_mfp_config(ARRAY_AND_SIZE(trizeps4wl_pin_config)); 
+	platform_add_devices(trizeps4wl_devices, ARRAY_SIZE(trizeps4wl_devices));
+    }
+    else {
 	platform_add_devices(trizeps4_devices, ARRAY_SIZE(trizeps4_devices));
+    }
 
-/*	set_pxa_fb_info(&sharp_lcd); */
+    if (0)	/* dont know how to determine LCD */
+	set_pxa_fb_info(&sharp_lcd);
+    else
 	set_pxa_fb_info(&toshiba_lcd);
 
-	pxa_set_mci_info(&trizeps4_mci_platform_data);
-	pxa_set_ficp_info(&trizeps4_ficp_platform_data);
-	pxa_set_ohci_info(&trizeps4_ohci_platform_data);
-	pxa_set_ac97_info(NULL);
-}
-
-static void __init trizeps4_map_io(void)
-{
-	pxa_map_io();
-	iotable_init(trizeps4_io_desc, ARRAY_SIZE(trizeps4_io_desc));
-
-	/* for DiskOnChip */
-	pxa_gpio_mode(GPIO15_nCS_1_MD);
-
-	/* for off-module PIC on ConXS board */
-	pxa_gpio_mode(GPIO_PIC | GPIO_IN);
-
-	/* UCB1400 irq */
-	pxa_gpio_mode(GPIO_UCB1400 | GPIO_IN);
-
-	/* for DM9000 LAN */
-	pxa_gpio_mode(GPIO78_nCS_2_MD);
-	pxa_gpio_mode(GPIO_DM9000 | GPIO_IN);
-
-	/* for PCMCIA device */
-	pxa_gpio_mode(GPIO_PCD | GPIO_IN);
-	pxa_gpio_mode(GPIO_PRDY | GPIO_IN);
-
-	/* for I2C adapter */
-	pxa_gpio_mode(GPIO117_I2CSCL_MD);
-	pxa_gpio_mode(GPIO118_I2CSDA_MD);
+    pxa_set_mci_info(&trizeps4_mci_platform_data);
+    pxa_set_ficp_info(&trizeps4_ficp_platform_data);
+    pxa_set_ohci_info(&trizeps4_ohci_platform_data);
+    pxa_set_ac97_info(NULL);
+    pxa_set_i2c_info(NULL);
+    i2c_register_board_info(0, trizeps4_i2c_devices, ARRAY_SIZE(trizeps4_i2c_devices)); 
 
-	/* MMC_DET s.o. */
-	pxa_gpio_mode(GPIO_MMC_DET | GPIO_IN);
-
-	/* whats that for ??? */
-	pxa_gpio_mode(GPIO79_nCS_3_MD);
-
-#ifdef CONFIG_LEDS
-	pxa_gpio_mode( GPIO_SYS_BUSY_LED  | GPIO_OUT);		/* LED1 */
-	pxa_gpio_mode( GPIO_HEARTBEAT_LED | GPIO_OUT);		/* LED2 */
-#endif
 #ifdef CONFIG_MACH_TRIZEPS4_CONXS
 #ifdef CONFIG_IDE_PXA_CF
-	/* if boot direct from compact flash dont disable power */
-	trizeps_conxs_bcr = 0x0009;
+    /* if boot direct from compact flash dont disable power */
+    trizeps_conxs_bcr = 0x0009;
 #else
-	/* this is the reset value */
-	trizeps_conxs_bcr = 0x00A0;
+    /* this is the reset value */
+    trizeps_conxs_bcr = 0x00A0;
 #endif
-	ConXS_BCR = trizeps_conxs_bcr;
+    ConXS_BCR = trizeps_conxs_bcr;
 #endif
+    board_backlight_power(1);
+}
 
-#warning FIXME - accessing PM registers directly is deprecated
-	PWER  = 0x00000002;
-	PFER  = 0x00000000;
-	PRER  = 0x00000002;
-	PGSR0 = 0x0158C000;
-	PGSR1 = 0x00FF0080;
-	PGSR2 = 0x0001C004;
-	/* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
-	PCFR |= PCFR_OPDE;
+static void __init trizeps4_map_io(void)
+{
+    pxa_map_io();
+    iotable_init(trizeps4_io_desc, ARRAY_SIZE(trizeps4_io_desc));
+
+    if ((MSC0     & 0x8) &&
+	(BOOT_DEF & 0x1))
+    {
+	/* if flash is 16 bit wide its a Trizeps4 WL */
+	__machine_arch_type = MACH_TYPE_TRIZEPS4WL;
+	trizeps4_flash_data[0].width = 2;
+    }
+    else {
+	/* if flash is 32 bit wide its a Trizeps4 */
+	__machine_arch_type = MACH_TYPE_TRIZEPS4;
+	trizeps4_flash_data[0].width = 4;
+    }
 }
 
 MACHINE_START(TRIZEPS4, "Keith und Koep Trizeps IV module")
-	/* MAINTAINER("Jürgen Schindele") */
-	.phys_io	= 0x40000000,
-	.io_pg_offst	= (io_p2v(0x40000000) >> 18) & 0xfffc,
-	.boot_params	= TRIZEPS4_SDRAM_BASE + 0x100,
-	.init_machine	= trizeps4_init,
-	.map_io		= trizeps4_map_io,
-	.init_irq	= pxa27x_init_irq,
-	.timer		= &pxa_timer,
+    /* MAINTAINER("Jürgen Schindele") */
+    .phys_io		= 0x40000000,
+    .io_pg_offst	= (io_p2v(0x40000000) >> 18) & 0xfffc,
+    .boot_params	= TRIZEPS4_SDRAM_BASE + 0x100,
+    .init_machine	= trizeps4_init,
+    .map_io		= trizeps4_map_io,
+    .init_irq		= pxa27x_init_irq,
+    .timer		= &pxa_timer,
+MACHINE_END
+
+MACHINE_START(TRIZEPS4WL, "Keith und Koep Trizeps IV-WL module")
+    /* MAINTAINER("Jürgen Schindele") */
+    .phys_io		= 0x40000000,
+    .io_pg_offst	= (io_p2v(0x40000000) >> 18) & 0xfffc,
+    .boot_params	= TRIZEPS4_SDRAM_BASE + 0x100,
+    .init_machine	= trizeps4_init,
+    .map_io		= trizeps4_map_io,
+    .init_irq		= pxa27x_init_irq,
+    .timer		= &pxa_timer,
 MACHINE_END
 
-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php

[Site Home]     [Linux Arm]     [Fedora ARM]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [PDAs]     [Linux]     [Linux Book List]     [Linux MIPS]     [Yosemite Campsites]     [Photos]

Add to Google Google PageRank Checking tool