From: Kishon Vijay Abraham I <kishon@ti.com>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Felipe Balbi <balbi@ti.com>,
Vivek Gautam <gautam.vivek@samsung.com>,
<linux-kernel@vger.kernel.org>, <linux-usb@vger.kernel.org>
Subject: Re: [PATCHv2 5/6] base: platform: name the device already during allocation
Date: Mon, 14 Jul 2014 11:49:38 +0530 [thread overview]
Message-ID: <53C3767A.9000203@ti.com> (raw)
In-Reply-To: <1401972778-5880-6-git-send-email-heikki.krogerus@linux.intel.com>
Greg,
On Thursday 05 June 2014 06:22 PM, Heikki Krogerus wrote:
> This allows resources such as GPIOs and clocks, which can be
> matched based on the device name when requested, to be
> assigned even when PLATFORM_DEVID_AUTO is used.
Any comments on this patch?
Thanks
Kishon
>
> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
> drivers/base/platform.c | 77 ++++++++++++++++++++++++++++++-------------------
> 1 file changed, 47 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 9e9227e..e856bc4 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -177,11 +177,45 @@ struct platform_object {
> */
> void platform_device_put(struct platform_device *pdev)
> {
> - if (pdev)
> - put_device(&pdev->dev);
> + if (!pdev)
> + return;
> +
> + if (pdev->id_auto) {
> + ida_simple_remove(&platform_devid_ida, pdev->id);
> + pdev->id = PLATFORM_DEVID_AUTO;
> + }
> +
> + put_device(&pdev->dev);
> }
> EXPORT_SYMBOL_GPL(platform_device_put);
>
> +static int pdev_set_name(struct platform_device *pdev)
> +{
> + int ret;
> +
> + switch (pdev->id) {
> + default:
> + return dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
> + case PLATFORM_DEVID_NONE:
> + return dev_set_name(&pdev->dev, "%s", pdev->name);
> + case PLATFORM_DEVID_AUTO:
> + /*
> + * Automatically allocated device ID. We mark it as such so
> + * that we remember it must be freed, and we append a suffix
> + * to avoid namespace collision with explicit IDs.
> + */
> + ret = ida_simple_get(&platform_devid_ida, 0, 0, GFP_KERNEL);
> + if (ret < 0)
> + return ret;
> + pdev->id = ret;
> + pdev->id_auto = true;
> + return dev_set_name(&pdev->dev, "%s.%d.auto", pdev->name,
> + pdev->id);
> + }
> +
> + return 0;
> +}
> +
> static void platform_device_release(struct device *dev)
> {
> struct platform_object *pa = container_of(dev, struct platform_object,
> @@ -214,6 +248,10 @@ struct platform_device *platform_device_alloc(const char *name, int id)
> device_initialize(&pa->pdev.dev);
> pa->pdev.dev.release = platform_device_release;
> arch_setup_pdev_archdata(&pa->pdev);
> + if (pdev_set_name(&pa->pdev)) {
> + kfree(pa);
> + return NULL;
> + }
> }
>
> return pa ? &pa->pdev : NULL;
> @@ -294,28 +332,6 @@ int platform_device_add(struct platform_device *pdev)
>
> pdev->dev.bus = &platform_bus_type;
>
> - switch (pdev->id) {
> - default:
> - dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
> - break;
> - case PLATFORM_DEVID_NONE:
> - dev_set_name(&pdev->dev, "%s", pdev->name);
> - break;
> - case PLATFORM_DEVID_AUTO:
> - /*
> - * Automatically allocated device ID. We mark it as such so
> - * that we remember it must be freed, and we append a suffix
> - * to avoid namespace collision with explicit IDs.
> - */
> - ret = ida_simple_get(&platform_devid_ida, 0, 0, GFP_KERNEL);
> - if (ret < 0)
> - goto err_out;
> - pdev->id = ret;
> - pdev->id_auto = true;
> - dev_set_name(&pdev->dev, "%s.%d.auto", pdev->name, pdev->id);
> - break;
> - }
> -
> for (i = 0; i < pdev->num_resources; i++) {
> struct resource *p, *r = &pdev->resource[i];
>
> @@ -358,7 +374,6 @@ int platform_device_add(struct platform_device *pdev)
> release_resource(r);
> }
>
> - err_out:
> return ret;
> }
> EXPORT_SYMBOL_GPL(platform_device_add);
> @@ -378,11 +393,6 @@ void platform_device_del(struct platform_device *pdev)
> if (pdev) {
> device_del(&pdev->dev);
>
> - if (pdev->id_auto) {
> - ida_simple_remove(&platform_devid_ida, pdev->id);
> - pdev->id = PLATFORM_DEVID_AUTO;
> - }
> -
> for (i = 0; i < pdev->num_resources; i++) {
> struct resource *r = &pdev->resource[i];
> unsigned long type = resource_type(r);
> @@ -400,8 +410,15 @@ EXPORT_SYMBOL_GPL(platform_device_del);
> */
> int platform_device_register(struct platform_device *pdev)
> {
> + int ret;
> +
> device_initialize(&pdev->dev);
> arch_setup_pdev_archdata(pdev);
> +
> + ret = pdev_set_name(pdev);
> + if (ret)
> + return ret;
> +
> return platform_device_add(pdev);
> }
> EXPORT_SYMBOL_GPL(platform_device_register);
>
next prev parent reply other threads:[~2014-07-14 6:20 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 12:52 [PATCHv2 0/6] phy: simplified phy lookup Heikki Krogerus
2014-06-05 12:52 ` [PATCHv2 1/6] phy: safer to_phy() macro Heikki Krogerus
2014-06-05 12:52 ` [PATCHv2 2/6] phy: improved lookup method Heikki Krogerus
2014-06-05 12:52 ` [PATCHv2 3/6] arm: omap3: twl: use the new lookup method with usb phy Heikki Krogerus
2014-07-14 6:18 ` Kishon Vijay Abraham I
2014-06-05 12:52 ` [PATCHv2 4/6] phy: remove the old lookup method Heikki Krogerus
2014-06-05 12:52 ` [PATCHv2 5/6] base: platform: name the device already during allocation Heikki Krogerus
2014-07-14 6:19 ` Kishon Vijay Abraham I [this message]
2014-07-14 14:55 ` Greg Kroah-Hartman
2014-08-04 10:00 ` Vivek Gautam
2014-08-05 6:38 ` Heikki Krogerus
2014-06-05 12:52 ` [PATCHv2 6/6] usb: dwc3: host: convey the PHYs to xhci Heikki Krogerus
2014-06-19 13:43 ` Felipe Balbi
2014-06-05 13:21 ` [PATCHv2 0/6] phy: simplified phy lookup Vivek Gautam
2014-07-02 11:31 ` Kishon Vijay Abraham I
2014-07-03 4:59 ` Vivek Gautam
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=53C3767A.9000203@ti.com \
--to=kishon@ti.com \
--cc=balbi@ti.com \
--cc=gautam.vivek@samsung.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@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.