All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Martin <dave.martin@linaro.org>
To: Grant Likely <grant.likely@secretlab.ca>
Cc: linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Merge pata_of_platform.c into pata_platform.c
Date: Mon, 19 Sep 2011 17:39:02 +0100	[thread overview]
Message-ID: <20110919163850.GA2108@arm.com> (raw)
In-Reply-To: <20110917213532.20710.92002.stgit@ponder>

On Sat, Sep 17, 2011 at 03:36:19PM -0600, Grant Likely wrote:
> There is no need for two drivers anymore
> 
> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
> Cc: Dave Martin <dave.martin@linaro.org>
> COMPILE TESTED ONLY
> ---
> [resend - I flubbed Dave's email address]
> 
> Dave, as I mentioned in the other thread, this is the patch that I
> hacked together to get rid of pata_of_platform.c.  Can you take over
> on this patch please?

This seems to work for me on vexpress.

Can you clarify what you mean by "take over"?

Cheers
---Dave

> 
>  drivers/ata/pata_of_platform.c |  116 ----------------------------------------
>  drivers/ata/pata_platform.c    |   60 ++++++++++++++++++---
>  include/linux/ata_platform.h   |    9 ---
>  3 files changed, 52 insertions(+), 133 deletions(-)
>  delete mode 100644 drivers/ata/pata_of_platform.c
> 
> diff --git a/drivers/ata/pata_of_platform.c b/drivers/ata/pata_of_platform.c
> deleted file mode 100644
> index f305400..0000000
> --- a/drivers/ata/pata_of_platform.c
> +++ /dev/null
> @@ -1,116 +0,0 @@
> -/*
> - * OF-platform PATA driver
> - *
> - * Copyright (c) 2007  MontaVista Software, Inc.
> - *                     Anton Vorontsov <avorontsov@ru.mvista.com>
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License (Version 2) as
> - * published by the Free Software Foundation.
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/module.h>
> -#include <linux/of_platform.h>
> -#include <linux/ata_platform.h>
> -
> -static int __devinit pata_of_platform_probe(struct platform_device *ofdev)
> -{
> -	int ret;
> -	struct device_node *dn = ofdev->dev.of_node;
> -	struct resource io_res;
> -	struct resource ctl_res;
> -	struct resource irq_res;
> -	unsigned int reg_shift = 0;
> -	int pio_mode = 0;
> -	int pio_mask;
> -	const u32 *prop;
> -
> -	ret = of_address_to_resource(dn, 0, &io_res);
> -	if (ret) {
> -		dev_err(&ofdev->dev, "can't get IO address from "
> -			"device tree\n");
> -		return -EINVAL;
> -	}
> -
> -	if (of_device_is_compatible(dn, "electra-ide")) {
> -		/* Altstatus is really at offset 0x3f6 from the primary window
> -		 * on electra-ide. Adjust ctl_res and io_res accordingly.
> -		 */
> -		ctl_res = io_res;
> -		ctl_res.start = ctl_res.start+0x3f6;
> -		io_res.end = ctl_res.start-1;
> -	} else {
> -		ret = of_address_to_resource(dn, 1, &ctl_res);
> -		if (ret) {
> -			dev_err(&ofdev->dev, "can't get CTL address from "
> -				"device tree\n");
> -			return -EINVAL;
> -		}
> -	}
> -
> -	ret = of_irq_to_resource(dn, 0, &irq_res);
> -	if (ret == NO_IRQ)
> -		irq_res.start = irq_res.end = 0;
> -	else
> -		irq_res.flags = 0;
> -
> -	prop = of_get_property(dn, "reg-shift", NULL);
> -	if (prop)
> -		reg_shift = *prop;
> -
> -	prop = of_get_property(dn, "pio-mode", NULL);
> -	if (prop) {
> -		pio_mode = *prop;
> -		if (pio_mode > 6) {
> -			dev_err(&ofdev->dev, "invalid pio-mode\n");
> -			return -EINVAL;
> -		}
> -	} else {
> -		dev_info(&ofdev->dev, "pio-mode unspecified, assuming PIO0\n");
> -	}
> -
> -	pio_mask = 1 << pio_mode;
> -	pio_mask |= (1 << pio_mode) - 1;
> -
> -	return __pata_platform_probe(&ofdev->dev, &io_res, &ctl_res, &irq_res,
> -				     reg_shift, pio_mask);
> -}
> -
> -static int __devexit pata_of_platform_remove(struct platform_device *ofdev)
> -{
> -	return __pata_platform_remove(&ofdev->dev);
> -}
> -
> -static struct of_device_id pata_of_platform_match[] = {
> -	{ .compatible = "ata-generic", },
> -	{ .compatible = "electra-ide", },
> -	{},
> -};
> -MODULE_DEVICE_TABLE(of, pata_of_platform_match);
> -
> -static struct platform_driver pata_of_platform_driver = {
> -	.driver = {
> -		.name = "pata_of_platform",
> -		.owner = THIS_MODULE,
> -		.of_match_table = pata_of_platform_match,
> -	},
> -	.probe		= pata_of_platform_probe,
> -	.remove		= __devexit_p(pata_of_platform_remove),
> -};
> -
> -static int __init pata_of_platform_init(void)
> -{
> -	return platform_driver_register(&pata_of_platform_driver);
> -}
> -module_init(pata_of_platform_init);
> -
> -static void __exit pata_of_platform_exit(void)
> -{
> -	platform_driver_unregister(&pata_of_platform_driver);
> -}
> -module_exit(pata_of_platform_exit);
> -
> -MODULE_DESCRIPTION("OF-platform PATA driver");
> -MODULE_AUTHOR("Anton Vorontsov <avorontsov@ru.mvista.com>");
> -MODULE_LICENSE("GPL");
> diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c
> index 2067308..adc435a 100644
> --- a/drivers/ata/pata_platform.c
> +++ b/drivers/ata/pata_platform.c
> @@ -17,6 +17,7 @@
>  #include <linux/blkdev.h>
>  #include <scsi/scsi_host.h>
>  #include <linux/ata.h>
> +#include <linux/of.h>
>  #include <linux/libata.h>
>  #include <linux/platform_device.h>
>  #include <linux/ata_platform.h>
> @@ -176,7 +177,6 @@ int __devinit __pata_platform_probe(struct device *dev,
>  	return ata_host_activate(host, irq, irq ? ata_sff_interrupt : NULL,
>  				 irq_flags, &pata_platform_sht);
>  }
> -EXPORT_SYMBOL_GPL(__pata_platform_probe);
>  
>  /**
>   *	__pata_platform_remove		-	unplug a platform interface
> @@ -185,7 +185,7 @@ EXPORT_SYMBOL_GPL(__pata_platform_probe);
>   *	A platform bus ATA device has been unplugged. Perform the needed
>   *	cleanup. Also called on module unload for any active devices.
>   */
> -int __pata_platform_remove(struct device *dev)
> +int __devexit __pata_platform_remove(struct device *dev)
>  {
>  	struct ata_host *host = dev_get_drvdata(dev);
>  
> @@ -193,14 +193,28 @@ int __pata_platform_remove(struct device *dev)
>  
>  	return 0;
>  }
> -EXPORT_SYMBOL_GPL(__pata_platform_remove);
> +
> +#ifdef CONFIG_OF
> +static struct of_device_id pata_platform_match[] = {
> +	{ .compatible = "arm,versatile-ata", },
> +	{ .compatible = "ata-generic", },
> +	{ .compatible = "electra-ide", },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, pata_platform_match);
> +#else
> +#define pata_platform_match NULL
> +#endif
>  
>  static int __devinit pata_platform_probe(struct platform_device *pdev)
>  {
> +	struct device_node *np = pdev->dev.of_node;
>  	struct resource *io_res;
>  	struct resource *ctl_res;
>  	struct resource *irq_res;
>  	struct pata_platform_info *pp_info = pdev->dev.platform_data;
> +	int local_pio_mask = pio_mask;
> +	u32 reg_shift = 0;
>  
>  	/*
>  	 * Simple resource validation ..
> @@ -224,11 +238,24 @@ static int __devinit pata_platform_probe(struct platform_device *pdev)
>  	 * Then the CTL base
>  	 */
>  	ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1);
> -	if (ctl_res == NULL) {
> +	if (ctl_res == NULL)
>  		ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> -		if (unlikely(ctl_res == NULL))
> -			return -EINVAL;
> +#ifdef CONFIG_OF
> +	if ((ctl_res == NULL) && of_device_is_compatible(np, "electra-ide")) {
> +		/* electra-ide quirk: Altstatus is really at offset 0x3f6 from
> +		 * the primary window. Adjust ctl_res and io_res accordingly. */
> +		ctl_res = devm_kzalloc(&pdev->dev, sizeof(*ctl_res) * 2, GFP_KERNEL);
> +		if (ctl_res) {
> +			ctl_res[0] = *io_res;
> +			ctl_res[1] = *io_res;
> +			io_res = &ctl_res[1];
> +			ctl_res->start += 0x3f6;
> +			io_res->end = ctl_res->start - 1;
> +		}
>  	}
> +#endif
> +	if (unlikely(ctl_res == NULL))
> +		return -EINVAL;
>  
>  	/*
>  	 * And the IRQ
> @@ -237,9 +264,25 @@ static int __devinit pata_platform_probe(struct platform_device *pdev)
>  	if (irq_res)
>  		irq_res->flags = pp_info ? pp_info->irq_flags : 0;
>  
> +	/* Parse device tree data if available */
> +	if (np) {
> +		u32 pio_mode = 0;
> +		of_property_read_u32(np, "reg-shift", &reg_shift);
> +		if (of_property_read_u32(np, "pio-mode", &pio_mode) == 0)
> +			dev_info(&pdev->dev, "pio-mode unspecified, assuming PIO0\n");
> +		if (pio_mode > 6) {
> +			dev_err(&pdev->dev, "invalid pio-mode\n");
> +			return -EINVAL;
> +		}
> +		local_pio_mask = (1 << (pio_mode + 1)) - 1;
> +	}
> +
> +	/* Platform data takes precedence if available */
> +	if (pp_info)
> +		reg_shift = pp_info->ioport_shift;
> +
>  	return __pata_platform_probe(&pdev->dev, io_res, ctl_res, irq_res,
> -				     pp_info ? pp_info->ioport_shift : 0,
> -				     pio_mask);
> +				     reg_shift, local_pio_mask);
>  }
>  
>  static int __devexit pata_platform_remove(struct platform_device *pdev)
> @@ -253,6 +296,7 @@ static struct platform_driver pata_platform_driver = {
>  	.driver = {
>  		.name		= DRV_NAME,
>  		.owner		= THIS_MODULE,
> +		.of_match_table = pata_platform_match,
>  	},
>  };
>  
> diff --git a/include/linux/ata_platform.h b/include/linux/ata_platform.h
> index 9a26c83..1e83a7f 100644
> --- a/include/linux/ata_platform.h
> +++ b/include/linux/ata_platform.h
> @@ -15,15 +15,6 @@ struct pata_platform_info {
>  	unsigned int irq_flags;
>  };
>  
> -extern int __devinit __pata_platform_probe(struct device *dev,
> -					   struct resource *io_res,
> -					   struct resource *ctl_res,
> -					   struct resource *irq_res,
> -					   unsigned int ioport_shift,
> -					   int __pio_mask);
> -
> -extern int __devexit __pata_platform_remove(struct device *dev);
> -
>  /*
>   * Marvell SATA private data
>   */
> 

  reply	other threads:[~2011-09-19 16:39 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-17 21:36 [PATCH] Merge pata_of_platform.c into pata_platform.c Grant Likely
2011-09-19 16:39 ` Dave Martin [this message]
2011-09-19 17:10   ` Grant Likely
2011-09-20  9:53     ` Dave Martin
  -- strict thread matches above, loose matches on Subject: below --
2011-09-17 21:34 Grant Likely

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110919163850.GA2108@arm.com \
    --to=dave.martin@linaro.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.