* [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-2-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 02/22] usb: add USB_OTG_ADP definition Li Jun
` (20 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
OTG 2.0 introduces bcdOTG in otg descriptor to identify the OTG and EH
supplement release number with which the OTG device is compliant, this
patch adds structure usb_otg20_descriptor for OTG 2.0 and above.
Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
include/uapi/linux/usb/ch9.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
index aa33fd1..aec6899 100644
--- a/include/uapi/linux/usb/ch9.h
+++ b/include/uapi/linux/usb/ch9.h
@@ -674,6 +674,17 @@ struct usb_otg_descriptor {
__u8 bmAttributes; /* support for HNP, SRP, etc */
} __attribute__ ((packed));
+/* USB_DT_OTG (from OTG 2.0 supplement) */
+struct usb_otg20_descriptor {
+ __u8 bLength;
+ __u8 bDescriptorType;
+
+ __u8 bmAttributes; /* support for HNP, SRP and ADP, etc */
+ __le16 bcdOTG; /* OTG and EH supplement release number
+ * in binary-coded decimal(i.e. 2.0 is 0200H)
+ */
+} __attribute__ ((packed));
+
/* from usb_otg_descriptor.bmAttributes */
#define USB_OTG_SRP (1 << 0)
#define USB_OTG_HNP (1 << 1) /* swap host/device roles */
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 02/22] usb: add USB_OTG_ADP definition
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
@ 2015-06-16 6:51 ` Li Jun
2015-06-16 6:51 ` [PATCH v3 03/22] usb: add OTG feature options to gadget structure Li Jun
` (19 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Add USB_OTG_ADP definition for usb_otg_descriptor.bmAttributes.
Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Acked-by: Peter Chen <peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
include/uapi/linux/usb/ch9.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
index aec6899..f7adc6e 100644
--- a/include/uapi/linux/usb/ch9.h
+++ b/include/uapi/linux/usb/ch9.h
@@ -688,6 +688,7 @@ struct usb_otg20_descriptor {
/* from usb_otg_descriptor.bmAttributes */
#define USB_OTG_SRP (1 << 0)
#define USB_OTG_HNP (1 << 1) /* swap host/device roles */
+#define USB_OTG_ADP (1 << 2) /* support ADP */
/*-------------------------------------------------------------------------*/
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 03/22] usb: add OTG feature options to gadget structure.
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 01/22] usb: add usb_otg20_descriptor for OTG 2.0 and above Li Jun
2015-06-16 6:51 ` [PATCH v3 02/22] usb: add USB_OTG_ADP definition Li Jun
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-4-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
` (18 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Add ADP, HNP and SRP feature options and otg version to gadget structure.
Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
include/linux/usb/gadget.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 4f3dfb7..814cb70 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -514,6 +514,12 @@ struct usb_gadget_ops {
* @sg_supported: true if we can handle scatter-gather
* @is_otg: True if the USB device port uses a Mini-AB jack, so that the
* gadget driver must provide a USB OTG descriptor.
+ * @adp_support: OTG device feature flag, indicating that the device
+ supports ADP at this port.
+ * @hnp_support: OTG device feature flag, indicating that the device
+ supports HNP at this port.
+ * @srp_support: OTG device feature flag, indicating that the device
+ supports SRP at this port.
* @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
* is in the Mini-AB jack, and HNP has been used to switch roles
* so that the "A" device currently acts as A-Peripheral, not A-Host.
@@ -526,6 +532,7 @@ struct usb_gadget_ops {
* @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
* MaxPacketSize.
* @is_selfpowered: if the gadget is self-powered.
+ * @otg_rev: The OTG reversion number the device is compliant to.
*
* Gadgets have a mostly-portable "gadget driver" implementing device
* functions, handling all usb configurations and interfaces. Gadget
@@ -562,12 +569,16 @@ struct usb_gadget {
unsigned sg_supported:1;
unsigned is_otg:1;
+ unsigned adp_support:1;
+ unsigned hnp_support:1;
+ unsigned srp_support:1;
unsigned is_a_peripheral:1;
unsigned b_hnp_enable:1;
unsigned a_hnp_support:1;
unsigned a_alt_hnp_support:1;
unsigned quirk_ep_out_aligned_size:1;
unsigned is_selfpowered:1;
+ u16 otg_rev;
};
#define work_to_gadget(w) (container_of((w), struct usb_gadget, work))
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (2 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 03/22] usb: add OTG feature options to gadget structure Li Jun
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-5-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties Li Jun
` (17 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
From: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Copy usb_otg_descriptor from config's descriptor if host requests
USB_DT_OTG.
Signed-off-by: Macpaul Lin <macpaul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/composite.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 4e3447b..8322e80 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1534,6 +1534,31 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
value = min(w_length, (u16) value);
}
break;
+ case USB_DT_OTG:
+ if (gadget_is_otg(gadget)) {
+ struct usb_configuration *config;
+ int otg_desc_len = 0;
+
+ if (cdev->config)
+ config = cdev->config;
+ else
+ config = list_first_entry(
+ &cdev->configs,
+ struct usb_configuration, list);
+ if (!config)
+ goto done;
+
+ if (gadget->otg_rev >= 0x0200)
+ otg_desc_len += sizeof(
+ struct usb_otg20_descriptor);
+ else
+ otg_desc_len += sizeof(
+ struct usb_otg_descriptor);
+
+ value = min_t(int, w_length, otg_desc_len);
+ memcpy(req->buf, config->descriptors[0], value);
+ }
+ break;
}
break;
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (3 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 04/22] usb: gadget: composite: add USB_DT_OTG request handling Li Jun
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-6-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree Li Jun
` (16 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Add otg version, srp, hnp and adp support for usb OTG port, then those OTG
features don't have to be decided by usb gadget drivers.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
Documentation/devicetree/bindings/usb/generic.txt | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
index 477d5bb..eb7308e 100644
--- a/Documentation/devicetree/bindings/usb/generic.txt
+++ b/Documentation/devicetree/bindings/usb/generic.txt
@@ -11,6 +11,20 @@ Optional properties:
"peripheral" and "otg". In case this attribute isn't
passed via DT, USB DRD controllers should default to
OTG.
+ - otg-rev: tells usb driver the release number of the OTG and EH supplement
+ with which the device and its descriptors are compliant,
+ in binary-coded decimal (i.e. 2.0 is 0200H). This
+ property is used if any real OTG features(HNP/SRP/ADP)
+ is enabled, also if ADP is enabled, otg-rev should be
+ 0x0200 or above.
+ - hnp-disable: tells OTG controllers we want to disable OTG HNP, normally HNP
+ is the basic function of real OTG except you want it
+ to be a srp-capable only B device.
+ - srp-disable: tells OTG controllers we want to disable OTG SRP, SRP is
+ optional for OTG device.
+ - adp-disable: tells OTG controllers we want to disable OTG ADP, ADP is
+ optional for OTG device, if not passed, otg-rev should
+ be set to be 0x0200 or above.
This is an attribute to a USB controller such as:
@@ -21,4 +35,8 @@ dwc3@4a030000 {
usb-phy = <&usb2_phy>, <&usb3,phy>;
maximum-speed = "super-speed";
dr_mode = "otg";
+ otg-rev = <0x0200>;
+ hnp-disable;
+ srp-disable;
+ adp-disable;
};
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (4 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 05/22] doc: dt-binding: usb: add otg related properties Li Jun
@ 2015-06-16 6:51 ` Li Jun
2015-06-16 6:51 ` [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config Li Jun
` (15 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Check property of usb hardware to get otg version and if SRP, HNP and ADP
are supported.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/common/common.c | 64 +++++++++++++++++++++++++++++++++++++++++++++
include/linux/usb/of.h | 20 ++++++++++++++
2 files changed, 84 insertions(+)
diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index b530fd4..b882e95 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -154,6 +154,70 @@ bool of_usb_host_tpl_support(struct device_node *np)
return false;
}
EXPORT_SYMBOL_GPL(of_usb_host_tpl_support);
+
+/**
+ * of_usb_otg_srp_disabled - to get if otg srp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if SRP is disabled on the otg port
+ */
+bool of_usb_otg_srp_disabled(struct device_node *np)
+{
+ if (of_find_property(np, "srp-disable", NULL))
+ return true;
+
+ return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_srp_disabled);
+
+/**
+ * of_usb_otg_hnp_disabled - to get if otg hnp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if HNP is disabled on the otg port
+ */
+bool of_usb_otg_hnp_disabled(struct device_node *np)
+{
+ if (of_find_property(np, "hnp-disable", NULL))
+ return true;
+
+ return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_hnp_disabled);
+
+/**
+ * of_usb_otg_adp_disabled - to get if otg adp is disabled for the device
+ * @np: Pointer to the given device_node
+ *
+ * The function gets if ADP is disabled on the otg port
+ */
+bool of_usb_otg_adp_disabled(struct device_node *np)
+{
+ if (of_find_property(np, "adp-disable", NULL))
+ return true;
+
+ return false;
+}
+EXPORT_SYMBOL_GPL(of_usb_otg_adp_disabled);
+
+/**
+ * of_usb_get_otg_rev - to get the otg release number the device is
+ * compliant with.
+ * @np: Pointer to the given device_node
+ *
+ * The function gets OTG and EH supplement release number in binary-coded
+ * decimal (i.e. 2.0 is 0200H).
+ */
+int of_usb_get_otg_rev(struct device_node *np)
+{
+ u32 otg_rev;
+
+ if (!of_property_read_u32(np, "otg-rev", &otg_rev))
+ return otg_rev;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(of_usb_get_otg_rev);
#endif
MODULE_LICENSE("GPL");
diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index cfe0528..5b395bf 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -15,6 +15,10 @@
enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np);
enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np);
bool of_usb_host_tpl_support(struct device_node *np);
+bool of_usb_otg_srp_disabled(struct device_node *np);
+bool of_usb_otg_hnp_disabled(struct device_node *np);
+bool of_usb_otg_adp_disabled(struct device_node *np);
+int of_usb_get_otg_rev(struct device_node *np);
#else
static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
{
@@ -30,6 +34,22 @@ static inline bool of_usb_host_tpl_support(struct device_node *np)
{
return false;
}
+static inline bool of_usb_otg_srp_disabled(struct device_node *np)
+{
+ return false;
+}
+static inline bool of_usb_otg_hnp_disabled(struct device_node *np)
+{
+ return false;
+}
+static inline bool of_usb_otg_adp_disabled(struct device_node *np)
+{
+ return false;
+}
+static inline int of_usb_get_otg_rev(struct device_node *np)
+{
+ return 0;
+}
#endif
#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB_SUPPORT)
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (5 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 06/22] usb: common: add API to get usb otg features from device tree Li Jun
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-8-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:51 ` [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
` (14 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Set gadget's otg features according to controller's capability and usb
property in device tree.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/chipidea/core.c | 18 ++++++++++++++++++
drivers/usb/chipidea/udc.c | 20 +++++++++++++++++++-
include/linux/usb/chipidea.h | 4 ++++
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 74fea4f..45bd44e 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -588,6 +588,24 @@ static int ci_get_platdata(struct device *dev,
of_usb_host_tpl_support(dev->of_node);
}
+ if (platdata->dr_mode == USB_DR_MODE_OTG) {
+ if (!platdata->otg_rev) {
+ platdata->otg_rev =
+ of_usb_get_otg_rev(dev->of_node);
+ }
+ if (platdata->otg_rev) {
+ if (!platdata->srp_support)
+ platdata->srp_support =
+ !of_usb_otg_srp_disabled(dev->of_node);
+ if (!platdata->hnp_support)
+ platdata->hnp_support =
+ !of_usb_otg_hnp_disabled(dev->of_node);
+ if (!platdata->adp_support)
+ platdata->adp_support =
+ !of_usb_otg_adp_disabled(dev->of_node);
+ }
+ }
+
if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
platdata->flags |= CI_HDRC_FORCE_FULLSPEED;
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 764f668..5d2c6e8 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1821,6 +1821,24 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
}
/**
+ * udc_update_otg_config: update gadget otg config
+ * * @ci: chipidea controller
+ */
+static void udc_update_otg_config(struct ci_hdrc *ci)
+{
+ if (!ci->is_otg)
+ return;
+
+ ci->gadget.otg_rev = ci->platdata->otg_rev;
+ ci->gadget.srp_support = ci->platdata->srp_support;
+ ci->gadget.hnp_support = ci->platdata->hnp_support;
+ ci->gadget.adp_support = ci->platdata->adp_support;
+ if (ci->gadget.srp_support || ci->gadget.hnp_support ||
+ ci->gadget.adp_support)
+ ci->gadget.is_otg = 1;
+}
+
+/**
* udc_start: initialize gadget role
* @ci: chipidea controller
*/
@@ -1834,9 +1852,9 @@ static int udc_start(struct ci_hdrc *ci)
ci->gadget.ops = &usb_gadget_ops;
ci->gadget.speed = USB_SPEED_UNKNOWN;
ci->gadget.max_speed = USB_SPEED_HIGH;
- ci->gadget.is_otg = ci->is_otg ? 1 : 0;
ci->gadget.name = ci->platdata->name;
+ udc_update_otg_config(ci);
INIT_LIST_HEAD(&ci->gadget.ep_list);
/* alloc resources */
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
index ab94f78..6765b28 100644
--- a/include/linux/usb/chipidea.h
+++ b/include/linux/usb/chipidea.h
@@ -34,7 +34,11 @@ struct ci_hdrc_platform_data {
#define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
void (*notify_event) (struct ci_hdrc *ci, unsigned event);
struct regulator *reg_vbus;
+ u16 otg_rev;
bool tpl_support;
+ bool srp_support;
+ bool hnp_support;
+ bool adp_support;
};
/* Default offset of capability registers */
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (6 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 07/22] usb: chipidea: set usb gadeget's otg config Li Jun
@ 2015-06-16 6:51 ` Li Jun
2015-06-16 6:51 ` [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor Li Jun
` (13 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
After introduce usb otg properties, update ci_otg_is_fsm_mode conditions
to be depending on both usb hardware properties and usb driver config,
also resolve a compile issue in debug.c after the API change.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/chipidea/ci.h | 3 ++-
drivers/usb/chipidea/debug.c | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 6d6200e..90e8e53 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -407,7 +407,8 @@ static inline bool ci_otg_is_fsm_mode(struct ci_hdrc *ci)
{
#ifdef CONFIG_USB_OTG_FSM
return ci->is_otg && ci->roles[CI_ROLE_HOST] &&
- ci->roles[CI_ROLE_GADGET];
+ ci->roles[CI_ROLE_GADGET] && (ci->platdata->srp_support ||
+ ci->platdata->hnp_support || ci->platdata->adp_support);
#else
return false;
#endif
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 5b7061a..3869c6d 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -10,6 +10,7 @@
#include <linux/usb/phy.h>
#include <linux/usb/otg.h>
#include <linux/usb/otg-fsm.h>
+#include <linux/usb/chipidea.h>
#include "ci.h"
#include "udc.h"
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (7 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 08/22] usb: chipidea: update ci_otg_is_fsm_mode conditions Li Jun
@ 2015-06-16 6:51 ` Li Jun
[not found] ` <1434437532-23678-10-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:52 ` [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations Li Jun
` (12 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:51 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Allocate usb_otg_descriptor and initialize it according to gadget otg
options, if none of options is not set, keep bmAttributes setting as
current gadget drivers, with this new interface, usb_otg_descriptor can
include bcdOTG if OTG 2.0 or later, and otg features can be decided by
the combination of usb hardware property and driver config.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/config.c | 39 +++++++++++++++++++++++++++++++++++++++
include/linux/usb/gadget.h | 2 ++
2 files changed, 41 insertions(+)
diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
index 34e12fc..9ebc052 100644
--- a/drivers/usb/gadget/config.c
+++ b/drivers/usb/gadget/config.c
@@ -195,3 +195,42 @@ void usb_free_all_descriptors(struct usb_function *f)
usb_free_descriptors(f->ss_descriptors);
}
EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
+
+int usb_otg_descriptor_init(struct usb_gadget *gadget,
+ struct usb_descriptor_header *otg_desc)
+{
+ struct usb_otg_descriptor *otg1x_desc;
+ struct usb_otg20_descriptor *otg20_desc;
+ u8 otg_attributes = 0;
+
+ if (!otg_desc)
+ return -EINVAL;
+
+ if (gadget->adp_support || gadget->hnp_support ||
+ gadget->srp_support) {
+ if (gadget->adp_support)
+ otg_attributes |= USB_OTG_ADP;
+ if (gadget->hnp_support)
+ otg_attributes |= USB_OTG_HNP;
+ if (gadget->srp_support)
+ otg_attributes |= USB_OTG_SRP;
+ } else {
+ otg_attributes = USB_OTG_SRP | USB_OTG_HNP;
+ }
+
+ if (gadget->otg_rev >= 0x0200) {
+ otg20_desc = (struct usb_otg20_descriptor *)otg_desc;
+ otg20_desc->bLength = sizeof(struct usb_otg20_descriptor);
+ otg20_desc->bDescriptorType = USB_DT_OTG;
+ otg20_desc->bmAttributes = otg_attributes;
+ otg20_desc->bcdOTG = cpu_to_le16(gadget->otg_rev);
+ } else {
+ otg1x_desc = (struct usb_otg_descriptor *)otg_desc;
+ otg1x_desc->bLength = sizeof(struct usb_otg_descriptor);
+ otg1x_desc->bDescriptorType = USB_DT_OTG;
+ otg1x_desc->bmAttributes = otg_attributes;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(usb_otg_descriptor_init);
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 814cb70..b77730e 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -1013,6 +1013,8 @@ int usb_assign_descriptors(struct usb_function *f,
struct usb_descriptor_header **ss);
void usb_free_all_descriptors(struct usb_function *f);
+int usb_otg_descriptor_init(struct usb_gadget *gadget,
+ struct usb_descriptor_header *otg_desc);
/*-------------------------------------------------------------------------*/
/* utility to simplify map/unmap of usb_requests to/from DMA */
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (8 preceding siblings ...)
2015-06-16 6:51 ` [PATCH v3 09/22] usb: gadget: add usb_otg_descriptor_add interface to init usb_otg_descriptor Li Jun
@ 2015-06-16 6:52 ` Li Jun
[not found] ` <1434437532-23678-11-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2015-06-16 6:52 ` [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add Li Jun
` (11 subsequent siblings)
21 siblings, 1 reply; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
add it for each usb configurations, free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/configfs.c | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 0495c94..773b746 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -41,6 +41,8 @@ int check_user_usb_string(const char *name,
#define MAX_NAME_LEN 40
#define MAX_USB_STRING_LANGS 2
+static const struct usb_descriptor_header *otg_desc[2];
+
struct gadget_info {
struct config_group group;
struct config_group functions_group;
@@ -55,9 +57,6 @@ struct gadget_info {
struct list_head available_func;
const char *udc_name;
-#ifdef CONFIG_USB_OTG
- struct usb_otg_descriptor otg;
-#endif
struct usb_composite_driver composite;
struct usb_composite_dev cdev;
bool use_os_desc;
@@ -1376,6 +1375,24 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN);
}
+ if (gadget_is_otg(gadget) && !otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc) {
+ ret = -ENOMEM;
+ goto err_comp_cleanup;
+ }
+ usb_otg_descriptor_init(gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
+
/* Go through all configs, attach all functions */
list_for_each_entry(c, &gi->cdev.configs, list) {
struct config_usb_cfg *cfg;
@@ -1383,6 +1400,9 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
struct usb_function *tmp;
struct gadget_config_name *cn;
+ if (gadget_is_otg(gadget))
+ c->descriptors = otg_desc;
+
cfg = container_of(c, struct config_usb_cfg, c);
if (!list_empty(&cfg->string_list)) {
i = 0;
@@ -1437,6 +1457,8 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
cdev = get_gadget_data(gadget);
gi = container_of(cdev, struct gadget_info, cdev);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
purge_configs_funcs(gi);
composite_dev_cleanup(cdev);
usb_ep_autoconfig_reset(cdev->gadget);
@@ -1510,12 +1532,6 @@ static struct config_group *gadgets_make(
if (!gi->composite.gadget_driver.function)
goto err;
-#ifdef CONFIG_USB_OTG
- gi->otg.bLength = sizeof(struct usb_otg_descriptor);
- gi->otg.bDescriptorType = USB_DT_OTG;
- gi->otg.bmAttributes = USB_OTG_SRP | USB_OTG_HNP;
-#endif
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (9 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 10/22] usb: gadget: configfs: init and add usb_otg_descriptor for usb configurations Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 12/22] usb: gadget: acm_ms: " Li Jun
` (10 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/ether.c | 48 +++++++++++++++++++++++++++------------
1 file changed, 34 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/gadget/legacy/ether.c b/drivers/usb/gadget/legacy/ether.c
index a3323dc..6492804 100644
--- a/drivers/usb/gadget/legacy/ether.c
+++ b/drivers/usb/gadget/legacy/ether.c
@@ -171,20 +171,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
static struct usb_string strings_dev[] = {
[USB_GADGET_MANUFACTURER_IDX].s = "",
@@ -229,6 +216,21 @@ static int rndis_do_config(struct usb_configuration *c)
/* FIXME alloc iConfiguration string, set it in c->strings */
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -271,6 +273,21 @@ static int eth_do_config(struct usb_configuration *c)
/* FIXME alloc iConfiguration string, set it in c->strings */
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -463,6 +480,9 @@ static int eth_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_geth);
usb_put_function_instance(fi_geth);
}
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 12/22] usb: gadget: acm_ms: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (10 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 11/22] usb: gadget: ether: init usb_otg_descriptor via usb_otg_descriptor_add Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 13/22] usb: gadget: audio: " Li Jun
` (9 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/acm_ms.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/acm_ms.c b/drivers/usb/gadget/legacy/acm_ms.c
index 1194b09..e10e19e 100644
--- a/drivers/usb/gadget/legacy/acm_ms.c
+++ b/drivers/usb/gadget/legacy/acm_ms.c
@@ -58,21 +58,7 @@ static struct usb_device_descriptor device_desc = {
/*.bNumConfigurations = DYNAMIC*/
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /*
- * REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
/* string IDs are assigned dynamically */
static struct usb_string strings_dev[] = {
@@ -127,6 +113,21 @@ static int acm_ms_do_config(struct usb_configuration *c)
int status;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -255,6 +256,9 @@ static int acm_ms_unbind(struct usb_composite_dev *cdev)
usb_put_function_instance(fi_msg);
usb_put_function(f_acm);
usb_put_function_instance(f_acm_inst);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 13/22] usb: gadget: audio: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (11 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 12/22] usb: gadget: acm_ms: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 14/22] usb: gadget: cdc2: " Li Jun
` (8 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/audio.c | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/gadget/legacy/audio.c b/drivers/usb/gadget/legacy/audio.c
index f289caf..743b046 100644
--- a/drivers/usb/gadget/legacy/audio.c
+++ b/drivers/usb/gadget/legacy/audio.c
@@ -150,20 +150,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
/*-------------------------------------------------------------------------*/
@@ -174,6 +161,21 @@ static int audio_do_config(struct usb_configuration *c)
/* FIXME alloc iConfiguration string, set it in c->strings */
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -289,6 +291,9 @@ static int audio_unbind(struct usb_composite_dev *cdev)
if (!IS_ERR_OR_NULL(fi_uac2))
usb_put_function_instance(fi_uac2);
#endif
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 14/22] usb: gadget: cdc2: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (12 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 13/22] usb: gadget: audio: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 15/22] usb: gadget: g_ffs: " Li Jun
` (7 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/cdc2.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/cdc2.c b/drivers/usb/gadget/legacy/cdc2.c
index afd3e37..fc0d504 100644
--- a/drivers/usb/gadget/legacy/cdc2.c
+++ b/drivers/usb/gadget/legacy/cdc2.c
@@ -60,21 +60,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
/* string IDs are assigned dynamically */
static struct usb_string strings_dev[] = {
@@ -109,6 +95,21 @@ static int cdc_do_config(struct usb_configuration *c)
int status;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -219,6 +220,9 @@ static int cdc_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_ecm);
if (!IS_ERR_OR_NULL(fi_ecm))
usb_put_function_instance(fi_ecm);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 15/22] usb: gadget: g_ffs: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (13 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 14/22] usb: gadget: cdc2: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 16/22] usb: gadget: hid: " Li Jun
` (6 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/g_ffs.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/g_ffs.c b/drivers/usb/gadget/legacy/g_ffs.c
index 7b9ef7e..f607bbe 100644
--- a/drivers/usb/gadget/legacy/g_ffs.c
+++ b/drivers/usb/gadget/legacy/g_ffs.c
@@ -88,21 +88,7 @@ MODULE_PARM_DESC(bDeviceProtocol, "USB Device protocol");
module_param_array_named(functions, func_names, charp, &func_num, 0);
MODULE_PARM_DESC(functions, "USB Functions list");
-static const struct usb_descriptor_header *gfs_otg_desc[] = {
- (const struct usb_descriptor_header *)
- &(const struct usb_otg_descriptor) {
- .bLength = sizeof(struct usb_otg_descriptor),
- .bDescriptorType = USB_DT_OTG,
-
- /*
- * REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
- },
-
- NULL
-};
+static const struct usb_descriptor_header *gfs_otg_desc[2];
/* String IDs are assigned dynamically */
static struct usb_string gfs_strings[] = {
@@ -471,6 +457,9 @@ static int gfs_unbind(struct usb_composite_dev *cdev)
for (i = 0; i < N_CONF * func_num; ++i)
usb_put_function(*(f_ffs[0] + i));
+ kfree(gfs_otg_desc[0]);
+ gfs_otg_desc[0] = NULL;
+
return 0;
}
@@ -489,6 +478,21 @@ static int gfs_do_config(struct usb_configuration *c)
return -ENODEV;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!gfs_otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ gfs_otg_desc[0] = usb_desc;
+ gfs_otg_desc[1] = NULL;
+ }
c->descriptors = gfs_otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 16/22] usb: gadget: hid: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (14 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 15/22] usb: gadget: g_ffs: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 17/22] usb: gadget: mass_storage: " Li Jun
` (5 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/hid.c | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
index 2baa572..6e7bbda 100644
--- a/drivers/usb/gadget/legacy/hid.c
+++ b/drivers/usb/gadget/legacy/hid.c
@@ -68,21 +68,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
/* string IDs are assigned dynamically */
static struct usb_string strings_dev[] = {
@@ -112,6 +98,21 @@ static int do_config(struct usb_configuration *c)
int status = 0;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -213,6 +214,10 @@ static int hid_unbind(struct usb_composite_dev *cdev)
usb_put_function(n->f);
usb_put_function_instance(n->fi);
}
+
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 17/22] usb: gadget: mass_storage: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (15 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 16/22] usb: gadget: hid: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 18/22] usb: gadget: multi: " Li Jun
` (4 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/mass_storage.c | 34 ++++++++++++++++++--------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/mass_storage.c b/drivers/usb/gadget/legacy/mass_storage.c
index e7bfb08..587ea7f 100644
--- a/drivers/usb/gadget/legacy/mass_storage.c
+++ b/drivers/usb/gadget/legacy/mass_storage.c
@@ -64,21 +64,7 @@ static struct usb_device_descriptor msg_device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /*
- * REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
static struct usb_string strings_dev[] = {
[USB_GADGET_MANUFACTURER_IDX].s = "",
@@ -136,6 +122,21 @@ static int msg_do_config(struct usb_configuration *c)
int ret;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -243,6 +244,9 @@ static int msg_unbind(struct usb_composite_dev *cdev)
if (!IS_ERR(fi_msg))
usb_put_function_instance(fi_msg);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 18/22] usb: gadget: multi: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (16 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 17/22] usb: gadget: mass_storage: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 19/22] usb: gadget: ncm: " Li Jun
` (3 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/multi.c | 49 +++++++++++++++++++++++++++------------
1 file changed, 34 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/gadget/legacy/multi.c b/drivers/usb/gadget/legacy/multi.c
index b21b51f..2e8fbae 100644
--- a/drivers/usb/gadget/legacy/multi.c
+++ b/drivers/usb/gadget/legacy/multi.c
@@ -78,21 +78,7 @@ static struct usb_device_descriptor device_desc = {
.idProduct = cpu_to_le16(MULTI_PRODUCT_NUM),
};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &(struct usb_otg_descriptor){
- .bLength = sizeof(struct usb_otg_descriptor),
- .bDescriptorType = USB_DT_OTG,
-
- /*
- * REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
- },
- NULL,
-};
-
+static const struct usb_descriptor_header *otg_desc[2];
enum {
MULTI_STRING_RNDIS_CONFIG_IDX = USB_GADGET_FIRST_AVAIL_IDX,
@@ -155,6 +141,21 @@ static int rndis_do_config(struct usb_configuration *c)
int ret;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -243,6 +244,21 @@ static int cdc_do_config(struct usb_configuration *c)
int ret;
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -490,6 +506,9 @@ static int multi_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_ecm);
usb_put_function_instance(fi_ecm);
#endif
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 19/22] usb: gadget: ncm: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (17 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 18/22] usb: gadget: multi: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 20/22] usb: gadget: printer: " Li Jun
` (2 subsequent siblings)
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/ncm.c | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/gadget/legacy/ncm.c b/drivers/usb/gadget/legacy/ncm.c
index 6ce7421..5f9e2f3 100644
--- a/drivers/usb/gadget/legacy/ncm.c
+++ b/drivers/usb/gadget/legacy/ncm.c
@@ -69,20 +69,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
/* string IDs are assigned dynamically */
static struct usb_string strings_dev[] = {
@@ -114,6 +101,21 @@ static int ncm_do_config(struct usb_configuration *c)
/* FIXME alloc iConfiguration string, set it in c->strings */
if (gadget_is_otg(c->cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (c->cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(c->cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
c->descriptors = otg_desc;
c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -192,6 +194,9 @@ static int gncm_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_ncm);
if (!IS_ERR_OR_NULL(f_ncm_inst))
usb_put_function_instance(f_ncm_inst);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 20/22] usb: gadget: printer: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (18 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 19/22] usb: gadget: ncm: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 21/22] usb: gadget: serial: " Li Jun
2015-06-16 6:52 ` [PATCH v3 22/22] usb: gadget: zero: " Li Jun
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/printer.c | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
index 1ce7df1..1726c9c 100644
--- a/drivers/usb/gadget/legacy/printer.c
+++ b/drivers/usb/gadget/legacy/printer.c
@@ -82,16 +82,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
- .bmAttributes = USB_OTG_SRP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
/*-------------------------------------------------------------------------*/
@@ -136,7 +127,21 @@ static int printer_do_config(struct usb_configuration *c)
usb_gadget_set_selfpowered(gadget);
if (gadget_is_otg(gadget)) {
- otg_descriptor.bmAttributes |= USB_OTG_HNP;
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
printer_cfg_driver.descriptors = otg_desc;
printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -196,6 +201,9 @@ static int printer_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_printer);
usb_put_function_instance(fi_printer);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 21/22] usb: gadget: serial: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (19 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 20/22] usb: gadget: printer: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
2015-06-16 6:52 ` [PATCH v3 22/22] usb: gadget: zero: " Li Jun
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/serial.c | 34 ++++++++++++++++++++--------------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/gadget/legacy/serial.c b/drivers/usb/gadget/legacy/serial.c
index 8b7528f..00d5a6f 100644
--- a/drivers/usb/gadget/legacy/serial.c
+++ b/drivers/usb/gadget/legacy/serial.c
@@ -79,20 +79,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 1,
};
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
+static const struct usb_descriptor_header *otg_desc[2];
/*-------------------------------------------------------------------------*/
@@ -191,6 +178,21 @@ static int gs_bind(struct usb_composite_dev *cdev)
serial_config_driver.iConfiguration = status;
if (gadget_is_otg(cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
serial_config_driver.descriptors = otg_desc;
serial_config_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
}
@@ -227,6 +229,10 @@ static int gs_unbind(struct usb_composite_dev *cdev)
usb_put_function(f_serial[i]);
usb_put_function_instance(fi_serial[i]);
}
+
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread* [PATCH v3 22/22] usb: gadget: zero: init usb_otg_descriptor via usb_otg_descriptor_add
[not found] ` <1434437532-23678-1-git-send-email-jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (20 preceding siblings ...)
2015-06-16 6:52 ` [PATCH v3 21/22] usb: gadget: serial: " Li Jun
@ 2015-06-16 6:52 ` Li Jun
21 siblings, 0 replies; 36+ messages in thread
From: Li Jun @ 2015-06-16 6:52 UTC (permalink / raw)
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0,
peter.chen-KZfg59tc24xl57MIdRCFDg, robh+dt-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-usb-u79uwXL29TY76Z2rM5mHXA,
devicetree-u79uwXL29TY76Z2rM5mHXA, pawel.moll-5wv7dgnIgG8,
mark.rutland-5wv7dgnIgG8, macpaul-Re5JQEeQqe8AvxtiuMwx3w,
rogerq-l0cyMroinI0, Li Jun
Use usb_otg_descriptor_add to allocate and initialize usb_otg_descriptor,
free it while composite unbind.
Signed-off-by: Li Jun <jun.li-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
drivers/usb/gadget/legacy/zero.c | 37 +++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/drivers/usb/gadget/legacy/zero.c b/drivers/usb/gadget/legacy/zero.c
index c986e8a..65011f6 100644
--- a/drivers/usb/gadget/legacy/zero.c
+++ b/drivers/usb/gadget/legacy/zero.c
@@ -121,24 +121,7 @@ static struct usb_device_descriptor device_desc = {
.bNumConfigurations = 2,
};
-#ifdef CONFIG_USB_OTG
-static struct usb_otg_descriptor otg_descriptor = {
- .bLength = sizeof otg_descriptor,
- .bDescriptorType = USB_DT_OTG,
-
- /* REVISIT SRP-only hardware is possible, although
- * it would not be called "OTG" ...
- */
- .bmAttributes = USB_OTG_SRP | USB_OTG_HNP,
-};
-
-static const struct usb_descriptor_header *otg_desc[] = {
- (struct usb_descriptor_header *) &otg_descriptor,
- NULL,
-};
-#else
-#define otg_desc NULL
-#endif
+static const struct usb_descriptor_header *otg_desc[2];
/* string IDs are assigned dynamically */
/* default serial number takes at least two packets */
@@ -341,6 +324,21 @@ static int zero_bind(struct usb_composite_dev *cdev)
/* support OTG systems */
if (gadget_is_otg(cdev->gadget)) {
+ if (!otg_desc[0]) {
+ struct usb_descriptor_header *usb_desc;
+ unsigned length;
+
+ if (cdev->gadget->otg_rev >= 0x0200)
+ length = sizeof(struct usb_otg20_descriptor);
+ else
+ length = sizeof(struct usb_otg_descriptor);
+ usb_desc = kzalloc(length, GFP_KERNEL);
+ if (!usb_desc)
+ return -ENOMEM;
+ usb_otg_descriptor_init(cdev->gadget, usb_desc);
+ otg_desc[0] = usb_desc;
+ otg_desc[1] = NULL;
+ }
sourcesink_driver.descriptors = otg_desc;
sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
loopback_driver.descriptors = otg_desc;
@@ -397,6 +395,9 @@ static int zero_unbind(struct usb_composite_dev *cdev)
if (!IS_ERR_OR_NULL(func_lb))
usb_put_function(func_lb);
usb_put_function_instance(func_inst_lb);
+ kfree(otg_desc[0]);
+ otg_desc[0] = NULL;
+
return 0;
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 36+ messages in thread