1/* linux/arch/arm/mach-s3c2410/bast-ide.c 2 * 3 * Copyright 2007 Simtec Electronics 4 * http://www.simtec.co.uk/products/EB2410ITX/ 5 * http://armlinux.simtec.co.uk/ 6 * Ben Dooks <ben@simtec.co.uk> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11*/ 12 13#include <linux/kernel.h> 14#include <linux/types.h> 15#include <linux/init.h> 16#include <linux/interrupt.h> 17 18#include <linux/platform_device.h> 19#include <linux/ata_platform.h> 20 21#include <asm/mach-types.h> 22 23#include <asm/mach/arch.h> 24#include <asm/mach/map.h> 25#include <asm/mach/irq.h> 26 27#include <mach/map.h> 28 29#include "bast.h" 30 31/* IDE ports */ 32 33static struct pata_platform_info bast_ide_platdata = { 34 .ioport_shift = 5, 35}; 36 37static struct resource bast_ide0_resource[] = { 38 [0] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDEPRI, 8 * 0x20), 39 [1] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDEPRIAUX + (6 * 0x20), 0x20), 40 [2] = DEFINE_RES_IRQ(BAST_IRQ_IDE0), 41}; 42 43static struct platform_device bast_device_ide0 = { 44 .name = "pata_platform", 45 .id = 0, 46 .num_resources = ARRAY_SIZE(bast_ide0_resource), 47 .resource = bast_ide0_resource, 48 .dev = { 49 .platform_data = &bast_ide_platdata, 50 .coherent_dma_mask = ~0, 51 } 52 53}; 54 55static struct resource bast_ide1_resource[] = { 56 [0] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDESEC, 8 * 0x20), 57 [1] = DEFINE_RES_MEM(BAST_IDE_CS + BAST_PA_IDESECAUX + (6 * 0x20), 0x20), 58 [2] = DEFINE_RES_IRQ(BAST_IRQ_IDE1), 59}; 60 61static struct platform_device bast_device_ide1 = { 62 .name = "pata_platform", 63 .id = 1, 64 .num_resources = ARRAY_SIZE(bast_ide1_resource), 65 .resource = bast_ide1_resource, 66 .dev = { 67 .platform_data = &bast_ide_platdata, 68 .coherent_dma_mask = ~0, 69 } 70}; 71 72static struct platform_device *bast_ide_devices[] __initdata = { 73 &bast_device_ide0, 74 &bast_device_ide1, 75}; 76 77static __init int bast_ide_init(void) 78{ 79 if (machine_is_bast() || machine_is_vr1000()) 80 return platform_add_devices(bast_ide_devices, 81 ARRAY_SIZE(bast_ide_devices)); 82 83 return 0; 84} 85 86fs_initcall(bast_ide_init); 87