From: Jonathan Corbet <corbet@lwn.net>
To: Philipp Hortmann <philipp.g.hortmann@gmail.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: linux-usb@vger.kernel.org
Subject: Re: [PATCH] Docs: usb: update struct usb_driver, __init and __exit
Date: Tue, 19 Oct 2021 15:17:51 -0600 [thread overview]
Message-ID: <87h7dcsohs.fsf@meer.lwn.net> (raw)
In-Reply-To: <20211017214948.GA9901@matrix-ESPRIMO-P710>
Philipp Hortmann <philipp.g.hortmann@gmail.com> writes:
> update struct usb_driver from usb-skeleton.c.
> update __init and __exit functions that are moved from
> usb-skeleton.c to common used multi-stage macros.
>
> Signed-off-by: Philipp Hortmann <philipp.g.hortmann@gmail.com>
> ---
> .../driver-api/usb/writing_usb_driver.rst | 51 +++++++------------
> 1 file changed, 19 insertions(+), 32 deletions(-)
Adding linux-usb: this seems like a reasonable change (though see
below), but the USB folks should have a chance to look it over too.
> diff --git a/Documentation/driver-api/usb/writing_usb_driver.rst b/Documentation/driver-api/usb/writing_usb_driver.rst
> index 2176297e5765..1064adf79ccb 100644
> --- a/Documentation/driver-api/usb/writing_usb_driver.rst
> +++ b/Documentation/driver-api/usb/writing_usb_driver.rst
> @@ -54,12 +54,15 @@ information is passed to the USB subsystem in the :c:type:`usb_driver`
> structure. The skeleton driver declares a :c:type:`usb_driver` as::
>
> static struct usb_driver skel_driver = {
> - .name = "skeleton",
> - .probe = skel_probe,
> - .disconnect = skel_disconnect,
> - .fops = &skel_fops,
> - .minor = USB_SKEL_MINOR_BASE,
> - .id_table = skel_table,
> + .name = "skeleton",
> + .probe = skel_probe,
> + .disconnect = skel_disconnect,
> + .suspend = skel_suspend,
> + .resume = skel_resume,
> + .pre_reset = skel_pre_reset,
> + .post_reset = skel_post_reset,
> + .id_table = skel_table,
> + .supports_autosuspend = 1,
> };
>
>
> @@ -81,36 +84,20 @@ this user-space interaction. The skeleton driver needs this kind of
> interface, so it provides a minor starting number and a pointer to its
> :c:type:`file_operations` functions.
>
> -The USB driver is then registered with a call to :c:func:`usb_register`,
> -usually in the driver's init function, as shown here::
> -
> - static int __init usb_skel_init(void)
> - {
> - int result;
> -
> - /* register this driver with the USB subsystem */
> - result = usb_register(&skel_driver);
> - if (result < 0) {
> - err("usb_register failed for the "__FILE__ "driver."
> - "Error number %d", result);
> - return -1;
> - }
> -
> - return 0;
> - }
> - module_init(usb_skel_init);
> -
> +The USB driver is then registered with a call to :c:func:`usb_register`
We shouldn't be using :c:func: anymore; just say usb_register() and the
right things will happen. Definitely worth fixing while you are in the
neighborhood.
> +which is usually in the driver's init function. Since this functionality
> +is usable with many USB drivers, it is hidden behind multi-stage macros.
> +While the first macros are USB specific the later macros are used in different
> +subsystems. This removes a lot of boilerplate code.
>
> When the driver is unloaded from the system, it needs to deregister
> itself with the USB subsystem. This is done with the :c:func:`usb_deregister`
> -function::
> +which is also hidden behind multi-stage macros.
If you're making this change, take out "the" (as well as :c:func:).
> - static void __exit usb_skel_exit(void)
> - {
> - /* deregister this driver with the USB subsystem */
> - usb_deregister(&skel_driver);
> - }
> - module_exit(usb_skel_exit);
> +The init and exit functions are included in the macro :
> +module_usb_driver(skel_driver);
> +which is in the first stage replaced by:
> +module_driver(__usb_driver, usb_register, usb_deregister)
This will not render the way you want; consider using literal blocks
here.
Thanks,
jon
prev parent reply other threads:[~2021-10-19 21:17 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-17 21:49 [PATCH] Docs: usb: update struct usb_driver, __init and __exit Philipp Hortmann
2021-10-19 21:17 ` Jonathan Corbet [this message]
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=87h7dcsohs.fsf@meer.lwn.net \
--to=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=philipp.g.hortmann@gmail.com \
/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.