Lines Matching +full:imx27 +full:- +full:pata

2  * Freescale iMX PATA driver
4 * Copyright (C) 2011 Arnaud Patard <arnaud.patard@rtp-net.org>
6 * Based on pata_platform - Copyright (C) 2006 - 2007 Paul Mundt
13 * - dmaengine support
62 clkrate = clk_get_rate(priv->clk); in pata_imx_set_timing()
64 if (adev->pio_mode < XFER_PIO_0 || adev->pio_mode > XFER_PIO_4 || in pata_imx_set_timing()
69 ata_timing_compute(adev, adev->pio_mode, &timing, T * 1000, 0); in pata_imx_set_timing()
71 mode = adev->pio_mode - XFER_PIO_0; in pata_imx_set_timing()
73 writeb(3, priv->host_regs + PATA_IMX_ATA_TIME_OFF); in pata_imx_set_timing()
74 writeb(3, priv->host_regs + PATA_IMX_ATA_TIME_ON); in pata_imx_set_timing()
75 writeb(timing.setup, priv->host_regs + PATA_IMX_ATA_TIME_1); in pata_imx_set_timing()
76 writeb(timing.act8b, priv->host_regs + PATA_IMX_ATA_TIME_2W); in pata_imx_set_timing()
77 writeb(timing.act8b, priv->host_regs + PATA_IMX_ATA_TIME_2R); in pata_imx_set_timing()
78 writeb(1, priv->host_regs + PATA_IMX_ATA_TIME_PIO_RDX); in pata_imx_set_timing()
80 writeb(pio_t4[mode] / T + 1, priv->host_regs + PATA_IMX_ATA_TIME_4); in pata_imx_set_timing()
81 writeb(pio_t9[mode] / T + 1, priv->host_regs + PATA_IMX_ATA_TIME_9); in pata_imx_set_timing()
82 writeb(pio_tA[mode] / T + 1, priv->host_regs + PATA_IMX_ATA_TIME_AX); in pata_imx_set_timing()
87 struct pata_imx_priv *priv = ap->host->private_data; in pata_imx_set_piomode()
92 val = __raw_readl(priv->host_regs + PATA_IMX_ATA_CONTROL); in pata_imx_set_piomode()
97 __raw_writel(val, priv->host_regs + PATA_IMX_ATA_CONTROL); in pata_imx_set_piomode()
114 ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << 2); in pata_imx_setup_port()
115 ioaddr->error_addr = ioaddr->cmd_addr + (ATA_REG_ERR << 2); in pata_imx_setup_port()
116 ioaddr->feature_addr = ioaddr->cmd_addr + (ATA_REG_FEATURE << 2); in pata_imx_setup_port()
117 ioaddr->nsect_addr = ioaddr->cmd_addr + (ATA_REG_NSECT << 2); in pata_imx_setup_port()
118 ioaddr->lbal_addr = ioaddr->cmd_addr + (ATA_REG_LBAL << 2); in pata_imx_setup_port()
119 ioaddr->lbam_addr = ioaddr->cmd_addr + (ATA_REG_LBAM << 2); in pata_imx_setup_port()
120 ioaddr->lbah_addr = ioaddr->cmd_addr + (ATA_REG_LBAH << 2); in pata_imx_setup_port()
121 ioaddr->device_addr = ioaddr->cmd_addr + (ATA_REG_DEVICE << 2); in pata_imx_setup_port()
122 ioaddr->status_addr = ioaddr->cmd_addr + (ATA_REG_STATUS << 2); in pata_imx_setup_port()
123 ioaddr->command_addr = ioaddr->cmd_addr + (ATA_REG_CMD << 2); in pata_imx_setup_port()
139 priv = devm_kzalloc(&pdev->dev, in pata_imx_probe()
142 return -ENOMEM; in pata_imx_probe()
144 priv->clk = devm_clk_get_enabled(&pdev->dev, NULL); in pata_imx_probe()
145 if (IS_ERR(priv->clk)) { in pata_imx_probe()
146 dev_err(&pdev->dev, "Failed to get and enable clock\n"); in pata_imx_probe()
147 return PTR_ERR(priv->clk); in pata_imx_probe()
150 host = ata_host_alloc(&pdev->dev, 1); in pata_imx_probe()
152 return -ENOMEM; in pata_imx_probe()
154 host->private_data = priv; in pata_imx_probe()
155 ap = host->ports[0]; in pata_imx_probe()
157 ap->ops = &pata_imx_port_ops; in pata_imx_probe()
158 ap->pio_mask = ATA_PIO4; in pata_imx_probe()
159 ap->flags |= ATA_FLAG_SLAVE_POSS; in pata_imx_probe()
161 priv->host_regs = devm_platform_get_and_ioremap_resource(pdev, 0, &io_res); in pata_imx_probe()
162 if (IS_ERR(priv->host_regs)) in pata_imx_probe()
163 return PTR_ERR(priv->host_regs); in pata_imx_probe()
165 ap->ioaddr.cmd_addr = priv->host_regs + PATA_IMX_DRIVE_DATA; in pata_imx_probe()
166 ap->ioaddr.ctl_addr = priv->host_regs + PATA_IMX_DRIVE_CONTROL; in pata_imx_probe()
168 ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr; in pata_imx_probe()
170 pata_imx_setup_port(&ap->ioaddr); in pata_imx_probe()
173 (unsigned long long)io_res->start + PATA_IMX_DRIVE_DATA, in pata_imx_probe()
174 (unsigned long long)io_res->start + PATA_IMX_DRIVE_CONTROL); in pata_imx_probe()
179 priv->host_regs + PATA_IMX_ATA_CONTROL); in pata_imx_probe()
182 priv->host_regs + PATA_IMX_ATA_INT_EN); in pata_imx_probe()
197 struct pata_imx_priv *priv = host->private_data; in pata_imx_remove()
201 __raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN); in pata_imx_remove()
208 struct pata_imx_priv *priv = host->private_data; in pata_imx_suspend()
212 __raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN); in pata_imx_suspend()
213 priv->ata_ctl = __raw_readl(priv->host_regs + PATA_IMX_ATA_CONTROL); in pata_imx_suspend()
214 clk_disable_unprepare(priv->clk); in pata_imx_suspend()
222 struct pata_imx_priv *priv = host->private_data; in pata_imx_resume()
224 int ret = clk_prepare_enable(priv->clk); in pata_imx_resume()
228 __raw_writel(priv->ata_ctl, priv->host_regs + PATA_IMX_ATA_CONTROL); in pata_imx_resume()
231 priv->host_regs + PATA_IMX_ATA_INT_EN); in pata_imx_resume()
243 .compatible = "fsl,imx27-pata",
262 MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
263 MODULE_DESCRIPTION("low-level driver for iMX PATA");