From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07443C43381 for ; Fri, 29 Mar 2019 04:14:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D41D52186A for ; Fri, 29 Mar 2019 04:14:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728701AbfC2EOi (ORCPT ); Fri, 29 Mar 2019 00:14:38 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:48888 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728648AbfC2EOh (ORCPT ); Fri, 29 Mar 2019 00:14:37 -0400 Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 245AD403303FE242CEBD; Fri, 29 Mar 2019 12:14:35 +0800 (CST) Received: from vm100-107-113-134.huawei.com (100.107.113.134) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.408.0; Fri, 29 Mar 2019 12:14:24 +0800 From: Yu Chen To: , , CC: , , , , , , , , , , , , , , Yu Chen , "Greg Kroah-Hartman" , Heikki Krogerus , Hans de Goede , "Andy Shevchenko" Subject: [PATCH v5 09/13] usb: roles: Add usb role switch notifier. Date: Fri, 29 Mar 2019 12:14:05 +0800 Message-ID: <20190329041409.70138-10-chenyu56@huawei.com> X-Mailer: git-send-email 2.15.0-rc2 In-Reply-To: <20190329041409.70138-1-chenyu56@huawei.com> References: <20190329041409.70138-1-chenyu56@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [100.107.113.134] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds notifier for drivers want to be informed of the usb role switch. Cc: Greg Kroah-Hartman Cc: Heikki Krogerus Cc: Hans de Goede Cc: Andy Shevchenko Cc: John Stultz Suggested-by: Heikki Krogerus Signed-off-by: Yu Chen --- v5: * Split the patch into two patches, the first one introduces stubs for the exiting functions, and this patch adds notifier functions. --- --- drivers/usb/roles/class.c | 20 +++++++++++++++++++- include/linux/usb/role.h | 16 ++++++++++++++++ 2 files changed, 35 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 da2b9641b877..99d8b8e4fe61 100644 --- a/include/linux/usb/role.h +++ b/include/linux/usb/role.h @@ -53,6 +53,10 @@ 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) @@ -80,6 +84,18 @@ usb_role_switch_register(struct device *parent, } 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 */ -- 2.15.0-rc2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Chen Subject: [PATCH v5 09/13] usb: roles: Add usb role switch notifier. Date: Fri, 29 Mar 2019 12:14:05 +0800 Message-ID: <20190329041409.70138-10-chenyu56@huawei.com> References: <20190329041409.70138-1-chenyu56@huawei.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: <20190329041409.70138-1-chenyu56@huawei.com> Sender: linux-kernel-owner@vger.kernel.org To: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: 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, Yu Chen , Greg Kroah-Hartman , Heikki Krogerus , Hans de Goede , Andy Shevchenko List-Id: devicetree@vger.kernel.org This patch adds notifier for drivers want to be informed of the usb role switch. Cc: Greg Kroah-Hartman Cc: Heikki Krogerus Cc: Hans de Goede Cc: Andy Shevchenko Cc: John Stultz Suggested-by: Heikki Krogerus Signed-off-by: Yu Chen --- v5: * Split the patch into two patches, the first one introduces stubs for the exiting functions, and this patch adds notifier functions. --- --- drivers/usb/roles/class.c | 20 +++++++++++++++++++- include/linux/usb/role.h | 16 ++++++++++++++++ 2 files changed, 35 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 da2b9641b877..99d8b8e4fe61 100644 --- a/include/linux/usb/role.h +++ b/include/linux/usb/role.h @@ -53,6 +53,10 @@ 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) @@ -80,6 +84,18 @@ usb_role_switch_register(struct device *parent, } 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 */ -- 2.15.0-rc2 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,09/13] usb: roles: Add usb role switch notifier. From: Yu Chen Message-Id: <20190329041409.70138-10-chenyu56@huawei.com> Date: Fri, 29 Mar 2019 12:14:05 +0800 To: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: 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, Yu Chen , Greg Kroah-Hartman , Heikki Krogerus , Hans de Goede , Andy Shevchenko List-ID: VGhpcyBwYXRjaCBhZGRzIG5vdGlmaWVyIGZvciBkcml2ZXJzIHdhbnQgdG8gYmUgaW5mb3JtZWQg b2YgdGhlIHVzYiByb2xlCnN3aXRjaC4KCkNjOiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBs aW51eGZvdW5kYXRpb24ub3JnPgpDYzogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNA bGludXguaW50ZWwuY29tPgpDYzogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4K Q2M6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4KQ2M6IEpvaG4g U3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgpTdWdnZXN0ZWQtYnk6IEhlaWtraSBLcm9n ZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogWXUg Q2hlbiA8Y2hlbnl1NTZAaHVhd2VpLmNvbT4KLS0tCnY1OgoqIFNwbGl0IHRoZSBwYXRjaCBpbnRv IHR3byBwYXRjaGVzLCB0aGUgZmlyc3Qgb25lIGludHJvZHVjZXMgc3R1YnMgZm9yIHRoZQpleGl0 aW5nIGZ1bmN0aW9ucywgYW5kIHRoaXMgcGF0Y2ggYWRkcyBub3RpZmllciBmdW5jdGlvbnMuCi0t LQotLS0KIGRyaXZlcnMvdXNiL3JvbGVzL2NsYXNzLmMgfCAyMCArKysrKysrKysrKysrKysrKysr LQogaW5jbHVkZS9saW51eC91c2Ivcm9sZS5oICB8IDE2ICsrKysrKysrKysrKysrKysKIDIgZmls ZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL3JvbGVzL2NsYXNzLmMgYi9kcml2ZXJzL3VzYi9yb2xlcy9jbGFzcy5jCmlu ZGV4IGY0NWQ4ZGY1Y2ZiOC4uZTJjYWFhNjY1ZDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9y b2xlcy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvdXNiL3JvbGVzL2NsYXNzLmMKQEAgLTIwLDYgKzIw LDcgQEAgc3RydWN0IHVzYl9yb2xlX3N3aXRjaCB7CiAJc3RydWN0IGRldmljZSBkZXY7CiAJc3Ry dWN0IG11dGV4IGxvY2s7IC8qIGRldmljZSBsb2NrKi8KIAllbnVtIHVzYl9yb2xlIHJvbGU7CisJ c3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbmg7CiAKIAkvKiBGcm9tIGRlc2NyaXB0b3Ig Ki8KIAlzdHJ1Y3QgZGV2aWNlICp1c2IyX3BvcnQ7CkBAIC00OSw4ICs1MCwxMCBAQCBpbnQgdXNi X3JvbGVfc3dpdGNoX3NldF9yb2xlKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3LCBlbnVtIHVz Yl9yb2xlIHJvbGUpCiAJbXV0ZXhfbG9jaygmc3ctPmxvY2spOwogCiAJcmV0ID0gc3ctPnNldChz dy0+ZGV2LnBhcmVudCwgcm9sZSk7Ci0JaWYgKCFyZXQpCisJaWYgKCFyZXQpIHsKIAkJc3ctPnJv bGUgPSByb2xlOworCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZzdy0+bmgsIHJvbGUs IE5VTEwpOworCX0KIAogCW11dGV4X3VubG9jaygmc3ctPmxvY2spOwogCkBAIC01OCw2ICs2MSwy MCBAQCBpbnQgdXNiX3JvbGVfc3dpdGNoX3NldF9yb2xlKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2gg KnN3LCBlbnVtIHVzYl9yb2xlIHJvbGUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfcm9sZV9z d2l0Y2hfc2V0X3JvbGUpOwogCitpbnQgdXNiX3JvbGVfc3dpdGNoX3JlZ2lzdGVyX25vdGlmaWVy KHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3LAorCQkJCSAgICAgIHN0cnVjdCBub3RpZmllcl9i bG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZz dy0+bmgsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9yb2xlX3N3aXRjaF9yZWdpc3Rl cl9ub3RpZmllcik7CisKK2ludCB1c2Jfcm9sZV9zd2l0Y2hfdW5yZWdpc3Rlcl9ub3RpZmllcihz dHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpzdywKKwkJCQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpu YikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmc3ctPm5o LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfcm9sZV9zd2l0Y2hfdW5yZWdpc3Rlcl9u b3RpZmllcik7CisKIC8qKgogICogdXNiX3JvbGVfc3dpdGNoX2dldF9yb2xlIC0gR2V0IHRoZSBV U0Igcm9sZSBmb3IgYSBzd2l0Y2gKICAqIEBzdzogVVNCIHJvbGUgc3dpdGNoCkBAIC0yNzEsNiAr Mjg4LDcgQEAgdXNiX3JvbGVfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwK IAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAltdXRleF9pbml0KCZzdy0+bG9jayk7CisJ QkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZzdy0+bmgpOwogCiAJc3ctPmFsbG93X3VzZXJz cGFjZV9jb250cm9sID0gZGVzYy0+YWxsb3dfdXNlcnNwYWNlX2NvbnRyb2w7CiAJc3ctPnVzYjJf cG9ydCA9IGRlc2MtPnVzYjJfcG9ydDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3Jv bGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL3JvbGUuaAppbmRleCBkYTJiOTY0MWI4NzcuLjk5ZDhi OGU0ZmU2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm9sZS5oCisrKyBiL2luY2x1 ZGUvbGludXgvdXNiL3JvbGUuaApAQCAtNTMsNiArNTMsMTAgQEAgc3RydWN0IHVzYl9yb2xlX3N3 aXRjaCAqCiB1c2Jfcm9sZV9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAog CQkJIGNvbnN0IHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hfZGVzYyAqZGVzYyk7CiB2b2lkIHVzYl9y b2xlX3N3aXRjaF91bnJlZ2lzdGVyKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3KTsKK2ludCB1 c2Jfcm9sZV9zd2l0Y2hfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IHVzYl9yb2xlX3N3aXRjaCAq c3csCisJCQkJICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitpbnQgdXNiX3JvbGVf c3dpdGNoX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IHVzYl9yb2xlX3N3aXRjaCAqc3csCisJ CQkJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50 IHVzYl9yb2xlX3N3aXRjaF9zZXRfcm9sZShzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpzdywKIAkJ ZW51bSB1c2Jfcm9sZSByb2xlKQpAQCAtODAsNiArODQsMTggQEAgdXNiX3JvbGVfc3dpdGNoX3Jl Z2lzdGVyKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVz Yl9yb2xlX3N3aXRjaF91bnJlZ2lzdGVyKHN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2ggKnN3KSB7IH0K Kworc3RhdGljIGludCB1c2Jfcm9sZV9zd2l0Y2hfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IHVz Yl9yb2xlX3N3aXRjaCAqc3csCisJCQkJICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikK K3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCB1c2Jfcm9sZV9zd2l0Y2hfdW5y ZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoICpzdywKKwkJCQkJc3RydWN0 IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KICNlbmRpZgogCiAj ZW5kaWYgLyogX19MSU5VWF9VU0JfUk9MRV9IICovCg==