From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Yu Chen <chenyu56@huawei.com>
Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, john.stultz@linaro.org,
suzhuangluan@hisilicon.com, kongfei@hisilicon.com,
liuyu712@hisilicon.com, wanghu17@hisilicon.com,
butao@hisilicon.com, chenyao11@huawei.com,
fangshengzhou@hisilicon.com, lipengcheng8@huawei.com,
songxiaowei@hisilicon.com, xuyiping@hisilicon.com,
xuyoujun4@huawei.com, yudongbin@hisilicon.com,
zangleigang@hisilicon.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hans de Goede <hdegoede@redhat.com>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: [v4,08/12] usb: roles: Add usb role switch notifier.
Date: Tue, 19 Mar 2019 13:56:51 +0200 [thread overview]
Message-ID: <20190319115651.GT7752@kuha.fi.intel.com> (raw)
On Sat, Mar 16, 2019 at 11:53:38AM +0800, Yu Chen wrote:
> This patch adds notifier for drivers want to be informed of the usb role switch.
>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: John Stultz <john.stultz@linaro.org>
> Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Yu Chen <chenyu56@huawei.com>
> ---
> drivers/usb/roles/class.c | 20 +++++++++++++++++++-
> include/linux/usb/role.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 65 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
> index f45d8df5cfb8..e2caaa665d6e 100644
> --- a/drivers/usb/roles/class.c
> +++ b/drivers/usb/roles/class.c
> @@ -20,6 +20,7 @@ struct usb_role_switch {
> struct device dev;
> struct mutex lock; /* device lock*/
> enum usb_role role;
> + struct blocking_notifier_head nh;
>
> /* From descriptor */
> struct device *usb2_port;
> @@ -49,8 +50,10 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role)
> mutex_lock(&sw->lock);
>
> ret = sw->set(sw->dev.parent, role);
> - if (!ret)
> + if (!ret) {
> sw->role = role;
> + blocking_notifier_call_chain(&sw->nh, role, NULL);
> + }
>
> mutex_unlock(&sw->lock);
>
> @@ -58,6 +61,20 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role)
> }
> EXPORT_SYMBOL_GPL(usb_role_switch_set_role);
>
> +int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return blocking_notifier_chain_register(&sw->nh, nb);
> +}
> +EXPORT_SYMBOL_GPL(usb_role_switch_register_notifier);
> +
> +int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return blocking_notifier_chain_unregister(&sw->nh, nb);
> +}
> +EXPORT_SYMBOL_GPL(usb_role_switch_unregister_notifier);
> +
> /**
> * usb_role_switch_get_role - Get the USB role for a switch
> * @sw: USB role switch
> @@ -271,6 +288,7 @@ usb_role_switch_register(struct device *parent,
> return ERR_PTR(-ENOMEM);
>
> mutex_init(&sw->lock);
> + BLOCKING_INIT_NOTIFIER_HEAD(&sw->nh);
>
> sw->allow_userspace_control = desc->allow_userspace_control;
> sw->usb2_port = desc->usb2_port;
> diff --git a/include/linux/usb/role.h b/include/linux/usb/role.h
> index c05ffa6abda9..99d8b8e4fe61 100644
> --- a/include/linux/usb/role.h
> +++ b/include/linux/usb/role.h
> @@ -42,6 +42,8 @@ struct usb_role_switch_desc {
> bool allow_userspace_control;
> };
>
> +
> +#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
> int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role);
> enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw);
> struct usb_role_switch *usb_role_switch_get(struct device *dev);
> @@ -51,5 +53,49 @@ struct usb_role_switch *
> usb_role_switch_register(struct device *parent,
> const struct usb_role_switch_desc *desc);
> void usb_role_switch_unregister(struct usb_role_switch *sw);
> +int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb);
> +int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb);
> +#else
> +static inline int usb_role_switch_set_role(struct usb_role_switch *sw,
> + enum usb_role role)
> +{
> + return 0;
> +}
> +
> +static inline enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
> +{
> + return USB_ROLE_NONE;
> +}
> +
> +static inline struct usb_role_switch *usb_role_switch_get(struct device *dev)
> +{
> + return ERR_PTR(-ENODEV);
> +}
> +
> +static inline void usb_role_switch_put(struct usb_role_switch *sw) { }
> +
> +static inline struct usb_role_switch *
> +usb_role_switch_register(struct device *parent,
> + const struct usb_role_switch_desc *desc)
> +{
> + return ERR_PTR(-ENODEV);
> +}
> +
> +static inline void usb_role_switch_unregister(struct usb_role_switch *sw) { }
> +
> +static int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return -ENODEV;
> +}
> +
> +static int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return -ENODEV;
> +}
> +#endif
>
> #endif /* __LINUX_USB_ROLE_H */
Sorry for the late response, but since you are providing a stub for
all the functions, not just the new ones, could you please introduce
them in a separate patch.
Add a patch where you introduce stubs for the exiting functions, and
this patch can then add the stubs for just the new notifier functions.
thanks,
WARNING: multiple messages have this Message-ID (diff)
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Yu Chen <chenyu56@huawei.com>
Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, john.stultz@linaro.org,
suzhuangluan@hisilicon.com, kongfei@hisilicon.com,
liuyu712@hisilicon.com, wanghu17@hisilicon.com,
butao@hisilicon.com, chenyao11@huawei.com,
fangshengzhou@hisilicon.com, lipengcheng8@huawei.com,
songxiaowei@hisilicon.com, xuyiping@hisilicon.com,
xuyoujun4@huawei.com, yudongbin@hisilicon.com,
zangleigang@hisilicon.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hans de Goede <hdegoede@redhat.com>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: Re: [PATCH v4 08/12] usb: roles: Add usb role switch notifier.
Date: Tue, 19 Mar 2019 13:56:51 +0200 [thread overview]
Message-ID: <20190319115651.GT7752@kuha.fi.intel.com> (raw)
In-Reply-To: <20190316035342.77998-9-chenyu56@huawei.com>
On Sat, Mar 16, 2019 at 11:53:38AM +0800, Yu Chen wrote:
> This patch adds notifier for drivers want to be informed of the usb role switch.
>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: John Stultz <john.stultz@linaro.org>
> Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Signed-off-by: Yu Chen <chenyu56@huawei.com>
> ---
> drivers/usb/roles/class.c | 20 +++++++++++++++++++-
> include/linux/usb/role.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 65 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
> index f45d8df5cfb8..e2caaa665d6e 100644
> --- a/drivers/usb/roles/class.c
> +++ b/drivers/usb/roles/class.c
> @@ -20,6 +20,7 @@ struct usb_role_switch {
> struct device dev;
> struct mutex lock; /* device lock*/
> enum usb_role role;
> + struct blocking_notifier_head nh;
>
> /* From descriptor */
> struct device *usb2_port;
> @@ -49,8 +50,10 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role)
> mutex_lock(&sw->lock);
>
> ret = sw->set(sw->dev.parent, role);
> - if (!ret)
> + if (!ret) {
> sw->role = role;
> + blocking_notifier_call_chain(&sw->nh, role, NULL);
> + }
>
> mutex_unlock(&sw->lock);
>
> @@ -58,6 +61,20 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role)
> }
> EXPORT_SYMBOL_GPL(usb_role_switch_set_role);
>
> +int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return blocking_notifier_chain_register(&sw->nh, nb);
> +}
> +EXPORT_SYMBOL_GPL(usb_role_switch_register_notifier);
> +
> +int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return blocking_notifier_chain_unregister(&sw->nh, nb);
> +}
> +EXPORT_SYMBOL_GPL(usb_role_switch_unregister_notifier);
> +
> /**
> * usb_role_switch_get_role - Get the USB role for a switch
> * @sw: USB role switch
> @@ -271,6 +288,7 @@ usb_role_switch_register(struct device *parent,
> return ERR_PTR(-ENOMEM);
>
> mutex_init(&sw->lock);
> + BLOCKING_INIT_NOTIFIER_HEAD(&sw->nh);
>
> sw->allow_userspace_control = desc->allow_userspace_control;
> sw->usb2_port = desc->usb2_port;
> diff --git a/include/linux/usb/role.h b/include/linux/usb/role.h
> index c05ffa6abda9..99d8b8e4fe61 100644
> --- a/include/linux/usb/role.h
> +++ b/include/linux/usb/role.h
> @@ -42,6 +42,8 @@ struct usb_role_switch_desc {
> bool allow_userspace_control;
> };
>
> +
> +#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
> int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role);
> enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw);
> struct usb_role_switch *usb_role_switch_get(struct device *dev);
> @@ -51,5 +53,49 @@ struct usb_role_switch *
> usb_role_switch_register(struct device *parent,
> const struct usb_role_switch_desc *desc);
> void usb_role_switch_unregister(struct usb_role_switch *sw);
> +int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb);
> +int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb);
> +#else
> +static inline int usb_role_switch_set_role(struct usb_role_switch *sw,
> + enum usb_role role)
> +{
> + return 0;
> +}
> +
> +static inline enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
> +{
> + return USB_ROLE_NONE;
> +}
> +
> +static inline struct usb_role_switch *usb_role_switch_get(struct device *dev)
> +{
> + return ERR_PTR(-ENODEV);
> +}
> +
> +static inline void usb_role_switch_put(struct usb_role_switch *sw) { }
> +
> +static inline struct usb_role_switch *
> +usb_role_switch_register(struct device *parent,
> + const struct usb_role_switch_desc *desc)
> +{
> + return ERR_PTR(-ENODEV);
> +}
> +
> +static inline void usb_role_switch_unregister(struct usb_role_switch *sw) { }
> +
> +static int usb_role_switch_register_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return -ENODEV;
> +}
> +
> +static int usb_role_switch_unregister_notifier(struct usb_role_switch *sw,
> + struct notifier_block *nb)
> +{
> + return -ENODEV;
> +}
> +#endif
>
> #endif /* __LINUX_USB_ROLE_H */
Sorry for the late response, but since you are providing a stub for
all the functions, not just the new ones, could you please introduce
them in a separate patch.
Add a patch where you introduce stubs for the exiting functions, and
this patch can then add the stubs for just the new notifier functions.
thanks,
--
heikki
next reply other threads:[~2019-03-19 11:56 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-19 11:56 Heikki Krogerus [this message]
2019-03-19 11:56 ` [PATCH v4 08/12] usb: roles: Add usb role switch notifier Heikki Krogerus
-- strict thread matches above, loose matches on Subject: below --
2019-03-28 17:11 [v4,01/12] dt-bindings: phy: Add support for HiSilicon's hi3660 USB PHY Rob Herring
2019-03-28 17:11 ` [PATCH v4 01/12] " Rob Herring
2019-03-28 17:11 ` Rob Herring
2019-03-19 12:07 [v4,08/12] usb: roles: Add usb role switch notifier Yu Chen
2019-03-19 12:07 ` [PATCH v4 08/12] " Chen Yu
2019-03-19 12:07 ` Chen Yu
2019-03-16 11:28 [v4,10/12] hikey960: Support usb functionality of Hikey960 Andy Shevchenko
2019-03-16 11:28 ` [PATCH v4 10/12] " Andy Shevchenko
2019-03-16 3:53 [v4,12/12] dts: hi3660: Add support for usb on Hikey960 Yu Chen
2019-03-16 3:53 ` [PATCH v4 12/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,11/12] usb: gadget: Add configfs attribuite for controling match_existing_only Yu Chen
2019-03-16 3:53 ` [PATCH v4 11/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,10/12] hikey960: Support usb functionality of Hikey960 Yu Chen
2019-03-16 3:53 ` [PATCH v4 10/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,09/12] usb: dwc3: Registering a role switch in the DRD code Yu Chen
2019-03-16 3:53 ` [PATCH v4 09/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,08/12] usb: roles: Add usb role switch notifier Yu Chen
2019-03-16 3:53 ` [PATCH v4 08/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,07/12] phy: Add usb phy support for hi3660 Soc of Hisilicon Yu Chen
2019-03-16 3:53 ` [PATCH v4 07/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,06/12] usb: dwc3: Increase timeout for CmdAct cleared by device controller Yu Chen
2019-03-16 3:53 ` [PATCH v4 06/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,05/12] usb: dwc3: Execute GCTL Core Soft Reset while switch mdoe for Hisilicon Kirin Soc Yu Chen
2019-03-16 3:53 ` [PATCH v4 05/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,04/12] usb: dwc3: Add splitdisable quirk " Yu Chen
2019-03-16 3:53 ` [PATCH v4 04/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,03/12] usb: dwc3: dwc3-of-simple: Add support for dwc3 of Hisilicon Soc Platform Yu Chen
2019-03-16 3:53 ` [PATCH v4 03/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,02/12] dt-bindings: misc: Add bindings for HiSilicon usb hub and data role switch functionality on HiKey960 Yu Chen
2019-03-16 3:53 ` [PATCH v4 02/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [v4,01/12] dt-bindings: phy: Add support for HiSilicon's hi3660 USB PHY Yu Chen
2019-03-16 3:53 ` [PATCH v4 01/12] " Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-16 3:53 [PATCH v4 00/12] Add support for usb on Hikey960 Yu Chen
2019-03-16 3:53 ` Yu Chen
2019-03-20 16:35 ` Valentin Schneider
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=20190319115651.GT7752@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=andy.shevchenko@gmail.com \
--cc=butao@hisilicon.com \
--cc=chenyao11@huawei.com \
--cc=chenyu56@huawei.com \
--cc=devicetree@vger.kernel.org \
--cc=fangshengzhou@hisilicon.com \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=john.stultz@linaro.org \
--cc=kongfei@hisilicon.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=lipengcheng8@huawei.com \
--cc=liuyu712@hisilicon.com \
--cc=songxiaowei@hisilicon.com \
--cc=suzhuangluan@hisilicon.com \
--cc=wanghu17@hisilicon.com \
--cc=xuyiping@hisilicon.com \
--cc=xuyoujun4@huawei.com \
--cc=yudongbin@hisilicon.com \
--cc=zangleigang@hisilicon.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.