Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1358911 > unrolled thread
| Started by | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| First post | 2016-03-16 12:50 +0100 |
| Last post | 2016-03-16 14:00 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v7 2/4] gadget: Support for the usb charger framework Baolin Wang <baolin.wang@linaro.org> - 2016-03-16 12:50 +0100
Re: [PATCH v7 2/4] gadget: Support for the usb charger framework kbuild test robot <lkp@intel.com> - 2016-03-16 14:00 +0100
| From | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| Date | 2016-03-16 12:50 +0100 |
| Subject | [PATCH v7 2/4] gadget: Support for the usb charger framework |
| Message-ID | <rdi7E-8pT-11@gated-at.bofh.it> |
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 <baolin.wang@linaro.org>
---
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 fd73a3e..1ac2b40 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -28,6 +28,7 @@
#include <linux/usb/ch9.h>
#include <linux/usb/gadget.h>
#include <linux/usb.h>
+#include <linux/usb/usb_charger.h>
/**
* struct usb_udc - describes one usb device controller
@@ -230,6 +231,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(&udc->dev.kobj, NULL, "state");
}
@@ -422,8 +426,14 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
mutex_unlock(&udc_lock);
+ ret = usb_charger_init(gadget);
+ if (ret)
+ goto err5;
+
return 0;
+err5:
+ device_del(&udc->dev);
err4:
list_del(&udc->list);
mutex_unlock(&udc_lock);
@@ -502,6 +512,7 @@ void usb_del_gadget_udc(struct usb_gadget *gadget)
kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE);
flush_work(&gadget->work);
device_unregister(&udc->dev);
+ usb_charger_exit(gadget);
device_unregister(&gadget->dev);
}
EXPORT_SYMBOL_GPL(usb_del_gadget_udc);
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index d82d006..024b33d 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -24,6 +24,7 @@
#include <linux/types.h>
#include <linux/workqueue.h>
#include <linux/usb/ch9.h>
+#include <linux/usb/usb_charger.h>
struct usb_ep;
@@ -563,6 +564,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 *);
};
/**
@@ -635,6 +637,8 @@ struct usb_gadget {
unsigned out_epnum;
unsigned in_epnum;
struct usb_otg_caps *otg_caps;
+ /* negotiate the power with the usb charger */
+ struct usb_charger *charger;
unsigned sg_supported:1;
unsigned is_otg:1;
@@ -839,10 +843,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
[toc] | [next] | [standalone]
| From | kbuild test robot <lkp@intel.com> |
|---|---|
| Date | 2016-03-16 14:00 +0100 |
| Message-ID | <rdjdo-Cv-5@gated-at.bofh.it> |
| In reply to | #1358911 |
[Multipart message — attachments visible in raw view] — view raw
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 Balbi 2011-11-22 643 unsigned sg_supported:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 644 unsigned is_otg:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 645 unsigned is_a_peripheral:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 646 unsigned b_hnp_enable:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 647 unsigned a_hnp_support:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 648 unsigned a_alt_hnp_support:1;
0b2d2bba include/linux/usb/gadget.h David Cohen 2013-12-09 649 unsigned quirk_ep_out_aligned_size:1;
ffd9a0fc include/linux/usb/gadget.h Robert Baldyga 2015-07-28 650 unsigned quirk_altset_not_supp:1;
02ded1b0 include/linux/usb/gadget.h Robert Baldyga 2015-07-28 651 unsigned quirk_stall_not_supp:1;
ca1023c8 include/linux/usb/gadget.h Robert Baldyga 2015-07-28 652 unsigned quirk_zlp_not_supp:1;
80b2502c include/linux/usb/gadget.h Peter Chen 2015-01-28 653 unsigned is_selfpowered:1;
ccdf138f include/linux/usb/gadget.h Robert Baldyga 2015-05-04 654 unsigned deactivated:1;
ccdf138f include/linux/usb/gadget.h Robert Baldyga 2015-05-04 655 unsigned connected:1;
^1da177e include/linux/usb_gadget.h Linus Torvalds 2005-04-16 @656 };
5702f753 include/linux/usb/gadget.h Felipe Balbi 2013-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(&gadget->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(&gadget->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 <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web