From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
"Greg Kroah-Hartman" <gregkh@suse.de>
Subject: [PATCH 10/28] Driver core: reduce duplicated code for platform_device creation
Date: Thu, 5 Aug 2010 15:24:00 -0700 [thread overview]
Message-ID: <1281047058-23716-10-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <20100805213314.GB13744@kroah.com>
From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This makes the two similar functions platform_device_register_simple
and platform_device_register_data one line inline functions using a new
generic function platform_device_register_resndata.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
Documentation/DocBook/device-drivers.tmpl | 1 +
drivers/base/platform.c | 104 +++++++---------------------
include/linux/platform_device.h | 62 ++++++++++++++++-
3 files changed, 85 insertions(+), 82 deletions(-)
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl
index 1b2dd4f..ecd35e9 100644
--- a/Documentation/DocBook/device-drivers.tmpl
+++ b/Documentation/DocBook/device-drivers.tmpl
@@ -111,6 +111,7 @@ X!Edrivers/base/attribute_container.c
<!--
X!Edrivers/base/interface.c
-->
+!Iinclude/linux/platform_device.h
!Edrivers/base/platform.c
!Edrivers/base/bus.c
</sect1>
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 26eb69d..ffcfd73 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -344,108 +344,56 @@ void platform_device_unregister(struct platform_device *pdev)
EXPORT_SYMBOL_GPL(platform_device_unregister);
/**
- * platform_device_register_simple - add a platform-level device and its resources
- * @name: base name of the device we're adding
- * @id: instance id
- * @res: set of resources that needs to be allocated for the device
- * @num: number of resources
- *
- * This function creates a simple platform device that requires minimal
- * resource and memory management. Canned release function freeing memory
- * allocated for the device allows drivers using such devices to be
- * unloaded without waiting for the last reference to the device to be
- * dropped.
+ * platform_device_register_resndata - add a platform-level device with
+ * resources and platform-specific data
*
- * This interface is primarily intended for use with legacy drivers which
- * probe hardware directly. Because such drivers create sysfs device nodes
- * themselves, rather than letting system infrastructure handle such device
- * enumeration tasks, they don't fully conform to the Linux driver model.
- * In particular, when such drivers are built as modules, they can't be
- * "hotplugged".
- *
- * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
- */
-struct platform_device *platform_device_register_simple(const char *name,
- int id,
- const struct resource *res,
- unsigned int num)
-{
- struct platform_device *pdev;
- int retval;
-
- pdev = platform_device_alloc(name, id);
- if (!pdev) {
- retval = -ENOMEM;
- goto error;
- }
-
- if (num) {
- retval = platform_device_add_resources(pdev, res, num);
- if (retval)
- goto error;
- }
-
- retval = platform_device_add(pdev);
- if (retval)
- goto error;
-
- return pdev;
-
-error:
- platform_device_put(pdev);
- return ERR_PTR(retval);
-}
-EXPORT_SYMBOL_GPL(platform_device_register_simple);
-
-/**
- * platform_device_register_data - add a platform-level device with platform-specific data
* @parent: parent device for the device we're adding
* @name: base name of the device we're adding
* @id: instance id
+ * @res: set of resources that needs to be allocated for the device
+ * @num: number of resources
* @data: platform specific data for this platform device
* @size: size of platform specific data
*
- * This function creates a simple platform device that requires minimal
- * resource and memory management. Canned release function freeing memory
- * allocated for the device allows drivers using such devices to be
- * unloaded without waiting for the last reference to the device to be
- * dropped.
- *
* Returns &struct platform_device pointer on success, or ERR_PTR() on error.
*/
-struct platform_device *platform_device_register_data(
+struct platform_device *platform_device_register_resndata(
struct device *parent,
const char *name, int id,
+ const struct resource *res, unsigned int num,
const void *data, size_t size)
{
+ int ret = -ENOMEM;
struct platform_device *pdev;
- int retval;
pdev = platform_device_alloc(name, id);
- if (!pdev) {
- retval = -ENOMEM;
- goto error;
- }
+ if (!pdev)
+ goto err;
pdev->dev.parent = parent;
- if (size) {
- retval = platform_device_add_data(pdev, data, size);
- if (retval)
- goto error;
+ if (res) {
+ ret = platform_device_add_resources(pdev, res, num);
+ if (ret)
+ goto err;
}
- retval = platform_device_add(pdev);
- if (retval)
- goto error;
+ if (data) {
+ ret = platform_device_add_data(pdev, data, size);
+ if (ret)
+ goto err;
+ }
- return pdev;
+ ret = platform_device_add(pdev);
+ if (ret) {
+err:
+ platform_device_put(pdev);
+ return ERR_PTR(ret);
+ }
-error:
- platform_device_put(pdev);
- return ERR_PTR(retval);
+ return pdev;
}
-EXPORT_SYMBOL_GPL(platform_device_register_data);
+EXPORT_SYMBOL_GPL(platform_device_register_resndata);
static int platform_drv_probe(struct device *_dev)
{
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 5417944..d7ecad0 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -43,10 +43,64 @@ extern struct resource *platform_get_resource_byname(struct platform_device *, u
extern int platform_get_irq_byname(struct platform_device *, const char *);
extern int platform_add_devices(struct platform_device **, int);
-extern struct platform_device *platform_device_register_simple(const char *, int id,
- const struct resource *, unsigned int);
-extern struct platform_device *platform_device_register_data(struct device *,
- const char *, int, const void *, size_t);
+extern struct platform_device *platform_device_register_resndata(
+ struct device *parent, const char *name, int id,
+ const struct resource *res, unsigned int num,
+ const void *data, size_t size);
+
+/**
+ * platform_device_register_simple - add a platform-level device and its resources
+ * @name: base name of the device we're adding
+ * @id: instance id
+ * @res: set of resources that needs to be allocated for the device
+ * @num: number of resources
+ *
+ * This function creates a simple platform device that requires minimal
+ * resource and memory management. Canned release function freeing memory
+ * allocated for the device allows drivers using such devices to be
+ * unloaded without waiting for the last reference to the device to be
+ * dropped.
+ *
+ * This interface is primarily intended for use with legacy drivers which
+ * probe hardware directly. Because such drivers create sysfs device nodes
+ * themselves, rather than letting system infrastructure handle such device
+ * enumeration tasks, they don't fully conform to the Linux driver model.
+ * In particular, when such drivers are built as modules, they can't be
+ * "hotplugged".
+ *
+ * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
+ */
+static inline struct platform_device *platform_device_register_simple(
+ const char *name, int id,
+ const struct resource *res, unsigned int num)
+{
+ return platform_device_register_resndata(NULL, name, id,
+ res, num, NULL, 0);
+}
+
+/**
+ * platform_device_register_data - add a platform-level device with platform-specific data
+ * @parent: parent device for the device we're adding
+ * @name: base name of the device we're adding
+ * @id: instance id
+ * @data: platform specific data for this platform device
+ * @size: size of platform specific data
+ *
+ * This function creates a simple platform device that requires minimal
+ * resource and memory management. Canned release function freeing memory
+ * allocated for the device allows drivers using such devices to be
+ * unloaded without waiting for the last reference to the device to be
+ * dropped.
+ *
+ * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
+ */
+static inline struct platform_device *platform_device_register_data(
+ struct device *parent, const char *name, int id,
+ const void *data, size_t size)
+{
+ return platform_device_register_resndata(parent, name, id,
+ NULL, 0, data, size);
+}
extern struct platform_device *platform_device_alloc(const char *name, int id);
extern int platform_device_add_resources(struct platform_device *pdev,
--
1.7.2
next prev parent reply other threads:[~2010-08-05 22:34 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-05 21:33 [GIT PATCH] driver core patches for .36 Greg KH
2010-08-05 22:23 ` [PATCH 01/28] uio: Remove IRQF_DISABLED flag from uio_pdrv_genirq.c Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 02/28] uio: Remove IRQF_DISABLED from uio_sercos3.c Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 03/28] uio: Remove IRQF_DISABLED flag from uio_cif.c Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 04/28] hotplug: Support kernel/hotplug sysctl variable when !CONFIG_NET Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 05/28] Driver core: internal struct dma_coherent_mem, change type of a member Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 06/28] Driver core: Drop __must_check from bus_for_each_drv() Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 07/28] firmware loader: use statically initialized data attribute Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 08/28] firmware loader: embed device into firmware_priv structure Greg Kroah-Hartman
2010-08-05 22:23 ` [PATCH 09/28] Driver core: use kmemdup in platform_device_add_resources Greg Kroah-Hartman
2010-08-05 22:24 ` Greg Kroah-Hartman [this message]
2010-08-05 22:24 ` [PATCH 11/28] Driver core: move platform device creation helpers to .init.text (if MODULE=n) Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 12/28] firmware: Update hotplug script Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 13/28] sysfs: sysfs_chmod_file's attr can be const Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 14/28] dmi-id: fix a memory leak in dmi_id_init error path Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 15/28] dcdbas: remove a redundant smi_data_buf_free in dcdbas_exit Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 16/28] sysfs: fix discrepancies between implementation and documentation Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 17/28] sysfs: Fix one more signature discrepancy between sysfs implementation and docs Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 18/28] debugfs: no longer needs to depend on SYSFS Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 19/28] driver core: fix memory leak on one error path in bus_register() Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 20/28] Driver core: Add BUS_NOTIFY_BIND_DRIVER Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 21/28] cgroupfs: create /sys/fs/cgroup to mount cgroupfs on Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 22/28] scsi: Remove owner field from attribute initialization in LPFC driver Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 23/28] scsi: Remove owner field from attribute initialization in ARCMSR driver Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 24/28] leds: Remove owner field from attribute initialization in bd2802 driver Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 25/28] regulator: Remove owner field from attribute initialization in regulator core driver Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 26/28] powerpc/pci: Remove owner field from attribute initialization in PCI bridge init Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 27/28] sysfs: Remove owner field from sysfs struct attribute Greg Kroah-Hartman
2010-08-05 22:24 ` [PATCH 28/28] driver core: device_rename's new_name can be const Greg Kroah-Hartman
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=1281047058-23716-10-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=u.kleine-koenig@pengutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox