|
@@ -449,3 +449,189 @@ static struct platform_device smc91x_device = {
|
|
.dev = {
|
|
.dev = {
|
|
.platform_data = &viper_smc91x_info,
|
|
.platform_data = &viper_smc91x_info,
|
|
},
|
|
},
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* i2c */
|
|
|
|
+static struct i2c_gpio_platform_data i2c_bus_data = {
|
|
|
|
+ .sda_pin = VIPER_RTC_I2C_SDA_GPIO,
|
|
|
|
+ .scl_pin = VIPER_RTC_I2C_SCL_GPIO,
|
|
|
|
+ .udelay = 10,
|
|
|
|
+ .timeout = HZ,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device i2c_bus_device = {
|
|
|
|
+ .name = "i2c-gpio",
|
|
|
|
+ .id = 1, /* pxa2xx-i2c is bus 0, so start at 1 */
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &i2c_bus_data,
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct i2c_board_info __initdata viper_i2c_devices[] = {
|
|
|
|
+ {
|
|
|
|
+ I2C_BOARD_INFO("ds1338", 0x68),
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Serial configuration:
|
|
|
|
+ * You can either have the standard PXA ports driven by the PXA driver,
|
|
|
|
+ * or all the ports (PXA + 16850) driven by the 8250 driver.
|
|
|
|
+ * Choose your poison.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+static struct resource viper_serial_resources[] = {
|
|
|
|
+#ifndef CONFIG_SERIAL_PXA
|
|
|
|
+ {
|
|
|
|
+ .start = 0x40100000,
|
|
|
|
+ .end = 0x4010001f,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .start = 0x40200000,
|
|
|
|
+ .end = 0x4020001f,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .start = 0x40700000,
|
|
|
|
+ .end = 0x4070001f,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .start = VIPER_UARTA_PHYS,
|
|
|
|
+ .end = VIPER_UARTA_PHYS + 0xf,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .start = VIPER_UARTB_PHYS,
|
|
|
|
+ .end = VIPER_UARTB_PHYS + 0xf,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+#else
|
|
|
|
+ {
|
|
|
|
+ 0,
|
|
|
|
+ },
|
|
|
|
+#endif
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct plat_serial8250_port serial_platform_data[] = {
|
|
|
|
+#ifndef CONFIG_SERIAL_PXA
|
|
|
|
+ /* Internal UARTs */
|
|
|
|
+ {
|
|
|
|
+ .membase = (void *)&FFUART,
|
|
|
|
+ .mapbase = __PREG(FFUART),
|
|
|
|
+ .irq = IRQ_FFUART,
|
|
|
|
+ .uartclk = 921600 * 16,
|
|
|
|
+ .regshift = 2,
|
|
|
|
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
|
|
|
+ .iotype = UPIO_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .membase = (void *)&BTUART,
|
|
|
|
+ .mapbase = __PREG(BTUART),
|
|
|
|
+ .irq = IRQ_BTUART,
|
|
|
|
+ .uartclk = 921600 * 16,
|
|
|
|
+ .regshift = 2,
|
|
|
|
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
|
|
|
+ .iotype = UPIO_MEM,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .membase = (void *)&STUART,
|
|
|
|
+ .mapbase = __PREG(STUART),
|
|
|
|
+ .irq = IRQ_STUART,
|
|
|
|
+ .uartclk = 921600 * 16,
|
|
|
|
+ .regshift = 2,
|
|
|
|
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
|
|
|
+ .iotype = UPIO_MEM,
|
|
|
|
+ },
|
|
|
|
+ /* External UARTs */
|
|
|
|
+ {
|
|
|
|
+ .mapbase = VIPER_UARTA_PHYS,
|
|
|
|
+ .irq = PXA_GPIO_TO_IRQ(VIPER_UARTA_GPIO),
|
|
|
|
+ .irqflags = IRQF_TRIGGER_RISING,
|
|
|
|
+ .uartclk = 1843200,
|
|
|
|
+ .regshift = 1,
|
|
|
|
+ .iotype = UPIO_MEM,
|
|
|
|
+ .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP |
|
|
|
|
+ UPF_SKIP_TEST,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .mapbase = VIPER_UARTB_PHYS,
|
|
|
|
+ .irq = PXA_GPIO_TO_IRQ(VIPER_UARTB_GPIO),
|
|
|
|
+ .irqflags = IRQF_TRIGGER_RISING,
|
|
|
|
+ .uartclk = 1843200,
|
|
|
|
+ .regshift = 1,
|
|
|
|
+ .iotype = UPIO_MEM,
|
|
|
|
+ .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP |
|
|
|
|
+ UPF_SKIP_TEST,
|
|
|
|
+ },
|
|
|
|
+#endif
|
|
|
|
+ { },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device serial_device = {
|
|
|
|
+ .name = "serial8250",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = serial_platform_data,
|
|
|
|
+ },
|
|
|
|
+ .num_resources = ARRAY_SIZE(viper_serial_resources),
|
|
|
|
+ .resource = viper_serial_resources,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* USB */
|
|
|
|
+static void isp116x_delay(struct device *dev, int delay)
|
|
|
|
+{
|
|
|
|
+ ndelay(delay);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct resource isp116x_resources[] = {
|
|
|
|
+ [0] = { /* DATA */
|
|
|
|
+ .start = VIPER_USB_PHYS + 0,
|
|
|
|
+ .end = VIPER_USB_PHYS + 1,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ [1] = { /* ADDR */
|
|
|
|
+ .start = VIPER_USB_PHYS + 2,
|
|
|
|
+ .end = VIPER_USB_PHYS + 3,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ [2] = {
|
|
|
|
+ .start = PXA_GPIO_TO_IRQ(VIPER_USB_GPIO),
|
|
|
|
+ .end = PXA_GPIO_TO_IRQ(VIPER_USB_GPIO),
|
|
|
|
+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* (DataBusWidth16|AnalogOCEnable|DREQOutputPolarity|DownstreamPort15KRSel ) */
|
|
|
|
+static struct isp116x_platform_data isp116x_platform_data = {
|
|
|
|
+ /* Enable internal resistors on downstream ports */
|
|
|
|
+ .sel15Kres = 1,
|
|
|
|
+ /* On-chip overcurrent protection */
|
|
|
|
+ .oc_enable = 1,
|
|
|
|
+ /* INT output polarity */
|
|
|
|
+ .int_act_high = 1,
|
|
|
|
+ /* INT edge or level triggered */
|
|
|
|
+ .int_edge_triggered = 0,
|
|
|
|
+
|
|
|
|
+ /* WAKEUP pin connected - NOT SUPPORTED */
|
|
|
|
+ /* .remote_wakeup_connected = 0, */
|
|
|
|
+ /* Wakeup by devices on usb bus enabled */
|
|
|
|
+ .remote_wakeup_enable = 0,
|
|
|
|
+ .delay = isp116x_delay,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device isp116x_device = {
|
|
|
|
+ .name = "isp116x-hcd",
|
|
|
|
+ .id = -1,
|
|
|
|
+ .num_resources = ARRAY_SIZE(isp116x_resources),
|
|
|
|
+ .resource = isp116x_resources,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &isp116x_platform_data,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* MTD */
|
|
|
|
+static struct resource mtd_resources[] = {
|
|
|
|
+ [0] = { /* RedBoot config + filesystem flash */
|