#include <linux/kernel.h>
#include <linux/ioport.h>
#include <linux/module.h>
#include <linux/ata_platform.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
static void plat_ide_setup_ports(struct ide_hw *hw, void __iomem *base,
struct pata_platform_info *pdata, int irq)
unsigned long port = (unsigned long)base;
hw->io_ports.data_addr = port;
port += (1 << pdata->ioport_shift);
i++, port += (1 << pdata->ioport_shift))
hw->io_ports_array[i] = port;
hw->io_ports.ctl_addr = (unsigned long)ctrl;
static const struct ide_port_info platform_ide_port_info = {
.host_flags = IDE_HFLAG_NO_DMA,
static int plat_ide_probe(struct platform_device *pdev)
struct resource *res_base, *res_alt, *res_irq;
void __iomem *base, *alt_base;
struct pata_platform_info *pdata;
struct ide_hw hw, *hws[] = { &hw };
struct ide_port_info d = platform_ide_port_info;
pdata = dev_get_platdata(&pdev->dev);
res_base = platform_get_resource(pdev, IORESOURCE_IO, 0);
res_alt = platform_get_resource(pdev, IORESOURCE_IO, 1);