From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [patch 1/1] ata: Add iMX pata support Date: Fri, 22 Jul 2011 15:52:38 +0400 Message-ID: <4E296486.7090504@ru.mvista.com> References: <20110722104659.733097200@rtp-net.org> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wy0-f174.google.com ([74.125.82.174]:46596 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753595Ab1GVLxD (ORCPT ); Fri, 22 Jul 2011 07:53:03 -0400 Received: by wyg8 with SMTP id 8so1442719wyg.19 for ; Fri, 22 Jul 2011 04:53:02 -0700 (PDT) In-Reply-To: <20110722104659.733097200@rtp-net.org> Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: "Arnaud Patard (Rtp)" Cc: linux-ide@vger.kernel.org, s.hauer@pengutronix.de, jgarzik@pobox.com Hello. On 22-07-2011 14:46, Arnaud Patard (Rtp) wrote: > Add basic support for pata on iMX. It has been tested only on imx51. > SDMA support will probably be added later so this version supports only > PIO. > v2: > - enable only when needed IORDY > - use dev_get_drvdata Shouldn't this be under --- tearline? > Signed-off-by: Arnaud Patard [...] > Index: linux-2.6-submit/drivers/ata/pata_imx.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ linux-2.6-submit/drivers/ata/pata_imx.c 2011-07-22 12:46:29.000000000 +0200 > @@ -0,0 +1,260 @@ [...] > +static int __devinit pata_imx_probe(struct platform_device *pdev) > +{ > + struct ata_host *host; > + struct ata_port *ap; > + struct pata_imx_priv *priv; > + int irq = 0; > + struct resource *io_res; > + struct resource *irq_res; > + > + io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + if (io_res == NULL) > + return -EINVAL; > + > + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > + if (irq_res == NULL) > + return -EINVAL; > + irq = irq_res->start; Using platfrom_get_irq() would have been somewhat simpler -- you don't need 'irq_res' at all... > +free_priv: > + if (priv->clk) > + clk_disable(priv->clk); Need to call clk_put() also... > + kfree(priv); > + return -ENOMEM; > +} > + > +static int __devexit pata_imx_remove(struct platform_device *pdev) > +{ > + struct ata_host *host = dev_get_drvdata(&pdev->dev); > + struct pata_imx_priv *priv = host->private_data; > + > + ata_host_detach(host); > + > + __raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN); > + > + if (priv->clk) > + clk_disable(priv->clk); Same here... > +#ifdef CONFIG_PM > +static int pata_imx_suspend(struct device *dev) > +{ > + struct ata_host *host = dev_get_drvdata(dev); > + struct pata_imx_priv *priv = host->private_data; > + int ret; > + > + ret = ata_host_suspend(host, PMSG_SUSPEND); > + if (!ret) > + __raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN); > + > + if (priv->clk) > + clk_disable(priv->clk); > + > + return ret; > +} > + > +static int pata_imx_resume(struct device *dev) > +{ > + struct ata_host *host = dev_get_drvdata(dev); > + struct pata_imx_priv *priv = host->private_data; > + > + if (priv->clk) > + clk_enable(priv->clk); > + > + __raw_writel(PATA_IMX_ATA_CTRL_FIFO_RST_B | > + PATA_IMX_ATA_CTRL_ATA_RST_B, > + priv->host_regs + PATA_IMX_ATA_CONTROL); This will disable IORDY. WBR, Sergei