All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 00/23] usb gadget update for OTG 2.0
@ 2015-07-09  7:18 Li Jun
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  0 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Change for v7:
- Free otg descriptor when failure of bind in patch 21, 22, 23.
  add Roger's Reviewed-by for patch 10~20.
- Choose the lesser otg-rev if otg-rev has been set before update by DT,
  remove 0x0300 in supported otg-rev list, and add code comments in case
  otg-rev is not passed in DT in patch 7.
- Fail chipidea usb initilization if DT pass an unsupported otg-rev in patch 8.

Change for v6:
- Change of_usb_set_otg_caps to be of_usb_update_otg_caps, and add
  sanity check of otg-rev.
- Add chipidea otg-rev ability to be 0x0200, which will be updated
  in DT, if not passed, will be reset to be 0.
- Remove unnecessary change: move config's descriptor and bmAttributes
  init from xxxi_config() to xxx_bind() in leagcy gadget drivers.

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. Add usb_otg20_descriptor definition for OTG 2.0 which introduces bcdOTG
   field for otg revision, bcdOTG 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. Remove static usb otg descriptor definition, but allocate and init it
   according to otg capabilities in each gadget driver, if otg capabilities
   is not defined for legacy platforms, the usb otg descriptor content is
   kept the same as current static definition.

Li Jun (19):
  usb: otg: add usb_otg_caps structure for otg capabilities
  doc: dt-binding: usb: add otg related properties
  usb: common: add API to update usb otg capabilities by device tree
  usb: chipidea: set usb otg capabilities
  usb: chipidea: update ci_otg_is_fsm_mode conditions
  usb: gadget: add usb otg descriptor allocate and init interface
  usb: gadget: configfs: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: ether: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: acm_ms: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: audio: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: cdc2: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: g_ffs: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: hid: allocate and init otg descriptor by otg capabilities
  usb: gadget: mass_storage: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: multi: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: ncm: allocate and init otg descriptor by otg capabilities
  usb: gadget: printer: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: serial: allocate and init otg descriptor by otg
    capabilities
  usb: gadget: zero: allocate and init otg descriptor by otg
    capabilities

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

 Documentation/devicetree/bindings/usb/generic.txt | 15 ++++++
 drivers/usb/chipidea/ci.h                         |  5 +-
 drivers/usb/chipidea/core.c                       | 15 ++++++
 drivers/usb/chipidea/debug.c                      |  1 +
 drivers/usb/chipidea/udc.c                        |  7 ++-
 drivers/usb/common/common.c                       | 56 +++++++++++++++++++++++
 drivers/usb/gadget/composite.c                    | 27 +++++++++++
 drivers/usb/gadget/config.c                       | 56 +++++++++++++++++++++++
 drivers/usb/gadget/configfs.c                     | 29 ++++++++----
 drivers/usb/gadget/legacy/acm_ms.c                | 35 +++++++-------
 drivers/usb/gadget/legacy/audio.c                 | 34 ++++++++------
 drivers/usb/gadget/legacy/cdc2.c                  | 35 +++++++-------
 drivers/usb/gadget/legacy/ether.c                 | 36 ++++++++-------
 drivers/usb/gadget/legacy/g_ffs.c                 | 32 +++++++------
 drivers/usb/gadget/legacy/hid.c                   | 36 ++++++++-------
 drivers/usb/gadget/legacy/mass_storage.c          | 35 +++++++-------
 drivers/usb/gadget/legacy/multi.c                 | 37 ++++++++-------
 drivers/usb/gadget/legacy/ncm.c                   | 34 ++++++++------
 drivers/usb/gadget/legacy/printer.c               | 49 ++++++++++++--------
 drivers/usb/gadget/legacy/serial.c                | 37 ++++++++-------
 drivers/usb/gadget/legacy/zero.c                  | 41 +++++++++--------
 include/linux/usb/chipidea.h                      |  1 +
 include/linux/usb/gadget.h                        |  6 +++
 include/linux/usb/of.h                            |  7 +++
 include/linux/usb/otg.h                           | 15 ++++++
 include/uapi/linux/usb/ch9.h                      | 12 +++++
 26 files changed, 485 insertions(+), 208 deletions(-)

-- 
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	[flat|nested] 38+ messages in thread

* [PATCH v7 01/23] usb: add usb_otg20_descriptor for OTG 2.0 and above
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 02/23] usb: add USB_OTG_ADP definition Li Jun
                     ` (23 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@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 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] 38+ messages in thread

* [PATCH v7 02/23] usb: add USB_OTG_ADP definition
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 01/23] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 03/23] usb: otg: add usb_otg_caps structure for otg capabilities Li Jun
                     ` (22 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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] 38+ messages in thread

* [PATCH v7 03/23] usb: otg: add usb_otg_caps structure for otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 01/23] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
  2015-07-09  7:18   ` [PATCH v7 02/23] usb: add USB_OTG_ADP definition Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 04/23] usb: add usb_otg_caps to usb_gadget structure Li Jun
                     ` (21 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

This patch adds a structure usb_otg_caps to cover all otg related
capabilities of the device, including otg revision, and if hnp/srp/adp
is supported.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 include/linux/usb/otg.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 52661c5..bd1dcf8 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -41,6 +41,21 @@ struct usb_otg {
 
 };
 
+/**
+ * struct usb_otg_caps - describes the otg capabilities of the device
+ * @otg_rev: The OTG revision number the device is compliant with, it's
+ *		in binary-coded decimal (i.e. 2.0 is 0200H).
+ * @hnp_support: Indicates if the device supports HNP.
+ * @srp_support: Indicates if the device supports SRP.
+ * @adp_support: Indicates if the device supports ADP.
+ */
+struct usb_otg_caps {
+	u16 otg_rev;
+	bool hnp_support;
+	bool srp_support;
+	bool adp_support;
+};
+
 extern const char *usb_otg_state_string(enum usb_otg_state state);
 
 /* Context: can sleep */
-- 
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] 38+ messages in thread

* [PATCH v7 04/23] usb: add usb_otg_caps to usb_gadget structure.
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (2 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 03/23] usb: otg: add usb_otg_caps structure for otg capabilities Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 05/23] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
                     ` (20 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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_caps pointer to usb_gadget structure to indicate its
otg capabilities.

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>
---
 include/linux/usb/gadget.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 4f3dfb7..6b39087 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -511,6 +511,7 @@ struct usb_gadget_ops {
  * @dev: Driver model state for this abstract device.
  * @out_epnum: last used out ep number
  * @in_epnum: last used in ep number
+ * @otg_caps: OTG capabilities of this gadget.
  * @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.
@@ -559,6 +560,7 @@ struct usb_gadget {
 	struct device			dev;
 	unsigned			out_epnum;
 	unsigned			in_epnum;
+	struct usb_otg_caps		*otg_caps;
 
 	unsigned			sg_supported:1;
 	unsigned			is_otg:1;
-- 
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] 38+ messages in thread

* [PATCH v7 05/23] usb: gadget: composite: add USB_DT_OTG request handling
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (3 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 04/23] usb: add usb_otg_caps to usb_gadget structure Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 06/23] doc: dt-binding: usb: add otg related properties Li Jun
                     ` (19 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/composite.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 4e3447b..2c1c6eb 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -19,6 +19,7 @@
 #include <linux/utsname.h>
 
 #include <linux/usb/composite.h>
+#include <linux/usb/otg.h>
 #include <asm/unaligned.h>
 
 #include "u_os_desc.h"
@@ -1534,6 +1535,32 @@ 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_caps &&
+					(gadget->otg_caps->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] 38+ messages in thread

* [PATCH v7 06/23] doc: dt-binding: usb: add otg related properties
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (4 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 05/23] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 07/23] usb: common: add API to update usb otg capabilities by device tree Li Jun
                     ` (18 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 Documentation/devicetree/bindings/usb/generic.txt | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
index 477d5bb..bba8257 100644
--- a/Documentation/devicetree/bindings/usb/generic.txt
+++ b/Documentation/devicetree/bindings/usb/generic.txt
@@ -11,6 +11,19 @@ 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, 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.
 
 This is an attribute to a USB controller such as:
 
@@ -21,4 +34,6 @@ dwc3@4a030000 {
 	usb-phy = <&usb2_phy>, <&usb3,phy>;
 	maximum-speed = "super-speed";
 	dr_mode = "otg";
+	otg-rev = <0x0200>;
+	adp-disable;
 };
-- 
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] 38+ messages in thread

* [PATCH v7 07/23] usb: common: add API to update usb otg capabilities by device tree
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (5 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 06/23] doc: dt-binding: usb: add otg related properties Li Jun
@ 2015-07-09  7:18   ` Li Jun
       [not found]     ` <1436426340-18477-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 08/23] usb: chipidea: set usb otg capabilities Li Jun
                     ` (17 subsequent siblings)
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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 update otg version and disable SRP, HNP
and ADP if its disable flag is present.

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

diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index b530fd4..9e39286 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -154,6 +154,62 @@ bool of_usb_host_tpl_support(struct device_node *np)
 	return false;
 }
 EXPORT_SYMBOL_GPL(of_usb_host_tpl_support);
+
+/**
+ * of_usb_update_otg_caps - to update usb otg capabilities according to
+ * the passed properties in DT.
+ * @np: Pointer to the given device_node
+ * @otg_caps: Pointer to the target usb_otg_caps to be set
+ *
+ * The function updates the otg capabilities
+ */
+int of_usb_update_otg_caps(struct device_node *np,
+			struct usb_otg_caps *otg_caps)
+{
+	u32 otg_rev;
+
+	if (!otg_caps)
+		return -EINVAL;
+
+	if (!of_property_read_u32(np, "otg-rev", &otg_rev)) {
+		switch (otg_rev) {
+		case 0x0100:
+		case 0x0120:
+		case 0x0130:
+		case 0x0200:
+			/* Choose the lesser one if it's already been set */
+			if (otg_caps->otg_rev)
+				otg_caps->otg_rev = min_t(u16, otg_rev,
+							otg_caps->otg_rev);
+			else
+				otg_caps->otg_rev = otg_rev;
+			break;
+		default:
+			pr_err("%s: unsupported otg-rev: 0x%x\n",
+						np->full_name, otg_rev);
+			return -EINVAL;
+		}
+	} else {
+		/*
+		 * otg-rev is mandatory for otg properties, if not passed
+		 * we set it to be 0 and assume it's a legacy otg device.
+		 * Non-dt platform can set it afterwards.
+		 */
+		otg_caps->otg_rev = 0;
+	}
+
+	if (of_find_property(np, "hnp-disable", NULL))
+		otg_caps->hnp_support = false;
+	if (of_find_property(np, "srp-disable", NULL))
+		otg_caps->srp_support = false;
+	if (of_find_property(np, "adp-disable", NULL) ||
+				(otg_caps->otg_rev < 0x0200))
+		otg_caps->adp_support = false;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(of_usb_update_otg_caps);
+
 #endif
 
 MODULE_LICENSE("GPL");
diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index cfe0528..8c5a818 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -15,6 +15,8 @@
 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);
+int of_usb_update_otg_caps(struct device_node *np,
+			struct usb_otg_caps *otg_caps);
 #else
 static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
 {
@@ -30,6 +32,11 @@ static inline bool of_usb_host_tpl_support(struct device_node *np)
 {
 	return false;
 }
+static inline int of_usb_update_otg_caps(struct device_node *np,
+				struct usb_otg_caps *otg_caps)
+{
+	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] 38+ messages in thread

* [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (6 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 07/23] usb: common: add API to update usb otg capabilities by device tree Li Jun
@ 2015-07-09  7:18   ` Li Jun
       [not found]     ` <1436426340-18477-9-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 09/23] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
                     ` (16 subsequent siblings)
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Init and update otg capabilities by DT, set gadget's otg capabilities
accordingly.

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

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 74fea4f..1e6d5f0 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
 static int ci_get_platdata(struct device *dev,
 		struct ci_hdrc_platform_data *platdata)
 {
+	int ret;
+
 	if (!platdata->phy_mode)
 		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
 
@@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
 				of_usb_host_tpl_support(dev->of_node);
 	}
 
+	if (platdata->dr_mode == USB_DR_MODE_OTG) {
+		/* We can support HNP and SRP of OTG 2.0 */
+		platdata->ci_otg_caps.otg_rev = 0x0200;
+		platdata->ci_otg_caps.hnp_support = true;
+		platdata->ci_otg_caps.srp_support = true;
+
+		/* Update otg capabilities by DT properties */
+		ret = of_usb_update_otg_caps(dev->of_node,
+					&platdata->ci_otg_caps);
+		if (ret)
+			return ret;
+	}
+
 	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..b7cca3e 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
 static int udc_start(struct ci_hdrc *ci)
 {
 	struct device *dev = ci->dev;
+	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
 	int retval = 0;
 
 	spin_lock_init(&ci->lock);
@@ -1834,8 +1835,12 @@ 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;
+	ci->gadget.otg_caps	= otg_caps;
+
+	if (otg_caps->hnp_support || otg_caps->srp_support ||
+					otg_caps->adp_support)
+		ci->gadget.is_otg = 1;
 
 	INIT_LIST_HEAD(&ci->gadget.ep_list);
 
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
index ab94f78..e10cefc 100644
--- a/include/linux/usb/chipidea.h
+++ b/include/linux/usb/chipidea.h
@@ -34,6 +34,7 @@ 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;
+	struct usb_otg_caps	ci_otg_caps;
 	bool			tpl_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] 38+ messages in thread

* [PATCH v7 09/23] usb: chipidea: update ci_otg_is_fsm_mode conditions
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (7 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 08/23] usb: chipidea: set usb otg capabilities Li Jun
@ 2015-07-09  7:18   ` Li Jun
       [not found]     ` <1436426340-18477-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 10/23] usb: gadget: add usb otg descriptor allocate and init interface Li Jun
                     ` (15 subsequent siblings)
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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    | 5 ++++-
 drivers/usb/chipidea/debug.c | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 6d6200e..f243f0b 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -406,8 +406,11 @@ static inline u32 hw_test_and_write(struct ci_hdrc *ci, enum ci_hw_regs reg,
 static inline bool ci_otg_is_fsm_mode(struct ci_hdrc *ci)
 {
 #ifdef CONFIG_USB_OTG_FSM
+	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
+
 	return ci->is_otg && ci->roles[CI_ROLE_HOST] &&
-					ci->roles[CI_ROLE_GADGET];
+		ci->roles[CI_ROLE_GADGET] && (otg_caps->srp_support ||
+		otg_caps->hnp_support || otg_caps->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 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] 38+ messages in thread

* [PATCH v7 10/23] usb: gadget: add usb otg descriptor allocate and init interface
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (8 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 09/23] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 11/23] usb: gadget: configfs: allocate and init otg descriptor by otg capabilities Li Jun
                     ` (14 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-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's otg
capabilities, if usb_otg_caps is not set, keep settings as current gadget
drivers. With this 2 new interfaces, gadget can use usb_otg_descriptor
for OTG 1.x, and usb_otg20_descriptor for OTG 2.0 or above, 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>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/config.c | 56 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/usb/gadget.h  |  4 ++++
 2 files changed, 60 insertions(+)

diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
index 34e12fc..0fafa7a 100644
--- a/drivers/usb/gadget/config.c
+++ b/drivers/usb/gadget/config.c
@@ -20,6 +20,7 @@
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/composite.h>
+#include <linux/usb/otg.h>
 
 /**
  * usb_descriptor_fillbuf - fill buffer with descriptors
@@ -195,3 +196,58 @@ void usb_free_all_descriptors(struct usb_function *f)
 	usb_free_descriptors(f->ss_descriptors);
 }
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
+
+struct usb_descriptor_header *usb_otg_descriptor_alloc(
+				struct usb_gadget *gadget)
+{
+	struct usb_descriptor_header *otg_desc;
+	unsigned length = 0;
+
+	if (gadget->otg_caps && (gadget->otg_caps->otg_rev >= 0x0200))
+		length = sizeof(struct usb_otg20_descriptor);
+	else
+		length = sizeof(struct usb_otg_descriptor);
+
+	otg_desc = kzalloc(length, GFP_KERNEL);
+	return otg_desc;
+}
+EXPORT_SYMBOL_GPL(usb_otg_descriptor_alloc);
+
+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;
+	struct usb_otg_caps *otg_caps = gadget->otg_caps;
+	u8 otg_attributes = 0;
+
+	if (!otg_desc)
+		return -EINVAL;
+
+	if (otg_caps && otg_caps->otg_rev) {
+		if (otg_caps->hnp_support)
+			otg_attributes |= USB_OTG_HNP;
+		if (otg_caps->srp_support)
+			otg_attributes |= USB_OTG_SRP;
+		if (otg_caps->adp_support && (otg_caps->otg_rev >= 0x0200))
+			otg_attributes |= USB_OTG_ADP;
+	} else {
+		otg_attributes = USB_OTG_SRP | USB_OTG_HNP;
+	}
+
+	if (otg_caps && (otg_caps->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(otg_caps->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 6b39087..5f65bd2 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -1004,6 +1004,10 @@ int usb_assign_descriptors(struct usb_function *f,
 		struct usb_descriptor_header **ss);
 void usb_free_all_descriptors(struct usb_function *f);
 
+struct usb_descriptor_header *usb_otg_descriptor_alloc(
+				struct usb_gadget *gadget);
+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] 38+ messages in thread

* [PATCH v7 11/23] usb: gadget: configfs: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (9 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 10/23] usb: gadget: add usb otg descriptor allocate and init interface Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 12/23] usb: gadget: ether: " Li Jun
                     ` (13 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations, free it while
composite unbind. If otg capability is not defined, keep its otg
descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/configfs.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 0495c94..c7b62ef 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,19 @@ 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;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		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 +1395,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 +1452,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 +1527,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] 38+ messages in thread

* [PATCH v7 12/23] usb: gadget: ether: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (10 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 11/23] usb: gadget: configfs: allocate and init otg descriptor by otg capabilities Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 13/23] usb: gadget: acm_ms: " Li Jun
                     ` (12 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations, free it while
ether unbind. If otg capability is not defined, keep its otg
descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/ether.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/legacy/ether.c b/drivers/usb/gadget/legacy/ether.c
index a3323dc..31e9160 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 = "",
@@ -416,17 +403,28 @@ static int eth_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto fail1;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* register our configuration(s); RNDIS first, if it's used */
 	if (has_rndis()) {
 		status = usb_add_config(cdev, &rndis_config_driver,
 				rndis_do_config);
 		if (status < 0)
-			goto fail1;
+			goto fail2;
 	}
 
 	status = usb_add_config(cdev, &eth_config_driver, eth_do_config);
 	if (status < 0)
-		goto fail1;
+		goto fail2;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
@@ -434,6 +432,9 @@ static int eth_bind(struct usb_composite_dev *cdev)
 
 	return 0;
 
+fail2:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail1:
 	if (has_rndis())
 		usb_put_function_instance(fi_rndis);
@@ -463,6 +464,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] 38+ messages in thread

* [PATCH v7 13/23] usb: gadget: acm_ms: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (11 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 12/23] usb: gadget: ether: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 14/23] usb: gadget: audio: " Li Jun
                     ` (11 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/acm_ms.c | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/legacy/acm_ms.c b/drivers/usb/gadget/legacy/acm_ms.c
index 1194b09..4d8adb4 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[] = {
@@ -225,10 +211,21 @@ static int acm_ms_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto fail_string_ids;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* register our configuration */
 	status = usb_add_config(cdev, &acm_ms_config_driver, acm_ms_do_config);
 	if (status < 0)
-		goto fail_string_ids;
+		goto fail_otg_desc;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
@@ -236,6 +233,9 @@ static int acm_ms_bind(struct usb_composite_dev *cdev)
 	return 0;
 
 	/* error recovery */
+fail_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail_string_ids:
 	fsg_common_remove_luns(opts->common);
 fail_set_cdev:
@@ -255,6 +255,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 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] 38+ messages in thread

* [PATCH v7 14/23] usb: gadget: audio: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (12 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 13/23] usb: gadget: acm_ms: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 15/23] usb: gadget: cdc2: " Li Jun
                     ` (10 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

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

diff --git a/drivers/usb/gadget/legacy/audio.c b/drivers/usb/gadget/legacy/audio.c
index f289caf..51a2380 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];
 
 /*-------------------------------------------------------------------------*/
 
@@ -259,14 +246,28 @@ static int audio_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(cdev->gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+		if (!usb_desc)
+			goto fail;
+		usb_otg_descriptor_init(cdev->gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	status = usb_add_config(cdev, &audio_config_driver, audio_do_config);
 	if (status < 0)
-		goto fail;
+		goto fail_otg_desc;
 	usb_composite_overwrite_options(cdev, &coverwrite);
 
 	INFO(cdev, "%s, version: %s\n", DRIVER_DESC, DRIVER_VERSION);
 	return 0;
 
+fail_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail:
 #ifndef CONFIG_GADGET_UAC1
 	usb_put_function_instance(fi_uac2);
@@ -289,6 +290,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] 38+ messages in thread

* [PATCH v7 15/23] usb: gadget: cdc2: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (13 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 14/23] usb: gadget: audio: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 16/23] usb: gadget: g_ffs: " Li Jun
                     ` (9 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/cdc2.c | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/legacy/cdc2.c b/drivers/usb/gadget/legacy/cdc2.c
index afd3e37..ecd8c8d 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[] = {
@@ -193,10 +179,21 @@ static int cdc_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto fail1;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* register our configuration */
 	status = usb_add_config(cdev, &cdc_config_driver, cdc_do_config);
 	if (status < 0)
-		goto fail1;
+		goto fail2;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
@@ -204,6 +201,9 @@ static int cdc_bind(struct usb_composite_dev *cdev)
 
 	return 0;
 
+fail2:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail1:
 	usb_put_function_instance(fi_serial);
 fail:
@@ -219,6 +219,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 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] 38+ messages in thread

* [PATCH v7 16/23] usb: gadget: g_ffs: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (14 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 15/23] usb: gadget: cdc2: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 17/23] usb: gadget: hid: " Li Jun
                     ` (8 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/g_ffs.c | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/legacy/g_ffs.c b/drivers/usb/gadget/legacy/g_ffs.c
index 7b9ef7e..ddb853d 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[] = {
@@ -410,6 +396,17 @@ static int gfs_bind(struct usb_composite_dev *cdev)
 		goto error_rndis;
 	gfs_dev_desc.iProduct = gfs_strings[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(cdev->gadget) && !gfs_otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+		if (!usb_desc)
+			goto error_rndis;
+		usb_otg_descriptor_init(cdev->gadget, usb_desc);
+		gfs_otg_desc[0] = usb_desc;
+		gfs_otg_desc[1] = NULL;
+	}
+
 	for (i = 0; i < ARRAY_SIZE(gfs_configurations); ++i) {
 		struct gfs_configuration *c = gfs_configurations + i;
 		int sid = USB_GADGET_FIRST_AVAIL_IDX + i;
@@ -430,6 +427,8 @@ static int gfs_bind(struct usb_composite_dev *cdev)
 
 /* TODO */
 error_unbind:
+	kfree(gfs_otg_desc[0]);
+	gfs_otg_desc[0] = NULL;
 error_rndis:
 #ifdef CONFIG_USB_FUNCTIONFS_RNDIS
 	usb_put_function_instance(fi_rndis);
@@ -471,6 +470,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;
 }
 
-- 
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] 38+ messages in thread

* [PATCH v7 17/23] usb: gadget: hid: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (15 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 16/23] usb: gadget: g_ffs: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 18/23] usb: gadget: mass_storage: " Li Jun
                     ` (7 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/hid.c | 36 ++++++++++++++++++++----------------
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
index 2baa572..e4874d3 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[] = {
@@ -186,16 +172,30 @@ static int hid_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto put;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* register our configuration */
 	status = usb_add_config(cdev, &config_driver, do_config);
 	if (status < 0)
-		goto put;
+		goto free_otg_desc;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&gadget->dev, DRIVER_DESC ", version: " DRIVER_VERSION "\n");
 
 	return 0;
 
+free_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 put:
 	list_for_each_entry(m, &hidg_func_list, node) {
 		if (m == n)
@@ -213,6 +213,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] 38+ messages in thread

* [PATCH v7 18/23] usb: gadget: mass_storage: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (16 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 17/23] usb: gadget: hid: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 19/23] usb: gadget: multi: " Li Jun
                     ` (6 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/mass_storage.c | 35 +++++++++++++++++---------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/gadget/legacy/mass_storage.c b/drivers/usb/gadget/legacy/mass_storage.c
index e7bfb08..ab1a42c 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 = "",
@@ -214,9 +200,20 @@ static int msg_bind(struct usb_composite_dev *cdev)
 		goto fail_string_ids;
 	msg_device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(cdev->gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+		if (!usb_desc)
+			goto fail_string_ids;
+		usb_otg_descriptor_init(cdev->gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	status = usb_add_config(cdev, &msg_config_driver, msg_do_config);
 	if (status < 0)
-		goto fail_string_ids;
+		goto fail_otg_desc;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&cdev->gadget->dev,
@@ -224,6 +221,9 @@ static int msg_bind(struct usb_composite_dev *cdev)
 	set_bit(0, &msg_registered);
 	return 0;
 
+fail_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail_string_ids:
 	fsg_common_remove_luns(opts->common);
 fail_set_cdev:
@@ -243,6 +243,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] 38+ messages in thread

* [PATCH v7 19/23] usb: gadget: multi: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (17 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 18/23] usb: gadget: mass_storage: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 20/23] usb: gadget: ncm: " Li Jun
                     ` (5 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Reviewed-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org>
---
 drivers/usb/gadget/legacy/multi.c | 37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/gadget/legacy/multi.c b/drivers/usb/gadget/legacy/multi.c
index b21b51f..c38ead1 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,
@@ -429,14 +415,25 @@ static int __ref multi_bind(struct usb_composite_dev *cdev)
 		goto fail_string_ids;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto fail_string_ids;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	/* register configurations */
 	status = rndis_config_register(cdev);
 	if (unlikely(status < 0))
-		goto fail_string_ids;
+		goto fail_otg_desc;
 
 	status = cdc_config_register(cdev);
 	if (unlikely(status < 0))
-		goto fail_string_ids;
+		goto fail_otg_desc;
 	usb_composite_overwrite_options(cdev, &coverwrite);
 
 	/* we're done */
@@ -445,6 +442,9 @@ static int __ref multi_bind(struct usb_composite_dev *cdev)
 
 
 	/* error recovery */
+fail_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail_string_ids:
 	fsg_common_remove_luns(fsg_opts->common);
 fail_set_cdev:
@@ -490,6 +490,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 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] 38+ messages in thread

* [PATCH v7 20/23] usb: gadget: ncm: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (18 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 19/23] usb: gadget: multi: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
  2015-07-09  7:18   ` [PATCH v7 21/23] usb: gadget: printer: " Li Jun
                     ` (4 subsequent siblings)
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

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

diff --git a/drivers/usb/gadget/legacy/ncm.c b/drivers/usb/gadget/legacy/ncm.c
index 6ce7421..2bae438 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[] = {
@@ -171,16 +158,30 @@ static int gncm_bind(struct usb_composite_dev *cdev)
 	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
 
+	if (gadget_is_otg(gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(gadget);
+		if (!usb_desc)
+			goto fail;
+		usb_otg_descriptor_init(gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
+	}
+
 	status = usb_add_config(cdev, &ncm_config_driver,
 				ncm_do_config);
 	if (status < 0)
-		goto fail;
+		goto fail1;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	dev_info(&gadget->dev, "%s\n", DRIVER_DESC);
 
 	return 0;
 
+fail1:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail:
 	usb_put_function_instance(f_ncm_inst);
 	return status;
@@ -192,6 +193,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] 38+ messages in thread

* [PATCH v7 21/23] usb: gadget: printer: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (19 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 20/23] usb: gadget: ncm: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
       [not found]     ` <1436426340-18477-22-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:18   ` [PATCH v7 22/23] usb: gadget: serial: " Li Jun
                     ` (3 subsequent siblings)
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

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

diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
index 1ce7df1..0c1fc06 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,6 @@ 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;
 		printer_cfg_driver.descriptors = otg_desc;
 		printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
 	}
@@ -174,21 +164,39 @@ static int printer_bind(struct usb_composite_dev *cdev)
 	opts->q_len = QLEN;
 
 	ret = usb_string_ids_tab(cdev, strings);
-	if (ret < 0) {
-		usb_put_function_instance(fi_printer);
-		return ret;
-	}
+	if (ret < 0)
+		goto fail_put_func_inst;
+
 	device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
 	device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
 
-	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
-	if (ret) {
-		usb_put_function_instance(fi_printer);
-		return ret;
+	if (gadget_is_otg(cdev->gadget) && !otg_desc[0]) {
+		struct usb_descriptor_header *usb_desc;
+
+		usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+		if (!usb_desc) {
+			ret = -ENOMEM;
+			goto fail_put_func_inst;
+		}
+		usb_otg_descriptor_init(cdev->gadget, usb_desc);
+		otg_desc[0] = usb_desc;
+		otg_desc[1] = NULL;
 	}
+
+	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
+	if (ret)
+		goto fail_free_otg_desc;
+
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	return ret;
+
+fail_free_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
+fail_put_func_inst:
+	usb_put_function_instance(fi_printer);
+	return ret;
 }
 
 static int printer_unbind(struct usb_composite_dev *cdev)
@@ -196,6 +204,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] 38+ messages in thread

* [PATCH v7 22/23] usb: gadget: serial: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (20 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 21/23] usb: gadget: printer: " Li Jun
@ 2015-07-09  7:18   ` Li Jun
       [not found]     ` <1436426340-18477-23-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  7:19   ` [PATCH v7 23/23] usb: gadget: zero: " Li Jun
                     ` (2 subsequent siblings)
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:18 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

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

diff --git a/drivers/usb/gadget/legacy/serial.c b/drivers/usb/gadget/legacy/serial.c
index 8b7528f..9836d16 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,18 @@ 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;
+
+			usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+			if (!usb_desc) {
+				status = -ENOMEM;
+				goto fail;
+			}
+			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;
 	}
@@ -208,13 +207,15 @@ static int gs_bind(struct usb_composite_dev *cdev)
 				"gser");
 	}
 	if (status < 0)
-		goto fail;
+		goto fail1;
 
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	INFO(cdev, "%s\n", GS_VERSION_NAME);
 
 	return 0;
-
+fail1:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 fail:
 	return status;
 }
@@ -227,6 +228,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 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] 38+ messages in thread

* [PATCH v7 23/23] usb: gadget: zero: allocate and init otg descriptor by otg capabilities
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (21 preceding siblings ...)
  2015-07-09  7:18   ` [PATCH v7 22/23] usb: gadget: serial: " Li Jun
@ 2015-07-09  7:19   ` Li Jun
       [not found]     ` <1436426340-18477-24-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-13 23:43   ` [PATCH v7 00/23] usb gadget update for OTG 2.0 Li Jun
  2015-07-22 15:13   ` Felipe Balbi
  24 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09  7:19 UTC (permalink / raw
  To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0, Li Jun

Allocate and initialize usb otg descriptor according to gadget otg
capabilities, add it for each usb configurations. If otg capability
is not defined, keep its original otg descriptor unchanged.

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

diff --git a/drivers/usb/gadget/legacy/zero.c b/drivers/usb/gadget/legacy/zero.c
index c986e8a..37a4100 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,18 @@ 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;
+
+			usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
+			if (!usb_desc) {
+				status = -ENOMEM;
+				goto err_conf_flb;
+			}
+			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;
@@ -359,12 +354,12 @@ static int zero_bind(struct usb_composite_dev *cdev)
 	}
 	status = usb_add_function(&sourcesink_driver, func_ss);
 	if (status)
-		goto err_conf_flb;
+		goto err_free_otg_desc;
 
 	usb_ep_autoconfig_reset(cdev->gadget);
 	status = usb_add_function(&loopback_driver, func_lb);
 	if (status)
-		goto err_conf_flb;
+		goto err_free_otg_desc;
 
 	usb_ep_autoconfig_reset(cdev->gadget);
 	usb_composite_overwrite_options(cdev, &coverwrite);
@@ -373,6 +368,9 @@ static int zero_bind(struct usb_composite_dev *cdev)
 
 	return 0;
 
+err_free_otg_desc:
+	kfree(otg_desc[0]);
+	otg_desc[0] = NULL;
 err_conf_flb:
 	usb_put_function(func_lb);
 	func_lb = NULL;
@@ -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] 38+ messages in thread

* Re: [PATCH v7 07/23] usb: common: add API to update usb otg capabilities by device tree
       [not found]     ` <1436426340-18477-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  8:38       ` Roger Quadros
  0 siblings, 0 replies; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:38 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On 09/07/15 10:18, Li Jun wrote:
> Check property of usb hardware to update otg version and disable SRP, HNP
> and ADP if its disable flag is present.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

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

cheers,
-roger

> ---
>  drivers/usb/common/common.c | 56 +++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/usb/of.h      |  7 ++++++
>  2 files changed, 63 insertions(+)
> 
> diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
> index b530fd4..9e39286 100644
> --- a/drivers/usb/common/common.c
> +++ b/drivers/usb/common/common.c
> @@ -154,6 +154,62 @@ bool of_usb_host_tpl_support(struct device_node *np)
>  	return false;
>  }
>  EXPORT_SYMBOL_GPL(of_usb_host_tpl_support);
> +
> +/**
> + * of_usb_update_otg_caps - to update usb otg capabilities according to
> + * the passed properties in DT.
> + * @np: Pointer to the given device_node
> + * @otg_caps: Pointer to the target usb_otg_caps to be set
> + *
> + * The function updates the otg capabilities
> + */
> +int of_usb_update_otg_caps(struct device_node *np,
> +			struct usb_otg_caps *otg_caps)
> +{
> +	u32 otg_rev;
> +
> +	if (!otg_caps)
> +		return -EINVAL;
> +
> +	if (!of_property_read_u32(np, "otg-rev", &otg_rev)) {
> +		switch (otg_rev) {
> +		case 0x0100:
> +		case 0x0120:
> +		case 0x0130:
> +		case 0x0200:
> +			/* Choose the lesser one if it's already been set */
> +			if (otg_caps->otg_rev)
> +				otg_caps->otg_rev = min_t(u16, otg_rev,
> +							otg_caps->otg_rev);
> +			else
> +				otg_caps->otg_rev = otg_rev;
> +			break;
> +		default:
> +			pr_err("%s: unsupported otg-rev: 0x%x\n",
> +						np->full_name, otg_rev);
> +			return -EINVAL;
> +		}
> +	} else {
> +		/*
> +		 * otg-rev is mandatory for otg properties, if not passed
> +		 * we set it to be 0 and assume it's a legacy otg device.
> +		 * Non-dt platform can set it afterwards.
> +		 */
> +		otg_caps->otg_rev = 0;
> +	}
> +
> +	if (of_find_property(np, "hnp-disable", NULL))
> +		otg_caps->hnp_support = false;
> +	if (of_find_property(np, "srp-disable", NULL))
> +		otg_caps->srp_support = false;
> +	if (of_find_property(np, "adp-disable", NULL) ||
> +				(otg_caps->otg_rev < 0x0200))
> +		otg_caps->adp_support = false;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(of_usb_update_otg_caps);
> +
>  #endif
>  
>  MODULE_LICENSE("GPL");
> diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
> index cfe0528..8c5a818 100644
> --- a/include/linux/usb/of.h
> +++ b/include/linux/usb/of.h
> @@ -15,6 +15,8 @@
>  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);
> +int of_usb_update_otg_caps(struct device_node *np,
> +			struct usb_otg_caps *otg_caps);
>  #else
>  static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
>  {
> @@ -30,6 +32,11 @@ static inline bool of_usb_host_tpl_support(struct device_node *np)
>  {
>  	return false;
>  }
> +static inline int of_usb_update_otg_caps(struct device_node *np,
> +				struct usb_otg_caps *otg_caps)
> +{
> +	return 0;
> +}
>  #endif
>  
>  #if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT)
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 21/23] usb: gadget: printer: allocate and init otg descriptor by otg capabilities
       [not found]     ` <1436426340-18477-22-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  8:41       ` Roger Quadros
  0 siblings, 0 replies; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:41 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On 09/07/15 10:18, Li Jun wrote:
> Allocate and initialize usb otg descriptor according to gadget otg
> capabilities, add it for each usb configurations. If otg capability
> is not defined, keep its original otg descriptor unchanged.
> 
> 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/legacy/printer.c | 49 +++++++++++++++++++++++--------------
>  1 file changed, 30 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
> index 1ce7df1..0c1fc06 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,6 @@ 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;
>  		printer_cfg_driver.descriptors = otg_desc;
>  		printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
>  	}
> @@ -174,21 +164,39 @@ static int printer_bind(struct usb_composite_dev *cdev)
>  	opts->q_len = QLEN;
>  
>  	ret = usb_string_ids_tab(cdev, strings);
> -	if (ret < 0) {
> -		usb_put_function_instance(fi_printer);
> -		return ret;
> -	}
> +	if (ret < 0)
> +		goto fail_put_func_inst;
> +
>  	device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
>  	device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
>  	device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
>  
> -	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
> -	if (ret) {
> -		usb_put_function_instance(fi_printer);
> -		return ret;
> +	if (gadget_is_otg(cdev->gadget) && !otg_desc[0]) {
> +		struct usb_descriptor_header *usb_desc;
> +
> +		usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
> +		if (!usb_desc) {
> +			ret = -ENOMEM;
> +			goto fail_put_func_inst;
> +		}
> +		usb_otg_descriptor_init(cdev->gadget, usb_desc);
> +		otg_desc[0] = usb_desc;
> +		otg_desc[1] = NULL;
>  	}
> +
> +	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
> +	if (ret)
> +		goto fail_free_otg_desc;
> +
>  	usb_composite_overwrite_options(cdev, &coverwrite);
>  	return ret;
> +
> +fail_free_otg_desc:
> +	kfree(otg_desc[0]);
> +	otg_desc[0] = NULL;
> +fail_put_func_inst:
> +	usb_put_function_instance(fi_printer);
> +	return ret;
>  }
>  
>  static int printer_unbind(struct usb_composite_dev *cdev)
> @@ -196,6 +204,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;
>  }
>  
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 22/23] usb: gadget: serial: allocate and init otg descriptor by otg capabilities
       [not found]     ` <1436426340-18477-23-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  8:42       ` Roger Quadros
  0 siblings, 0 replies; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:42 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On 09/07/15 10:18, Li Jun wrote:
> Allocate and initialize usb otg descriptor according to gadget otg
> capabilities, add it for each usb configurations. If otg capability
> is not defined, keep its original otg descriptor unchanged.
> 
> 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/legacy/serial.c | 37 +++++++++++++++++++++----------------
>  1 file changed, 21 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/usb/gadget/legacy/serial.c b/drivers/usb/gadget/legacy/serial.c
> index 8b7528f..9836d16 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,18 @@ 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;
> +
> +			usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
> +			if (!usb_desc) {
> +				status = -ENOMEM;
> +				goto fail;
> +			}
> +			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;
>  	}
> @@ -208,13 +207,15 @@ static int gs_bind(struct usb_composite_dev *cdev)
>  				"gser");
>  	}
>  	if (status < 0)
> -		goto fail;
> +		goto fail1;
>  
>  	usb_composite_overwrite_options(cdev, &coverwrite);
>  	INFO(cdev, "%s\n", GS_VERSION_NAME);
>  
>  	return 0;
> -
> +fail1:
> +	kfree(otg_desc[0]);
> +	otg_desc[0] = NULL;
>  fail:
>  	return status;
>  }
> @@ -227,6 +228,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;
>  }
>  
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 23/23] usb: gadget: zero: allocate and init otg descriptor by otg capabilities
       [not found]     ` <1436426340-18477-24-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  8:46       ` Roger Quadros
  0 siblings, 0 replies; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:46 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On 09/07/15 10:19, Li Jun wrote:
> Allocate and initialize usb otg descriptor according to gadget otg
> capabilities, add it for each usb configurations. If otg capability
> is not defined, keep its original otg descriptor unchanged.
> 
> 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/legacy/zero.c | 41 ++++++++++++++++++++--------------------
>  1 file changed, 21 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/usb/gadget/legacy/zero.c b/drivers/usb/gadget/legacy/zero.c
> index c986e8a..37a4100 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,18 @@ 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;
> +
> +			usb_desc = usb_otg_descriptor_alloc(cdev->gadget);
> +			if (!usb_desc) {
> +				status = -ENOMEM;
> +				goto err_conf_flb;
> +			}
> +			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;
> @@ -359,12 +354,12 @@ static int zero_bind(struct usb_composite_dev *cdev)
>  	}
>  	status = usb_add_function(&sourcesink_driver, func_ss);
>  	if (status)
> -		goto err_conf_flb;
> +		goto err_free_otg_desc;
>  
>  	usb_ep_autoconfig_reset(cdev->gadget);
>  	status = usb_add_function(&loopback_driver, func_lb);
>  	if (status)
> -		goto err_conf_flb;
> +		goto err_free_otg_desc;
>  
>  	usb_ep_autoconfig_reset(cdev->gadget);
>  	usb_composite_overwrite_options(cdev, &coverwrite);
> @@ -373,6 +368,9 @@ static int zero_bind(struct usb_composite_dev *cdev)
>  
>  	return 0;
>  
> +err_free_otg_desc:
> +	kfree(otg_desc[0]);
> +	otg_desc[0] = NULL;
>  err_conf_flb:
>  	usb_put_function(func_lb);
>  	func_lb = NULL;
> @@ -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;
>  }
>  
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
       [not found]     ` <1436426340-18477-9-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-09  8:47       ` Roger Quadros
  2015-07-09  8:57       ` Roger Quadros
  1 sibling, 0 replies; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:47 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On 09/07/15 10:18, Li Jun wrote:
> Init and update otg capabilities by DT, set gadget's otg capabilities
> accordingly.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

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

cheers,
-roger

> ---
>  drivers/usb/chipidea/core.c  | 15 +++++++++++++++
>  drivers/usb/chipidea/udc.c   |  7 ++++++-
>  include/linux/usb/chipidea.h |  1 +
>  3 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 74fea4f..1e6d5f0 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
>  static int ci_get_platdata(struct device *dev,
>  		struct ci_hdrc_platform_data *platdata)
>  {
> +	int ret;
> +
>  	if (!platdata->phy_mode)
>  		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
>  
> @@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
>  				of_usb_host_tpl_support(dev->of_node);
>  	}
>  
> +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> +		/* We can support HNP and SRP of OTG 2.0 */
> +		platdata->ci_otg_caps.otg_rev = 0x0200;
> +		platdata->ci_otg_caps.hnp_support = true;
> +		platdata->ci_otg_caps.srp_support = true;
> +
> +		/* Update otg capabilities by DT properties */
> +		ret = of_usb_update_otg_caps(dev->of_node,
> +					&platdata->ci_otg_caps);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	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..b7cca3e 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
>  static int udc_start(struct ci_hdrc *ci)
>  {
>  	struct device *dev = ci->dev;
> +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
>  	int retval = 0;
>  
>  	spin_lock_init(&ci->lock);
> @@ -1834,8 +1835,12 @@ 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;
> +	ci->gadget.otg_caps	= otg_caps;
> +
> +	if (otg_caps->hnp_support || otg_caps->srp_support ||
> +					otg_caps->adp_support)
> +		ci->gadget.is_otg = 1;
>  
>  	INIT_LIST_HEAD(&ci->gadget.ep_list);
>  
> diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> index ab94f78..e10cefc 100644
> --- a/include/linux/usb/chipidea.h
> +++ b/include/linux/usb/chipidea.h
> @@ -34,6 +34,7 @@ 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;
> +	struct usb_otg_caps	ci_otg_caps;
>  	bool			tpl_support;
>  };
>  
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
       [not found]     ` <1436426340-18477-9-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
  2015-07-09  8:47       ` Roger Quadros
@ 2015-07-09  8:57       ` Roger Quadros
       [not found]         ` <559E3783.9010908-l0cyMroinI0@public.gmane.org>
  1 sibling, 1 reply; 38+ messages in thread
From: Roger Quadros @ 2015-07-09  8:57 UTC (permalink / raw
  To: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A
  Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

Hi,

On 09/07/15 10:18, Li Jun wrote:
> Init and update otg capabilities by DT, set gadget's otg capabilities
> accordingly.
> 
> Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  drivers/usb/chipidea/core.c  | 15 +++++++++++++++
>  drivers/usb/chipidea/udc.c   |  7 ++++++-
>  include/linux/usb/chipidea.h |  1 +
>  3 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 74fea4f..1e6d5f0 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
>  static int ci_get_platdata(struct device *dev,
>  		struct ci_hdrc_platform_data *platdata)
>  {
> +	int ret;
> +
>  	if (!platdata->phy_mode)
>  		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
>  
> @@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
>  				of_usb_host_tpl_support(dev->of_node);
>  	}
>  
> +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> +		/* We can support HNP and SRP of OTG 2.0 */
> +		platdata->ci_otg_caps.otg_rev = 0x0200;
> +		platdata->ci_otg_caps.hnp_support = true;
> +		platdata->ci_otg_caps.srp_support = true;
> +
> +		/* Update otg capabilities by DT properties */
> +		ret = of_usb_update_otg_caps(dev->of_node,
> +					&platdata->ci_otg_caps);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	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..b7cca3e 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
>  static int udc_start(struct ci_hdrc *ci)
>  {
>  	struct device *dev = ci->dev;
> +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
>  	int retval = 0;
>  
>  	spin_lock_init(&ci->lock);
> @@ -1834,8 +1835,12 @@ 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;
> +	ci->gadget.otg_caps	= otg_caps;
> +
> +	if (otg_caps->hnp_support || otg_caps->srp_support ||
> +					otg_caps->adp_support)
> +		ci->gadget.is_otg = 1;

It seems there are non OTG capable dual-role only ci controllers as well
looking at ci_get_otg_capable() code.

If so then this should be
	if (ci->is_otg && (otg_caps->hnp_support || otg_caps->srp_support ||
			   otg_caps->adp_support))
		ci->gadget.is_otg = 1

cheers,
-roger

>  
>  	INIT_LIST_HEAD(&ci->gadget.ep_list);
>  
> diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> index ab94f78..e10cefc 100644
> --- a/include/linux/usb/chipidea.h
> +++ b/include/linux/usb/chipidea.h
> @@ -34,6 +34,7 @@ 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;
> +	struct usb_otg_caps	ci_otg_caps;
>  	bool			tpl_support;
>  };
>  
> 
--
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] 38+ messages in thread

* Re: [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
       [not found]         ` <559E3783.9010908-l0cyMroinI0@public.gmane.org>
@ 2015-07-09 13:22           ` Li Jun
  2015-07-13  1:03             ` Peter Chen
  0 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-09 13:22 UTC (permalink / raw
  To: Roger Quadros
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, peter.chen-KZfg59tc24xl57MIdRCFDg,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Thu, Jul 09, 2015 at 11:57:39AM +0300, Roger Quadros wrote:
> Hi,
> 
> On 09/07/15 10:18, Li Jun wrote:
> > Init and update otg capabilities by DT, set gadget's otg capabilities
> > accordingly.
> > 
> > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  drivers/usb/chipidea/core.c  | 15 +++++++++++++++
> >  drivers/usb/chipidea/udc.c   |  7 ++++++-
> >  include/linux/usb/chipidea.h |  1 +
> >  3 files changed, 22 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > index 74fea4f..1e6d5f0 100644
> > --- a/drivers/usb/chipidea/core.c
> > +++ b/drivers/usb/chipidea/core.c
> > @@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
> >  static int ci_get_platdata(struct device *dev,
> >  		struct ci_hdrc_platform_data *platdata)
> >  {
> > +	int ret;
> > +
> >  	if (!platdata->phy_mode)
> >  		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
> >  
> > @@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
> >  				of_usb_host_tpl_support(dev->of_node);
> >  	}
> >  
> > +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> > +		/* We can support HNP and SRP of OTG 2.0 */
> > +		platdata->ci_otg_caps.otg_rev = 0x0200;
> > +		platdata->ci_otg_caps.hnp_support = true;
> > +		platdata->ci_otg_caps.srp_support = true;
> > +
> > +		/* Update otg capabilities by DT properties */
> > +		ret = of_usb_update_otg_caps(dev->of_node,
> > +					&platdata->ci_otg_caps);
> > +		if (ret)
> > +			return ret;
> > +	}
> > +
> >  	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..b7cca3e 100644
> > --- a/drivers/usb/chipidea/udc.c
> > +++ b/drivers/usb/chipidea/udc.c
> > @@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
> >  static int udc_start(struct ci_hdrc *ci)
> >  {
> >  	struct device *dev = ci->dev;
> > +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
> >  	int retval = 0;
> >  
> >  	spin_lock_init(&ci->lock);
> > @@ -1834,8 +1835,12 @@ 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;
> > +	ci->gadget.otg_caps	= otg_caps;
> > +
> > +	if (otg_caps->hnp_support || otg_caps->srp_support ||
> > +					otg_caps->adp_support)
> > +		ci->gadget.is_otg = 1;
> 
> It seems there are non OTG capable dual-role only ci controllers as well
> looking at ci_get_otg_capable() code.
> 
> If so then this should be
> 	if (ci->is_otg && (otg_caps->hnp_support || otg_caps->srp_support ||
> 			   otg_caps->adp_support))
> 		ci->gadget.is_otg = 1
> 
> cheers,
> -roger
> 
Seems it was in my previous version but dropped it by mistake later,
I will add it.

Li Jun
> >  
> >  	INIT_LIST_HEAD(&ci->gadget.ep_list);
> >  
> > diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> > index ab94f78..e10cefc 100644
> > --- a/include/linux/usb/chipidea.h
> > +++ b/include/linux/usb/chipidea.h
> > @@ -34,6 +34,7 @@ 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;
> > +	struct usb_otg_caps	ci_otg_caps;
> >  	bool			tpl_support;
> >  };
> >  
> > 
--
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] 38+ messages in thread

* Re: [PATCH v7 09/23] usb: chipidea: update ci_otg_is_fsm_mode conditions
       [not found]     ` <1436426340-18477-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-07-13  0:53       ` Peter Chen
  0 siblings, 0 replies; 38+ messages in thread
From: Peter Chen @ 2015-07-13  0:53 UTC (permalink / raw
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0

On Thu, Jul 09, 2015 at 03:18:46PM +0800, Li Jun wrote:
> 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    | 5 ++++-
>  drivers/usb/chipidea/debug.c | 1 +
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
> index 6d6200e..f243f0b 100644
> --- a/drivers/usb/chipidea/ci.h
> +++ b/drivers/usb/chipidea/ci.h
> @@ -406,8 +406,11 @@ static inline u32 hw_test_and_write(struct ci_hdrc *ci, enum ci_hw_regs reg,
>  static inline bool ci_otg_is_fsm_mode(struct ci_hdrc *ci)
>  {
>  #ifdef CONFIG_USB_OTG_FSM
> +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
> +
>  	return ci->is_otg && ci->roles[CI_ROLE_HOST] &&
> -					ci->roles[CI_ROLE_GADGET];
> +		ci->roles[CI_ROLE_GADGET] && (otg_caps->srp_support ||
> +		otg_caps->hnp_support || otg_caps->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
> 

Acked-by: Peter Chen <peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

-- 

Best Regards,
Peter Chen
--
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] 38+ messages in thread

* Re: [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
  2015-07-09 13:22           ` Li Jun
@ 2015-07-13  1:03             ` Peter Chen
  2015-07-22 15:19               ` Felipe Balbi
  0 siblings, 1 reply; 38+ messages in thread
From: Peter Chen @ 2015-07-13  1:03 UTC (permalink / raw
  To: Li Jun
  Cc: Roger Quadros, Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	balbi-l0cyMroinI0, robh+d-DgEjT+Ai2ygdnm+yROfE0A,
	linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

On Thu, Jul 09, 2015 at 09:22:09PM +0800, Li Jun wrote:
> On Thu, Jul 09, 2015 at 11:57:39AM +0300, Roger Quadros wrote:
> > Hi,
> > 
> > On 09/07/15 10:18, Li Jun wrote:
> > > Init and update otg capabilities by DT, set gadget's otg capabilities
> > > accordingly.
> > > 
> > > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > > ---
> > >  drivers/usb/chipidea/core.c  | 15 +++++++++++++++
> > >  drivers/usb/chipidea/udc.c   |  7 ++++++-
> > >  include/linux/usb/chipidea.h |  1 +
> > >  3 files changed, 22 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > > index 74fea4f..1e6d5f0 100644
> > > --- a/drivers/usb/chipidea/core.c
> > > +++ b/drivers/usb/chipidea/core.c
> > > @@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
> > >  static int ci_get_platdata(struct device *dev,
> > >  		struct ci_hdrc_platform_data *platdata)
> > >  {
> > > +	int ret;
> > > +
> > >  	if (!platdata->phy_mode)
> > >  		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
> > >  
> > > @@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
> > >  				of_usb_host_tpl_support(dev->of_node);
> > >  	}
> > >  
> > > +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> > > +		/* We can support HNP and SRP of OTG 2.0 */
> > > +		platdata->ci_otg_caps.otg_rev = 0x0200;
> > > +		platdata->ci_otg_caps.hnp_support = true;
> > > +		platdata->ci_otg_caps.srp_support = true;
> > > +
> > > +		/* Update otg capabilities by DT properties */
> > > +		ret = of_usb_update_otg_caps(dev->of_node,
> > > +					&platdata->ci_otg_caps);
> > > +		if (ret)
> > > +			return ret;
> > > +	}
> > > +
> > >  	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..b7cca3e 100644
> > > --- a/drivers/usb/chipidea/udc.c
> > > +++ b/drivers/usb/chipidea/udc.c
> > > @@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
> > >  static int udc_start(struct ci_hdrc *ci)
> > >  {
> > >  	struct device *dev = ci->dev;
> > > +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
> > >  	int retval = 0;
> > >  
> > >  	spin_lock_init(&ci->lock);
> > > @@ -1834,8 +1835,12 @@ 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;
> > > +	ci->gadget.otg_caps	= otg_caps;
> > > +
> > > +	if (otg_caps->hnp_support || otg_caps->srp_support ||
> > > +					otg_caps->adp_support)
> > > +		ci->gadget.is_otg = 1;
> > 
> > It seems there are non OTG capable dual-role only ci controllers as well
> > looking at ci_get_otg_capable() code.
> > 
> > If so then this should be
> > 	if (ci->is_otg && (otg_caps->hnp_support || otg_caps->srp_support ||
> > 			   otg_caps->adp_support))
> > 		ci->gadget.is_otg = 1
> > 
> > cheers,
> > -roger
> > 
> Seems it was in my previous version but dropped it by mistake later,
> I will add it.
> 


After you adding roger's comments, add my ack.

Acked-by: Peter Chen <peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

> Li Jun
> > >  
> > >  	INIT_LIST_HEAD(&ci->gadget.ep_list);
> > >  
> > > diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
> > > index ab94f78..e10cefc 100644
> > > --- a/include/linux/usb/chipidea.h
> > > +++ b/include/linux/usb/chipidea.h
> > > @@ -34,6 +34,7 @@ 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;
> > > +	struct usb_otg_caps	ci_otg_caps;
> > >  	bool			tpl_support;
> > >  };
> > >  
> > > 

-- 

Best Regards,
Peter Chen
--
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] 38+ messages in thread

* Re: [PATCH v7 00/23] usb gadget update for OTG 2.0
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (22 preceding siblings ...)
  2015-07-09  7:19   ` [PATCH v7 23/23] usb: gadget: zero: " Li Jun
@ 2015-07-13 23:43   ` Li Jun
  2015-07-22 15:13   ` Felipe Balbi
  24 siblings, 0 replies; 38+ messages in thread
From: Li Jun @ 2015-07-13 23:43 UTC (permalink / raw
  To: balbi-l0cyMroinI0
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A,
	linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0

On Thu, Jul 09, 2015 at 03:18:37PM +0800, Li Jun wrote:
...
> 
> 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. Add usb_otg20_descriptor definition for OTG 2.0 which introduces bcdOTG
>    field for otg revision, bcdOTG 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. Remove static usb otg descriptor definition, but allocate and init it
>    according to otg capabilities in each gadget driver, if otg capabilities
>    is not defined for legacy platforms, the usb otg descriptor content is
>    kept the same as current static definition.
> 
> Li Jun (19):
>   usb: otg: add usb_otg_caps structure for otg capabilities
>   doc: dt-binding: usb: add otg related properties
>   usb: common: add API to update usb otg capabilities by device tree
>   usb: chipidea: set usb otg capabilities
>   usb: chipidea: update ci_otg_is_fsm_mode conditions
>   usb: gadget: add usb otg descriptor allocate and init interface
>   usb: gadget: configfs: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: ether: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: acm_ms: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: audio: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: cdc2: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: g_ffs: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: hid: allocate and init otg descriptor by otg capabilities
>   usb: gadget: mass_storage: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: multi: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: ncm: allocate and init otg descriptor by otg capabilities
>   usb: gadget: printer: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: serial: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: zero: allocate and init otg descriptor by otg
>     capabilities
> 
> Macpaul Lin (4):
>   usb: add usb_otg20_descriptor for OTG 2.0 and above
>   usb: add USB_OTG_ADP definition
>   usb: add usb_otg_caps to usb_gadget structure.
>   usb: gadget: composite: add USB_DT_OTG request handling
> 
>  Documentation/devicetree/bindings/usb/generic.txt | 15 ++++++
>  drivers/usb/chipidea/ci.h                         |  5 +-
>  drivers/usb/chipidea/core.c                       | 15 ++++++
>  drivers/usb/chipidea/debug.c                      |  1 +
>  drivers/usb/chipidea/udc.c                        |  7 ++-
>  drivers/usb/common/common.c                       | 56 +++++++++++++++++++++++
>  drivers/usb/gadget/composite.c                    | 27 +++++++++++
>  drivers/usb/gadget/config.c                       | 56 +++++++++++++++++++++++
>  drivers/usb/gadget/configfs.c                     | 29 ++++++++----
>  drivers/usb/gadget/legacy/acm_ms.c                | 35 +++++++-------
>  drivers/usb/gadget/legacy/audio.c                 | 34 ++++++++------
>  drivers/usb/gadget/legacy/cdc2.c                  | 35 +++++++-------
>  drivers/usb/gadget/legacy/ether.c                 | 36 ++++++++-------
>  drivers/usb/gadget/legacy/g_ffs.c                 | 32 +++++++------
>  drivers/usb/gadget/legacy/hid.c                   | 36 ++++++++-------
>  drivers/usb/gadget/legacy/mass_storage.c          | 35 +++++++-------
>  drivers/usb/gadget/legacy/multi.c                 | 37 ++++++++-------
>  drivers/usb/gadget/legacy/ncm.c                   | 34 ++++++++------
>  drivers/usb/gadget/legacy/printer.c               | 49 ++++++++++++--------
>  drivers/usb/gadget/legacy/serial.c                | 37 ++++++++-------
>  drivers/usb/gadget/legacy/zero.c                  | 41 +++++++++--------
>  include/linux/usb/chipidea.h                      |  1 +
>  include/linux/usb/gadget.h                        |  6 +++
>  include/linux/usb/of.h                            |  7 +++
>  include/linux/usb/otg.h                           | 15 ++++++
>  include/uapi/linux/usb/ch9.h                      | 12 +++++
>  26 files changed, 485 insertions(+), 208 deletions(-)
> 
> -- 
> 1.9.1
> 

Hi Felipe

This patchset is fully reviewed by Roger and Peter, please let me know your
comments/plan on it, thanks.

Li Jun
--
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] 38+ messages in thread

* Re: [PATCH v7 00/23] usb gadget update for OTG 2.0
       [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
                     ` (23 preceding siblings ...)
  2015-07-13 23:43   ` [PATCH v7 00/23] usb gadget update for OTG 2.0 Li Jun
@ 2015-07-22 15:13   ` Felipe Balbi
       [not found]     ` <20150722151308.GE10467-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
  24 siblings, 1 reply; 38+ messages in thread
From: Felipe Balbi @ 2015-07-22 15:13 UTC (permalink / raw
  To: Li Jun
  Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A,
	linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0

[-- Attachment #1: Type: text/plain, Size: 3566 bytes --]

On Thu, Jul 09, 2015 at 03:18:37PM +0800, Li Jun wrote:
> Change for v7:
> - Free otg descriptor when failure of bind in patch 21, 22, 23.
>   add Roger's Reviewed-by for patch 10~20.
> - Choose the lesser otg-rev if otg-rev has been set before update by DT,
>   remove 0x0300 in supported otg-rev list, and add code comments in case
>   otg-rev is not passed in DT in patch 7.
> - Fail chipidea usb initilization if DT pass an unsupported otg-rev in patch 8.
> 
> Change for v6:
> - Change of_usb_set_otg_caps to be of_usb_update_otg_caps, and add
>   sanity check of otg-rev.
> - Add chipidea otg-rev ability to be 0x0200, which will be updated
>   in DT, if not passed, will be reset to be 0.
> - Remove unnecessary change: move config's descriptor and bmAttributes
>   init from xxxi_config() to xxx_bind() in leagcy gadget drivers.
> 
> 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. Add usb_otg20_descriptor definition for OTG 2.0 which introduces bcdOTG
>    field for otg revision, bcdOTG 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. Remove static usb otg descriptor definition, but allocate and init it
>    according to otg capabilities in each gadget driver, if otg capabilities
>    is not defined for legacy platforms, the usb otg descriptor content is
>    kept the same as current static definition.
> 
> Li Jun (19):
>   usb: otg: add usb_otg_caps structure for otg capabilities
>   doc: dt-binding: usb: add otg related properties
>   usb: common: add API to update usb otg capabilities by device tree
>   usb: chipidea: set usb otg capabilities
>   usb: chipidea: update ci_otg_is_fsm_mode conditions
>   usb: gadget: add usb otg descriptor allocate and init interface
>   usb: gadget: configfs: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: ether: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: acm_ms: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: audio: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: cdc2: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: g_ffs: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: hid: allocate and init otg descriptor by otg capabilities
>   usb: gadget: mass_storage: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: multi: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: ncm: allocate and init otg descriptor by otg capabilities
>   usb: gadget: printer: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: serial: allocate and init otg descriptor by otg
>     capabilities
>   usb: gadget: zero: allocate and init otg descriptor by otg
>     capabilities
> 
> Macpaul Lin (4):
>   usb: add usb_otg20_descriptor for OTG 2.0 and above
>   usb: add USB_OTG_ADP definition
>   usb: add usb_otg_caps to usb_gadget structure.
>   usb: gadget: composite: add USB_DT_OTG request handling

ok, so how you guys want to handle this series ? Should I take
everything through my tree ? I'd need Acked-by for all chipidea drivers
if that's the case.

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH v7 08/23] usb: chipidea: set usb otg capabilities
  2015-07-13  1:03             ` Peter Chen
@ 2015-07-22 15:19               ` Felipe Balbi
  0 siblings, 0 replies; 38+ messages in thread
From: Felipe Balbi @ 2015-07-22 15:19 UTC (permalink / raw
  To: Peter Chen
  Cc: Li Jun, Roger Quadros, Li Jun,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w

[-- Attachment #1: Type: text/plain, Size: 3762 bytes --]

On Mon, Jul 13, 2015 at 09:03:14AM +0800, Peter Chen wrote:
> On Thu, Jul 09, 2015 at 09:22:09PM +0800, Li Jun wrote:
> > On Thu, Jul 09, 2015 at 11:57:39AM +0300, Roger Quadros wrote:
> > > Hi,
> > > 
> > > On 09/07/15 10:18, Li Jun wrote:
> > > > Init and update otg capabilities by DT, set gadget's otg capabilities
> > > > accordingly.
> > > > 
> > > > Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > > > ---
> > > >  drivers/usb/chipidea/core.c  | 15 +++++++++++++++
> > > >  drivers/usb/chipidea/udc.c   |  7 ++++++-
> > > >  include/linux/usb/chipidea.h |  1 +
> > > >  3 files changed, 22 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > > > index 74fea4f..1e6d5f0 100644
> > > > --- a/drivers/usb/chipidea/core.c
> > > > +++ b/drivers/usb/chipidea/core.c
> > > > @@ -560,6 +560,8 @@ static irqreturn_t ci_irq(int irq, void *data)
> > > >  static int ci_get_platdata(struct device *dev,
> > > >  		struct ci_hdrc_platform_data *platdata)
> > > >  {
> > > > +	int ret;
> > > > +
> > > >  	if (!platdata->phy_mode)
> > > >  		platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
> > > >  
> > > > @@ -588,6 +590,19 @@ static int ci_get_platdata(struct device *dev,
> > > >  				of_usb_host_tpl_support(dev->of_node);
> > > >  	}
> > > >  
> > > > +	if (platdata->dr_mode == USB_DR_MODE_OTG) {
> > > > +		/* We can support HNP and SRP of OTG 2.0 */
> > > > +		platdata->ci_otg_caps.otg_rev = 0x0200;
> > > > +		platdata->ci_otg_caps.hnp_support = true;
> > > > +		platdata->ci_otg_caps.srp_support = true;
> > > > +
> > > > +		/* Update otg capabilities by DT properties */
> > > > +		ret = of_usb_update_otg_caps(dev->of_node,
> > > > +					&platdata->ci_otg_caps);
> > > > +		if (ret)
> > > > +			return ret;
> > > > +	}
> > > > +
> > > >  	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..b7cca3e 100644
> > > > --- a/drivers/usb/chipidea/udc.c
> > > > +++ b/drivers/usb/chipidea/udc.c
> > > > @@ -1827,6 +1827,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
> > > >  static int udc_start(struct ci_hdrc *ci)
> > > >  {
> > > >  	struct device *dev = ci->dev;
> > > > +	struct usb_otg_caps *otg_caps = &ci->platdata->ci_otg_caps;
> > > >  	int retval = 0;
> > > >  
> > > >  	spin_lock_init(&ci->lock);
> > > > @@ -1834,8 +1835,12 @@ 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;
> > > > +	ci->gadget.otg_caps	= otg_caps;
> > > > +
> > > > +	if (otg_caps->hnp_support || otg_caps->srp_support ||
> > > > +					otg_caps->adp_support)
> > > > +		ci->gadget.is_otg = 1;
> > > 
> > > It seems there are non OTG capable dual-role only ci controllers as well
> > > looking at ci_get_otg_capable() code.
> > > 
> > > If so then this should be
> > > 	if (ci->is_otg && (otg_caps->hnp_support || otg_caps->srp_support ||
> > > 			   otg_caps->adp_support))
> > > 		ci->gadget.is_otg = 1
> > > 
> > > cheers,
> > > -roger
> > > 
> > Seems it was in my previous version but dropped it by mistake later,
> > I will add it.
> > 
> 
> 
> After you adding roger's comments, add my ack.
> 
> Acked-by: Peter Chen <peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>

am I getting a new version for this patch ?

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

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

* Re: [PATCH v7 00/23] usb gadget update for OTG 2.0
       [not found]     ` <20150722151308.GE10467-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
@ 2015-07-22 23:57       ` Li Jun
  2015-07-23  2:45         ` Macpaul Lin
  0 siblings, 1 reply; 38+ messages in thread
From: Li Jun @ 2015-07-22 23:57 UTC (permalink / raw
  To: Felipe Balbi
  Cc: Li Jun, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
	peter.chen-KZfg59tc24xl57MIdRCFDg, robh+d-DgEjT+Ai2ygdnm+yROfE0A,
	linux-usb-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
	rogerq-l0cyMroinI0

On Wed, Jul 22, 2015 at 10:13:08AM -0500, Felipe Balbi wrote:
> On Thu, Jul 09, 2015 at 03:18:37PM +0800, Li Jun wrote:
> > Change for v7:
> > - Free otg descriptor when failure of bind in patch 21, 22, 23.
> >   add Roger's Reviewed-by for patch 10~20.
> > - Choose the lesser otg-rev if otg-rev has been set before update by DT,
> >   remove 0x0300 in supported otg-rev list, and add code comments in case
> >   otg-rev is not passed in DT in patch 7.
> > - Fail chipidea usb initilization if DT pass an unsupported otg-rev in patch 8.
> > 
> > Change for v6:
> > - Change of_usb_set_otg_caps to be of_usb_update_otg_caps, and add
> >   sanity check of otg-rev.
> > - Add chipidea otg-rev ability to be 0x0200, which will be updated
> >   in DT, if not passed, will be reset to be 0.
> > - Remove unnecessary change: move config's descriptor and bmAttributes
> >   init from xxxi_config() to xxx_bind() in leagcy gadget drivers.
> > 
> > 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. Add usb_otg20_descriptor definition for OTG 2.0 which introduces bcdOTG
> >    field for otg revision, bcdOTG 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. Remove static usb otg descriptor definition, but allocate and init it
> >    according to otg capabilities in each gadget driver, if otg capabilities
> >    is not defined for legacy platforms, the usb otg descriptor content is
> >    kept the same as current static definition.
> > 
> > Li Jun (19):
> >   usb: otg: add usb_otg_caps structure for otg capabilities
> >   doc: dt-binding: usb: add otg related properties
> >   usb: common: add API to update usb otg capabilities by device tree
> >   usb: chipidea: set usb otg capabilities
> >   usb: chipidea: update ci_otg_is_fsm_mode conditions
> >   usb: gadget: add usb otg descriptor allocate and init interface
> >   usb: gadget: configfs: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: ether: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: acm_ms: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: audio: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: cdc2: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: g_ffs: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: hid: allocate and init otg descriptor by otg capabilities
> >   usb: gadget: mass_storage: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: multi: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: ncm: allocate and init otg descriptor by otg capabilities
> >   usb: gadget: printer: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: serial: allocate and init otg descriptor by otg
> >     capabilities
> >   usb: gadget: zero: allocate and init otg descriptor by otg
> >     capabilities
> > 
> > Macpaul Lin (4):
> >   usb: add usb_otg20_descriptor for OTG 2.0 and above
> >   usb: add USB_OTG_ADP definition
> >   usb: add usb_otg_caps to usb_gadget structure.
> >   usb: gadget: composite: add USB_DT_OTG request handling
> 
> ok, so how you guys want to handle this series ? Should I take
> everything through my tree ? I'd need Acked-by for all chipidea drivers
> if that's the case.
> 
> -- 
> balbi

I will resend the whole series with a small fix and Peter's ACK for
chipidea part.

Li Jun


--
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] 38+ messages in thread

* Re: [PATCH v7 00/23] usb gadget update for OTG 2.0
  2015-07-22 23:57       ` Li Jun
@ 2015-07-23  2:45         ` Macpaul Lin
  0 siblings, 0 replies; 38+ messages in thread
From: Macpaul Lin @ 2015-07-23  2:45 UTC (permalink / raw
  To: Li Jun
  Cc: Felipe Balbi, Li Jun, Greg Kroah-Hartman, Peter Chen,
	robh+d-DgEjT+Ai2ygdnm+yROfE0A,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
	mark.rutland-5wv7dgnIgG8, rogerq-l0cyMroinI0

Hi Jun,

2015-07-23 7:57 GMT+08:00 Li Jun <b47624-KZfg59tc24xl57MIdRCFDg@public.gmane.org>:
> On Wed, Jul 22, 2015 at 10:13:08AM -0500, Felipe Balbi wrote:
>> On Thu, Jul 09, 2015 at 03:18:37PM +0800, Li Jun wrote:
>> > Change for v7:
>> > - Free otg descriptor when failure of bind in patch 21, 22, 23.
>> >   add Roger's Reviewed-by for patch 10~20.
>> > - Choose the lesser otg-rev if otg-rev has been set before update by DT,
>> >   remove 0x0300 in supported otg-rev list, and add code comments in case
>> >   otg-rev is not passed in DT in patch 7.
>> > - Fail chipidea usb initilization if DT pass an unsupported otg-rev in patch 8.

[Deleted]

> I will resend the whole series with a small fix and Peter's ACK for
> chipidea part.
>
> Li Jun
>

I'm very appreciate the whole work you've done!
While I'm still during business travel and cannot give any help on this task.
Great thanks for yours works and others suggestions to improve the
whole series of pathces.

-- 
Best regards,
Macpaul Lin
--
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] 38+ messages in thread

end of thread, other threads:[~2015-07-23  2:45 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-09  7:18 [PATCH v7 00/23] usb gadget update for OTG 2.0 Li Jun
     [not found] ` <1436426340-18477-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  7:18   ` [PATCH v7 01/23] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
2015-07-09  7:18   ` [PATCH v7 02/23] usb: add USB_OTG_ADP definition Li Jun
2015-07-09  7:18   ` [PATCH v7 03/23] usb: otg: add usb_otg_caps structure for otg capabilities Li Jun
2015-07-09  7:18   ` [PATCH v7 04/23] usb: add usb_otg_caps to usb_gadget structure Li Jun
2015-07-09  7:18   ` [PATCH v7 05/23] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
2015-07-09  7:18   ` [PATCH v7 06/23] doc: dt-binding: usb: add otg related properties Li Jun
2015-07-09  7:18   ` [PATCH v7 07/23] usb: common: add API to update usb otg capabilities by device tree Li Jun
     [not found]     ` <1436426340-18477-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  8:38       ` Roger Quadros
2015-07-09  7:18   ` [PATCH v7 08/23] usb: chipidea: set usb otg capabilities Li Jun
     [not found]     ` <1436426340-18477-9-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  8:47       ` Roger Quadros
2015-07-09  8:57       ` Roger Quadros
     [not found]         ` <559E3783.9010908-l0cyMroinI0@public.gmane.org>
2015-07-09 13:22           ` Li Jun
2015-07-13  1:03             ` Peter Chen
2015-07-22 15:19               ` Felipe Balbi
2015-07-09  7:18   ` [PATCH v7 09/23] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
     [not found]     ` <1436426340-18477-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-13  0:53       ` Peter Chen
2015-07-09  7:18   ` [PATCH v7 10/23] usb: gadget: add usb otg descriptor allocate and init interface Li Jun
2015-07-09  7:18   ` [PATCH v7 11/23] usb: gadget: configfs: allocate and init otg descriptor by otg capabilities Li Jun
2015-07-09  7:18   ` [PATCH v7 12/23] usb: gadget: ether: " Li Jun
2015-07-09  7:18   ` [PATCH v7 13/23] usb: gadget: acm_ms: " Li Jun
2015-07-09  7:18   ` [PATCH v7 14/23] usb: gadget: audio: " Li Jun
2015-07-09  7:18   ` [PATCH v7 15/23] usb: gadget: cdc2: " Li Jun
2015-07-09  7:18   ` [PATCH v7 16/23] usb: gadget: g_ffs: " Li Jun
2015-07-09  7:18   ` [PATCH v7 17/23] usb: gadget: hid: " Li Jun
2015-07-09  7:18   ` [PATCH v7 18/23] usb: gadget: mass_storage: " Li Jun
2015-07-09  7:18   ` [PATCH v7 19/23] usb: gadget: multi: " Li Jun
2015-07-09  7:18   ` [PATCH v7 20/23] usb: gadget: ncm: " Li Jun
2015-07-09  7:18   ` [PATCH v7 21/23] usb: gadget: printer: " Li Jun
     [not found]     ` <1436426340-18477-22-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  8:41       ` Roger Quadros
2015-07-09  7:18   ` [PATCH v7 22/23] usb: gadget: serial: " Li Jun
     [not found]     ` <1436426340-18477-23-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  8:42       ` Roger Quadros
2015-07-09  7:19   ` [PATCH v7 23/23] usb: gadget: zero: " Li Jun
     [not found]     ` <1436426340-18477-24-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-07-09  8:46       ` Roger Quadros
2015-07-13 23:43   ` [PATCH v7 00/23] usb gadget update for OTG 2.0 Li Jun
2015-07-22 15:13   ` Felipe Balbi
     [not found]     ` <20150722151308.GE10467-HgARHv6XitJaoMGHk7MhZQC/G2K4zDHf@public.gmane.org>
2015-07-22 23:57       ` Li Jun
2015-07-23  2:45         ` Macpaul Lin

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.