|
@@ -249,3 +249,131 @@ static struct platform_device sa11x0ssp_device = {
|
|
|
|
|
|
static struct resource sa11x0fb_resources[] = {
|
|
|
[0] = DEFINE_RES_MEM(0xb0100000, SZ_64K),
|
|
|
+ [1] = DEFINE_RES_IRQ(IRQ_LCD),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sa11x0fb_device = {
|
|
|
+ .name = "sa11x0-fb",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .coherent_dma_mask = 0xffffffff,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(sa11x0fb_resources),
|
|
|
+ .resource = sa11x0fb_resources,
|
|
|
+};
|
|
|
+
|
|
|
+void sa11x0_register_lcd(struct sa1100fb_mach_info *inf)
|
|
|
+{
|
|
|
+ sa11x0_register_device(&sa11x0fb_device, inf);
|
|
|
+}
|
|
|
+
|
|
|
+static struct platform_device sa11x0pcmcia_device = {
|
|
|
+ .name = "sa11x0-pcmcia",
|
|
|
+ .id = -1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sa11x0mtd_device = {
|
|
|
+ .name = "sa1100-mtd",
|
|
|
+ .id = -1,
|
|
|
+};
|
|
|
+
|
|
|
+void sa11x0_register_mtd(struct flash_platform_data *flash,
|
|
|
+ struct resource *res, int nr)
|
|
|
+{
|
|
|
+ flash->name = "sa1100";
|
|
|
+ sa11x0mtd_device.resource = res;
|
|
|
+ sa11x0mtd_device.num_resources = nr;
|
|
|
+ sa11x0_register_device(&sa11x0mtd_device, flash);
|
|
|
+}
|
|
|
+
|
|
|
+static struct resource sa11x0ir_resources[] = {
|
|
|
+ DEFINE_RES_MEM(__PREG(Ser2UTCR0), 0x24),
|
|
|
+ DEFINE_RES_MEM(__PREG(Ser2HSCR0), 0x1c),
|
|
|
+ DEFINE_RES_MEM(__PREG(Ser2HSCR2), 0x04),
|
|
|
+ DEFINE_RES_IRQ(IRQ_Ser2ICP),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sa11x0ir_device = {
|
|
|
+ .name = "sa11x0-ir",
|
|
|
+ .id = -1,
|
|
|
+ .num_resources = ARRAY_SIZE(sa11x0ir_resources),
|
|
|
+ .resource = sa11x0ir_resources,
|
|
|
+};
|
|
|
+
|
|
|
+void sa11x0_register_irda(struct irda_platform_data *irda)
|
|
|
+{
|
|
|
+ sa11x0_register_device(&sa11x0ir_device, irda);
|
|
|
+}
|
|
|
+
|
|
|
+static struct resource sa1100_rtc_resources[] = {
|
|
|
+ DEFINE_RES_MEM(0x90010000, 0x40),
|
|
|
+ DEFINE_RES_IRQ_NAMED(IRQ_RTC1Hz, "rtc 1Hz"),
|
|
|
+ DEFINE_RES_IRQ_NAMED(IRQ_RTCAlrm, "rtc alarm"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device sa11x0rtc_device = {
|
|
|
+ .name = "sa1100-rtc",
|
|
|
+ .id = -1,
|
|
|
+ .num_resources = ARRAY_SIZE(sa1100_rtc_resources),
|
|
|
+ .resource = sa1100_rtc_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource sa11x0dma_resources[] = {
|
|
|
+ DEFINE_RES_MEM(DMA_PHYS, DMA_SIZE),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA0),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA1),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA2),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA3),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA4),
|
|
|
+ DEFINE_RES_IRQ(IRQ_DMA5),
|
|
|
+};
|
|
|
+
|
|
|
+static u64 sa11x0dma_dma_mask = DMA_BIT_MASK(32);
|
|
|
+
|
|
|
+static struct platform_device sa11x0dma_device = {
|
|
|
+ .name = "sa11x0-dma",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .dma_mask = &sa11x0dma_dma_mask,
|
|
|
+ .coherent_dma_mask = 0xffffffff,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(sa11x0dma_resources),
|
|
|
+ .resource = sa11x0dma_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *sa11x0_devices[] __initdata = {
|
|
|
+ &sa11x0udc_device,
|
|
|
+ &sa11x0uart1_device,
|
|
|
+ &sa11x0uart3_device,
|
|
|
+ &sa11x0ssp_device,
|
|
|
+ &sa11x0pcmcia_device,
|
|
|
+ &sa11x0rtc_device,
|
|
|
+ &sa11x0dma_device,
|
|
|
+};
|
|
|
+
|
|
|
+static int __init sa1100_init(void)
|
|
|
+{
|
|
|
+ pm_power_off = sa1100_power_off;
|
|
|
+ return platform_add_devices(sa11x0_devices, ARRAY_SIZE(sa11x0_devices));
|
|
|
+}
|
|
|
+
|
|
|
+arch_initcall(sa1100_init);
|
|
|
+
|
|
|
+void __init sa11x0_init_late(void)
|
|
|
+{
|
|
|
+ sa11x0_pm_init();
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Common I/O mapping:
|
|
|
+ *
|
|
|
+ * Typically, static virtual address mappings are as follow:
|
|
|
+ *
|
|
|
+ * 0xf0000000-0xf3ffffff: miscellaneous stuff (CPLDs, etc.)
|
|
|
+ * 0xf4000000-0xf4ffffff: SA-1111
|
|
|
+ * 0xf5000000-0xf5ffffff: reserved (used by cache flushing area)
|
|
|
+ * 0xf6000000-0xfffeffff: reserved (internal SA1100 IO defined above)
|
|
|
+ * 0xffff0000-0xffff0fff: SA1100 exception vectors
|
|
|
+ * 0xffff2000-0xffff2fff: Minicache copy_user_page area
|
|
|
+ *
|
|
|
+ * Below 0xe8000000 is reserved for vm allocation.
|