lkml.org 
[lkml]   [2011]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 09/11] uio: uio_pdrv_genirq: Add OF support
    On Tue, Jul 26, 2011 at 09:05:19PM -0700, Greg Kroah-Hartman wrote:
    > From: "Hans J. Koch" <hjk@hansjkoch.de>

    This should read From: Michal Simek <monstr@monstr.eu>

    Thanks,
    Hans

    >
    > Adding OF binding to genirq.
    > Version string is setup to the "devicetree".
    >
    > Compatible string is not setup for now but you can add your
    > custom compatible string to uio_of_genirq_match structure.
    >
    > For example with "vendor,device" compatible string:
    > static const struct of_device_id __devinitconst uio_of_genirq_match[] = {
    > { .compatible = "vendor,device", },
    > { /* empty for now */ },
    > };
    >
    > Signed-off-by: Michal Simek <monstr@monstr.eu>
    > Signed-off-by: Hans J. Koch <hjk@hansjkoch.de>
    > Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
    > CC: Hans J. Koch <hjk@hansjkoch.de>
    > CC: Arnd Bergmann <arnd@arndb.de>
    > CC: John Williams <john.williams@petalogix.com>
    > CC: Grant Likely <grant.likely@secretlab.ca>
    > CC: Wolfram Sang <w.sang@pengutronix.de>
    > Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    > ---
    > drivers/uio/uio_pdrv_genirq.c | 43 +++++++++++++++++++++++++++++++++++++++++
    > 1 files changed, 43 insertions(+), 0 deletions(-)
    >
    > diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
    > index 0f424af..f8f81db 100644
    > --- a/drivers/uio/uio_pdrv_genirq.c
    > +++ b/drivers/uio/uio_pdrv_genirq.c
    > @@ -23,6 +23,10 @@
    > #include <linux/pm_runtime.h>
    > #include <linux/slab.h>
    >
    > +#include <linux/of.h>
    > +#include <linux/of_platform.h>
    > +#include <linux/of_address.h>
    > +
    > #define DRIVER_NAME "uio_pdrv_genirq"
    >
    > struct uio_pdrv_genirq_platdata {
    > @@ -97,6 +101,27 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
    > int ret = -EINVAL;
    > int i;
    >
    > + if (!uioinfo) {
    > + int irq;
    > +
    > + /* alloc uioinfo for one device */
    > + uioinfo = kzalloc(sizeof(*uioinfo), GFP_KERNEL);
    > + if (!uioinfo) {
    > + ret = -ENOMEM;
    > + dev_err(&pdev->dev, "unable to kmalloc\n");
    > + goto bad2;
    > + }
    > + uioinfo->name = pdev->dev.of_node->name;
    > + uioinfo->version = "devicetree";
    > +
    > + /* Multiple IRQs are not supported */
    > + irq = platform_get_irq(pdev, 0);
    > + if (irq == -ENXIO)
    > + uioinfo->irq = UIO_IRQ_NONE;
    > + else
    > + uioinfo->irq = irq;
    > + }
    > +
    > if (!uioinfo || !uioinfo->name || !uioinfo->version) {
    > dev_err(&pdev->dev, "missing platform_data\n");
    > goto bad0;
    > @@ -180,6 +205,10 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
    > kfree(priv);
    > pm_runtime_disable(&pdev->dev);
    > bad0:
    > + /* kfree uioinfo for OF */
    > + if (pdev->dev.of_node)
    > + kfree(uioinfo);
    > + bad2:
    > return ret;
    > }
    >
    > @@ -193,6 +222,10 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)
    > priv->uioinfo->handler = NULL;
    > priv->uioinfo->irqcontrol = NULL;
    >
    > + /* kfree uioinfo for OF */
    > + if (pdev->dev.of_node)
    > + kfree(priv->uioinfo);
    > +
    > kfree(priv);
    > return 0;
    > }
    > @@ -219,6 +252,15 @@ static const struct dev_pm_ops uio_pdrv_genirq_dev_pm_ops = {
    > .runtime_resume = uio_pdrv_genirq_runtime_nop,
    > };
    >
    > +#ifdef CONFIG_OF
    > +static const struct of_device_id __devinitconst uio_of_genirq_match[] = {
    > + { /* empty for now */ },
    > +};
    > +MODULE_DEVICE_TABLE(of, uio_of_genirq_match);
    > +#else
    > +# define uio_of_genirq_match NULL
    > +#endif
    > +
    > static struct platform_driver uio_pdrv_genirq = {
    > .probe = uio_pdrv_genirq_probe,
    > .remove = uio_pdrv_genirq_remove,
    > @@ -226,6 +268,7 @@ static struct platform_driver uio_pdrv_genirq = {
    > .name = DRIVER_NAME,
    > .owner = THIS_MODULE,
    > .pm = &uio_pdrv_genirq_dev_pm_ops,
    > + .of_match_table = uio_of_genirq_match,
    > },
    > };
    >
    > --
    > 1.7.6
    >
    >


    \
     
     \ /
      Last update: 2011-07-27 11:07    [W:0.030 / U:1.372 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site