2007-10-01 15:59:27

by Grant Likely

[permalink] [raw]
Subject: [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

(resend due to mailer issues. Apologies to anyone receiving this twice)

This patch series reworks the Xilinx framebuffer driver and then adds
an of_platform bus binding. The of_platform bus binding is needed to use
the driver in arch/powerpc platforms.

Antonino,

Assuming there are no major issues, I'd like to get this patch series
queued up for inclusion in 2.6.24.

Thanks,
g.

--
Grant Likely, B.Sc. P.Eng.
Secret Lab Technologies Ltd.


2007-10-01 15:57:52

by Grant Likely

[permalink] [raw]
Subject: [PATCH 2/6] Xilinxfb: Replace calls to printk with dev_dbg, dev_err, etc.

From: Grant Likely <[email protected]>

The dev_dbg, dev_err, etc functions provide more context that plain
vanilla printk which is useful for debugging. Where appropriate,
change printk calls to the appropriate dev_*() call.

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 1a5f1e4..e63cbd1 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -18,6 +18,7 @@
* Geert Uytterhoeven.
*/

+#include <linux/device.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
@@ -214,7 +215,7 @@ xilinxfb_drv_probe(struct device *dev)

drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
if (!drvdata) {
- printk(KERN_ERR "Couldn't allocate device private record\n");
+ dev_err(dev, "Couldn't allocate device private record\n");
return -ENOMEM;
}
dev_set_drvdata(dev, drvdata);
@@ -222,14 +223,13 @@ xilinxfb_drv_probe(struct device *dev)
/* Map the control registers in */
regs_res = platform_get_resource(pdev, IORESOURCE_IO, 0);
if (!regs_res || (regs_res->end - regs_res->start + 1 < 8)) {
- printk(KERN_ERR "Couldn't get registers resource\n");
+ dev_err(dev, "Couldn't get registers resource\n");
retval = -EFAULT;
goto failed1;
}

if (!request_mem_region(regs_res->start, 8, DRIVER_NAME)) {
- printk(KERN_ERR
- "Couldn't lock memory region at 0x%08X\n",
+ dev_err(dev, "Couldn't lock memory region at 0x%08X\n",
regs_res->start);
retval = -EBUSY;
goto failed1;
@@ -241,7 +241,7 @@ xilinxfb_drv_probe(struct device *dev)
drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(FB_SIZE),
&drvdata->fb_phys, GFP_KERNEL);
if (!drvdata->fb_virt) {
- printk(KERN_ERR "Could not allocate frame buffer memory\n");
+ dev_err(dev, "Could not allocate frame buffer memory\n");
retval = -ENOMEM;
goto failed2;
}
@@ -267,7 +267,7 @@ xilinxfb_drv_probe(struct device *dev)
drvdata->info.pseudo_palette = drvdata->pseudo_palette;

if (fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0) < 0) {
- printk(KERN_ERR "Fail to allocate colormap (%d entries)\n",
+ dev_err(dev, "Fail to allocate colormap (%d entries)\n",
PALETTE_ENTRIES_NO);
retval = -EFAULT;
goto failed3;
@@ -282,7 +282,7 @@ xilinxfb_drv_probe(struct device *dev)

/* Register new frame buffer */
if (register_framebuffer(&drvdata->info) < 0) {
- printk(KERN_ERR "Could not register frame buffer\n");
+ dev_err(dev, "Could not register frame buffer\n");
retval = -EINVAL;
goto failed4;
}

2007-10-01 15:58:33

by Grant Likely

[permalink] [raw]
Subject: [PATCH 1/6] Xilinxfb: add banner output to probe routine when DEBUG is defined

From: Grant Likely <[email protected]>

Debug support: when DEBUG is defined, output relevant details to the
log about the framebuffer registration.

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 4bc67ab..1a5f1e4 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -287,6 +287,11 @@ xilinxfb_drv_probe(struct device *dev)
goto failed4;
}

+ /* Put a banner in the log (for DEBUG) */
+ dev_dbg(dev, "regs: phys=%x, virt=%p\n",
+ drvdata->regs_phys, drvdata->regs);
+ dev_dbg(dev, "fb: phys=%p, virt=%p, size=%x\n",
+ (void*)drvdata->fb_phys, drvdata->fb_virt, FB_SIZE);
return 0; /* success */

failed4:

2007-10-01 15:58:46

by Grant Likely

[permalink] [raw]
Subject: [PATCH 3/6] Xilinxfb: rename failout labels to reflect failure

From: Grant Likely <[email protected]>

Labels and gotos are used in xilinxfb_assign to unwind allocations
on device registration failures. Rename the labels to reflect the
error which occured. This change is being made to make it easier
to add new failout paths (which occurs in a subsuquent patch) and
to make reviewing the failout path easier.

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index e63cbd1..9aa754a 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -225,14 +225,14 @@ xilinxfb_drv_probe(struct device *dev)
if (!regs_res || (regs_res->end - regs_res->start + 1 < 8)) {
dev_err(dev, "Couldn't get registers resource\n");
retval = -EFAULT;
- goto failed1;
+ goto err_region;
}

if (!request_mem_region(regs_res->start, 8, DRIVER_NAME)) {
dev_err(dev, "Couldn't lock memory region at 0x%08X\n",
regs_res->start);
retval = -EBUSY;
- goto failed1;
+ goto err_region;
}
drvdata->regs = (u32 __iomem*) ioremap(regs_res->start, 8);
drvdata->regs_phys = regs_res->start;
@@ -243,7 +243,7 @@ xilinxfb_drv_probe(struct device *dev)
if (!drvdata->fb_virt) {
dev_err(dev, "Could not allocate frame buffer memory\n");
retval = -ENOMEM;
- goto failed2;
+ goto err_fbmem;
}

/* Clear (turn to black) the framebuffer */
@@ -270,7 +270,7 @@ xilinxfb_drv_probe(struct device *dev)
dev_err(dev, "Fail to allocate colormap (%d entries)\n",
PALETTE_ENTRIES_NO);
retval = -EFAULT;
- goto failed3;
+ goto err_cmap;
}

drvdata->info.flags = FBINFO_DEFAULT;
@@ -284,7 +284,7 @@ xilinxfb_drv_probe(struct device *dev)
if (register_framebuffer(&drvdata->info) < 0) {
dev_err(dev, "Could not register frame buffer\n");
retval = -EINVAL;
- goto failed4;
+ goto err_regfb;
}

/* Put a banner in the log (for DEBUG) */
@@ -294,10 +294,10 @@ xilinxfb_drv_probe(struct device *dev)
(void*)drvdata->fb_phys, drvdata->fb_virt, FB_SIZE);
return 0; /* success */

-failed4:
+err_regfb:
fb_dealloc_cmap(&drvdata->info.cmap);

-failed3:
+err_cmap:
dma_free_coherent(dev, PAGE_ALIGN(FB_SIZE), drvdata->fb_virt,
drvdata->fb_phys);

@@ -305,10 +305,10 @@ failed3:
xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
iounmap(drvdata->regs);

-failed2:
+err_fbmem:
release_mem_region(regs_res->start, 8);

-failed1:
+err_region:
kfree(drvdata);
dev_set_drvdata(dev, NULL);


2007-10-01 15:59:04

by Grant Likely

[permalink] [raw]
Subject: [PATCH 6/6] Xilinxfb: add of_platform bus binding

From: Grant Likely <[email protected]>

Adds the of_platform bus binding to the xilinxfb driver. Needed to
use framebuffer devices described in the OF device tree (used by
arch/powerpc).

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 101 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 93 insertions(+), 8 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index e482bb5..4cf03e1 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -6,9 +6,12 @@
* Author: MontaVista Software, Inc.
* [email protected]
*
- * 2002-2007 (c) MontaVista Software, Inc. This file is licensed under the
- * terms of the GNU General Public License version 2. This program is licensed
- * "as is" without any warranty of any kind, whether express or implied.
+ * 2002-2007 (c) MontaVista Software, Inc.
+ * 2007 (c) Secret Lab Technologies, Ltd.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
*/

/*
@@ -29,7 +32,10 @@
#include <linux/init.h>
#include <linux/dma-mapping.h>
#include <linux/platform_device.h>
-
+#if defined(CONFIG_OF)
+#include <linux/of_device.h>
+#include <linux/of_platform.h>
+#endif
#include <asm/io.h>
#include <linux/xilinxfb.h>

@@ -384,13 +390,91 @@ static struct platform_driver xilinxfb_platform_driver = {
},
};

+/* ---------------------------------------------------------------------
+ * OF bus binding
+ */
+
+#if defined(CONFIG_OF)
+static int __devinit
+xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match)
+{
+ struct resource res;
+ const u32 *prop;
+ int width = 0, height = 0, rotate = 0;
+ int size, rc;
+
+ dev_dbg(&op->dev, "xilinxfb_of_probe(%p, %p)\n", op, match);
+
+ rc = of_address_to_resource(op->node, 0, &res);
+ if (rc) {
+ dev_err(&op->dev, "invalid address\n");
+ return rc;
+ }
+
+ prop = of_get_property(op->node, "display-number", &size);
+ if ((prop) && (size >= sizeof(u32)*2)) {
+ width = prop[0];
+ height = prop[1];
+ }
+
+ if (of_find_property(op->node, "rotate-display", NULL))
+ rotate = 1;
+
+ return xilinxfb_assign(&op->dev, res.start, width, height, rotate);
+}
+
+static int __devexit xilinxfb_of_remove(struct of_device *op)
+{
+ return xilinxfb_release(&op->dev);
+}
+
+/* Match table for of_platform binding */
+static struct of_device_id __devinit xilinxfb_of_match[] = {
+ { .compatible = "xilinx,ml300-fb", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, xilinxfb_of_match);
+
+static struct of_platform_driver xilinxfb_of_driver = {
+ .owner = THIS_MODULE,
+ .name = DRIVER_NAME,
+ .match_table = xilinxfb_of_match,
+ .probe = xilinxfb_of_probe,
+ .remove = __devexit_p(xilinxfb_of_remove),
+ .driver = {
+ .name = DRIVER_NAME,
+ },
+};
+
+/* Registration helpers to keep the number of #ifdefs to a minimum */
+static inline int __init xilinxfb_of_register(void)
+{
+ pr_debug("xilinxfb: calling of_register_platform_driver()\n");
+ return of_register_platform_driver(&xilinxfb_of_driver);
+}
+
+static inline void __exit xilinxfb_of_unregister(void)
+{
+ of_unregister_platform_driver(&xilinxfb_of_driver);
+}
+#else /* CONFIG_OF */
+/* CONFIG_OF not enabled; do nothing helpers */
+static inline int __init xilinxfb_of_register(void) { return 0; }
+static inline void __exit xilinxfb_of_unregister(void) { }
+#endif /* CONFIG_OF */
+
+/* ---------------------------------------------------------------------
+ * Module setup and teardown
+ */
+
static int __init
xilinxfb_init(void)
{
- /*
- * No kernel boot options used,
- * so we just need to register the driver
- */
+ int rc;
+ rc = xilinxfb_of_register();
+ if (rc)
+ return rc;
+
return platform_driver_register(&xilinxfb_platform_driver);
}

@@ -398,6 +482,7 @@ static void __exit
xilinxfb_cleanup(void)
{
platform_driver_unregister(&xilinxfb_platform_driver);
+ xilinxfb_of_unregister();
}

module_init(xilinxfb_init);

2007-10-01 15:59:44

by Grant Likely

[permalink] [raw]
Subject: [PATCH 4/6] xilinxfb: Split device setup from bus binding

From: Grant Likely <[email protected]>

Split the device setup code away from the platform bus binding. This is
in preparation for adding the of_platform bus binding to this driver and
most of the setup code is common between the two busses.

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 133 ++++++++++++++++++++++++++++------------------
1 files changed, 80 insertions(+), 53 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 9aa754a..12d9127 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -196,23 +196,17 @@ static struct fb_ops xilinxfb_ops =
.fb_imageblit = cfb_imageblit,
};

-/* === The device driver === */
+/* ---------------------------------------------------------------------
+ * Bus independent setup/teardown
+ */

-static int
-xilinxfb_drv_probe(struct device *dev)
+static int xilinxfb_assign(struct device *dev, unsigned long physaddr,
+ int width_mm, int height_mm, int rotate)
{
- struct platform_device *pdev;
- struct xilinxfb_platform_data *pdata;
struct xilinxfb_drvdata *drvdata;
- struct resource *regs_res;
- int retval;
-
- if (!dev)
- return -EINVAL;
-
- pdev = to_platform_device(dev);
- pdata = pdev->dev.platform_data;
+ int rc;

+ /* Allocate the driver data region */
drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
if (!drvdata) {
dev_err(dev, "Couldn't allocate device private record\n");
@@ -221,40 +215,39 @@ xilinxfb_drv_probe(struct device *dev)
dev_set_drvdata(dev, drvdata);

/* Map the control registers in */
- regs_res = platform_get_resource(pdev, IORESOURCE_IO, 0);
- if (!regs_res || (regs_res->end - regs_res->start + 1 < 8)) {
- dev_err(dev, "Couldn't get registers resource\n");
- retval = -EFAULT;
+ if (!request_mem_region(physaddr, 8, DRIVER_NAME)) {
+ dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
+ physaddr);
+ rc = -ENODEV;
goto err_region;
}
-
- if (!request_mem_region(regs_res->start, 8, DRIVER_NAME)) {
- dev_err(dev, "Couldn't lock memory region at 0x%08X\n",
- regs_res->start);
- retval = -EBUSY;
- goto err_region;
+ drvdata->regs_phys = physaddr;
+ drvdata->regs = ioremap(physaddr, 8);
+ if (!drvdata->regs) {
+ dev_err(dev, "Couldn't lock memory region at 0x%08lX\n",
+ physaddr);
+ rc = -ENODEV;
+ goto err_map;
}
- drvdata->regs = (u32 __iomem*) ioremap(regs_res->start, 8);
- drvdata->regs_phys = regs_res->start;

/* Allocate the framebuffer memory */
drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(FB_SIZE),
&drvdata->fb_phys, GFP_KERNEL);
if (!drvdata->fb_virt) {
dev_err(dev, "Could not allocate frame buffer memory\n");
- retval = -ENOMEM;
+ rc = -ENOMEM;
goto err_fbmem;
}

/* Clear (turn to black) the framebuffer */
- memset_io((void *) drvdata->fb_virt, 0, FB_SIZE);
+ memset_io(drvdata->fb_virt, 0, FB_SIZE);

/* Tell the hardware where the frame buffer is */
xilinx_fb_out_be32(drvdata, REG_FB_ADDR, drvdata->fb_phys);

/* Turn on the display */
drvdata->reg_ctrl_default = REG_CTRL_ENABLE;
- if (pdata && pdata->rotate_screen)
+ if (rotate)
drvdata->reg_ctrl_default |= REG_CTRL_ROTATE;
xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default);

@@ -265,31 +258,29 @@ xilinxfb_drv_probe(struct device *dev)
drvdata->info.fix = xilinx_fb_fix;
drvdata->info.fix.smem_start = drvdata->fb_phys;
drvdata->info.pseudo_palette = drvdata->pseudo_palette;
+ drvdata->info.flags = FBINFO_DEFAULT;
+ drvdata->info.var = xilinx_fb_var;
+
+ xilinx_fb_var.height = height_mm;
+ xilinx_fb_var.width = width_mm;

- if (fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0) < 0) {
+ /* Allocate a colour map */
+ rc = fb_alloc_cmap(&drvdata->info.cmap, PALETTE_ENTRIES_NO, 0);
+ if (rc) {
dev_err(dev, "Fail to allocate colormap (%d entries)\n",
PALETTE_ENTRIES_NO);
- retval = -EFAULT;
goto err_cmap;
}

- drvdata->info.flags = FBINFO_DEFAULT;
- if (pdata) {
- xilinx_fb_var.height = pdata->screen_height_mm;
- xilinx_fb_var.width = pdata->screen_width_mm;
- }
- drvdata->info.var = xilinx_fb_var;
-
/* Register new frame buffer */
- if (register_framebuffer(&drvdata->info) < 0) {
+ rc = register_framebuffer(&drvdata->info);
+ if (rc) {
dev_err(dev, "Could not register frame buffer\n");
- retval = -EINVAL;
goto err_regfb;
}

/* Put a banner in the log (for DEBUG) */
- dev_dbg(dev, "regs: phys=%x, virt=%p\n",
- drvdata->regs_phys, drvdata->regs);
+ dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr, drvdata->regs);
dev_dbg(dev, "fb: phys=%p, virt=%p, size=%x\n",
(void*)drvdata->fb_phys, drvdata->fb_virt, FB_SIZE);
return 0; /* success */
@@ -300,30 +291,25 @@ err_regfb:
err_cmap:
dma_free_coherent(dev, PAGE_ALIGN(FB_SIZE), drvdata->fb_virt,
drvdata->fb_phys);
-
/* Turn off the display */
xilinx_fb_out_be32(drvdata, REG_CTRL, 0);
- iounmap(drvdata->regs);

err_fbmem:
- release_mem_region(regs_res->start, 8);
+ iounmap(drvdata->regs);
+
+err_map:
+ release_mem_region(physaddr, 8);

err_region:
kfree(drvdata);
dev_set_drvdata(dev, NULL);

- return retval;
+ return rc;
}

-static int
-xilinxfb_drv_remove(struct device *dev)
+static int xilinxfb_release(struct device *dev)
{
- struct xilinxfb_drvdata *drvdata;
-
- if (!dev)
- return -ENODEV;
-
- drvdata = (struct xilinxfb_drvdata *) dev_get_drvdata(dev);
+ struct xilinxfb_drvdata *drvdata = dev_get_drvdata(dev);

#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO)
xilinx_fb_blank(VESA_POWERDOWN, &drvdata->info);
@@ -348,6 +334,47 @@ xilinxfb_drv_remove(struct device *dev)
return 0;
}

+/* ---------------------------------------------------------------------
+ * Platform bus binding
+ */
+
+static int
+xilinxfb_drv_probe(struct device *dev)
+{
+ struct platform_device *pdev;
+ struct xilinxfb_platform_data *pdata;
+ struct resource *res;
+ int width_mm;
+ int height_mm;
+ int rotate;
+
+ pdev = to_platform_device(dev);
+ pdata = pdev->dev.platform_data;
+ if (!pdata) {
+ dev_err(dev, "Missing pdata structure\n");
+ return -ENODEV;
+ }
+
+ /* Find the registers address */
+ res = platform_get_resource(pdev, IORESOURCE_IO, 0);
+ if (!res) {
+ dev_err(dev, "Couldn't get registers resource\n");
+ return -ENODEV;
+ }
+
+ height_mm = pdata->screen_height_mm;
+ width_mm = pdata->screen_width_mm;
+ rotate = pdata->rotate_screen ? 1 : 0;
+
+ return xilinxfb_assign(dev, res->start, width_mm, height_mm, rotate);
+}
+
+static int
+xilinxfb_drv_remove(struct device *dev)
+{
+ return xilinxfb_release(dev);
+}
+

static struct device_driver xilinxfb_driver = {
.name = DRIVER_NAME,

2007-10-01 15:59:57

by Grant Likely

[permalink] [raw]
Subject: [PATCH 5/6] Xilinxfb: cleanup platform_bus binding to use platform bus API.

From: Grant Likely <[email protected]>

Change the platform bus binding to make use of the established
platform_bus API.

Signed-off-by: Grant Likely <[email protected]>
---

drivers/video/xilinxfb.c | 32 ++++++++++++++++----------------
1 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
index 12d9127..e482bb5 100644
--- a/drivers/video/xilinxfb.c
+++ b/drivers/video/xilinxfb.c
@@ -339,26 +339,24 @@ static int xilinxfb_release(struct device *dev)
*/

static int
-xilinxfb_drv_probe(struct device *dev)
+xilinxfb_platform_probe(struct platform_device *pdev)
{
- struct platform_device *pdev;
struct xilinxfb_platform_data *pdata;
struct resource *res;
int width_mm;
int height_mm;
int rotate;

- pdev = to_platform_device(dev);
pdata = pdev->dev.platform_data;
if (!pdata) {
- dev_err(dev, "Missing pdata structure\n");
+ dev_err(&pdev->dev, "Missing pdata structure\n");
return -ENODEV;
}

/* Find the registers address */
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
if (!res) {
- dev_err(dev, "Couldn't get registers resource\n");
+ dev_err(&pdev->dev, "Couldn't get registers resource\n");
return -ENODEV;
}

@@ -366,22 +364,24 @@ xilinxfb_drv_probe(struct device *dev)
width_mm = pdata->screen_width_mm;
rotate = pdata->rotate_screen ? 1 : 0;

- return xilinxfb_assign(dev, res->start, width_mm, height_mm, rotate);
+ return xilinxfb_assign(&pdev->dev, res->start, width_mm, height_mm,
+ rotate);
}

static int
-xilinxfb_drv_remove(struct device *dev)
+xilinxfb_platform_remove(struct platform_device *pdev)
{
- return xilinxfb_release(dev);
+ return xilinxfb_release(&pdev->dev);
}


-static struct device_driver xilinxfb_driver = {
- .name = DRIVER_NAME,
- .bus = &platform_bus_type,
-
- .probe = xilinxfb_drv_probe,
- .remove = xilinxfb_drv_remove
+static struct platform_driver xilinxfb_platform_driver = {
+ .probe = xilinxfb_platform_probe,
+ .remove = xilinxfb_platform_remove,
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = DRIVER_NAME,
+ },
};

static int __init
@@ -391,13 +391,13 @@ xilinxfb_init(void)
* No kernel boot options used,
* so we just need to register the driver
*/
- return driver_register(&xilinxfb_driver);
+ return platform_driver_register(&xilinxfb_platform_driver);
}

static void __exit
xilinxfb_cleanup(void)
{
- driver_unregister(&xilinxfb_driver);
+ platform_driver_unregister(&xilinxfb_platform_driver);
}

module_init(xilinxfb_init);

2007-10-01 16:42:37

by Akinobu Mita

[permalink] [raw]
Subject: Re: [PATCH 6/6] Xilinxfb: add of_platform bus binding

2007/10/2, Grant Likely <[email protected]>:

> static int __init
> xilinxfb_init(void)
> {
> - /*
> - * No kernel boot options used,
> - * so we just need to register the driver
> - */
> + int rc;
> + rc = xilinxfb_of_register();
> + if (rc)
> + return rc;
> +
> return platform_driver_register(&xilinxfb_platform_driver);

Is it better to add error handling for platform_driver_register()?

rc = platform_driver_register(&xilinxfb_platform_driver);
if (rc)
xilinxfb_of_unregister();

return rc;


> }
>
> @@ -398,6 +482,7 @@ static void __exit
> xilinxfb_cleanup(void)
> {
> platform_driver_unregister(&xilinxfb_platform_driver);
> + xilinxfb_of_unregister();
> }

2007-10-01 16:46:46

by Grant Likely

[permalink] [raw]
Subject: Re: [PATCH 6/6] Xilinxfb: add of_platform bus binding

On 10/1/07, Akinobu Mita <[email protected]> wrote:
> 2007/10/2, Grant Likely <[email protected]>:
>
> > static int __init
> > xilinxfb_init(void)
> > {
> > - /*
> > - * No kernel boot options used,
> > - * so we just need to register the driver
> > - */
> > + int rc;
> > + rc = xilinxfb_of_register();
> > + if (rc)
> > + return rc;
> > +
> > return platform_driver_register(&xilinxfb_platform_driver);
>
> Is it better to add error handling for platform_driver_register()?

Right, good catch. I'll fix that

Thanks!
g.

--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
[email protected]
(403) 399-0195

2007-10-03 00:15:23

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [Linux-fbdev-devel] [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

On Mon, 2007-10-01 at 09:57 -0600, Grant Likely wrote:
> (resend due to mailer issues. Apologies to anyone receiving this twice)
>
> This patch series reworks the Xilinx framebuffer driver and then adds
> an of_platform bus binding. The of_platform bus binding is needed to use
> the driver in arch/powerpc platforms.
>
> Antonino,
>
> Assuming there are no major issues, I'd like to get this patch series
> queued up for inclusion in 2.6.24.

Okay.

Tony


2007-10-04 12:00:31

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 6/6] Xilinxfb: add of_platform bus binding

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> Adds the of_platform bus binding to the xilinxfb driver. Needed to
> use framebuffer devices described in the OF device tree (used by
> arch/powerpc).
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

Assuming the issue with error handling in xilinxfb_init() pointed out by
Akinobu Mita is fixed.

> drivers/video/xilinxfb.c | 101 ++++++++++++++++++++++++++++++++++++++++++----
> 1 files changed, 93 insertions(+), 8 deletions(-)

2007-10-04 12:01:19

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 1/6] Xilinxfb: add banner output to probe routine when DEBUG is defined

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> Debug support: when DEBUG is defined, output relevant details to the
> log about the framebuffer registration.
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

> drivers/video/xilinxfb.c | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)

2007-10-04 12:01:42

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 2/6] Xilinxfb: Replace calls to printk with dev_dbg, dev_err, etc.

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> The dev_dbg, dev_err, etc functions provide more context that plain
> vanilla printk which is useful for debugging. Where appropriate,
> change printk calls to the appropriate dev_*() call.
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

> drivers/video/xilinxfb.c | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)

2007-10-04 12:02:17

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 3/6] Xilinxfb: rename failout labels to reflect failure

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> Labels and gotos are used in xilinxfb_assign to unwind allocations
> on device registration failures. Rename the labels to reflect the
> error which occured. This change is being made to make it easier
> to add new failout paths (which occurs in a subsuquent patch) and
> to make reviewing the failout path easier.
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

> drivers/video/xilinxfb.c | 18 +++++++++---------
> 1 files changed, 9 insertions(+), 9 deletions(-)

2007-10-04 12:02:36

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 4/6] xilinxfb: Split device setup from bus binding

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> Split the device setup code away from the platform bus binding. This is
> in preparation for adding the of_platform bus binding to this driver and
> most of the setup code is common between the two busses.
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

> drivers/video/xilinxfb.c | 133 ++++++++++++++++++++++++++++------------------
> 1 files changed, 80 insertions(+), 53 deletions(-)

2007-10-04 12:02:56

by Andrei Konovalov

[permalink] [raw]
Subject: Re: [PATCH 5/6] Xilinxfb: cleanup platform_bus binding to use platform bus API.

Grant Likely wrote:
> From: Grant Likely <[email protected]>
>
> Change the platform bus binding to make use of the established
> platform_bus API.
>
> Signed-off-by: Grant Likely <[email protected]>
> ---

Acked-by: Andrei Konovalov <[email protected]>

> drivers/video/xilinxfb.c | 32 ++++++++++++++++----------------
> 1 files changed, 16 insertions(+), 16 deletions(-)

2007-10-09 04:44:14

by Grant Likely

[permalink] [raw]
Subject: Re: [Linux-fbdev-devel] [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

On 10/2/07, Antonino A. Daplas <[email protected]> wrote:
> On Mon, 2007-10-01 at 09:57 -0600, Grant Likely wrote:
> > Assuming there are no major issues, I'd like to get this patch series
> > queued up for inclusion in 2.6.24.
>
> Okay.
>
> Tony

BTW, what path do framebuffer patches take to get into Linus' tree?
Does he pull your tree directly, or do they go through someone else's
tree?

Thanks,
g.


>
>
>


--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
[email protected]
(403) 399-0195

2007-10-09 05:04:18

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [Linux-fbdev-devel] [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

On Mon, 2007-10-08 at 22:43 -0600, Grant Likely wrote:
> On 10/2/07, Antonino A. Daplas <[email protected]> wrote:
> > On Mon, 2007-10-01 at 09:57 -0600, Grant Likely wrote:
> > > Assuming there are no major issues, I'd like to get this patch series
> > > queued up for inclusion in 2.6.24.
> >
> > Okay.
> >
> > Tony
>
> BTW, what path do framebuffer patches take to get into Linus' tree?
> Does he pull your tree directly, or do they go through someone else's
> tree?

They all go to -mm tree, unless it's a needed fix, then to Linus's.

Tony


2007-10-09 17:39:27

by Grant Likely

[permalink] [raw]
Subject: Re: [Linux-fbdev-devel] [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

On 10/8/07, Antonino A. Daplas <[email protected]> wrote:
> On Mon, 2007-10-08 at 22:43 -0600, Grant Likely wrote:
> > BTW, what path do framebuffer patches take to get into Linus' tree?
> > Does he pull your tree directly, or do they go through someone else's
> > tree?
>
> They all go to -mm tree, unless it's a needed fix, then to Linus's.
>
> Tony

Ah, okay.

Since the XilinxFB is a powerpc-only device, is it okay with you if I
get Paul Mackerras to merge them into his tree instead (that way the
changes go in with the platform code which requires these changes)

Paulus, is that okay by you?

Thanks,
g.

--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
[email protected]
(403) 399-0195

2007-10-09 21:06:49

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [Linux-fbdev-devel] [PATCH 0/6] Patch series to add of_platform binding to xilinxfb

On Tue, 2007-10-09 at 11:39 -0600, Grant Likely wrote:
> On 10/8/07, Antonino A. Daplas <[email protected]> wrote:
> > On Mon, 2007-10-08 at 22:43 -0600, Grant Likely wrote:
> > > BTW, what path do framebuffer patches take to get into Linus' tree?
> > > Does he pull your tree directly, or do they go through someone else's
> > > tree?
> >
> > They all go to -mm tree, unless it's a needed fix, then to Linus's.
> >
> > Tony
>
> Ah, okay.
>
> Since the XilinxFB is a powerpc-only device, is it okay with you if I
> get Paul Mackerras to merge them into his tree instead (that way the
> changes go in with the platform code which requires these changes)

Fine with me.

Tony