16 #include <linux/kernel.h>
17 #include <linux/module.h>
26 #define DRV_NAME "pata_imx"
28 #define PATA_IMX_ATA_CONTROL 0x24
29 #define PATA_IMX_ATA_CTRL_FIFO_RST_B (1<<7)
30 #define PATA_IMX_ATA_CTRL_ATA_RST_B (1<<6)
31 #define PATA_IMX_ATA_CTRL_IORDY_EN (1<<0)
32 #define PATA_IMX_ATA_INT_EN 0x2C
33 #define PATA_IMX_ATA_INTR_ATA_INTRQ2 (1<<3)
34 #define PATA_IMX_DRIVE_DATA 0xA0
35 #define PATA_IMX_DRIVE_CONTROL 0xD8
76 .set_mode = pata_imx_set_mode,
79 static void pata_imx_setup_port(
struct ata_ioports *ioaddr)
82 ioaddr->data_addr = ioaddr->cmd_addr + (
ATA_REG_DATA << 2);
83 ioaddr->error_addr = ioaddr->cmd_addr + (
ATA_REG_ERR << 2);
86 ioaddr->lbal_addr = ioaddr->cmd_addr + (
ATA_REG_LBAL << 2);
87 ioaddr->lbam_addr = ioaddr->cmd_addr + (
ATA_REG_LBAM << 2);
88 ioaddr->lbah_addr = ioaddr->cmd_addr + (
ATA_REG_LBAH << 2);
91 ioaddr->command_addr = ioaddr->cmd_addr + (
ATA_REG_CMD << 2);
116 if (IS_ERR(priv->
clk)) {
118 return PTR_ERR(priv->
clk);
121 clk_prepare_enable(priv->
clk);
130 ap->
ops = &pata_imx_port_ops;
135 resource_size(io_res));
137 dev_err(&pdev->
dev,
"failed to map IO/CTL base\n");
144 ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr;
146 pata_imx_setup_port(&ap->ioaddr);
165 clk_disable_unprepare(priv->
clk);
179 clk_disable_unprepare(priv->
clk);
186 static int pata_imx_suspend(
struct device *
dev)
197 clk_disable_unprepare(priv->
clk);
203 static int pata_imx_resume(
struct device *dev)
208 clk_prepare_enable(priv->
clk);
215 ata_host_resume(host);
220 static const struct dev_pm_ops pata_imx_pm_ops = {
222 .resume = pata_imx_resume,
227 .probe = pata_imx_probe,
233 .pm = &pata_imx_pm_ops,