All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/22] usb gadget update for OTG 2.0
@ 2015-06-16  6:51 Li Jun
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  0 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Changes for v3:
- For simple, add one more otg descriptor structure: usb_otg20_descriptor for OTG 2.0
  and later release as Alan suggested. 
- Use disable flags for OTG features property.
- Move out memory allocation from usb_otg_descriptor_init() to its caller. 

Changes for v2:
- Use zero-length array as Peter Chen suggested to support usb_otg_descriptors
  with different size.
- Add a new property otg-rev to specify the OTG release number with which the
  device is compliant.
- Add a new interfate usb_otg_descriptor_add() to allocate and init usb_otg_descriptor
  according to gadget otg options, for those do not use new otg options, keep
  the usb_otg_descriptor setting unchanged.
- Remove static usb_otg_descriptor definitions in all legacy gadget driver, but
  use usb_otg_descriptor_add to handle it while build usb configurations.
- Handle usb_otg_descriptor through usb_otg_descriptor_add and add it in each usb
  configurations for configfs driver.

This is a follow-up of Macpaul Lin's previous patchset to resolve usb gadget driver
working with OTG 2.0, and set otg features by not only usb driver config but also usb
hardware property in DT, main changes:
1. keep one usb_otg_descriptor definition, add bcdOTG by zero-length array, which
   can be passed via device tree.
2. OTG features(SRP/HNP/ADP) can be decided by combination of usb HW properties and
   USB driver config.
3. Change the chipidea usb driver to use the updated mechanism.
4. Init usb_otg_descriptor according to otg options in each gadget driver.

Li Jun (18):
  doc: dt-binding: usb: add otg related properties
  usb: common: add API to get usb otg features from device tree
  usb: chipidea: set usb gadeget's otg config
  usb: chipidea: update ci_otg_is_fsm_mode conditions
  usb: gadget: add usb_otg_descriptor_add interface to init
    usb_otg_descriptor
  usb: gadget: configfs: init and add usb_otg_descriptor for usb
    configurations
  usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: acm_ms: init usb_otg_descriptor via
    usb_otg_descriptor_add
  usb: gadget: audio: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: cdc2: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: g_ffs: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: hid: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: mass_storage: init usb_otg_descriptor via
    usb_otg_descriptor_add
  usb: gadget: multi: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: ncm: init usb_otg_descriptor via usb_otg_descriptor_add
  usb: gadget: printer: init usb_otg_descriptor via
    usb_otg_descriptor_add
  usb: gadget: serial: init usb_otg_descriptor via
    usb_otg_descriptor_add
  usb: gadget: zero: init usb_otg_descriptor via usb_otg_descriptor_add

Macpaul Lin (4):
  usb: add usb_otg20_descriptor for OTG 2.0 and above
  usb: add USB_OTG_ADP definition
  usb: add OTG feature options to gadget structure.
  usb: gadget: composite: add USB_DT_OTG request handling

 Documentation/devicetree/bindings/usb/generic.txt | 18 +++++++
 drivers/usb/chipidea/ci.h                         |  3 +-
 drivers/usb/chipidea/core.c                       | 18 +++++++
 drivers/usb/chipidea/debug.c                      |  1 +
 drivers/usb/chipidea/udc.c                        | 20 ++++++-
 drivers/usb/common/common.c                       | 64 +++++++++++++++++++++++
 drivers/usb/gadget/composite.c                    | 25 +++++++++
 drivers/usb/gadget/config.c                       | 39 ++++++++++++++
 drivers/usb/gadget/configfs.c                     | 34 ++++++++----
 drivers/usb/gadget/legacy/acm_ms.c                | 34 ++++++------
 drivers/usb/gadget/legacy/audio.c                 | 33 +++++++-----
 drivers/usb/gadget/legacy/cdc2.c                  | 34 ++++++------
 drivers/usb/gadget/legacy/ether.c                 | 48 ++++++++++++-----
 drivers/usb/gadget/legacy/g_ffs.c                 | 34 ++++++------
 drivers/usb/gadget/legacy/hid.c                   | 35 +++++++------
 drivers/usb/gadget/legacy/mass_storage.c          | 34 ++++++------
 drivers/usb/gadget/legacy/multi.c                 | 49 +++++++++++------
 drivers/usb/gadget/legacy/ncm.c                   | 33 +++++++-----
 drivers/usb/gadget/legacy/printer.c               | 30 +++++++----
 drivers/usb/gadget/legacy/serial.c                | 34 +++++++-----
 drivers/usb/gadget/legacy/zero.c                  | 37 ++++++-------
 include/linux/usb/chipidea.h                      |  4 ++
 include/linux/usb/gadget.h                        | 13 +++++
 include/linux/usb/of.h                            | 20 +++++++
 include/uapi/linux/usb/ch9.h                      | 12 +++++
 25 files changed, 520 insertions(+), 186 deletions(-)

-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-2-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 02/22] usb: add USB_OTG_ADP definition Li Jun
                     ` (20 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

OTG 2.0 introduces bcdOTG in otg descriptor to identify the OTG and EH
supplement release number with which the OTG device is compliant, this
patch adds structure usb_otg20_descriptor for OTG 2.0 and above.

Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 include/uapi/linux/usb/ch9.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
index aa33fd1..aec6899 100644
--- a/include/uapi/linux/usb/ch9.h
+++ b/include/uapi/linux/usb/ch9.h
@@ -674,6 +674,17 @@ struct usb_otg_descriptor {
 	__u8  bmAttributes;	/* support for HNP, SRP, etc */
 } __attribute__ ((packed));
 
+/* USB_DT_OTG (from OTG 2.0 supplement) */
+struct usb_otg20_descriptor {
+	__u8  bLength;
+	__u8  bDescriptorType;
+
+	__u8  bmAttributes;	/* support for HNP, SRP and ADP, etc */
+	__le16 bcdOTG;		/* OTG and EH supplement release number
+				 * in binary-coded decimal(i.e. 2.0 is 0200H)
+				 */
+} __attribute__ ((packed));
+
 /* from usb_otg_descriptor.bmAttributes */
 #define USB_OTG_SRP		(1 << 0)
 #define USB_OTG_HNP		(1 << 1)	/* swap host/device roles */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 02/22] usb: add USB_OTG_ADP definition
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
@ 2015-06-16  6:51   ` Li Jun
  2015-06-16  6:51   ` [PATCH v3 03/22] usb: add OTG feature options to gadget structure Li Jun
                     ` (19 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Add USB_OTG_ADP definition for usb_otg_descriptor.bmAttributes.

Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Acked-by: Peter Chen <peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 include/uapi/linux/usb/ch9.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
index aec6899..f7adc6e 100644
--- a/include/uapi/linux/usb/ch9.h
+++ b/include/uapi/linux/usb/ch9.h
@@ -688,6 +688,7 @@ struct usb_otg20_descriptor {
 /* from usb_otg_descriptor.bmAttributes */
 #define USB_OTG_SRP		(1 << 0)
 #define USB_OTG_HNP		(1 << 1)	/* swap host/device roles */
+#define USB_OTG_ADP		(1 << 2)	/* support ADP */
 
 /*-------------------------------------------------------------------------*/
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 03/22] usb: add OTG feature options to gadget structure.
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
  2015-06-16  6:51   ` [PATCH v3 02/22] usb: add USB_OTG_ADP definition Li Jun
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-4-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
                     ` (18 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Add ADP, HNP and SRP feature options and otg version to gadget structure.

Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 include/linux/usb/gadget.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 4f3dfb7..814cb70 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -514,6 +514,12 @@ struct usb_gadget_ops {
  * @sg_supported: true if we can handle scatter-gather
  * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
  *	gadget driver must provide a USB OTG descriptor.
+ * @adp_support: OTG device feature flag, indicating that the device
+	supports ADP at this port.
+ * @hnp_support: OTG device feature flag, indicating that the device
+	supports HNP at this port.
+ * @srp_support: OTG device feature flag, indicating that the device
+	supports SRP at this port.
  * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
  *	is in the Mini-AB jack, and HNP has been used to switch roles
  *	so that the "A" device currently acts as A-Peripheral, not A-Host.
@@ -526,6 +532,7 @@ struct usb_gadget_ops {
  * @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
  *	MaxPacketSize.
  * @is_selfpowered: if the gadget is self-powered.
+ * @otg_rev: The OTG reversion number the device is compliant to.
  *
  * Gadgets have a mostly-portable "gadget driver" implementing device
  * functions, handling all usb configurations and interfaces.  Gadget
@@ -562,12 +569,16 @@ struct usb_gadget {
 
 	unsigned			sg_supported:1;
 	unsigned			is_otg:1;
+	unsigned			adp_support:1;
+	unsigned			hnp_support:1;
+	unsigned			srp_support:1;
 	unsigned			is_a_peripheral:1;
 	unsigned			b_hnp_enable:1;
 	unsigned			a_hnp_support:1;
 	unsigned			a_alt_hnp_support:1;
 	unsigned			quirk_ep_out_aligned_size:1;
 	unsigned			is_selfpowered:1;
+	u16				otg_rev;
 };
 #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (2 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 03/22] usb: add OTG feature options to gadget structure Li Jun
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-5-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties Li Jun
                     ` (17 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Copy usb_otg_descriptor from config's descriptor if host requests
USB_DT_OTG.

Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/composite.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 4e3447b..8322e80 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1534,6 +1534,31 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
 				value = min(w_length, (u16) value);
 			}
 			break;
+		case USB_DT_OTG:
+			if (gadget_is_otg(gadget)) {
+				struct usb_configuration *config;
+				int otg_desc_len = 0;
+
+				if (cdev->config)
+					config = cdev->config;
+				else
+					config = list_first_entry(
+							&cdev->configs,
+						struct usb_configuration, list);
+				if (!config)
+					goto done;
+
+				if (gadget->otg_rev >= 0x0200)
+					otg_desc_len += sizeof(
+						struct usb_otg20_descriptor);
+				else
+					otg_desc_len += sizeof(
+						struct usb_otg_descriptor);
+
+				value = min_t(int, w_length, otg_desc_len);
+				memcpy(req->buf, config->descriptors[0], value);
+			}
+			break;
 		}
 		break;
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (3 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-6-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree Li Jun
                     ` (16 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Add otg version, srp, hnp and adp support for usb OTG port, then those OTG
features don't have to be decided by usb gadget drivers.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 Documentation/devicetree/bindings/usb/generic.txt | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
index 477d5bb..eb7308e 100644
--- a/Documentation/devicetree/bindings/usb/generic.txt
+++ b/Documentation/devicetree/bindings/usb/generic.txt
@@ -11,6 +11,20 @@ Optional properties:
 			"peripheral" and "otg". In case this attribute isn't
 			passed via DT, USB DRD controllers should default to
 			OTG.
+ - otg-rev: tells usb driver the release number of the OTG and EH supplement
+			with which the device and its descriptors are compliant,
+			in binary-coded decimal (i.e. 2.0 is 0200H). This
+			property is used if any real OTG features(HNP/SRP/ADP)
+			is enabled, also if ADP is enabled, otg-rev should be
+			0x0200 or above.
+ - hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP
+			is the basic function of real OTG except you want it
+			to be a srp-capable only B device.
+ - srp-disable: tells OTG controllers we want to disable OTG SRP, SRP is
+			optional for OTG device.
+ - adp-disable: tells OTG controllers we want to disable OTG ADP, ADP is
+			optional for OTG device, if not passed, otg-rev should
+			be set to be 0x0200 or above.
 
 This is an attribute to a USB controller such as:
 
@@ -21,4 +35,8 @@ dwc3@4a030000 {
 	usb-phy = <&usb2_phy>, <&usb3,phy>;
 	maximum-speed = "super-speed";
 	dr_mode = "otg";
+	otg-rev = <0x0200>;
+	hnp-disable;
+	srp-disable;
+	adp-disable;
 };
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (4 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties Li Jun
@ 2015-06-16  6:51   ` Li Jun
  2015-06-16  6:51   ` [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config Li Jun
                     ` (15 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Check property of usb hardware to get otg version and if SRP, HNP and ADP
are supported.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/common/common.c | 64 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/usb/of.h      | 20 ++++++++++++++
 2 files changed, 84 insertions(+)

diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index b530fd4..b882e95 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -154,6 +154,70 @@ bool of_usb_host_tpl_support(struct device_node *np)
 	return false;
 }
 EXPORT_SYMBOL_GPL(of_usb_host_tpl_support);
+
+/**
+ * of_usb_otg_srp_disabled -  to get if otg srp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if SRP is disabled on the otg port
+ */
+bool of_usb_otg_srp_disabled(struct device_node *np)
+{
+	if (of_find_property(np, "srp-disable", NULL))
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_srp_disabled);
+
+/**
+ * of_usb_otg_hnp_disabled -  to get if otg hnp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if HNP is disabled on the otg port
+ */
+bool of_usb_otg_hnp_disabled(struct device_node *np)
+{
+	if (of_find_property(np, "hnp-disable", NULL))
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_hnp_disabled);
+
+/**
+ * of_usb_otg_adp_disabled -  to get if otg adp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if ADP is disabled on the otg port
+ */
+bool of_usb_otg_adp_disabled(struct device_node *np)
+{
+	if (of_find_property(np, "adp-disable", NULL))
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_adp_disabled);
+
+/**
+ * of_usb_get_otg_rev -  to get the otg release number the device is
+ * compliant with.
+ * @np: Pointer to the given device_node
+ *
+ * The function gets OTG and EH supplement release number in binary-coded
+ * decimal (i.e. 2.0 is 0200H).
+ */
+int of_usb_get_otg_rev(struct device_node *np)
+{
+	u32 otg_rev;
+
+	if (!of_property_read_u32(np, "otg-rev", &otg_rev))
+		return otg_rev;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(of_usb_get_otg_rev);
 #endif
 
 MODULE_LICENSE("GPL");
diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index cfe0528..5b395bf 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -15,6 +15,10 @@
 enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np);
 enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np);
 bool of_usb_host_tpl_support(struct device_node *np);
+bool of_usb_otg_srp_disabled(struct device_node *np);
+bool of_usb_otg_hnp_disabled(struct device_node *np);
+bool of_usb_otg_adp_disabled(struct device_node *np);
+int of_usb_get_otg_rev(struct device_node *np);
 #else
 static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
 {
@@ -30,6 +34,22 @@ static inline bool of_usb_host_tpl_support(struct device_node *np)
 {
 	return false;
 }
+static inline bool of_usb_otg_srp_disabled(struct device_node *np)
+{
+	return false;
+}
+static inline bool of_usb_otg_hnp_disabled(struct device_node *np)
+{
+	return false;
+}
+static inline bool of_usb_otg_adp_disabled(struct device_node *np)
+{
+	return false;
+}
+static inline int of_usb_get_otg_rev(struct device_node *np)
+{
+	return 0;
+}
 #endif
 
 #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT)
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (5 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree Li Jun
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:51   ` [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
                     ` (14 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Set gadget's otg features according to controller's capability and usb
property in device tree.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/chipidea/core.c  | 18 ++++++++++++++++++
 drivers/usb/chipidea/udc.c   | 20 +++++++++++++++++++-
 include/linux/usb/chipidea.h |  4 ++++
 3 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 74fea4f..45bd44e 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -588,6 +588,24 @@ static int ci_get_platdata(struct device *dev,
 				of_usb_host_tpl_support(dev->of_node);
 	}
 
+	if (platdata->dr_mode == USB_DR_MODE_OTG) {
+		if (!platdata->otg_rev) {
+			platdata->otg_rev =
+				of_usb_get_otg_rev(dev->of_node);
+		}
+		if (platdata->otg_rev) {
+			if (!platdata->srp_support)
+				platdata->srp_support =
+					!of_usb_otg_srp_disabled(dev->of_node);
+			if (!platdata->hnp_support)
+				platdata->hnp_support =
+					!of_usb_otg_hnp_disabled(dev->of_node);
+			if (!platdata->adp_support)
+				platdata->adp_support =
+					!of_usb_otg_adp_disabled(dev->of_node);
+		}
+	}
+
 	if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
 		platdata->flags |= CI_HDRC_FORCE_FULLSPEED;
 
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 764f668..5d2c6e8 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1821,6 +1821,24 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
 }
 
 /**
+ * udc_update_otg_config: update gadget otg config
+ * * @ci: chipidea controller
+ */
+static void udc_update_otg_config(struct ci_hdrc *ci)
+{
+	if (!ci->is_otg)
+		return;
+
+	ci->gadget.otg_rev = ci->platdata->otg_rev;
+	ci->gadget.srp_support = ci->platdata->srp_support;
+	ci->gadget.hnp_support = ci->platdata->hnp_support;
+	ci->gadget.adp_support = ci->platdata->adp_support;
+	if (ci->gadget.srp_support || ci->gadget.hnp_support ||
+					ci->gadget.adp_support)
+		ci->gadget.is_otg = 1;
+}
+
+/**
  * udc_start: initialize gadget role
  * @ci: chipidea controller
  */
@@ -1834,9 +1852,9 @@ static int udc_start(struct ci_hdrc *ci)
 	ci->gadget.ops          = &usb_gadget_ops;
 	ci->gadget.speed        = USB_SPEED_UNKNOWN;
 	ci->gadget.max_speed    = USB_SPEED_HIGH;
-	ci->gadget.is_otg       = ci->is_otg ? 1 : 0;
 	ci->gadget.name         = ci->platdata->name;
 
+	udc_update_otg_config(ci);
 	INIT_LIST_HEAD(&ci->gadget.ep_list);
 
 	/* alloc resources */
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
index ab94f78..6765b28 100644
--- a/include/linux/usb/chipidea.h
+++ b/include/linux/usb/chipidea.h
@@ -34,7 +34,11 @@ struct ci_hdrc_platform_data {
 #define CI_HDRC_CONTROLLER_STOPPED_EVENT	1
 	void	(*notify_event) (struct ci_hdrc *ci, unsigned event);
 	struct regulator	*reg_vbus;
+	u16			otg_rev;
 	bool			tpl_support;
+	bool			srp_support;
+	bool			hnp_support;
+	bool			adp_support;
 };
 
 /* Default offset of capability registers */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (6 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config Li Jun
@ 2015-06-16  6:51   ` Li Jun
  2015-06-16  6:51   ` [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor Li Jun
                     ` (13 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

After introduce usb otg properties, update ci_otg_is_fsm_mode conditions
to be depending on both usb hardware properties and usb driver config,
also resolve a compile issue in debug.c after the API change.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/chipidea/ci.h    | 3 ++-
 drivers/usb/chipidea/debug.c | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 6d6200e..90e8e53 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -407,7 +407,8 @@ static inline bool ci_otg_is_fsm_mode(struct ci_hdrc *ci)
 {
 #ifdef CONFIG_USB_OTG_FSM
 	return ci->is_otg && ci->roles[CI_ROLE_HOST] &&
-					ci->roles[CI_ROLE_GADGET];
+		ci->roles[CI_ROLE_GADGET] && (ci->platdata->srp_support ||
+		ci->platdata->hnp_support || ci->platdata->adp_support);
 #else
 	return false;
 #endif
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 5b7061a..3869c6d 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -10,6 +10,7 @@
 #include <linux/usb/phy.h>
 #include <linux/usb/otg.h>
 #include <linux/usb/otg-fsm.h>
+#include <linux/usb/chipidea.h>
 
 #include "ci.h"
 #include "udc.h"
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (7 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
@ 2015-06-16  6:51   ` Li Jun
       [not found]     ` <1434437532-23678-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:52   ` [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations Li Jun
                     ` (12 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:51 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate usb_otg_descriptor and initialize it according to gadget otg
options, if none of options is not set, keep bmAttributes setting as
current gadget drivers, with this new interface, usb_otg_descriptor can
include bcdOTG if OTG 2.0 or later, and otg features can be decided by
the combination of usb hardware property and driver config.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/config.c | 39 +++++++++++++++++++++++++++++++++++++++
 include/linux/usb/gadget.h  |  2 ++
 2 files changed, 41 insertions(+)

diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
index 34e12fc..9ebc052 100644
--- a/drivers/usb/gadget/config.c
+++ b/drivers/usb/gadget/config.c
@@ -195,3 +195,42 @@ void usb_free_all_descriptors(struct usb_function *f)
 	usb_free_descriptors(f->ss_descriptors);
 }
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
+
+int usb_otg_descriptor_init(struct usb_gadget *gadget,
+		struct usb_descriptor_header *otg_desc)
+{
+	struct usb_otg_descriptor *otg1x_desc;
+	struct usb_otg20_descriptor *otg20_desc;
+	u8 otg_attributes = 0;
+
+	if (!otg_desc)
+		return -EINVAL;
+
+	if (gadget->adp_support || gadget->hnp_support ||
+					gadget->srp_support) {
+		if (gadget->adp_support)
+			otg_attributes |= USB_OTG_ADP;
+		if (gadget->hnp_support)
+			otg_attributes |= USB_OTG_HNP;
+		if (gadget->srp_support)
+			otg_attributes |= USB_OTG_SRP;
+	} else {
+		otg_attributes = USB_OTG_SRP | USB_OTG_HNP;
+	}
+
+	if (gadget->otg_rev >= 0x0200) {
+		otg20_desc = (struct usb_otg20_descriptor *)otg_desc;
+		otg20_desc->bLength = sizeof(struct usb_otg20_descriptor);
+		otg20_desc->bDescriptorType = USB_DT_OTG;
+		otg20_desc->bmAttributes = otg_attributes;
+		otg20_desc->bcdOTG = cpu_to_le16(gadget->otg_rev);
+	} else {
+		otg1x_desc = (struct usb_otg_descriptor *)otg_desc;
+		otg1x_desc->bLength = sizeof(struct usb_otg_descriptor);
+		otg1x_desc->bDescriptorType = USB_DT_OTG;
+		otg1x_desc->bmAttributes = otg_attributes;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(usb_otg_descriptor_init);
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 814cb70..b77730e 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -1013,6 +1013,8 @@ int usb_assign_descriptors(struct usb_function *f,
 		struct usb_descriptor_header **ss);
 void usb_free_all_descriptors(struct usb_function *f);
 
+int usb_otg_descriptor_init(struct usb_gadget *gadget,
+		struct usb_descriptor_header *otg_desc);
 /*-------------------------------------------------------------------------*/
 
 /* utility to simplify map/unmap of usb_requests to/from DMA */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (8 preceding siblings ...)
  2015-06-16  6:51   ` [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor Li Jun
@ 2015-06-16  6:52   ` Li Jun
       [not found]     ` <1434437532-23678-11-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-06-16  6:52   ` [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add Li Jun
                     ` (11 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
add it for each usb configurations, free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/configfs.c | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 0495c94..773b746 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -41,6 +41,8 @@ int check_user_usb_string(const char *name,
 #define MAX_NAME_LEN	40
 #define MAX_USB_STRING_LANGS 2
 
+static const struct usb_descriptor_header *otg_desc[2];
+
 struct gadget_info {
 	struct config_group group;
 	struct config_group functions_group;
@@ -55,9 +57,6 @@ struct gadget_info {
 	struct list_head available_func;
 
 	const char *udc_name;
-#ifdef CONFIG_USB_OTG
-	struct usb_otg_descriptor otg;
-#endif
 	struct usb_composite_driver composite;
 	struct usb_composite_dev cdev;
 	bool use_os_desc;
@@ -1376,6 +1375,24 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
 		memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN);
 	}
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+		unsigned length;
+
+		if (gadget->otg_rev >= 0x0200)
+			length = sizeof(struct usb_otg20_descriptor);
+		else
+			length = sizeof(struct usb_otg_descriptor);
+		usb_desc = kzalloc(length, GFP_KERNEL);
+		if (!usb_desc) {
+			ret = -ENOMEM;
+			goto err_comp_cleanup;
+		}
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* Go through all configs, attach all functions */
 	list_for_each_entry(c, &gi->cdev.configs, list) {
 		struct config_usb_cfg *cfg;
@@ -1383,6 +1400,9 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
 		struct usb_function *tmp;
 		struct gadget_config_name *cn;
 
+		if (gadget_is_otg(gadget))
+			c->descriptors = otg_desc;
+
 		cfg = container_of(c, struct config_usb_cfg, c);
 		if (!list_empty(&cfg->string_list)) {
 			i = 0;
@@ -1437,6 +1457,8 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
 	cdev = get_gadget_data(gadget);
 	gi = container_of(cdev, struct gadget_info, cdev);
 
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 	purge_configs_funcs(gi);
 	composite_dev_cleanup(cdev);
 	usb_ep_autoconfig_reset(cdev->gadget);
@@ -1510,12 +1532,6 @@ static struct config_group *gadgets_make(
 	if (!gi->composite.gadget_driver.function)
 		goto err;
 
-#ifdef CONFIG_USB_OTG
-	gi->otg.bLength = sizeof(struct usb_otg_descriptor);
-	gi->otg.bDescriptorType = USB_DT_OTG;
-	gi->otg.bmAttributes = USB_OTG_SRP | USB_OTG_HNP;
-#endif

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (9 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 12/22] usb: gadget: acm_ms: " Li Jun
                     ` (10 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/ether.c | 48 +++++++++++++++++++++++++++------------
 1 file changed, 34 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/legacy/ether.c b/drivers/usb/gadget/legacy/ether.c
index a3323dc..6492804 100644
--- a/drivers/usb/gadget/legacy/ether.c
+++ b/drivers/usb/gadget/legacy/ether.c
@@ -171,20 +171,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 static struct usb_string strings_dev[] = {
 	[USB_GADGET_MANUFACTURER_IDX].s = "",
@@ -229,6 +216,21 @@ static int rndis_do_config(struct usb_configuration *c)
 	/* FIXME alloc iConfiguration string, set it in c->strings */
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -271,6 +273,21 @@ static int eth_do_config(struct usb_configuration *c)
 	/* FIXME alloc iConfiguration string, set it in c->strings */
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -463,6 +480,9 @@ static int eth_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(f_geth);
 		usb_put_function_instance(fi_geth);
 	}
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 12/22] usb: gadget: acm_ms: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (10 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 13/22] usb: gadget: audio: " Li Jun
                     ` (9 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/acm_ms.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/acm_ms.c b/drivers/usb/gadget/legacy/acm_ms.c
index 1194b09..e10e19e 100644
--- a/drivers/usb/gadget/legacy/acm_ms.c
+++ b/drivers/usb/gadget/legacy/acm_ms.c
@@ -58,21 +58,7 @@ static struct usb_device_descriptor device_desc = {
 	/*.bNumConfigurations =	DYNAMIC*/
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/*
-	 * REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 /* string IDs are assigned dynamically */
 static struct usb_string strings_dev[] = {
@@ -127,6 +113,21 @@ static int acm_ms_do_config(struct usb_configuration *c)
 	int	status;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -255,6 +256,9 @@ static int acm_ms_unbind(struct usb_composite_dev *cdev)
 	usb_put_function_instance(fi_msg);
 	usb_put_function(f_acm);
 	usb_put_function_instance(f_acm_inst);
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 13/22] usb: gadget: audio: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (11 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 12/22] usb: gadget: acm_ms: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 14/22] usb: gadget: cdc2: " Li Jun
                     ` (8 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/audio.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/legacy/audio.c b/drivers/usb/gadget/legacy/audio.c
index f289caf..743b046 100644
--- a/drivers/usb/gadget/legacy/audio.c
+++ b/drivers/usb/gadget/legacy/audio.c
@@ -150,20 +150,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 /*-------------------------------------------------------------------------*/
 
@@ -174,6 +161,21 @@ static int audio_do_config(struct usb_configuration *c)
 	/* FIXME alloc iConfiguration string, set it in c->strings */
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -289,6 +291,9 @@ static int audio_unbind(struct usb_composite_dev *cdev)
 	if (!IS_ERR_OR_NULL(fi_uac2))
 		usb_put_function_instance(fi_uac2);
 #endif
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 14/22] usb: gadget: cdc2: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (12 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 13/22] usb: gadget: audio: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 15/22] usb: gadget: g_ffs: " Li Jun
                     ` (7 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/cdc2.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/cdc2.c b/drivers/usb/gadget/legacy/cdc2.c
index afd3e37..fc0d504 100644
--- a/drivers/usb/gadget/legacy/cdc2.c
+++ b/drivers/usb/gadget/legacy/cdc2.c
@@ -60,21 +60,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
 
 /* string IDs are assigned dynamically */
 static struct usb_string strings_dev[] = {
@@ -109,6 +95,21 @@ static int cdc_do_config(struct usb_configuration *c)
 	int	status;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -219,6 +220,9 @@ static int cdc_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(f_ecm);
 	if (!IS_ERR_OR_NULL(fi_ecm))
 		usb_put_function_instance(fi_ecm);
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 15/22] usb: gadget: g_ffs: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (13 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 14/22] usb: gadget: cdc2: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 16/22] usb: gadget: hid: " Li Jun
                     ` (6 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/g_ffs.c | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/g_ffs.c b/drivers/usb/gadget/legacy/g_ffs.c
index 7b9ef7e..f607bbe 100644
--- a/drivers/usb/gadget/legacy/g_ffs.c
+++ b/drivers/usb/gadget/legacy/g_ffs.c
@@ -88,21 +88,7 @@ MODULE_PARM_DESC(bDeviceProtocol, "USB Device protocol");
 module_param_array_named(functions, func_names, charp, &func_num, 0);
 MODULE_PARM_DESC(functions, "USB Functions list");
 
-static const struct usb_descriptor_header *gfs_otg_desc[] = {
-	(const struct usb_descriptor_header *)
-	&(const struct usb_otg_descriptor) {
-		.bLength		= sizeof(struct usb_otg_descriptor),
-		.bDescriptorType	= USB_DT_OTG,
-
-		/*
-		 * REVISIT SRP-only hardware is possible, although
-		 * it would not be called "OTG" ...
-		 */
-		.bmAttributes		= USB_OTG_SRP | USB_OTG_HNP,
-	},
-
-	NULL
-};
+static const struct usb_descriptor_header *gfs_otg_desc[2];
 
 /* String IDs are assigned dynamically */
 static struct usb_string gfs_strings[] = {
@@ -471,6 +457,9 @@ static int gfs_unbind(struct usb_composite_dev *cdev)
 	for (i = 0; i < N_CONF * func_num; ++i)
 		usb_put_function(*(f_ffs[0] + i));
 
+	kfree(gfs_otg_desc[0]);
+	gfs_otg_desc[0] = NULL;
+
 	return 0;
 }
 
@@ -489,6 +478,21 @@ static int gfs_do_config(struct usb_configuration *c)
 		return -ENODEV;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!gfs_otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			gfs_otg_desc[0] = usb_desc;
+			gfs_otg_desc[1] = NULL;
+		}
 		c->descriptors = gfs_otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 16/22] usb: gadget: hid: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (14 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 15/22] usb: gadget: g_ffs: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 17/22] usb: gadget: mass_storage: " Li Jun
                     ` (5 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/hid.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
index 2baa572..6e7bbda 100644
--- a/drivers/usb/gadget/legacy/hid.c
+++ b/drivers/usb/gadget/legacy/hid.c
@@ -68,21 +68,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
 
 /* string IDs are assigned dynamically */
 static struct usb_string strings_dev[] = {
@@ -112,6 +98,21 @@ static int do_config(struct usb_configuration *c)
 	int status = 0;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -213,6 +214,10 @@ static int hid_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(n->f);
 		usb_put_function_instance(n->fi);
 	}
+
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 17/22] usb: gadget: mass_storage: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (15 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 16/22] usb: gadget: hid: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 18/22] usb: gadget: multi: " Li Jun
                     ` (4 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/mass_storage.c | 34 ++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/mass_storage.c b/drivers/usb/gadget/legacy/mass_storage.c
index e7bfb08..587ea7f 100644
--- a/drivers/usb/gadget/legacy/mass_storage.c
+++ b/drivers/usb/gadget/legacy/mass_storage.c
@@ -64,21 +64,7 @@ static struct usb_device_descriptor msg_device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/*
-	 * REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 static struct usb_string strings_dev[] = {
 	[USB_GADGET_MANUFACTURER_IDX].s = "",
@@ -136,6 +122,21 @@ static int msg_do_config(struct usb_configuration *c)
 	int ret;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -243,6 +244,9 @@ static int msg_unbind(struct usb_composite_dev *cdev)
 	if (!IS_ERR(fi_msg))
 		usb_put_function_instance(fi_msg);
 
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 18/22] usb: gadget: multi: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (16 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 17/22] usb: gadget: mass_storage: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 19/22] usb: gadget: ncm: " Li Jun
                     ` (3 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/multi.c | 49 +++++++++++++++++++++++++++------------
 1 file changed, 34 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/multi.c b/drivers/usb/gadget/legacy/multi.c
index b21b51f..2e8fbae 100644
--- a/drivers/usb/gadget/legacy/multi.c
+++ b/drivers/usb/gadget/legacy/multi.c
@@ -78,21 +78,7 @@ static struct usb_device_descriptor device_desc = {
 	.idProduct =		cpu_to_le16(MULTI_PRODUCT_NUM),
 };
 
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &(struct usb_otg_descriptor){
-		.bLength =		sizeof(struct usb_otg_descriptor),
-		.bDescriptorType =	USB_DT_OTG,
-
-		/*
-		 * REVISIT SRP-only hardware is possible, although
-		 * it would not be called "OTG" ...
-		 */
-		.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-	},
-	NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
 
 enum {
 	MULTI_STRING_RNDIS_CONFIG_IDX = USB_GADGET_FIRST_AVAIL_IDX,
@@ -155,6 +141,21 @@ static int rndis_do_config(struct usb_configuration *c)
 	int ret;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -243,6 +244,21 @@ static int cdc_do_config(struct usb_configuration *c)
 	int ret;
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -490,6 +506,9 @@ static int multi_unbind(struct usb_composite_dev *cdev)
 	usb_put_function(f_ecm);
 	usb_put_function_instance(fi_ecm);
 #endif
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 19/22] usb: gadget: ncm: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (17 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 18/22] usb: gadget: multi: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 20/22] usb: gadget: printer: " Li Jun
                     ` (2 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/ncm.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/legacy/ncm.c b/drivers/usb/gadget/legacy/ncm.c
index 6ce7421..5f9e2f3 100644
--- a/drivers/usb/gadget/legacy/ncm.c
+++ b/drivers/usb/gadget/legacy/ncm.c
@@ -69,20 +69,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 /* string IDs are assigned dynamically */
 static struct usb_string strings_dev[] = {
@@ -114,6 +101,21 @@ static int ncm_do_config(struct usb_configuration *c)
 	/* FIXME alloc iConfiguration string, set it in c->strings */
 
 	if (gadget_is_otg(c->cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (c->cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		c->descriptors = otg_desc;
 		c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -192,6 +194,9 @@ static int gncm_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(f_ncm);
 	if (!IS_ERR_OR_NULL(f_ncm_inst))
 		usb_put_function_instance(f_ncm_inst);
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 20/22] usb: gadget: printer: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (18 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 19/22] usb: gadget: ncm: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 21/22] usb: gadget: serial: " Li Jun
  2015-06-16  6:52   ` [PATCH v3 22/22] usb: gadget: zero: " Li Jun
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/printer.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
index 1ce7df1..1726c9c 100644
--- a/drivers/usb/gadget/legacy/printer.c
+++ b/drivers/usb/gadget/legacy/printer.c
@@ -82,16 +82,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =              sizeof otg_descriptor,
-	.bDescriptorType =      USB_DT_OTG,
-	.bmAttributes =         USB_OTG_SRP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 /*-------------------------------------------------------------------------*/
 
@@ -136,7 +127,21 @@ static int printer_do_config(struct usb_configuration *c)
 	usb_gadget_set_selfpowered(gadget);
 
 	if (gadget_is_otg(gadget)) {
-		otg_descriptor.bmAttributes |= USB_OTG_HNP;
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		printer_cfg_driver.descriptors = otg_desc;
 		printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -196,6 +201,9 @@ static int printer_unbind(struct usb_composite_dev *cdev)
 	usb_put_function(f_printer);
 	usb_put_function_instance(fi_printer);
 
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 21/22] usb: gadget: serial: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (19 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 20/22] usb: gadget: printer: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  2015-06-16  6:52   ` [PATCH v3 22/22] usb: gadget: zero: " Li Jun
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/serial.c | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/legacy/serial.c b/drivers/usb/gadget/legacy/serial.c
index 8b7528f..00d5a6f 100644
--- a/drivers/usb/gadget/legacy/serial.c
+++ b/drivers/usb/gadget/legacy/serial.c
@@ -79,20 +79,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	1,
 };
 
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
 
 /*-------------------------------------------------------------------------*/
 
@@ -191,6 +178,21 @@ static int gs_bind(struct usb_composite_dev *cdev)
 	serial_config_driver.iConfiguration = status;
 
 	if (gadget_is_otg(cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		serial_config_driver.descriptors = otg_desc;
 		serial_config_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -227,6 +229,10 @@ static int gs_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(f_serial[i]);
 		usb_put_function_instance(fi_serial[i]);
 	}
+
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH v3 22/22] usb: gadget: zero: init usb_otg_descriptor via usb_otg_descriptor_add
       [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (20 preceding siblings ...)
  2015-06-16  6:52   ` [PATCH v3 21/22] usb: gadget: serial: " Li Jun
@ 2015-06-16  6:52   ` Li Jun
  21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  6:52 UTC (permalink / raw)
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
 drivers/usb/gadget/legacy/zero.c | 37 +++++++++++++++++++------------------
 1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/usb/gadget/legacy/zero.c b/drivers/usb/gadget/legacy/zero.c
index c986e8a..65011f6 100644
--- a/drivers/usb/gadget/legacy/zero.c
+++ b/drivers/usb/gadget/legacy/zero.c
@@ -121,24 +121,7 @@ static struct usb_device_descriptor device_desc = {
 	.bNumConfigurations =	2,
 };
 
-#ifdef CONFIG_USB_OTG
-static struct usb_otg_descriptor otg_descriptor = {
-	.bLength =		sizeof otg_descriptor,
-	.bDescriptorType =	USB_DT_OTG,
-
-	/* REVISIT SRP-only hardware is possible, although
-	 * it would not be called "OTG" ...
-	 */
-	.bmAttributes =		USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
-	(struct usb_descriptor_header *) &otg_descriptor,
-	NULL,
-};
-#else
-#define otg_desc	NULL
-#endif
+static const struct usb_descriptor_header *otg_desc[2];
 
 /* string IDs are assigned dynamically */
 /* default serial number takes at least two packets */
@@ -341,6 +324,21 @@ static int zero_bind(struct usb_composite_dev *cdev)
 
 	/* support OTG systems */
 	if (gadget_is_otg(cdev->gadget)) {
+		if (!otg_desc[0]) {
+			struct usb_descriptor_header *usb_desc;
+			unsigned length;
+
+			if (cdev->gadget->otg_rev >= 0x0200)
+				length = sizeof(struct usb_otg20_descriptor);
+			else
+				length = sizeof(struct usb_otg_descriptor);
+			usb_desc = kzalloc(length, GFP_KERNEL);
+			if (!usb_desc)
+				return -ENOMEM;
+			usb_otg_descriptor_init(cdev->gadget, usb_desc);
+			otg_desc[0] = usb_desc;
+			otg_desc[1] = NULL;
+		}
 		sourcesink_driver.descriptors = otg_desc;
 		sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 		loopback_driver.descriptors = otg_desc;
@@ -397,6 +395,9 @@ static int zero_unbind(struct usb_composite_dev *cdev)
 	if (!IS_ERR_OR_NULL(func_lb))
 		usb_put_function(func_lb);
 	usb_put_function_instance(func_inst_lb);
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+
 	return 0;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above
       [not found]     ` <1434437532-23678-2-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  7:25       ` Roger Quadros
  0 siblings, 0 replies; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  7:25 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:51 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> 
> OTG 2.0 introduces bcdOTG in otg descriptor to identify the OTG and EH
> supplement release number with which the OTG device is compliant, this
> patch adds structure usb_otg20_descriptor for OTG 2.0 and above.
> 
> Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>

cheers,
-roger

> ---
>  include/uapi/linux/usb/ch9.h | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
> index aa33fd1..aec6899 100644
> --- a/include/uapi/linux/usb/ch9.h
> +++ b/include/uapi/linux/usb/ch9.h
> @@ -674,6 +674,17 @@ struct usb_otg_descriptor {
>  	__u8  bmAttributes;	/* support for HNP, SRP, etc */
>  } __attribute__ ((packed));
>  
> +/* USB_DT_OTG (from OTG 2.0 supplement) */
> +struct usb_otg20_descriptor {
> +	__u8  bLength;
> +	__u8  bDescriptorType;
> +
> +	__u8  bmAttributes;	/* support for HNP, SRP and ADP, etc */
> +	__le16 bcdOTG;		/* OTG and EH supplement release number
> +				 * in binary-coded decimal(i.e. 2.0 is 0200H)
> +				 */
> +} __attribute__ ((packed));
> +
>  /* from usb_otg_descriptor.bmAttributes */
>  #define USB_OTG_SRP		(1 << 0)
>  #define USB_OTG_HNP		(1 << 1)	/* swap host/device roles */

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 03/22] usb: add OTG feature options to gadget structure.
       [not found]     ` <1434437532-23678-4-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  7:28       ` Roger Quadros
  2015-06-16  8:06         ` Li Jun
  0 siblings, 1 reply; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  7:28 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:53 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> 
> Add ADP, HNP and SRP feature options and otg version to gadget structure.
> 
> Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  include/linux/usb/gadget.h | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index 4f3dfb7..814cb70 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -514,6 +514,12 @@ struct usb_gadget_ops {
>   * @sg_supported: true if we can handle scatter-gather
>   * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
>   *	gadget driver must provide a USB OTG descriptor.
> + * @adp_support: OTG device feature flag, indicating that the device
> +	supports ADP at this port.
> + * @hnp_support: OTG device feature flag, indicating that the device
> +	supports HNP at this port.
> + * @srp_support: OTG device feature flag, indicating that the device
> +	supports SRP at this port.
>   * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
>   *	is in the Mini-AB jack, and HNP has been used to switch roles
>   *	so that the "A" device currently acts as A-Peripheral, not A-Host.
> @@ -526,6 +532,7 @@ struct usb_gadget_ops {
>   * @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
>   *	MaxPacketSize.
>   * @is_selfpowered: if the gadget is self-powered.
> + * @otg_rev: The OTG reversion number the device is compliant to.

reversion -> revision
Also you might want to say that it is BCD encoded with an example
e.g. 2.0 -> 0x0200

>   *
>   * Gadgets have a mostly-portable "gadget driver" implementing device
>   * functions, handling all usb configurations and interfaces.  Gadget
> @@ -562,12 +569,16 @@ struct usb_gadget {
>  
>  	unsigned			sg_supported:1;
>  	unsigned			is_otg:1;
> +	unsigned			adp_support:1;
> +	unsigned			hnp_support:1;
> +	unsigned			srp_support:1;
>  	unsigned			is_a_peripheral:1;
>  	unsigned			b_hnp_enable:1;
>  	unsigned			a_hnp_support:1;
>  	unsigned			a_alt_hnp_support:1;
>  	unsigned			quirk_ep_out_aligned_size:1;
>  	unsigned			is_selfpowered:1;
> +	u16				otg_rev;
>  };
>  #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
>  

with that change you can add my

Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling
       [not found]     ` <1434437532-23678-5-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  7:30       ` Roger Quadros
  0 siblings, 0 replies; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  7:30 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:54 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> 
> Copy usb_otg_descriptor from config's descriptor if host requests
> USB_DT_OTG.
> 
> Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>

cheers,
-roger

> ---
>  drivers/usb/gadget/composite.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
> index 4e3447b..8322e80 100644
> --- a/drivers/usb/gadget/composite.c
> +++ b/drivers/usb/gadget/composite.c
> @@ -1534,6 +1534,31 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
>  				value = min(w_length, (u16) value);
>  			}
>  			break;
> +		case USB_DT_OTG:
> +			if (gadget_is_otg(gadget)) {
> +				struct usb_configuration *config;
> +				int otg_desc_len = 0;
> +
> +				if (cdev->config)
> +					config = cdev->config;
> +				else
> +					config = list_first_entry(
> +							&cdev->configs,
> +						struct usb_configuration, list);
> +				if (!config)
> +					goto done;
> +
> +				if (gadget->otg_rev >= 0x0200)
> +					otg_desc_len += sizeof(
> +						struct usb_otg20_descriptor);
> +				else
> +					otg_desc_len += sizeof(
> +						struct usb_otg_descriptor);
> +
> +				value = min_t(int, w_length, otg_desc_len);
> +				memcpy(req->buf, config->descriptors[0], value);
> +			}
> +			break;
>  		}
>  		break;
>  

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations
       [not found]     ` <1434437532-23678-11-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  7:58       ` Roger Quadros
  2015-06-16  8:08         ` Li Jun
  0 siblings, 1 reply; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  7:58 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:52:00 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
> add it for each usb configurations, free it while composite unbind.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  drivers/usb/gadget/configfs.c | 34 +++++++++++++++++++++++++---------
>  1 file changed, 25 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
> index 0495c94..773b746 100644
> --- a/drivers/usb/gadget/configfs.c
> +++ b/drivers/usb/gadget/configfs.c
> @@ -41,6 +41,8 @@ int check_user_usb_string(const char *name,
>  #define MAX_NAME_LEN	40
>  #define MAX_USB_STRING_LANGS 2
>  
> +static const struct usb_descriptor_header *otg_desc[2];
> +
>  struct gadget_info {
>  	struct config_group group;
>  	struct config_group functions_group;
> @@ -55,9 +57,6 @@ struct gadget_info {
>  	struct list_head available_func;
>  
>  	const char *udc_name;
> -#ifdef CONFIG_USB_OTG
> -	struct usb_otg_descriptor otg;
> -#endif
>  	struct usb_composite_driver composite;
>  	struct usb_composite_dev cdev;
>  	bool use_os_desc;
> @@ -1376,6 +1375,24 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
>  		memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN);
>  	}
>  
> +	if (gadget_is_otg(gadget) && !otg_desc[0]) {
> +		struct usb_descriptor_header *usb_desc;
> +		unsigned length;
> +
> +		if (gadget->otg_rev >= 0x0200)
> +			length = sizeof(struct usb_otg20_descriptor);
> +		else
> +			length = sizeof(struct usb_otg_descriptor);
> +		usb_desc = kzalloc(length, GFP_KERNEL);
> +		if (!usb_desc) {
> +			ret = -ENOMEM;
> +			goto err_comp_cleanup;
> +		}

This code seems to be common across all gadgets.
Can we have usb_otg_descriptor_alloc() that takes care of allocating the
right size based on descriptor version?

Then we can have
		usb_desc = usb_otg_descriptor_alloc(gadget);
		if (IS_ERR(usb_desc)) {
			ret = PTR_ERR(usb_desc);
			goto err_comp_cleanup;
		}

> +		usb_otg_descriptor_init(gadget, usb_desc);
> +		otg_desc[0] = usb_desc;
> +		otg_desc[1] = NULL;
> +	}
> +
>  	/* Go through all configs, attach all functions */
>  	list_for_each_entry(c, &gi->cdev.configs, list) {
>  		struct config_usb_cfg *cfg;
> @@ -1383,6 +1400,9 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
>  		struct usb_function *tmp;
>  		struct gadget_config_name *cn;
>  
> +		if (gadget_is_otg(gadget))
> +			c->descriptors = otg_desc;
> +
>  		cfg = container_of(c, struct config_usb_cfg, c);
>  		if (!list_empty(&cfg->string_list)) {
>  			i = 0;
> @@ -1437,6 +1457,8 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
>  	cdev = get_gadget_data(gadget);
>  	gi = container_of(cdev, struct gadget_info, cdev);
>  
> +	kfree(otg_desc[0]);
> +	otg_desc[0] = NULL;
>  	purge_configs_funcs(gi);
>  	composite_dev_cleanup(cdev);
>  	usb_ep_autoconfig_reset(cdev->gadget);
> @@ -1510,12 +1532,6 @@ static struct config_group *gadgets_make(
>  	if (!gi->composite.gadget_driver.function)
>  		goto err;
>  
> -#ifdef CONFIG_USB_OTG
> -	gi->otg.bLength = sizeof(struct usb_otg_descriptor);
> -	gi->otg.bDescriptorType = USB_DT_OTG;
> -	gi->otg.bmAttributes = USB_OTG_SRP | USB_OTG_HNP;
> -#endif
> -
>  	config_group_init_type_name(&gi->group, name,
>  				&gadget_root_type);
>  	return &gi->group;

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor
       [not found]     ` <1434437532-23678-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  8:01       ` Roger Quadros
  2015-06-16  8:13         ` Li Jun
  0 siblings, 1 reply; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  8:01 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:59 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> Allocate usb_otg_descriptor and initialize it according to gadget otg
> options, if none of options is not set, keep bmAttributes setting as
> current gadget drivers, with this new interface, usb_otg_descriptor can
> include bcdOTG if OTG 2.0 or later, and otg features can be decided by
> the combination of usb hardware property and driver config.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  drivers/usb/gadget/config.c | 39 +++++++++++++++++++++++++++++++++++++++
>  include/linux/usb/gadget.h  |  2 ++
>  2 files changed, 41 insertions(+)
> 
> diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
> index 34e12fc..9ebc052 100644
> --- a/drivers/usb/gadget/config.c
> +++ b/drivers/usb/gadget/config.c
> @@ -195,3 +195,42 @@ void usb_free_all_descriptors(struct usb_function *f)
>  	usb_free_descriptors(f->ss_descriptors);
>  }
>  EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
> +
> +int usb_otg_descriptor_init(struct usb_gadget *gadget,
> +		struct usb_descriptor_header *otg_desc)
> +{
> +	struct usb_otg_descriptor *otg1x_desc;
> +	struct usb_otg20_descriptor *otg20_desc;
> +	u8 otg_attributes = 0;
> +
> +	if (!otg_desc)
> +		return -EINVAL;
> +
> +	if (gadget->adp_support || gadget->hnp_support ||
> +					gadget->srp_support) {
> +		if (gadget->adp_support)
> +			otg_attributes |= USB_OTG_ADP;
> +		if (gadget->hnp_support)
> +			otg_attributes |= USB_OTG_HNP;
> +		if (gadget->srp_support)
> +			otg_attributes |= USB_OTG_SRP;
> +	} else {
> +		otg_attributes = USB_OTG_SRP | USB_OTG_HNP;
> +	}

Didn't we agree that if otg_rev is not set then only we will use the legacy
method?

> +
> +	if (gadget->otg_rev >= 0x0200) {
> +		otg20_desc = (struct usb_otg20_descriptor *)otg_desc;
> +		otg20_desc->bLength = sizeof(struct usb_otg20_descriptor);
> +		otg20_desc->bDescriptorType = USB_DT_OTG;
> +		otg20_desc->bmAttributes = otg_attributes;
> +		otg20_desc->bcdOTG = cpu_to_le16(gadget->otg_rev);
> +	} else {
> +		otg1x_desc = (struct usb_otg_descriptor *)otg_desc;
> +		otg1x_desc->bLength = sizeof(struct usb_otg_descriptor);
> +		otg1x_desc->bDescriptorType = USB_DT_OTG;
> +		otg1x_desc->bmAttributes = otg_attributes;
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(usb_otg_descriptor_init);
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index 814cb70..b77730e 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -1013,6 +1013,8 @@ int usb_assign_descriptors(struct usb_function *f,
>  		struct usb_descriptor_header **ss);
>  void usb_free_all_descriptors(struct usb_function *f);
>  
> +int usb_otg_descriptor_init(struct usb_gadget *gadget,
> +		struct usb_descriptor_header *otg_desc);
>  /*-------------------------------------------------------------------------*/
>  
>  /* utility to simplify map/unmap of usb_requests to/from DMA */

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 03/22] usb: add OTG feature options to gadget structure.
  2015-06-16  7:28       ` Roger Quadros
@ 2015-06-16  8:06         ` Li Jun
  0 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  8:06 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Tue, Jun 16, 2015 at 10:28:57AM +0300, Roger Quadros wrote:
> 
> On Tue, 16 Jun 2015 14:51:53 +0800
> Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> > 
> > Add ADP, HNP and SRP feature options and otg version to gadget structure.
> > 
> > Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  include/linux/usb/gadget.h | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> > index 4f3dfb7..814cb70 100644
> > --- a/include/linux/usb/gadget.h
> > +++ b/include/linux/usb/gadget.h
> > @@ -514,6 +514,12 @@ struct usb_gadget_ops {
> >   * @sg_supported: true if we can handle scatter-gather
> >   * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
> >   *	gadget driver must provide a USB OTG descriptor.
> > + * @adp_support: OTG device feature flag, indicating that the device
> > +	supports ADP at this port.
> > + * @hnp_support: OTG device feature flag, indicating that the device
> > +	supports HNP at this port.
> > + * @srp_support: OTG device feature flag, indicating that the device
> > +	supports SRP at this port.
> >   * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
> >   *	is in the Mini-AB jack, and HNP has been used to switch roles
> >   *	so that the "A" device currently acts as A-Peripheral, not A-Host.
> > @@ -526,6 +532,7 @@ struct usb_gadget_ops {
> >   * @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
> >   *	MaxPacketSize.
> >   * @is_selfpowered: if the gadget is self-powered.
> > + * @otg_rev: The OTG reversion number the device is compliant to.
> 
> reversion -> revision
> Also you might want to say that it is BCD encoded with an example
> e.g. 2.0 -> 0x0200
> 
Yes, I will add that.

Li Jun
> >   *
> >   * Gadgets have a mostly-portable "gadget driver" implementing device
> >   * functions, handling all usb configurations and interfaces.  Gadget
> > @@ -562,12 +569,16 @@ struct usb_gadget {
> >  
> >  	unsigned			sg_supported:1;
> >  	unsigned			is_otg:1;
> > +	unsigned			adp_support:1;
> > +	unsigned			hnp_support:1;
> > +	unsigned			srp_support:1;
> >  	unsigned			is_a_peripheral:1;
> >  	unsigned			b_hnp_enable:1;
> >  	unsigned			a_hnp_support:1;
> >  	unsigned			a_alt_hnp_support:1;
> >  	unsigned			quirk_ep_out_aligned_size:1;
> >  	unsigned			is_selfpowered:1;
> > +	u16				otg_rev;
> >  };
> >  #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
> >  
> 
> with that change you can add my
> 
> Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
> 
> cheers,
> -roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations
  2015-06-16  7:58       ` Roger Quadros
@ 2015-06-16  8:08         ` Li Jun
  0 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  8:08 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Tue, Jun 16, 2015 at 10:58:27AM +0300, Roger Quadros wrote:
> 
> On Tue, 16 Jun 2015 14:52:00 +0800
> Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
> > add it for each usb configurations, free it while composite unbind.
> > 
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  drivers/usb/gadget/configfs.c | 34 +++++++++++++++++++++++++---------
> >  1 file changed, 25 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
> > index 0495c94..773b746 100644
> > --- a/drivers/usb/gadget/configfs.c
> > +++ b/drivers/usb/gadget/configfs.c
> > @@ -41,6 +41,8 @@ int check_user_usb_string(const char *name,
> >  #define MAX_NAME_LEN	40
> >  #define MAX_USB_STRING_LANGS 2
> >  
> > +static const struct usb_descriptor_header *otg_desc[2];
> > +
> >  struct gadget_info {
> >  	struct config_group group;
> >  	struct config_group functions_group;
> > @@ -55,9 +57,6 @@ struct gadget_info {
> >  	struct list_head available_func;
> >  
> >  	const char *udc_name;
> > -#ifdef CONFIG_USB_OTG
> > -	struct usb_otg_descriptor otg;
> > -#endif
> >  	struct usb_composite_driver composite;
> >  	struct usb_composite_dev cdev;
> >  	bool use_os_desc;
> > @@ -1376,6 +1375,24 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
> >  		memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN);
> >  	}
> >  
> > +	if (gadget_is_otg(gadget) && !otg_desc[0]) {
> > +		struct usb_descriptor_header *usb_desc;
> > +		unsigned length;
> > +
> > +		if (gadget->otg_rev >= 0x0200)
> > +			length = sizeof(struct usb_otg20_descriptor);
> > +		else
> > +			length = sizeof(struct usb_otg_descriptor);
> > +		usb_desc = kzalloc(length, GFP_KERNEL);
> > +		if (!usb_desc) {
> > +			ret = -ENOMEM;
> > +			goto err_comp_cleanup;
> > +		}
> 
> This code seems to be common across all gadgets.
> Can we have usb_otg_descriptor_alloc() that takes care of allocating the
> right size based on descriptor version?
> 
> Then we can have
> 		usb_desc = usb_otg_descriptor_alloc(gadget);
> 		if (IS_ERR(usb_desc)) {
> 			ret = PTR_ERR(usb_desc);
> 			goto err_comp_cleanup;
> 		}
> 

That's better, I will update in next version.

Li Jun
> > +		usb_otg_descriptor_init(gadget, usb_desc);
> > +		otg_desc[0] = usb_desc;
> > +		otg_desc[1] = NULL;
> > +	}
> > +
> >  	/* Go through all configs, attach all functions */
> >  	list_for_each_entry(c, &gi->cdev.configs, list) {
> >  		struct config_usb_cfg *cfg;
> > @@ -1383,6 +1400,9 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
> >  		struct usb_function *tmp;
> >  		struct gadget_config_name *cn;
> >  
> > +		if (gadget_is_otg(gadget))
> > +			c->descriptors = otg_desc;
> > +
> >  		cfg = container_of(c, struct config_usb_cfg, c);
> >  		if (!list_empty(&cfg->string_list)) {
> >  			i = 0;
> > @@ -1437,6 +1457,8 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
> >  	cdev = get_gadget_data(gadget);
> >  	gi = container_of(cdev, struct gadget_info, cdev);
> >  
> > +	kfree(otg_desc[0]);
> > +	otg_desc[0] = NULL;
> >  	purge_configs_funcs(gi);
> >  	composite_dev_cleanup(cdev);
> >  	usb_ep_autoconfig_reset(cdev->gadget);
> > @@ -1510,12 +1532,6 @@ static struct config_group *gadgets_make(
> >  	if (!gi->composite.gadget_driver.function)
> >  		goto err;
> >  
> > -#ifdef CONFIG_USB_OTG
> > -	gi->otg.bLength = sizeof(struct usb_otg_descriptor);
> > -	gi->otg.bDescriptorType = USB_DT_OTG;
> > -	gi->otg.bmAttributes = USB_OTG_SRP | USB_OTG_HNP;
> > -#endif
> > -
> >  	config_group_init_type_name(&gi->group, name,
> >  				&gadget_root_type);
> >  	return &gi->group;
> 
> cheers,
> -roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor
  2015-06-16  8:01       ` Roger Quadros
@ 2015-06-16  8:13         ` Li Jun
  0 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  8:13 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Tue, Jun 16, 2015 at 11:01:58AM +0300, Roger Quadros wrote:
> 
> On Tue, 16 Jun 2015 14:51:59 +0800
> Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > Allocate usb_otg_descriptor and initialize it according to gadget otg
> > options, if none of options is not set, keep bmAttributes setting as
> > current gadget drivers, with this new interface, usb_otg_descriptor can
> > include bcdOTG if OTG 2.0 or later, and otg features can be decided by
> > the combination of usb hardware property and driver config.
> > 
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  drivers/usb/gadget/config.c | 39 +++++++++++++++++++++++++++++++++++++++
> >  include/linux/usb/gadget.h  |  2 ++
> >  2 files changed, 41 insertions(+)
> > 
> > diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
> > index 34e12fc..9ebc052 100644
> > --- a/drivers/usb/gadget/config.c
> > +++ b/drivers/usb/gadget/config.c
> > @@ -195,3 +195,42 @@ void usb_free_all_descriptors(struct usb_function *f)
> >  	usb_free_descriptors(f->ss_descriptors);
> >  }
> >  EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
> > +
> > +int usb_otg_descriptor_init(struct usb_gadget *gadget,
> > +		struct usb_descriptor_header *otg_desc)
> > +{
> > +	struct usb_otg_descriptor *otg1x_desc;
> > +	struct usb_otg20_descriptor *otg20_desc;
> > +	u8 otg_attributes = 0;
> > +
> > +	if (!otg_desc)
> > +		return -EINVAL;
> > +
> > +	if (gadget->adp_support || gadget->hnp_support ||
> > +					gadget->srp_support) {
> > +		if (gadget->adp_support)
> > +			otg_attributes |= USB_OTG_ADP;
> > +		if (gadget->hnp_support)
> > +			otg_attributes |= USB_OTG_HNP;
> > +		if (gadget->srp_support)
> > +			otg_attributes |= USB_OTG_SRP;
> > +	} else {
> > +		otg_attributes = USB_OTG_SRP | USB_OTG_HNP;
> > +	}
> 
> Didn't we agree that if otg_rev is not set then only we will use the legacy
> method?
> 
oh, yes, we had agreed that approach, seems I missed the update here,
it's easier to use otg_rev to judge legacy platform, I will update.

Li Jun
> > +
> > +	if (gadget->otg_rev >= 0x0200) {
> > +		otg20_desc = (struct usb_otg20_descriptor *)otg_desc;
> > +		otg20_desc->bLength = sizeof(struct usb_otg20_descriptor);
> > +		otg20_desc->bDescriptorType = USB_DT_OTG;
> > +		otg20_desc->bmAttributes = otg_attributes;
> > +		otg20_desc->bcdOTG = cpu_to_le16(gadget->otg_rev);
> > +	} else {
> > +		otg1x_desc = (struct usb_otg_descriptor *)otg_desc;
> > +		otg1x_desc->bLength = sizeof(struct usb_otg_descriptor);
> > +		otg1x_desc->bDescriptorType = USB_DT_OTG;
> > +		otg1x_desc->bmAttributes = otg_attributes;
> > +	}
> > +
> > +	return 0;
> > +}
> > +EXPORT_SYMBOL_GPL(usb_otg_descriptor_init);
> > diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> > index 814cb70..b77730e 100644
> > --- a/include/linux/usb/gadget.h
> > +++ b/include/linux/usb/gadget.h
> > @@ -1013,6 +1013,8 @@ int usb_assign_descriptors(struct usb_function *f,
> >  		struct usb_descriptor_header **ss);
> >  void usb_free_all_descriptors(struct usb_function *f);
> >  
> > +int usb_otg_descriptor_init(struct usb_gadget *gadget,
> > +		struct usb_descriptor_header *otg_desc);
> >  /*-------------------------------------------------------------------------*/
> >  
> >  /* utility to simplify map/unmap of usb_requests to/from DMA */
> 
> cheers,
> -roger
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties
       [not found]     ` <1434437532-23678-6-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  8:21       ` Roger Quadros
  2015-06-16  8:32         ` Li Jun
  0 siblings, 1 reply; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  8:21 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:55 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> Add otg version, srp, hnp and adp support for usb OTG port, then those OTG
> features don't have to be decided by usb gadget drivers.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  Documentation/devicetree/bindings/usb/generic.txt | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
> index 477d5bb..eb7308e 100644
> --- a/Documentation/devicetree/bindings/usb/generic.txt
> +++ b/Documentation/devicetree/bindings/usb/generic.txt
> @@ -11,6 +11,20 @@ Optional properties:
>  			"peripheral" and "otg". In case this attribute isn't
>  			passed via DT, USB DRD controllers should default to
>  			OTG.
> + - otg-rev: tells usb driver the release number of the OTG and EH supplement
> +			with which the device and its descriptors are compliant,
> +			in binary-coded decimal (i.e. 2.0 is 0200H). This
> +			property is used if any real OTG features(HNP/SRP/ADP)
> +			is enabled, also if ADP is enabled, otg-rev should be
> +			0x0200 or above.

How about saying "if ADP is required, otg-rev should be 0x0200 or above"

> + - hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP
> +			is the basic function of real OTG except you want it
> +			to be a srp-capable only B device.
> + - srp-disable: tells OTG controllers we want to disable OTG SRP, SRP is
> +			optional for OTG device.
> + - adp-disable: tells OTG controllers we want to disable OTG ADP, ADP is
> +			optional for OTG device, if not passed, otg-rev should
> +			be set to be 0x0200 or above.

Why should we place this constraint on DT? Isn't is better
to handle it automatically in the USB code?

Not specifying the disable flag doesn't mean that it has to be enabled.
It means that enable it if it can be. i.e. supported by OTG rev and controller.

>  
>  This is an attribute to a USB controller such as:
>  
> @@ -21,4 +35,8 @@ dwc3@4a030000 {
>  	usb-phy = <&usb2_phy>, <&usb3,phy>;
>  	maximum-speed = "super-speed";
>  	dr_mode = "otg";
> +	otg-rev = <0x0200>;
> +	hnp-disable;
> +	srp-disable;
> +	adp-disable;
>  };

How about a more real world example? We don't want hnp/srp disabled.

cheers,
-roger

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties
  2015-06-16  8:21       ` Roger Quadros
@ 2015-06-16  8:32         ` Li Jun
  0 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16  8:32 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Tue, Jun 16, 2015 at 11:21:15AM +0300, Roger Quadros wrote:
> 
> On Tue, 16 Jun 2015 14:51:55 +0800
> Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > Add otg version, srp, hnp and adp support for usb OTG port, then those OTG
> > features don't have to be decided by usb gadget drivers.
> > 
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  Documentation/devicetree/bindings/usb/generic.txt | 18 ++++++++++++++++++
> >  1 file changed, 18 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
> > index 477d5bb..eb7308e 100644
> > --- a/Documentation/devicetree/bindings/usb/generic.txt
> > +++ b/Documentation/devicetree/bindings/usb/generic.txt
> > @@ -11,6 +11,20 @@ Optional properties:
> >  			"peripheral" and "otg". In case this attribute isn't
> >  			passed via DT, USB DRD controllers should default to
> >  			OTG.
> > + - otg-rev: tells usb driver the release number of the OTG and EH supplement
> > +			with which the device and its descriptors are compliant,
> > +			in binary-coded decimal (i.e. 2.0 is 0200H). This
> > +			property is used if any real OTG features(HNP/SRP/ADP)
> > +			is enabled, also if ADP is enabled, otg-rev should be
> > +			0x0200 or above.
> 
> How about saying "if ADP is required, otg-rev should be 0x0200 or above"
> 
okay.

> > + - hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP
> > +			is the basic function of real OTG except you want it
> > +			to be a srp-capable only B device.
> > + - srp-disable: tells OTG controllers we want to disable OTG SRP, SRP is
> > +			optional for OTG device.
> > + - adp-disable: tells OTG controllers we want to disable OTG ADP, ADP is
> > +			optional for OTG device, if not passed, otg-rev should
> > +			be set to be 0x0200 or above.
> 
> Why should we place this constraint on DT? Isn't is better
> to handle it automatically in the USB code?
> 
You are right, this can be done in USB code, I will remove this constraint
from it.

> Not specifying the disable flag doesn't mean that it has to be enabled.
> It means that enable it if it can be. i.e. supported by OTG rev and controller.
> 
Exactly.

> >  
> >  This is an attribute to a USB controller such as:
> >  
> > @@ -21,4 +35,8 @@ dwc3@4a030000 {
> >  	usb-phy = <&usb2_phy>, <&usb3,phy>;
> >  	maximum-speed = "super-speed";
> >  	dr_mode = "otg";
> > +	otg-rev = <0x0200>;
> > +	hnp-disable;
> > +	srp-disable;
> > +	adp-disable;
> >  };
> 
> How about a more real world example? We don't want hnp/srp disabled.
> 
My fault, actually it's a wrong example, I will update with a typical
setting as you pointed.

Li Jun
> cheers,
> -roger
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config
       [not found]     ` <1434437532-23678-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16  8:44       ` Roger Quadros
  2015-06-16  9:21         ` Li Jun
  0 siblings, 1 reply; 36+ messages in thread
From: Roger Quadros @ 2015-06-16  8:44 UTC (permalink / raw)
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 14:51:57 +0800
Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> Set gadget's otg features according to controller's capability and usb
> property in device tree.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  drivers/usb/chipidea/core.c  | 18 ++++++++++++++++++
>  drivers/usb/chipidea/udc.c   | 20 +++++++++++++++++++-
>  include/linux/usb/chipidea.h |  4 ++++
>  3 files changed, 41 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 74fea4f..45bd44e 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -588,6 +588,24 @@ static int ci_get_platdata(struct device *dev,
>  				of_usb_host_tpl_support(dev->of_node);
>  	}
>  
> +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> +		if (!platdata->otg_rev) {
> +			platdata->otg_rev =
> +				of_usb_get_otg_rev(dev->of_node);
> +		}
> +		if (platdata->otg_rev) {
> +			if (!platdata->srp_support)
> +				platdata->srp_support =
> +					!of_usb_otg_srp_disabled(dev->of_node);
> +			if (!platdata->hnp_support)
> +				platdata->hnp_support =
> +					!of_usb_otg_hnp_disabled(dev->of_node);
> +			if (!platdata->adp_support)
> +				platdata->adp_support =
> +					!of_usb_otg_adp_disabled(dev->of_node);
> +		}
> +	}
> +

Looks like there is some scope of sharing this code among controller drivers
and also adding sanity check.

How about adding
 
struct usb_otg_caps {
	u16 otg_rev;
	bool srp_support;
	bool hnp_support;
	bool adp_support;
};

And below API

/* sets device otg capabilities based on controller capabilities and device tree flags */
void of_usb_otg_set_capabilities(sturct device_node *node, struct usb_otg_caps *cntrl_caps, struct usb_otg_caps *device_caps)
{
	u16 otg_rev = of_usb_get_otg_rev(dev->of_node);

	*device_caps = *cntrl_caps;
	if (!otg_rev) {	/* legacy platform */
		device_caps->adp_support = false;
		/* For SRP/HNP respect what controller supports */
		return;
	}

	if (otg_rev < cntrl_caps->otg_rev)
		device_caps->otg_rev = cntrl_caps->otg_rev;
	if (of_usb_otg_srp_disabled(dev->of_node))
		device_caps->srp_support = false;
	if (of_usb_otg_hnp_disabled(dev->of_node))
		device_caps->hnp_support = false;
	if (of_usb_otg_adp_disabled(dev->of_node))
		device_caps->adp_support = false;

	/* sanity check */
	if ((otg_rev < 0x0200) && device_caps->adp_support) {
		/* pre otg 2.0 doesn't support ADP */
		device_caps->adp_support = false;
	}

	return;
}

>  	if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
>  		platdata->flags |= CI_HDRC_FORCE_FULLSPEED;
>  
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index 764f668..5d2c6e8 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -1821,6 +1821,24 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
>  }
>  
>  /**
> + * udc_update_otg_config: update gadget otg config
> + * * @ci: chipidea controller
> + */
> +static void udc_update_otg_config(struct ci_hdrc *ci)
> +{
> +	if (!ci->is_otg)
> +		return;
> +
> +	ci->gadget.otg_rev = ci->platdata->otg_rev;
> +	ci->gadget.srp_support = ci->platdata->srp_support;
> +	ci->gadget.hnp_support = ci->platdata->hnp_support;
> +	ci->gadget.adp_support = ci->platdata->adp_support;
> +	if (ci->gadget.srp_support || ci->gadget.hnp_support ||
> +					ci->gadget.adp_support)
> +		ci->gadget.is_otg = 1;
> +}
> +
> +/**
>   * udc_start: initialize gadget role
>   * @ci: chipidea controller
>   */
> @@ -1834,9 +1852,9 @@ static int udc_start(struct ci_hdrc *ci)
>  	ci->gadget.ops          = &usb_gadget_ops;
>  	ci->gadget.speed        = USB_SPEED_UNKNOWN;
>  	ci->gadget.max_speed    = USB_SPEED_HIGH;
> -	ci->gadget.is_otg       = ci->is_otg ? 1 : 0;
>  	ci->gadget.name         = ci->platdata->name;
>  
> +	udc_update_otg_config(ci);
>  	INIT_LIST_HEAD(&ci->gadget.ep_list);
>  
>  	/* alloc resources */
> diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> index ab94f78..6765b28 100644
> --- a/include/linux/usb/chipidea.h
> +++ b/include/linux/usb/chipidea.h
> @@ -34,7 +34,11 @@ struct ci_hdrc_platform_data {
>  #define CI_HDRC_CONTROLLER_STOPPED_EVENT	1
>  	void	(*notify_event) (struct ci_hdrc *ci, unsigned event);
>  	struct regulator	*reg_vbus;
> +	u16			otg_rev;
>  	bool			tpl_support;
> +	bool			srp_support;
> +	bool			hnp_support;
> +	bool			adp_support;

this then changes to
	struct usb_otg_caps	otg_caps;
>  };
>  
>  /* Default offset of capability registers */

cheers,
-roger

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config
  2015-06-16  8:44       ` Roger Quadros
@ 2015-06-16  9:21         ` Li Jun
  2015-06-17  8:21           ` Roger Quadros
  0 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16  9:21 UTC (permalink / raw)
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Tue, Jun 16, 2015 at 11:44:52AM +0300, Roger Quadros wrote:
> 
> On Tue, 16 Jun 2015 14:51:57 +0800
> Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> 
> > Set gadget's otg features according to controller's capability and usb
> > property in device tree.
> > 
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  drivers/usb/chipidea/core.c  | 18 ++++++++++++++++++
> >  drivers/usb/chipidea/udc.c   | 20 +++++++++++++++++++-
> >  include/linux/usb/chipidea.h |  4 ++++
> >  3 files changed, 41 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > index 74fea4f..45bd44e 100644
> > --- a/drivers/usb/chipidea/core.c
> > +++ b/drivers/usb/chipidea/core.c
> > @@ -588,6 +588,24 @@ static int ci_get_platdata(struct device *dev,
> >  				of_usb_host_tpl_support(dev->of_node);
> >  	}
> >  
> > +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> > +		if (!platdata->otg_rev) {
> > +			platdata->otg_rev =
> > +				of_usb_get_otg_rev(dev->of_node);
> > +		}
> > +		if (platdata->otg_rev) {
> > +			if (!platdata->srp_support)
> > +				platdata->srp_support =
> > +					!of_usb_otg_srp_disabled(dev->of_node);
> > +			if (!platdata->hnp_support)
> > +				platdata->hnp_support =
> > +					!of_usb_otg_hnp_disabled(dev->of_node);
> > +			if (!platdata->adp_support)
> > +				platdata->adp_support =
> > +					!of_usb_otg_adp_disabled(dev->of_node);
> > +		}
> > +	}
> > +
> 
> Looks like there is some scope of sharing this code among controller drivers
> and also adding sanity check.
> 
> How about adding
>  
> struct usb_otg_caps {
> 	u16 otg_rev;
> 	bool srp_support;
> 	bool hnp_support;
> 	bool adp_support;
> };
> 
I agree there is some sharing code across all controller drivers,
thus usb_otg_caps maybe desirable.

> And below API
> 
> /* sets device otg capabilities based on controller capabilities and device tree flags */
> void of_usb_otg_set_capabilities(sturct device_node *node, struct usb_otg_caps *cntrl_caps, struct usb_otg_caps *device_caps)
I think cntrl_caps is not needed, only device_caps of controller is okay;
If DT is used, then all capabilities are updated by DT, after that,
controller driver can override some of them if it wants to correct
some wrong property in DT(not disable some feature the controller
can not support).
> {
> 	u16 otg_rev = of_usb_get_otg_rev(dev->of_node);
> 
> 	*device_caps = *cntrl_caps;
> 	if (!otg_rev) {	/* legacy platform */
> 		device_caps->adp_support = false;
> 		/* For SRP/HNP respect what controller supports */
> 		return;
> 	}
> 
> 	if (otg_rev < cntrl_caps->otg_rev)
> 		device_caps->otg_rev = cntrl_caps->otg_rev;
Not catch your point, if controller can support a higher version
protocol, even passed a lower setting in DT, we still use higher
version?
> 	if (of_usb_otg_srp_disabled(dev->of_node))
> 		device_caps->srp_support = false;
> 	if (of_usb_otg_hnp_disabled(dev->of_node))
> 		device_caps->hnp_support = false;
> 	if (of_usb_otg_adp_disabled(dev->of_node))
> 		device_caps->adp_support = false;
> 
> 	/* sanity check */
> 	if ((otg_rev < 0x0200) && device_caps->adp_support) {
> 		/* pre otg 2.0 doesn't support ADP */
> 		device_caps->adp_support = false;
> 	}
> 
> 	return;
> }
> 
> >  	if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
> >  		platdata->flags |= CI_HDRC_FORCE_FULLSPEED;
> >  
> > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> > index 764f668..5d2c6e8 100644
> > --- a/drivers/usb/chipidea/udc.c
> > +++ b/drivers/usb/chipidea/udc.c
> > @@ -1821,6 +1821,24 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
> >  }
> >  
> >  /**
> > + * udc_update_otg_config: update gadget otg config
> > + * * @ci: chipidea controller
> > + */
> > +static void udc_update_otg_config(struct ci_hdrc *ci)
> > +{
> > +	if (!ci->is_otg)
> > +		return;
> > +
> > +	ci->gadget.otg_rev = ci->platdata->otg_rev;
> > +	ci->gadget.srp_support = ci->platdata->srp_support;
> > +	ci->gadget.hnp_support = ci->platdata->hnp_support;
> > +	ci->gadget.adp_support = ci->platdata->adp_support;
> > +	if (ci->gadget.srp_support || ci->gadget.hnp_support ||
> > +					ci->gadget.adp_support)
> > +		ci->gadget.is_otg = 1;
> > +}
> > +
> > +/**
> >   * udc_start: initialize gadget role
> >   * @ci: chipidea controller
> >   */
> > @@ -1834,9 +1852,9 @@ static int udc_start(struct ci_hdrc *ci)
> >  	ci->gadget.ops          = &usb_gadget_ops;
> >  	ci->gadget.speed        = USB_SPEED_UNKNOWN;
> >  	ci->gadget.max_speed    = USB_SPEED_HIGH;
> > -	ci->gadget.is_otg       = ci->is_otg ? 1 : 0;
> >  	ci->gadget.name         = ci->platdata->name;
> >  
> > +	udc_update_otg_config(ci);
> >  	INIT_LIST_HEAD(&ci->gadget.ep_list);
> >  
> >  	/* alloc resources */
> > diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> > index ab94f78..6765b28 100644
> > --- a/include/linux/usb/chipidea.h
> > +++ b/include/linux/usb/chipidea.h
> > @@ -34,7 +34,11 @@ struct ci_hdrc_platform_data {
> >  #define CI_HDRC_CONTROLLER_STOPPED_EVENT	1
> >  	void	(*notify_event) (struct ci_hdrc *ci, unsigned event);
> >  	struct regulator	*reg_vbus;
> > +	u16			otg_rev;
> >  	bool			tpl_support;
> > +	bool			srp_support;
> > +	bool			hnp_support;
> > +	bool			adp_support;
> 
> this then changes to
> 	struct usb_otg_caps	otg_caps;
> >  };
> >  
> >  /* Default offset of capability registers */
> 
> cheers,
> -roger
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config
  2015-06-16  9:21         ` Li Jun
@ 2015-06-17  8:21           ` Roger Quadros
  0 siblings, 0 replies; 36+ messages in thread
From: Roger Quadros @ 2015-06-17  8:21 UTC (permalink / raw)
  To: Li Jun
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w


On Tue, 16 Jun 2015 17:21:50 +0800
Li Jun <b47624-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:

> On Tue, Jun 16, 2015 at 11:44:52AM +0300, Roger Quadros wrote:
> > 
> > On Tue, 16 Jun 2015 14:51:57 +0800
> > Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org> wrote:
> > 
> > > Set gadget's otg features according to controller's capability and usb
> > > property in device tree.
> > > 
> > > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > > ---
> > >  drivers/usb/chipidea/core.c  | 18 ++++++++++++++++++
> > >  drivers/usb/chipidea/udc.c   | 20 +++++++++++++++++++-
> > >  include/linux/usb/chipidea.h |  4 ++++
> > >  3 files changed, 41 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > > index 74fea4f..45bd44e 100644
> > > --- a/drivers/usb/chipidea/core.c
> > > +++ b/drivers/usb/chipidea/core.c
> > > @@ -588,6 +588,24 @@ static int ci_get_platdata(struct device *dev,
> > >  				of_usb_host_tpl_support(dev->of_node);
> > >  	}
> > >  
> > > +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> > > +		if (!platdata->otg_rev) {
> > > +			platdata->otg_rev =
> > > +				of_usb_get_otg_rev(dev->of_node);
> > > +		}
> > > +		if (platdata->otg_rev) {
> > > +			if (!platdata->srp_support)
> > > +				platdata->srp_support =
> > > +					!of_usb_otg_srp_disabled(dev->of_node);
> > > +			if (!platdata->hnp_support)
> > > +				platdata->hnp_support =
> > > +					!of_usb_otg_hnp_disabled(dev->of_node);
> > > +			if (!platdata->adp_support)
> > > +				platdata->adp_support =
> > > +					!of_usb_otg_adp_disabled(dev->of_node);
> > > +		}
> > > +	}
> > > +
> > 
> > Looks like there is some scope of sharing this code among controller drivers
> > and also adding sanity check.
> > 
> > How about adding
> >  
> > struct usb_otg_caps {
> > 	u16 otg_rev;
> > 	bool srp_support;
> > 	bool hnp_support;
> > 	bool adp_support;
> > };
> > 
> I agree there is some sharing code across all controller drivers,
> thus usb_otg_caps maybe desirable.
> 
> > And below API
> > 
> > /* sets device otg capabilities based on controller capabilities and device tree flags */
> > void of_usb_otg_set_capabilities(sturct device_node *node, struct usb_otg_caps *cntrl_caps, struct usb_otg_caps *device_caps)
> I think cntrl_caps is not needed, only device_caps of controller is okay;
> If DT is used, then all capabilities are updated by DT, after that,
> controller driver can override some of them if it wants to correct
> some wrong property in DT(not disable some feature the controller
> can not support).

OK.

> > {
> > 	u16 otg_rev = of_usb_get_otg_rev(dev->of_node);
> > 
> > 	*device_caps = *cntrl_caps;
> > 	if (!otg_rev) {	/* legacy platform */
> > 		device_caps->adp_support = false;
> > 		/* For SRP/HNP respect what controller supports */
> > 		return;
> > 	}
> > 
> > 	if (otg_rev < cntrl_caps->otg_rev)
> > 		device_caps->otg_rev = cntrl_caps->otg_rev;
> Not catch your point, if controller can support a higher version
> protocol, even passed a lower setting in DT, we still use higher
> version?

My mistake. Should have been
	if (otg_rev < cntrl_caps->otg_rev)
		device_caps->org_rev = otg_rev;


> > 	if (of_usb_otg_srp_disabled(dev->of_node))
> > 		device_caps->srp_support = false;
> > 	if (of_usb_otg_hnp_disabled(dev->of_node))
> > 		device_caps->hnp_support = false;
> > 	if (of_usb_otg_adp_disabled(dev->of_node))
> > 		device_caps->adp_support = false;
> > 
> > 	/* sanity check */
> > 	if ((otg_rev < 0x0200) && device_caps->adp_support) {
> > 		/* pre otg 2.0 doesn't support ADP */
> > 		device_caps->adp_support = false;
> > 	}
> > 
> > 	return;
> > }

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2015-06-17  8:21 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-16  6:51 [PATCH v3 00/22] usb gadget update for OTG 2.0 Li Jun
     [not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  6:51   ` [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
     [not found]     ` <1434437532-23678-2-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  7:25       ` Roger Quadros
2015-06-16  6:51   ` [PATCH v3 02/22] usb: add USB_OTG_ADP definition Li Jun
2015-06-16  6:51   ` [PATCH v3 03/22] usb: add OTG feature options to gadget structure Li Jun
     [not found]     ` <1434437532-23678-4-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  7:28       ` Roger Quadros
2015-06-16  8:06         ` Li Jun
2015-06-16  6:51   ` [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
     [not found]     ` <1434437532-23678-5-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  7:30       ` Roger Quadros
2015-06-16  6:51   ` [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties Li Jun
     [not found]     ` <1434437532-23678-6-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  8:21       ` Roger Quadros
2015-06-16  8:32         ` Li Jun
2015-06-16  6:51   ` [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree Li Jun
2015-06-16  6:51   ` [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config Li Jun
     [not found]     ` <1434437532-23678-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  8:44       ` Roger Quadros
2015-06-16  9:21         ` Li Jun
2015-06-17  8:21           ` Roger Quadros
2015-06-16  6:51   ` [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
2015-06-16  6:51   ` [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor Li Jun
     [not found]     ` <1434437532-23678-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  8:01       ` Roger Quadros
2015-06-16  8:13         ` Li Jun
2015-06-16  6:52   ` [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations Li Jun
     [not found]     ` <1434437532-23678-11-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16  7:58       ` Roger Quadros
2015-06-16  8:08         ` Li Jun
2015-06-16  6:52   ` [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add Li Jun
2015-06-16  6:52   ` [PATCH v3 12/22] usb: gadget: acm_ms: " Li Jun
2015-06-16  6:52   ` [PATCH v3 13/22] usb: gadget: audio: " Li Jun
2015-06-16  6:52   ` [PATCH v3 14/22] usb: gadget: cdc2: " Li Jun
2015-06-16  6:52   ` [PATCH v3 15/22] usb: gadget: g_ffs: " Li Jun
2015-06-16  6:52   ` [PATCH v3 16/22] usb: gadget: hid: " Li Jun
2015-06-16  6:52   ` [PATCH v3 17/22] usb: gadget: mass_storage: " Li Jun
2015-06-16  6:52   ` [PATCH v3 18/22] usb: gadget: multi: " Li Jun
2015-06-16  6:52   ` [PATCH v3 19/22] usb: gadget: ncm: " Li Jun
2015-06-16  6:52   ` [PATCH v3 20/22] usb: gadget: printer: " Li Jun
2015-06-16  6:52   ` [PATCH v3 21/22] usb: gadget: serial: " Li Jun
2015-06-16  6:52   ` [PATCH v3 22/22] usb: gadget: zero: " Li Jun

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.