|
@@ -171,3 +171,186 @@ static struct s1d13xxxfb_regval s1d13xxxfb_initregs[] = {
|
|
|
static struct s1d13xxxfb_pdata s1d13xxxfb_data = {
|
|
|
.initregs = s1d13xxxfb_initregs,
|
|
|
.initregssize = ARRAY_SIZE(s1d13xxxfb_initregs),
|
|
|
+ .platform_init_video = NULL
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource s1d13xxxfb_resources[] = {
|
|
|
+ [0] = DEFINE_RES_MEM(EPSONFBSTART, EPSONFBLEN),
|
|
|
+ [1] = DEFINE_RES_MEM(EPSONREGSTART, EPSONREGLEN),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device s1d13xxxfb_device = {
|
|
|
+ .name = S1D_DEVICENAME,
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &s1d13xxxfb_data,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(s1d13xxxfb_resources),
|
|
|
+ .resource = s1d13xxxfb_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource sa1111_resources[] = {
|
|
|
+ [0] = DEFINE_RES_MEM(SA1111REGSTART, SA1111REGLEN),
|
|
|
+ [1] = DEFINE_RES_IRQ(IRQ_GPIO1),
|
|
|
+};
|
|
|
+
|
|
|
+static struct sa1111_platform_data sa1111_info = {
|
|
|
+ .disable_devs = SA1111_DEVID_PS2_MSE,
|
|
|
+};
|
|
|
+
|
|
|
+static u64 sa1111_dmamask = 0xffffffffUL;
|
|
|
+
|
|
|
+static struct platform_device sa1111_device = {
|
|
|
+ .name = "sa1111",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .dma_mask = &sa1111_dmamask,
|
|
|
+ .coherent_dma_mask = 0xffffffff,
|
|
|
+ .platform_data = &sa1111_info,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(sa1111_resources),
|
|
|
+ .resource = sa1111_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device jornada_ssp_device = {
|
|
|
+ .name = "jornada_ssp",
|
|
|
+ .id = -1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device jornada_kbd_device = {
|
|
|
+ .name = "jornada720_kbd",
|
|
|
+ .id = -1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device jornada_ts_device = {
|
|
|
+ .name = "jornada_ts",
|
|
|
+ .id = -1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *devices[] __initdata = {
|
|
|
+ &sa1111_device,
|
|
|
+ &jornada_ssp_device,
|
|
|
+ &s1d13xxxfb_device,
|
|
|
+ &jornada_kbd_device,
|
|
|
+ &jornada_ts_device,
|
|
|
+};
|
|
|
+
|
|
|
+static int __init jornada720_init(void)
|
|
|
+{
|
|
|
+ int ret = -ENODEV;
|
|
|
+
|
|
|
+ if (machine_is_jornada720()) {
|
|
|
+ /* we want to use gpio20 as input to drive the clock of our uart 3 */
|
|
|
+ GPDR |= GPIO_GPIO20; /* Clear gpio20 pin as input */
|
|
|
+ TUCR = TUCR_VAL;
|
|
|
+ GPSR = GPIO_GPIO20; /* start gpio20 pin */
|
|
|
+ udelay(1);
|
|
|
+ GPCR = GPIO_GPIO20; /* stop gpio20 */
|
|
|
+ udelay(1);
|
|
|
+ GPSR = GPIO_GPIO20; /* restart gpio20 */
|
|
|
+ udelay(20); /* give it some time to restart */
|
|
|
+
|
|
|
+ ret = platform_add_devices(devices, ARRAY_SIZE(devices));
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+arch_initcall(jornada720_init);
|
|
|
+
|
|
|
+static struct map_desc jornada720_io_desc[] __initdata = {
|
|
|
+ { /* Epson registers */
|
|
|
+ .virtual = 0xf0000000,
|
|
|
+ .pfn = __phys_to_pfn(EPSONREGSTART),
|
|
|
+ .length = EPSONREGLEN,
|
|
|
+ .type = MT_DEVICE
|
|
|
+ }, { /* Epson frame buffer */
|
|
|
+ .virtual = 0xf1000000,
|
|
|
+ .pfn = __phys_to_pfn(EPSONFBSTART),
|
|
|
+ .length = EPSONFBLEN,
|
|
|
+ .type = MT_DEVICE
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static void __init jornada720_map_io(void)
|
|
|
+{
|
|
|
+ sa1100_map_io();
|
|
|
+ iotable_init(jornada720_io_desc, ARRAY_SIZE(jornada720_io_desc));
|
|
|
+
|
|
|
+ sa1100_register_uart(0, 3);
|
|
|
+ sa1100_register_uart(1, 1);
|
|
|
+}
|
|
|
+
|
|
|
+static struct mtd_partition jornada720_partitions[] = {
|
|
|
+ {
|
|
|
+ .name = "JORNADA720 boot firmware",
|
|
|
+ .size = 0x00040000,
|
|
|
+ .offset = 0,
|
|
|
+ .mask_flags = MTD_WRITEABLE, /* force read-only */
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 kernel",
|
|
|
+ .size = 0x000c0000,
|
|
|
+ .offset = 0x00040000,
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 params",
|
|
|
+ .size = 0x00040000,
|
|
|
+ .offset = 0x00100000,
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 initrd",
|
|
|
+ .size = 0x00100000,
|
|
|
+ .offset = 0x00140000,
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 root cramfs",
|
|
|
+ .size = 0x00300000,
|
|
|
+ .offset = 0x00240000,
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 usr cramfs",
|
|
|
+ .size = 0x00800000,
|
|
|
+ .offset = 0x00540000,
|
|
|
+ }, {
|
|
|
+ .name = "JORNADA720 usr local",
|
|
|
+ .size = 0, /* will expand to the end of the flash */
|
|
|
+ .offset = 0x00d00000,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static void jornada720_set_vpp(int vpp)
|
|
|
+{
|
|
|
+ if (vpp)
|
|
|
+ /* enabling flash write (line 470 of HP's doc) */
|
|
|
+ PPSR |= PPC_LDD7;
|
|
|
+ else
|
|
|
+ /* disabling flash write (line 470 of HP's doc) */
|
|
|
+ PPSR &= ~PPC_LDD7;
|
|
|
+ PPDR |= PPC_LDD7;
|
|
|
+}
|
|
|
+
|
|
|
+static struct flash_platform_data jornada720_flash_data = {
|
|
|
+ .map_name = "cfi_probe",
|
|
|
+ .set_vpp = jornada720_set_vpp,
|
|
|
+ .parts = jornada720_partitions,
|
|
|
+ .nr_parts = ARRAY_SIZE(jornada720_partitions),
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource jornada720_flash_resource =
|
|
|
+ DEFINE_RES_MEM(SA1100_CS0_PHYS, SZ_32M);
|
|
|
+
|
|
|
+static void __init jornada720_mach_init(void)
|
|
|
+{
|
|
|
+ sa11x0_register_mtd(&jornada720_flash_data, &jornada720_flash_resource, 1);
|
|
|
+}
|
|
|
+
|
|
|
+MACHINE_START(JORNADA720, "HP Jornada 720")
|
|
|
+ /* Maintainer: Kristoffer Ericson <Kristoffer.Ericson@gmail.com> */
|
|
|
+ .atag_offset = 0x100,
|
|
|
+ .map_io = jornada720_map_io,
|
|
|
+ .nr_irqs = SA1100_NR_IRQS,
|
|
|
+ .init_irq = sa1100_init_irq,
|
|
|
+ .timer = &sa1100_timer,
|
|
|
+ .init_machine = jornada720_mach_init,
|
|
|
+ .init_late = sa11x0_init_late,
|
|
|
+#ifdef CONFIG_SA1111
|
|
|
+ .dma_zone_size = SZ_1M,
|
|
|
+#endif
|
|
|
+ .restart = sa11x0_restart,
|
|
|
+MACHINE_END
|