From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Jerome Brunet <jbrunet@baylibre.com>
Cc: Dave Ertman <david.m.ertman@intel.com>,
Ira Weiny <ira.weiny@intel.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Stephen Boyd <sboyd@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] driver core: auxiliary bus: add device creation helper
Date: Tue, 10 Dec 2024 15:05:36 +0100 [thread overview]
Message-ID: <2024121048-latticed-etching-8961@gregkh> (raw)
In-Reply-To: <20241210-aux-device-create-helper-v1-1-5887f4d89308@baylibre.com>
On Tue, Dec 10, 2024 at 02:43:12PM +0100, Jerome Brunet wrote:
> Add an function helper to create a device on the auxiliary bus.
> This should avoid having the same code repeated in the different drivers
> registering auxiliary devices.
>
> Suggested-by: Stephen Boyd <sboyd@kernel.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> ---
> The suggestion for this change was initially discussed here: [1]
>
> I was not sure if the managed variant should return the auxiliary device or
> just the error. This initial version returns the auxiliary device, allowing
> it to be further (ab)used. Please let me know if you prefer to just return
> the error code instead.
>
> Also the non managed variant of the helper is not exported but it could
> easily be, if necessary.
>
> [1]: https://lore.kernel.org/linux-clk/df0a53ee859e450d84e81547099f5f36.sboyd@kernel.org
> ---
> drivers/base/auxiliary.c | 89 +++++++++++++++++++++++++++++++++++++++++++
> include/linux/auxiliary_bus.h | 4 ++
> 2 files changed, 93 insertions(+)
We can't add new functions like this without a real user of it. Please
submit that at the same time.
And are you ok with sharing the id range with multiple aux bus
implementations?
>
> diff --git a/drivers/base/auxiliary.c b/drivers/base/auxiliary.c
> index afa4df4c5a3f371b91d8dd8c4325495d32ad1291..60ca3f0da329fb7f8e69ecdf703b505e7cf5085c 100644
> --- a/drivers/base/auxiliary.c
> +++ b/drivers/base/auxiliary.c
> @@ -385,6 +385,95 @@ void auxiliary_driver_unregister(struct auxiliary_driver *auxdrv)
> }
> EXPORT_SYMBOL_GPL(auxiliary_driver_unregister);
>
> +static DEFINE_IDA(auxiliary_device_ida);
> +
> +static void auxiliary_device_release(struct device *dev)
> +{
> + struct auxiliary_device *auxdev = to_auxiliary_dev(dev);
> +
> + ida_free(&auxiliary_device_ida, auxdev->id);
> + kfree(auxdev);
> +}
> +
> +static struct auxiliary_device *auxiliary_device_create(struct device *dev,
> + const char *name,
> + void *platform_data)
> +{
> + struct auxiliary_device *auxdev;
> + int ret;
> +
> + auxdev = kzalloc(sizeof(*auxdev), GFP_KERNEL);
> + if (!auxdev)
> + return ERR_PTR(-ENOMEM);
> +
> + ret = ida_alloc(&auxiliary_device_ida, GFP_KERNEL);
> + if (ret < 0)
> + goto auxdev_free;
> +
> + auxdev->id = ret;
> + auxdev->name = name;
> + auxdev->dev.parent = dev;
> + auxdev->dev.platform_data = platform_data;
> + auxdev->dev.release = auxiliary_device_release;
> + device_set_of_node_from_dev(&auxdev->dev, dev);
> +
> + ret = auxiliary_device_init(auxdev);
> + if (ret)
> + goto ida_free;
> +
> + ret = __auxiliary_device_add(auxdev, dev->driver->name);
> + if (ret) {
> + auxiliary_device_uninit(auxdev);
> + return ERR_PTR(ret);
> + }
> +
> + return auxdev;
> +
> +ida_free:
> + ida_free(&auxiliary_device_ida, auxdev->id);
> +auxdev_free:
> + kfree(auxdev);
> + return ERR_PTR(ret);
> +}
> +
> +static void auxiliary_device_destroy(void *_auxdev)
> +{
> + struct auxiliary_device *auxdev = _auxdev;
> +
> + auxiliary_device_delete(auxdev);
> + auxiliary_device_uninit(auxdev);
> +}
> +
> +/**
> + * devm_auxiliary_device_create - create a device on the auxiliary bus
> + * @dev: parent device
> + * @name: auxiliary bus driver name
> + * @platform_data: auxiliary bus device platform data
> + *
> + * Device managed helper to create an auxiliary bus device.
> + * The parent device KBUILD_MODNAME is automatically inserted before the
KBUILD_MODNAME doesn't make sense here, as that's the aux bus file.
thanks,
greg k-h
next prev parent reply other threads:[~2024-12-10 14:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-10 13:43 [PATCH] driver core: auxiliary bus: add device creation helper Jerome Brunet
2024-12-10 14:05 ` Greg Kroah-Hartman [this message]
2024-12-10 14:34 ` Jerome Brunet
2024-12-10 14:42 ` 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=2024121048-latticed-etching-8961@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=arnd@arndb.de \
--cc=david.m.ertman@intel.com \
--cc=ira.weiny@intel.com \
--cc=jbrunet@baylibre.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=sboyd@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.