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 <[email protected]>
CC: Hans J. Koch <[email protected]>
CC: Arnd Bergmann <[email protected]>
CC: John Williams <[email protected]>
CC: Grant Likely <[email protected]>
CC: Wolfram Sang <[email protected]>
---
v5: Free uioinfo in genirq_remove
Use pdev->dev.of_node for OF detection
v4: Remove dev_info messages
Check irq against -ENXIO for no irq
v3: Fix irq binding
Use "devicetree" as version string
v2: Remove additional resource binding
Setup correct version string
Clear compatible string
---
drivers/uio/uio_pdrv_genirq.c | 44 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
index 7174d51..24bb395 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;
}
@@ -189,6 +218,11 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)
uio_unregister_device(priv->uioinfo);
pm_runtime_disable(&pdev->dev);
+
+ /* kfree uioinfo for OF */
+ if (pdev->dev.of_node)
+ kfree(priv->uioinfo);
+
kfree(priv);
return 0;
}
@@ -215,6 +249,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,
@@ -222,6 +265,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.5.5.6
On Thu, May 05, 2011 at 08:40:44AM +0200, Michal Simek wrote:
I think we've got it.
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 <[email protected]>
Signed-off-by: Hans J. Koch <[email protected]>
> CC: Hans J. Koch <[email protected]>
> CC: Arnd Bergmann <[email protected]>
> CC: John Williams <[email protected]>
> CC: Grant Likely <[email protected]>
> CC: Wolfram Sang <[email protected]>
>
> ---
> v5: Free uioinfo in genirq_remove
> Use pdev->dev.of_node for OF detection
>
> v4: Remove dev_info messages
> Check irq against -ENXIO for no irq
>
> v3: Fix irq binding
> Use "devicetree" as version string
>
> v2: Remove additional resource binding
> Setup correct version string
> Clear compatible string
> ---
> drivers/uio/uio_pdrv_genirq.c | 44 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 44 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
> index 7174d51..24bb395 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;
> }
>
> @@ -189,6 +218,11 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)
>
> uio_unregister_device(priv->uioinfo);
> pm_runtime_disable(&pdev->dev);
> +
> + /* kfree uioinfo for OF */
> + if (pdev->dev.of_node)
> + kfree(priv->uioinfo);
> +
> kfree(priv);
> return 0;
> }
> @@ -215,6 +249,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,
> @@ -222,6 +265,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.5.5.6
>
>
On Thu, May 05, 2011 at 08:40:44AM +0200, Michal Simek wrote:
> 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 <[email protected]>
Reviewed-by: Wolfram Sang <[email protected]>
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Hi Greg,
can you please add it to your tree? I see you have sent pull request.
Thanks,
Michal
Michal Simek wrote:
> 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 <[email protected]>
> CC: Hans J. Koch <[email protected]>
> CC: Arnd Bergmann <[email protected]>
> CC: John Williams <[email protected]>
> CC: Grant Likely <[email protected]>
> CC: Wolfram Sang <[email protected]>
>
> ---
> v5: Free uioinfo in genirq_remove
> Use pdev->dev.of_node for OF detection
>
> v4: Remove dev_info messages
> Check irq against -ENXIO for no irq
>
> v3: Fix irq binding
> Use "devicetree" as version string
>
> v2: Remove additional resource binding
> Setup correct version string
> Clear compatible string
> ---
> drivers/uio/uio_pdrv_genirq.c | 44 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 44 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
> index 7174d51..24bb395 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;
> }
>
> @@ -189,6 +218,11 @@ static int uio_pdrv_genirq_remove(struct platform_device *pdev)
>
> uio_unregister_device(priv->uioinfo);
> pm_runtime_disable(&pdev->dev);
> +
> + /* kfree uioinfo for OF */
> + if (pdev->dev.of_node)
> + kfree(priv->uioinfo);
> +
> kfree(priv);
> return 0;
> }
> @@ -215,6 +249,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,
> @@ -222,6 +265,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,
> },
> };
>
--
Michal Simek, Ing. (M.Eng)
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
On Tue, May 24, 2011 at 01:27:11PM +0200, Michal Simek wrote:
> Hi Greg,
>
> can you please add it to your tree? I see you have sent pull request.
It's too late for the merge window for this, sorry. I needed to have
this before it opened up, and in the linux-next tree for a week or so
before that.
Sorry.
Can you resend it in a format that I can apply it in, as well as getting
an ack from Hans? I'll be glad to queue it up for the next major
release after this if you do that.
thanks,
greg k-h
On Tue, May 24, 2011 at 05:36:25AM -0700, Greg KH wrote:
> On Tue, May 24, 2011 at 01:27:11PM +0200, Michal Simek wrote:
> > Hi Greg,
> >
> > can you please add it to your tree? I see you have sent pull request.
>
> It's too late for the merge window for this, sorry. I needed to have
> this before it opened up, and in the linux-next tree for a week or so
> before that.
>
> Sorry.
>
> Can you resend it in a format that I can apply it in, as well as getting
> an ack from Hans?
There was already a "Signed-off-by:" from me, and a "Reviewed-by:" from
Wolfram Sang, so that should be OK.
There was some unanswered question by Thomas De Scham, though.
Thanks,
Hans
> I'll be glad to queue it up for the next major
> release after this if you do that.
>
> thanks,
>
> greg k-h
>
On Tue, May 24, 2011 at 05:02:16PM +0200, Hans J. Koch wrote:
> On Tue, May 24, 2011 at 05:36:25AM -0700, Greg KH wrote:
> > On Tue, May 24, 2011 at 01:27:11PM +0200, Michal Simek wrote:
> > > Hi Greg,
> > >
> > > can you please add it to your tree? I see you have sent pull request.
> >
> > It's too late for the merge window for this, sorry. I needed to have
> > this before it opened up, and in the linux-next tree for a week or so
> > before that.
> >
> > Sorry.
> >
> > Can you resend it in a format that I can apply it in, as well as getting
> > an ack from Hans?
>
> There was already a "Signed-off-by:" from me, and a "Reviewed-by:" from
> Wolfram Sang, so that should be OK.
There was on the forwarded patch? Sorry, I missed it, if only it was in
a format that could have been applied :)
> There was some unanswered question by Thomas De Scham, though.
The answers to his question can be found in the discussions around previous
versions of the patch.
Regards,
Wolfram
--
Pengutronix e.K. | Wolfram Sang |
Industrial Linux Solutions | http://www.pengutronix.de/ |
On Tue, May 24, 2011 at 08:14:13AM -0700, Greg KH wrote:
> On Tue, May 24, 2011 at 05:02:16PM +0200, Hans J. Koch wrote:
> > On Tue, May 24, 2011 at 05:36:25AM -0700, Greg KH wrote:
> > > On Tue, May 24, 2011 at 01:27:11PM +0200, Michal Simek wrote:
> > > > Hi Greg,
> > > >
> > > > can you please add it to your tree? I see you have sent pull request.
> > >
> > > It's too late for the merge window for this, sorry. I needed to have
> > > this before it opened up, and in the linux-next tree for a week or so
> > > before that.
> > >
> > > Sorry.
> > >
> > > Can you resend it in a format that I can apply it in, as well as getting
> > > an ack from Hans?
> >
> > There was already a "Signed-off-by:" from me, and a "Reviewed-by:" from
> > Wolfram Sang, so that should be OK.
>
> There was on the forwarded patch? Sorry, I missed it, if only it was in
> a format that could have been applied :)
I forwarded the original patch (added Signed-of-by and Reviewed-by tags)
to you.
HTH,
Hans
On Wed, May 25, 2011 at 12:04:08AM +0200, Hans J. Koch wrote:
> On Tue, May 24, 2011 at 08:14:13AM -0700, Greg KH wrote:
> > On Tue, May 24, 2011 at 05:02:16PM +0200, Hans J. Koch wrote:
> > > On Tue, May 24, 2011 at 05:36:25AM -0700, Greg KH wrote:
> > > > On Tue, May 24, 2011 at 01:27:11PM +0200, Michal Simek wrote:
> > > > > Hi Greg,
> > > > >
> > > > > can you please add it to your tree? I see you have sent pull request.
> > > >
> > > > It's too late for the merge window for this, sorry. I needed to have
> > > > this before it opened up, and in the linux-next tree for a week or so
> > > > before that.
> > > >
> > > > Sorry.
> > > >
> > > > Can you resend it in a format that I can apply it in, as well as getting
> > > > an ack from Hans?
> > >
> > > There was already a "Signed-off-by:" from me, and a "Reviewed-by:" from
> > > Wolfram Sang, so that should be OK.
> >
> > There was on the forwarded patch? Sorry, I missed it, if only it was in
> > a format that could have been applied :)
>
> I forwarded the original patch (added Signed-of-by and Reviewed-by tags)
> to you.
Thanks, I'll queue it up for the next major merge window.
greg k-h
Hi,
On Tue, May 24, 2011 at 6:24 PM, Wolfram Sang <[email protected]> wrote:
>
>> There was some unanswered question by Thomas De Scham, though.
>
> The answers to his question can be found in the discussions around previous
> versions of the patch.
>
I agree. After reading the entire thread a second time, I found the
answer: current 'workaround' is to let users modify the generic
driver's match table, while the real fix is to add runtime adding of
compatible strings to platform devices.
However, the latter functionality is not yet present, right?
Thanks,
Thomas
> Regards,
>
> ? Wolfram
>
> --
> Pengutronix e.K. ? ? ? ? ? ? ? ? ? ? ? ? ? | Wolfram Sang ? ? ? ? ? ? ? ?|
> Industrial Linux Solutions ? ? ? ? ? ? ? ? | http://www.pengutronix.de/ ?|
>
> _______________________________________________
> devicetree-discuss mailing list
> [email protected]
> https://lists.ozlabs.org/listinfo/devicetree-discuss
>
>
On Wednesday 25 May 2011 09:27:57 Thomas De Schampheleire wrote:
> On Tue, May 24, 2011 at 6:24 PM, Wolfram Sang <[email protected]> wrote:
> I agree. After reading the entire thread a second time, I found the
> answer: current 'workaround' is to let users modify the generic
> driver's match table, while the real fix is to add runtime adding of
> compatible strings to platform devices.
>
> However, the latter functionality is not yet present, right?
That is correct, yes.
Arnd