|
@@ -228,3 +228,179 @@ static struct resource locomo_resources[] = {
|
|
[1] = DEFINE_RES_IRQ(IRQ_GPIO25),
|
|
[1] = DEFINE_RES_IRQ(IRQ_GPIO25),
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static struct locomo_platform_data locomo_info = {
|
|
|
|
+ .irq_base = IRQ_BOARD_START,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct platform_device collie_locomo_device = {
|
|
|
|
+ .name = "locomo",
|
|
|
|
+ .id = 0,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &locomo_info,
|
|
|
|
+ },
|
|
|
|
+ .num_resources = ARRAY_SIZE(locomo_resources),
|
|
|
|
+ .resource = locomo_resources,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device *devices[] __initdata = {
|
|
|
|
+ &collie_locomo_device,
|
|
|
|
+ &colliescoop_device,
|
|
|
|
+ &collie_power_device,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct mtd_partition collie_partitions[] = {
|
|
|
|
+ {
|
|
|
|
+ .name = "bootloader",
|
|
|
|
+ .offset = 0,
|
|
|
|
+ .size = 0x000C0000,
|
|
|
|
+ .mask_flags = MTD_WRITEABLE
|
|
|
|
+ }, {
|
|
|
|
+ .name = "kernel",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = 0x00100000,
|
|
|
|
+ }, {
|
|
|
|
+ .name = "rootfs",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = 0x00e20000,
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int collie_flash_init(void)
|
|
|
|
+{
|
|
|
|
+ int rc = gpio_request(COLLIE_GPIO_VPEN, "flash Vpp enable");
|
|
|
|
+ if (rc)
|
|
|
|
+ return rc;
|
|
|
|
+
|
|
|
|
+ rc = gpio_direction_output(COLLIE_GPIO_VPEN, 1);
|
|
|
|
+ if (rc)
|
|
|
|
+ gpio_free(COLLIE_GPIO_VPEN);
|
|
|
|
+
|
|
|
|
+ return rc;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void collie_set_vpp(int vpp)
|
|
|
|
+{
|
|
|
|
+ gpio_set_value(COLLIE_GPIO_VPEN, vpp);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void collie_flash_exit(void)
|
|
|
|
+{
|
|
|
|
+ gpio_free(COLLIE_GPIO_VPEN);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct flash_platform_data collie_flash_data = {
|
|
|
|
+ .map_name = "cfi_probe",
|
|
|
|
+ .init = collie_flash_init,
|
|
|
|
+ .set_vpp = collie_set_vpp,
|
|
|
|
+ .exit = collie_flash_exit,
|
|
|
|
+ .parts = collie_partitions,
|
|
|
|
+ .nr_parts = ARRAY_SIZE(collie_partitions),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource collie_flash_resources[] = {
|
|
|
|
+ DEFINE_RES_MEM(SA1100_CS0_PHYS, SZ_32M),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct sa1100fb_mach_info collie_lcd_info = {
|
|
|
|
+ .pixclock = 171521, .bpp = 16,
|
|
|
|
+ .xres = 320, .yres = 240,
|
|
|
|
+
|
|
|
|
+ .hsync_len = 5, .vsync_len = 1,
|
|
|
|
+ .left_margin = 11, .upper_margin = 2,
|
|
|
|
+ .right_margin = 30, .lower_margin = 0,
|
|
|
|
+
|
|
|
|
+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
|
|
|
+
|
|
|
|
+ .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
|
|
|
|
+ .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_BACKLIGHT_LOCOMO
|
|
|
|
+ .lcd_power = locomolcd_power
|
|
|
|
+#endif
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init collie_init(void)
|
|
|
|
+{
|
|
|
|
+ int ret = 0;
|
|
|
|
+
|
|
|
|
+ /* cpu initialize */
|
|
|
|
+ GAFR = GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM | GPIO_SSP_CLK |
|
|
|
|
+ GPIO_MCP_CLK | GPIO_32_768kHz;
|
|
|
|
+
|
|
|
|
+ GPDR = GPIO_LDD8 | GPIO_LDD9 | GPIO_LDD10 | GPIO_LDD11 | GPIO_LDD12 |
|
|
|
|
+ GPIO_LDD13 | GPIO_LDD14 | GPIO_LDD15 | GPIO_SSP_TXD |
|
|
|
|
+ GPIO_SSP_SCLK | GPIO_SSP_SFRM | GPIO_SDLC_SCLK |
|
|
|
|
+ _COLLIE_GPIO_UCB1x00_RESET | _COLLIE_GPIO_nMIC_ON |
|
|
|
|
+ _COLLIE_GPIO_nREMOCON_ON | GPIO_32_768kHz;
|
|
|
|
+
|
|
|
|
+ PPDR = PPC_LDD0 | PPC_LDD1 | PPC_LDD2 | PPC_LDD3 | PPC_LDD4 | PPC_LDD5 |
|
|
|
|
+ PPC_LDD6 | PPC_LDD7 | PPC_L_PCLK | PPC_L_LCLK | PPC_L_FCLK | PPC_L_BIAS |
|
|
|
|
+ PPC_TXD1 | PPC_TXD2 | PPC_TXD3 | PPC_TXD4 | PPC_SCLK | PPC_SFRM;
|
|
|
|
+
|
|
|
|
+ PWER = _COLLIE_GPIO_AC_IN | _COLLIE_GPIO_CO | _COLLIE_GPIO_ON_KEY |
|
|
|
|
+ _COLLIE_GPIO_WAKEUP | _COLLIE_GPIO_nREMOCON_INT | PWER_RTC;
|
|
|
|
+
|
|
|
|
+ PGSR = _COLLIE_GPIO_nREMOCON_ON;
|
|
|
|
+
|
|
|
|
+ PSDR = PPC_RXD1 | PPC_RXD2 | PPC_RXD3 | PPC_RXD4;
|
|
|
|
+
|
|
|
|
+ PCFR = PCFR_OPDE;
|
|
|
|
+
|
|
|
|
+ GPSR |= _COLLIE_GPIO_UCB1x00_RESET;
|
|
|
|
+
|
|
|
|
+ collie_power_resource[0].start = gpio_to_irq(COLLIE_GPIO_AC_IN);
|
|
|
|
+ collie_power_resource[0].end = gpio_to_irq(COLLIE_GPIO_AC_IN);
|
|
|
|
+
|
|
|
|
+ sa11x0_ppc_configure_mcp();
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ platform_scoop_config = &collie_pcmcia_config;
|
|
|
|
+
|
|
|
|
+ ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
|
|
|
+ if (ret) {
|
|
|
|
+ printk(KERN_WARNING "collie: Unable to register LoCoMo device\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sa11x0_register_lcd(&collie_lcd_info);
|
|
|
|
+ sa11x0_register_mtd(&collie_flash_data, collie_flash_resources,
|
|
|
|
+ ARRAY_SIZE(collie_flash_resources));
|
|
|
|
+ sa11x0_register_mcp(&collie_mcp_data);
|
|
|
|
+
|
|
|
|
+ sharpsl_save_param();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct map_desc collie_io_desc[] __initdata = {
|
|
|
|
+ { /* 32M main flash (cs0) */
|
|
|
|
+ .virtual = 0xe8000000,
|
|
|
|
+ .pfn = __phys_to_pfn(0x00000000),
|
|
|
|
+ .length = 0x02000000,
|
|
|
|
+ .type = MT_DEVICE
|
|
|
|
+ }, { /* 32M boot flash (cs1) */
|
|
|
|
+ .virtual = 0xea000000,
|
|
|
|
+ .pfn = __phys_to_pfn(0x08000000),
|
|
|
|
+ .length = 0x02000000,
|
|
|
|
+ .type = MT_DEVICE
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init collie_map_io(void)
|
|
|
|
+{
|
|
|
|
+ sa1100_map_io();
|
|
|
|
+ iotable_init(collie_io_desc, ARRAY_SIZE(collie_io_desc));
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_SHARP_LOCOMO
|
|
|
|
+ sa1100_register_uart_fns(&collie_port_fns);
|
|
|
|
+#endif
|
|
|
|
+ sa1100_register_uart(0, 3);
|
|
|
|
+ sa1100_register_uart(1, 1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+MACHINE_START(COLLIE, "Sharp-Collie")
|
|
|
|
+ .map_io = collie_map_io,
|
|
|
|
+ .nr_irqs = SA1100_NR_IRQS,
|
|
|
|
+ .init_irq = sa1100_init_irq,
|
|
|
|
+ .timer = &sa1100_timer,
|
|
|
|
+ .init_machine = collie_init,
|
|
|
|
+ .init_late = sa11x0_init_late,
|
|
|
|
+ .restart = sa11x0_restart,
|
|
|
|
+MACHINE_END
|