Re: [PATCH v7 2/4] gadget: Support for the usb charger framework
Hi Baolin, [auto build test WARNING on v4.5-rc7] [also build test WARNING on next-20160316] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Baolin-Wang/Introduce-usb-charger-framework-to-deal-with-the-usb-gadget-power-negotation/20160316-195102 reproduce: make htmldocs All warnings (new ones prefixed by >>): include/linux/usb/gadget.h:228: warning: No description found for parameter 'claimed' include/linux/usb/gadget.h:228: warning: No description found for parameter 'enabled' >> include/linux/usb/gadget.h:656: warning: No description found for parameter >> 'charger' include/linux/usb/gadget.h:656: warning: No description found for parameter 'quirk_altset_not_supp' include/linux/usb/gadget.h:656: warning: No description found for parameter 'quirk_stall_not_supp' include/linux/usb/gadget.h:656: warning: No description found for parameter 'quirk_zlp_not_supp' include/linux/usb/composite.h:501: warning: Excess struct/union/enum/typedef member 'setup_pending' description in 'usb_composite_dev' include/linux/usb/composite.h:501: warning: Excess struct/union/enum/typedef member 'os_desc_pending' description in 'usb_composite_dev' drivers/usb/gadget/function/f_acm.c:1: warning: no structured comments found drivers/usb/gadget/function/f_ecm.c:1: warning: no structured comments found drivers/usb/gadget/function/f_subset.c:1: warning: no structured comments found drivers/usb/gadget/function/f_obex.c:1: warning: no structured comments found drivers/usb/gadget/function/f_serial.c:1: warning: no structured comments found vim +/charger +656 include/linux/usb/gadget.h 77e9162f include/linux/usb/gadget.h Baolin Wang 2016-03-16 640 /* negotiate the power with the usb charger */ 77e9162f include/linux/usb/gadget.h Baolin Wang 2016-03-16 641 struct usb_charger *charger; d8318d7f include/linux/usb/gadget.h David Cohen 2013-12-09 642 898c6086 include/linux/usb/gadget.h Felipe Balbi2011-11-22 643 unsignedsg_supported:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 644 unsignedis_otg:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 645 unsignedis_a_peripheral:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 646 unsignedb_hnp_enable:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 647 unsigneda_hnp_support:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 648 unsigneda_alt_hnp_support:1; 0b2d2bba include/linux/usb/gadget.h David Cohen 2013-12-09 649 unsignedquirk_ep_out_aligned_size:1; ffd9a0fc include/linux/usb/gadget.h Robert Baldyga 2015-07-28 650 unsignedquirk_altset_not_supp:1; 02ded1b0 include/linux/usb/gadget.h Robert Baldyga 2015-07-28 651 unsignedquirk_stall_not_supp:1; ca1023c8 include/linux/usb/gadget.h Robert Baldyga 2015-07-28 652 unsignedquirk_zlp_not_supp:1; 80b2502c include/linux/usb/gadget.h Peter Chen 2015-01-28 653 unsignedis_selfpowered:1; ccdf138f include/linux/usb/gadget.h Robert Baldyga 2015-05-04 654 unsigneddeactivated:1; ccdf138f include/linux/usb/gadget.h Robert Baldyga 2015-05-04 655 unsignedconnected:1; ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 @656 }; 5702f753 include/linux/usb/gadget.h Felipe Balbi2013-07-17 657 #define work_to_gadget(w) (container_of((w), struct usb_gadget, work)) ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 658 ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 659 static inline void set_gadget_data(struct usb_gadget *gadget, void *data) ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 660 { dev_set_drvdata(>dev, data); } ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 661 static inline void *get_gadget_data(struct usb_gadget *gadget) ^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 662 { return dev_get_drvdata(>dev); } f48cf80f include/linux/usb/gadget.h Fabien Chouteau 2010-04-23 663 static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev) f48cf80f include/linux/usb/gadget.h Fabien Chouteau 2010-04-23 664 { :: The code at line 656 was first introduced by commit :: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :: TO: Linus Torvalds:: CC: Linus Torvalds --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all
Re: [PATCH v7 2/4] gadget: Support for the usb charger framework
Hi Baolin, [auto build test ERROR on v4.5-rc7] [also build test ERROR on next-20160316] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Baolin-Wang/Introduce-usb-charger-framework-to-deal-with-the-usb-gadget-power-negotation/20160316-195102 config: x86_64-allmodconfig (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): >> ERROR: "usb_charger_init" [drivers/usb/gadget/udc/udc-core.ko] undefined! >> ERROR: "usb_charger_plug_by_gadget" [drivers/usb/gadget/udc/udc-core.ko] >> undefined! >> ERROR: "usb_charger_exit" [drivers/usb/gadget/udc/udc-core.ko] undefined! >> ERROR: "usb_charger_set_cur_limit_by_type" >> [drivers/usb/gadget/libcomposite.ko] undefined! >> ERROR: "usb_charger_detect_type" [drivers/usb/gadget/libcomposite.ko] >> undefined! >> ERROR: "usb_charger_set_cur_limit_by_type" >> [drivers/usb/gadget/legacy/gadgetfs.ko] undefined! >> ERROR: "usb_charger_detect_type" [drivers/usb/gadget/legacy/gadgetfs.ko] >> undefined! --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
[PATCH v7 2/4] gadget: Support for the usb charger framework
For supporting the usb charger, it adds the usb_charger_init() and usb_charger_exit() functions for usb charger initialization and exit. It will report to the usb charger when the gadget state is changed, then the usb charger can do the power things. Introduce a callback 'get_charger_type' which will implemented by user for usb gadget operations to get the usb charger type. Signed-off-by: Baolin Wang--- drivers/usb/gadget/udc/udc-core.c | 11 +++ include/linux/usb/gadget.h| 11 +++ 2 files changed, 22 insertions(+) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index f660afb..2727f01 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -28,6 +28,7 @@ #include #include #include +#include /** * struct usb_udc - describes one usb device controller @@ -226,6 +227,9 @@ static void usb_gadget_state_work(struct work_struct *work) struct usb_gadget *gadget = work_to_gadget(work); struct usb_udc *udc = gadget->udc; + /* when the gadget state is changed, then report to USB charger */ + usb_charger_plug_by_gadget(gadget, gadget->state); + if (udc) sysfs_notify(>dev.kobj, NULL, "state"); } @@ -405,8 +409,14 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, mutex_unlock(_lock); + ret = usb_charger_init(gadget); + if (ret) + goto err5; + return 0; +err5: + device_del(>dev); err4: list_del(>list); mutex_unlock(_lock); @@ -481,6 +491,7 @@ void usb_del_gadget_udc(struct usb_gadget *gadget) kobject_uevent(>dev.kobj, KOBJ_REMOVE); flush_work(>work); device_unregister(>dev); + usb_charger_exit(gadget); device_unregister(>dev); } EXPORT_SYMBOL_GPL(usb_del_gadget_udc); diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 3d583a1..52c19b1 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -24,6 +24,7 @@ #include #include #include +#include struct usb_ep; @@ -560,6 +561,7 @@ struct usb_gadget_ops { struct usb_ep *(*match_ep)(struct usb_gadget *, struct usb_endpoint_descriptor *, struct usb_ss_ep_comp_descriptor *); + enum usb_charger_type (*get_charger_type)(struct usb_gadget *); }; /** @@ -632,6 +634,8 @@ struct usb_gadget { unsignedout_epnum; unsignedin_epnum; struct usb_otg_caps *otg_caps; + /* negotiate the power with the usb charger */ + struct usb_charger *charger; unsignedsg_supported:1; unsignedis_otg:1; @@ -836,10 +840,17 @@ static inline int usb_gadget_vbus_connect(struct usb_gadget *gadget) * reporting how much power the device may consume. For example, this * could affect how quickly batteries are recharged. * + * It will also notify the USB charger how much power the device may + * consume if there is a USB charger linking with the gadget. + * * Returns zero on success, else negative errno. */ static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA) { + if (gadget->charger) + usb_charger_set_cur_limit_by_type(gadget->charger, + usb_charger_detect_type(gadget->charger), mA); + if (!gadget->ops->vbus_draw) return -EOPNOTSUPP; return gadget->ops->vbus_draw(gadget, mA); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v7 2/4] gadget: Support for the usb charger framework
For supporting the usb charger, it adds the usb_charger_init() and usb_charger_exit() functions for usb charger initialization and exit. It will report to the usb charger when the gadget state is changed, then the usb charger can do the power things. Introduce a callback 'get_charger_type' which will implemented by user for usb gadget operations to get the usb charger type. Signed-off-by: Baolin Wang--- drivers/usb/gadget/udc/udc-core.c | 11 +++ include/linux/usb/gadget.h| 11 +++ 2 files changed, 22 insertions(+) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index f660afb..2727f01 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -28,6 +28,7 @@ #include #include #include +#include /** * struct usb_udc - describes one usb device controller @@ -226,6 +227,9 @@ static void usb_gadget_state_work(struct work_struct *work) struct usb_gadget *gadget = work_to_gadget(work); struct usb_udc *udc = gadget->udc; + /* when the gadget state is changed, then report to USB charger */ + usb_charger_plug_by_gadget(gadget, gadget->state); + if (udc) sysfs_notify(>dev.kobj, NULL, "state"); } @@ -405,8 +409,14 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, mutex_unlock(_lock); + ret = usb_charger_init(gadget); + if (ret) + goto err5; + return 0; +err5: + device_del(>dev); err4: list_del(>list); mutex_unlock(_lock); @@ -481,6 +491,7 @@ void usb_del_gadget_udc(struct usb_gadget *gadget) kobject_uevent(>dev.kobj, KOBJ_REMOVE); flush_work(>work); device_unregister(>dev); + usb_charger_exit(gadget); device_unregister(>dev); } EXPORT_SYMBOL_GPL(usb_del_gadget_udc); diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 3d583a1..52c19b1 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -24,6 +24,7 @@ #include #include #include +#include struct usb_ep; @@ -560,6 +561,7 @@ struct usb_gadget_ops { struct usb_ep *(*match_ep)(struct usb_gadget *, struct usb_endpoint_descriptor *, struct usb_ss_ep_comp_descriptor *); + enum usb_charger_type (*get_charger_type)(struct usb_gadget *); }; /** @@ -632,6 +634,8 @@ struct usb_gadget { unsignedout_epnum; unsignedin_epnum; struct usb_otg_caps *otg_caps; + /* negotiate the power with the usb charger */ + struct usb_charger *charger; unsignedsg_supported:1; unsignedis_otg:1; @@ -836,10 +840,17 @@ static inline int usb_gadget_vbus_connect(struct usb_gadget *gadget) * reporting how much power the device may consume. For example, this * could affect how quickly batteries are recharged. * + * It will also notify the USB charger how much power the device may + * consume if there is a USB charger linking with the gadget. + * * Returns zero on success, else negative errno. */ static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA) { + if (gadget->charger) + usb_charger_set_cur_limit_by_type(gadget->charger, + usb_charger_detect_type(gadget->charger), mA); + if (!gadget->ops->vbus_draw) return -EOPNOTSUPP; return gadget->ops->vbus_draw(gadget, mA); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v7 2/4] gadget: Support for the usb charger framework
Hi Baolin, [auto build test ERROR on balbi-usb/next] [also build test ERROR on v4.4-rc4 next-20151208] url: https://github.com/0day-ci/linux/commits/Baolin-Wang/gadget-Introduce-the-usb-charger-framework/20151208-163942 base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next config: m68k-allmodconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=m68k All errors (new ones prefixed by >>): ERROR: "usb_charger_init" [drivers/usb/gadget/udc/udc-core.ko] undefined! ERROR: "usb_charger_plug_by_gadget" [drivers/usb/gadget/udc/udc-core.ko] undefined! ERROR: "usb_charger_exit" [drivers/usb/gadget/udc/udc-core.ko] undefined! ERROR: "usb_charger_set_cur_limit_by_type" [drivers/usb/gadget/libcomposite.ko] undefined! >> ERROR: "usb_charger_detect_type" [drivers/usb/gadget/libcomposite.ko] >> undefined! ERROR: "usb_charger_set_cur_limit_by_type" [drivers/usb/gadget/legacy/gadgetfs.ko] undefined! >> ERROR: "usb_charger_detect_type" [drivers/usb/gadget/legacy/gadgetfs.ko] >> undefined! --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data