10d305464SGeert Uytterhoeven /* 20d305464SGeert Uytterhoeven * Copyright (C) 2007-2009 Geert Uytterhoeven 30d305464SGeert Uytterhoeven * 40d305464SGeert Uytterhoeven * This file is subject to the terms and conditions of the GNU General Public 50d305464SGeert Uytterhoeven * License. See the file COPYING in the main directory of this archive 60d305464SGeert Uytterhoeven * for more details. 70d305464SGeert Uytterhoeven */ 80d305464SGeert Uytterhoeven 90d305464SGeert Uytterhoeven #include <linux/init.h> 100d305464SGeert Uytterhoeven #include <linux/platform_device.h> 110d305464SGeert Uytterhoeven #include <linux/zorro.h> 120d305464SGeert Uytterhoeven 130d305464SGeert Uytterhoeven #include <asm/amigahw.h> 149aed2302SGeert Uytterhoeven #include <asm/amigayle.h> 150d305464SGeert Uytterhoeven 160d305464SGeert Uytterhoeven 170d305464SGeert Uytterhoeven #ifdef CONFIG_ZORRO 180d305464SGeert Uytterhoeven 190d305464SGeert Uytterhoeven static const struct resource zorro_resources[] __initconst = { 200d305464SGeert Uytterhoeven /* Zorro II regions (on Zorro II/III) */ 210d305464SGeert Uytterhoeven { 220d305464SGeert Uytterhoeven .name = "Zorro II exp", 230d305464SGeert Uytterhoeven .start = 0x00e80000, 240d305464SGeert Uytterhoeven .end = 0x00efffff, 250d305464SGeert Uytterhoeven .flags = IORESOURCE_MEM, 260d305464SGeert Uytterhoeven }, { 270d305464SGeert Uytterhoeven .name = "Zorro II mem", 280d305464SGeert Uytterhoeven .start = 0x00200000, 290d305464SGeert Uytterhoeven .end = 0x009fffff, 300d305464SGeert Uytterhoeven .flags = IORESOURCE_MEM, 310d305464SGeert Uytterhoeven }, 320d305464SGeert Uytterhoeven /* Zorro III regions (on Zorro III only) */ 330d305464SGeert Uytterhoeven { 340d305464SGeert Uytterhoeven .name = "Zorro III exp", 350d305464SGeert Uytterhoeven .start = 0xff000000, 360d305464SGeert Uytterhoeven .end = 0xffffffff, 370d305464SGeert Uytterhoeven .flags = IORESOURCE_MEM, 380d305464SGeert Uytterhoeven }, { 390d305464SGeert Uytterhoeven .name = "Zorro III cfg", 400d305464SGeert Uytterhoeven .start = 0x40000000, 410d305464SGeert Uytterhoeven .end = 0x7fffffff, 420d305464SGeert Uytterhoeven .flags = IORESOURCE_MEM, 430d305464SGeert Uytterhoeven } 440d305464SGeert Uytterhoeven }; 450d305464SGeert Uytterhoeven 460d305464SGeert Uytterhoeven 470d305464SGeert Uytterhoeven static int __init amiga_init_bus(void) 480d305464SGeert Uytterhoeven { 490d305464SGeert Uytterhoeven if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO)) 500d305464SGeert Uytterhoeven return -ENODEV; 510d305464SGeert Uytterhoeven 520d305464SGeert Uytterhoeven platform_device_register_simple("amiga-zorro", -1, zorro_resources, 530d305464SGeert Uytterhoeven AMIGAHW_PRESENT(ZORRO3) ? 4 : 2); 540d305464SGeert Uytterhoeven return 0; 550d305464SGeert Uytterhoeven } 560d305464SGeert Uytterhoeven 570d305464SGeert Uytterhoeven subsys_initcall(amiga_init_bus); 580d305464SGeert Uytterhoeven 599aed2302SGeert Uytterhoeven 609aed2302SGeert Uytterhoeven static int z_dev_present(zorro_id id) 619aed2302SGeert Uytterhoeven { 629aed2302SGeert Uytterhoeven unsigned int i; 639aed2302SGeert Uytterhoeven 649aed2302SGeert Uytterhoeven for (i = 0; i < zorro_num_autocon; i++) 659aed2302SGeert Uytterhoeven if (zorro_autocon[i].rom.er_Manufacturer == ZORRO_MANUF(id) && 669aed2302SGeert Uytterhoeven zorro_autocon[i].rom.er_Product == ZORRO_PROD(id)) 679aed2302SGeert Uytterhoeven return 1; 689aed2302SGeert Uytterhoeven 699aed2302SGeert Uytterhoeven return 0; 709aed2302SGeert Uytterhoeven } 719aed2302SGeert Uytterhoeven 729aed2302SGeert Uytterhoeven #else /* !CONFIG_ZORRO */ 739aed2302SGeert Uytterhoeven 749aed2302SGeert Uytterhoeven static inline int z_dev_present(zorro_id id) { return 0; } 759aed2302SGeert Uytterhoeven 769aed2302SGeert Uytterhoeven #endif /* !CONFIG_ZORRO */ 77fa6688e1SGeert Uytterhoeven 78fa6688e1SGeert Uytterhoeven 79c2a24a4cSGeert Uytterhoeven static const struct resource a3000_scsi_resource __initconst = { 80c2a24a4cSGeert Uytterhoeven .start = 0xdd0000, 81c2a24a4cSGeert Uytterhoeven .end = 0xdd00ff, 82c2a24a4cSGeert Uytterhoeven .flags = IORESOURCE_MEM, 83c2a24a4cSGeert Uytterhoeven }; 84c2a24a4cSGeert Uytterhoeven 85c2a24a4cSGeert Uytterhoeven 86a24a6b22SGeert Uytterhoeven static const struct resource a4000t_scsi_resource __initconst = { 87a24a6b22SGeert Uytterhoeven .start = 0xdd0000, 88a24a6b22SGeert Uytterhoeven .end = 0xdd0fff, 89a24a6b22SGeert Uytterhoeven .flags = IORESOURCE_MEM, 90a24a6b22SGeert Uytterhoeven }; 91a24a6b22SGeert Uytterhoeven 92a24a6b22SGeert Uytterhoeven 939aed2302SGeert Uytterhoeven static const struct resource a1200_ide_resource __initconst = { 949aed2302SGeert Uytterhoeven .start = 0xda0000, 959aed2302SGeert Uytterhoeven .end = 0xda1fff, 969aed2302SGeert Uytterhoeven .flags = IORESOURCE_MEM, 979aed2302SGeert Uytterhoeven }; 989aed2302SGeert Uytterhoeven 999aed2302SGeert Uytterhoeven static const struct gayle_ide_platform_data a1200_ide_pdata __initconst = { 1009aed2302SGeert Uytterhoeven .base = 0xda0000, 1019aed2302SGeert Uytterhoeven .irqport = 0xda9000, 1029aed2302SGeert Uytterhoeven .explicit_ack = 1, 1039aed2302SGeert Uytterhoeven }; 1049aed2302SGeert Uytterhoeven 1059aed2302SGeert Uytterhoeven 1069aed2302SGeert Uytterhoeven static const struct resource a4000_ide_resource __initconst = { 1079aed2302SGeert Uytterhoeven .start = 0xdd2000, 1089aed2302SGeert Uytterhoeven .end = 0xdd3fff, 1099aed2302SGeert Uytterhoeven .flags = IORESOURCE_MEM, 1109aed2302SGeert Uytterhoeven }; 1119aed2302SGeert Uytterhoeven 1129aed2302SGeert Uytterhoeven static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = { 1139aed2302SGeert Uytterhoeven .base = 0xdd2020, 1149aed2302SGeert Uytterhoeven .irqport = 0xdd3020, 1159aed2302SGeert Uytterhoeven .explicit_ack = 0, 1169aed2302SGeert Uytterhoeven }; 1179aed2302SGeert Uytterhoeven 1189aed2302SGeert Uytterhoeven 119fa6688e1SGeert Uytterhoeven static int __init amiga_init_devices(void) 120fa6688e1SGeert Uytterhoeven { 1219aed2302SGeert Uytterhoeven struct platform_device *pdev; 1229aed2302SGeert Uytterhoeven 123fa6688e1SGeert Uytterhoeven if (!MACH_IS_AMIGA) 124fa6688e1SGeert Uytterhoeven return -ENODEV; 125fa6688e1SGeert Uytterhoeven 126fa6688e1SGeert Uytterhoeven /* video hardware */ 127fa6688e1SGeert Uytterhoeven if (AMIGAHW_PRESENT(AMI_VIDEO)) 128fa6688e1SGeert Uytterhoeven platform_device_register_simple("amiga-video", -1, NULL, 0); 129fa6688e1SGeert Uytterhoeven 130ff2db7c5SGeert Uytterhoeven 131ff2db7c5SGeert Uytterhoeven /* sound hardware */ 132ff2db7c5SGeert Uytterhoeven if (AMIGAHW_PRESENT(AMI_AUDIO)) 133ff2db7c5SGeert Uytterhoeven platform_device_register_simple("amiga-audio", -1, NULL, 0); 134ff2db7c5SGeert Uytterhoeven 13592183b34SGeert Uytterhoeven 13692183b34SGeert Uytterhoeven /* storage interfaces */ 13792183b34SGeert Uytterhoeven if (AMIGAHW_PRESENT(AMI_FLOPPY)) 13892183b34SGeert Uytterhoeven platform_device_register_simple("amiga-floppy", -1, NULL, 0); 13992183b34SGeert Uytterhoeven 140c2a24a4cSGeert Uytterhoeven if (AMIGAHW_PRESENT(A3000_SCSI)) 141c2a24a4cSGeert Uytterhoeven platform_device_register_simple("amiga-a3000-scsi", -1, 142c2a24a4cSGeert Uytterhoeven &a3000_scsi_resource, 1); 143c2a24a4cSGeert Uytterhoeven 144a24a6b22SGeert Uytterhoeven if (AMIGAHW_PRESENT(A4000_SCSI)) 145a24a6b22SGeert Uytterhoeven platform_device_register_simple("amiga-a4000t-scsi", -1, 146a24a6b22SGeert Uytterhoeven &a4000t_scsi_resource, 1); 147a24a6b22SGeert Uytterhoeven 1489aed2302SGeert Uytterhoeven if (AMIGAHW_PRESENT(A1200_IDE) || 1499aed2302SGeert Uytterhoeven z_dev_present(ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE)) { 1509aed2302SGeert Uytterhoeven pdev = platform_device_register_simple("amiga-gayle-ide", -1, 1519aed2302SGeert Uytterhoeven &a1200_ide_resource, 1); 1529aed2302SGeert Uytterhoeven platform_device_add_data(pdev, &a1200_ide_pdata, 1539aed2302SGeert Uytterhoeven sizeof(a1200_ide_pdata)); 1549aed2302SGeert Uytterhoeven } 1559aed2302SGeert Uytterhoeven 1569aed2302SGeert Uytterhoeven if (AMIGAHW_PRESENT(A4000_IDE)) { 1579aed2302SGeert Uytterhoeven pdev = platform_device_register_simple("amiga-gayle-ide", -1, 1589aed2302SGeert Uytterhoeven &a4000_ide_resource, 1); 1599aed2302SGeert Uytterhoeven platform_device_add_data(pdev, &a4000_ide_pdata, 1609aed2302SGeert Uytterhoeven sizeof(a4000_ide_pdata)); 1619aed2302SGeert Uytterhoeven } 1629aed2302SGeert Uytterhoeven 163fa6688e1SGeert Uytterhoeven return 0; 164fa6688e1SGeert Uytterhoeven } 165fa6688e1SGeert Uytterhoeven 166fa6688e1SGeert Uytterhoeven device_initcall(amiga_init_devices); 167