All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: Linux kernel <linux-kernel@vger.kernel.org>
Subject: [patch -mm 03/20] chardev: GPIO for SCx200 & PC-8736x: add platforn_device for use w dev_dbg
Date: Sat, 17 Jun 2006 12:25:08 -0600	[thread overview]
Message-ID: <44944904.9050302@gmail.com> (raw)
In-Reply-To: <cfe85dfa0606121150y369f6beeqc643a1fe5c7ce69b@mail.gmail.com>

3/20. patch.platform-dev-2

Add a platform-device to scx200_gpio, and use its struct device dev
member (ie: devp) in dev_dbg() once.

There are 2 alternatives here (Im soliciting guidance/commentary):

- use isa_device, if/when its added to the kernel.

- alter scx200.c to EXPORT_GPL its private devp so that both
scx200_gpio, and the (to be added) nsc_gpio module can use it.
Since the available devp is in 'grandparent', this seems like
too much 'action at a distance'.


Signed-off-by: Jim Cromie <jim.cromie@gmail.com>

---

diffstat gpio-scx/patch.platform-dev-2
 scx200_gpio.c |   40 +++++++++++++++++++++++++++++-----------
 1 files changed, 29 insertions(+), 11 deletions(-)

diff -ruNp -X dontdiff -X exclude-diffs ax-2/drivers/char/scx200_gpio.c ax-3/drivers/char/scx200_gpio.c
--- ax-2/drivers/char/scx200_gpio.c	2006-06-17 01:01:13.000000000 -0600
+++ ax-3/drivers/char/scx200_gpio.c	2006-06-17 01:04:20.000000000 -0600
@@ -6,11 +6,13 @@
    Copyright (c) 2001,2002 Christer Weinigel <wingel@nano-system.com> */
 
 #include <linux/config.h>
+#include <linux/device.h>
 #include <linux/fs.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
@@ -20,6 +22,9 @@
 #include <linux/scx200_gpio.h>
 
 #define NAME "scx200_gpio"
+#define DEVNAME NAME
+
+static struct platform_device *pdev;
 
 MODULE_AUTHOR("Christer Weinigel <wingel@nano-system.com>");
 MODULE_DESCRIPTION("NatSemi SCx200 GPIO Pin Driver");
@@ -121,12 +126,20 @@ static int __init scx200_gpio_init(void)
 	int rc, i;
 	dev_t dev = MKDEV(major, 0);
 
-	printk(KERN_DEBUG NAME ": NatSemi SCx200 GPIO Driver\n");
-
 	if (!scx200_gpio_present()) {
 		printk(KERN_ERR NAME ": no SCx200 gpio present\n");
 		return -ENODEV;
 	}
+
+	/* support dev_dbg() with pdev->dev */
+	pdev = platform_device_alloc(DEVNAME, 0);
+	if (!pdev)
+		return -ENODEV;
+
+	rc = platform_device_add(pdev);
+	if (rc)
+		goto undo_platform_device_add;
+
 	if (major)
 		rc = register_chrdev_region(dev, num_devs, "scx200_gpio");
 	else {
@@ -134,29 +147,31 @@ static int __init scx200_gpio_init(void)
 		major = MAJOR(dev);
 	}
 	if (rc < 0) {
-		printk(KERN_ERR NAME ": SCx200 chrdev_region: %d\n", rc);
-		return rc;
+		dev_err(&pdev->dev, "SCx200 chrdev_region err: %d\n", rc);
+		goto undo_platform_device_add;
 	}
 	scx200_devices = kzalloc(num_devs * sizeof(struct cdev), GFP_KERNEL);
 	if (!scx200_devices) {
 		rc = -ENOMEM;
-		goto fail_malloc;
+		goto undo_chrdev_region;
 	}
 	for (i = 0; i < num_devs; i++) {
 		struct cdev *cdev = &scx200_devices[i];
 		cdev_init(cdev, &scx200_gpio_fops);
 		cdev->owner = THIS_MODULE;
-		cdev->ops = &scx200_gpio_fops;
 		rc = cdev_add(cdev, MKDEV(major, i), 1);
-		/* Fail gracefully if need be */
+		/* tolerate 'minor' errors */
 		if (rc)
-			printk(KERN_ERR NAME "Error %d on minor %d", rc, i);
+			dev_err(&pdev->dev, "Error %d on minor %d", rc, i);
 	}
 
-	return 0;		/* succeed */
+	return 0; /* succeed */
 
-fail_malloc:
-	unregister_chrdev_region(dev, num_devs);
+undo_chrdev_region:
+        unregister_chrdev_region(dev, num_devs);
+undo_platform_device_add:
+	platform_device_put(pdev);
+	kfree(pdev);		/* undo platform_device_alloc */
 	return rc;
 }
 
@@ -164,6 +179,9 @@ static void __exit scx200_gpio_cleanup(v
 {
 	kfree(scx200_devices);
 	unregister_chrdev_region(MKDEV(major, 0), num_devs);
+	platform_device_put(pdev);
+	platform_device_unregister(pdev);
+	/* kfree(pdev); */
 }
 
 module_init(scx200_gpio_init);



  parent reply	other threads:[~2006-06-17 18:25 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <448DB57F.2050006@gmail.com>
     [not found] ` <cfe85dfa0606121150y369f6beeqc643a1fe5c7ce69b@mail.gmail.com>
2006-06-17 18:23   ` [patch -mm 01/20] chardev: GPIO for SCx200 & PC-8736x: whitespace pre-clean Jim Cromie
2006-06-17 18:24   ` [patch -mm 02/20] chardev: GPIO for SCx200 & PC-8736x: modernize driver init to 2.6 api Jim Cromie
2006-06-20  5:21     ` Andrew Morton
2006-06-17 18:25   ` Jim Cromie [this message]
2006-06-20  5:22     ` [patch -mm 03/20] chardev: GPIO for SCx200 & PC-8736x: add platforn_device for use w dev_dbg Andrew Morton
2006-06-17 18:26   ` [patch -mm 04/20] chardev: GPIO for SCx200 & PC-8736x: device minor numbers are unsigned ints Jim Cromie
2006-06-17 18:27   ` [patch -mm 05/20] chardev: GPIO for SCx200 & PC-8736x: put gpio_dump on a diet Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:28   ` [patch -mm 06/20] chardev: GPIO for SCx200 & PC-8736x: add 'v' command to device-file Jim Cromie
2006-06-17 18:29   ` [patch -mm 07/20] chardev: GPIO for SCx200 & PC-8736x: refactor scx200_probe to better segregate _gpio initialization Jim Cromie
2006-06-17 18:30   ` [patch -mm 09/20] chardev: GPIO for SCx200 & PC-8736x: dispatch via vtable Jim Cromie
2006-06-17 18:31   ` [patch -mm 10/20] chardev: GPIO for SCx200 & PC-8736x: add empty common-module Jim Cromie
2006-06-17 18:32   ` [patch -mm 11/20] chardev: GPIO for SCx200 & PC-8736x: migrate file-ops to common module Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:33   ` [patch -mm 12/20] chardev: GPIO for SCx200 & PC-8736x: migrate gpio_dump " Jim Cromie
2006-06-17 18:33   ` [patch -mm 08/20] chardev: GPIO for SCx200 & PC-8736x: add gpio-ops vtable Jim Cromie
2006-06-17 18:34   ` [patch -mm 13/20] chardev: GPIO for SCx200 & PC-8736x: add new pc8736x_gpio module Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:35   ` [patch -mm 14/20] chardev: GPIO for SCx200 & PC-8736x: add platform_device for use w dev_dbg Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:36   ` [patch -mm 15/20] chardev: GPIO for SCx200 & PC-8736x: use dev_dbg in common module Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:37   ` [patch -mm 16/20] chardev: GPIO for SCx200 & PC-8736x: fix gpio_current, use shadow regs Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:38   ` [patch -mm 17/20] chardev: GPIO for SCx200 & PC-8736x: replace spinlocks w mutexes Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-17 18:39   ` [patch -mm 18/20] chardev: GPIO for SCx200 & PC-8736x: display pin values in/out in gpio_dump Jim Cromie
2006-06-17 18:40   ` [patch -mm 19/20] chardev: GPIO for SCx200 & PC-8736x: add proper Kconfig, Makefile entries Jim Cromie
2006-06-17 18:42   ` [patch -mm 20/20 RFC] chardev: GPIO for SCx200 & PC-8736x: add sysfs-GPIO interface Jim Cromie
2006-06-20  5:22     ` Andrew Morton
2006-06-20 19:57       ` Jim Cromie
2006-06-20 20:14         ` Randy.Dunlap
2006-06-20 20:40           ` Jim Cromie
2006-06-20 20:52             ` Randy.Dunlap
2006-06-20 21:50               ` Jim Cromie
2006-06-20 22:52                 ` Randy.Dunlap
2006-06-21  0:12         ` Andrew Morton
2006-06-21  3:49     ` Randy.Dunlap

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=44944904.9050302@gmail.com \
    --to=jim.cromie@gmail.com \
    --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.