|
@@ -203,3 +203,98 @@ static void versatile_flash_set_vpp(struct platform_device *pdev, int on)
|
|
else
|
|
else
|
|
val &= ~VERSATILE_FLASHPROG_FLVPPEN;
|
|
val &= ~VERSATILE_FLASHPROG_FLVPPEN;
|
|
__raw_writel(val, VERSATILE_FLASHCTRL);
|
|
__raw_writel(val, VERSATILE_FLASHCTRL);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct physmap_flash_data versatile_flash_data = {
|
|
|
|
+ .width = 4,
|
|
|
|
+ .set_vpp = versatile_flash_set_vpp,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource versatile_flash_resource = {
|
|
|
|
+ .start = VERSATILE_FLASH_BASE,
|
|
|
|
+ .end = VERSATILE_FLASH_BASE + VERSATILE_FLASH_SIZE - 1,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device versatile_flash_device = {
|
|
|
|
+ .name = "physmap-flash",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &versatile_flash_data,
|
|
|
|
+ },
|
|
|
|
+ .num_resources = 1,
|
|
|
|
+ .resource = &versatile_flash_resource,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource smc91x_resources[] = {
|
|
|
|
+ [0] = {
|
|
|
|
+ .start = VERSATILE_ETH_BASE,
|
|
|
|
+ .end = VERSATILE_ETH_BASE + SZ_64K - 1,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ [1] = {
|
|
|
|
+ .start = IRQ_ETH,
|
|
|
|
+ .end = IRQ_ETH,
|
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device smc91x_device = {
|
|
|
|
+ .name = "smc91x",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .num_resources = ARRAY_SIZE(smc91x_resources),
|
|
|
|
+ .resource = smc91x_resources,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource versatile_i2c_resource = {
|
|
|
|
+ .start = VERSATILE_I2C_BASE,
|
|
|
|
+ .end = VERSATILE_I2C_BASE + SZ_4K - 1,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device versatile_i2c_device = {
|
|
|
|
+ .name = "versatile-i2c",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .num_resources = 1,
|
|
|
|
+ .resource = &versatile_i2c_resource,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct i2c_board_info versatile_i2c_board_info[] = {
|
|
|
|
+ {
|
|
|
|
+ I2C_BOARD_INFO("ds1338", 0xd0 >> 1),
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int __init versatile_i2c_init(void)
|
|
|
|
+{
|
|
|
|
+ return i2c_register_board_info(0, versatile_i2c_board_info,
|
|
|
|
+ ARRAY_SIZE(versatile_i2c_board_info));
|
|
|
|
+}
|
|
|
|
+arch_initcall(versatile_i2c_init);
|
|
|
|
+
|
|
|
|
+#define VERSATILE_SYSMCI (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_MCI_OFFSET)
|
|
|
|
+
|
|
|
|
+unsigned int mmc_status(struct device *dev)
|
|
|
|
+{
|
|
|
|
+ struct amba_device *adev = container_of(dev, struct amba_device, dev);
|
|
|
|
+ u32 mask;
|
|
|
|
+
|
|
|
|
+ if (adev->res.start == VERSATILE_MMCI0_BASE)
|
|
|
|
+ mask = 1;
|
|
|
|
+ else
|
|
|
|
+ mask = 2;
|
|
|
|
+
|
|
|
|
+ return readl(VERSATILE_SYSMCI) & mask;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct mmci_platform_data mmc0_plat_data = {
|
|
|
|
+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
|
|
|
+ .status = mmc_status,
|
|
|
|
+ .gpio_wp = -1,
|
|
|
|
+ .gpio_cd = -1,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource char_lcd_resources[] = {
|
|
|
|
+ {
|
|
|
|
+ .start = VERSATILE_CHAR_LCD_BASE,
|
|
|
|
+ .end = (VERSATILE_CHAR_LCD_BASE + SZ_4K - 1),
|