Skip to contentSkip to conversation

usb:dummy_hcd: Force FS device connection according to module parameter

PATCH Superseded Tatyana Brokhman 2 participants 4 messages Jun 9, 2011

Subsystems (2)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 usb:dummy_hcd: Force FS device connection according to module parameter

This patch adds a new module parameter to dummy_hcd: is_high_speed When set to false the connected device will be forced to operate in FS mode. The default of this parameter is true.

---
 drivers/usb/gadget/dummy_hcd.c |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)
drivers/usb/gadget/dummy_hcd.c +15 -5
index f0cdd13..cb1e0fa 100644
@@ -72,13 +72,17 @@ MODULE_LICENSE ("GPL");
 
 struct dummy_hcd_module_parameters {
 	bool is_super_speed;
+	bool is_high_speed;
 };
 
 static struct dummy_hcd_module_parameters mod_data = {
-	.is_super_speed = false
+	.is_super_speed = false,
+	.is_high_speed = true,
 };
 module_param_named(is_super_speed, mod_data.is_super_speed, bool, S_IRUGO);
 MODULE_PARM_DESC(is_super_speed, "true to simulate SuperSpeed connection");
+module_param_named(is_high_speed, mod_data.is_high_speed, bool, S_IRUGO);
+MODULE_PARM_DESC(is_high_speed, "true to simulate HighSpeed connection");
 /*-------------------------------------------------------------------------*/
 
 /* gadget side driver data structres */
@@ -904,12 +908,15 @@ usb_gadget_probe_driver(struct usb_gadget_driver *driver,
 	dum->gadget.ep0 = &dum->ep [0].ep;
 	if (mod_data.is_super_speed)
 		dum->gadget.speed = driver->speed;
-	else
+	else if (mod_data.is_high_speed)
 		dum->gadget.speed = min((u8)USB_SPEED_HIGH, (u8)driver->speed);
+	else
+		dum->gadget.speed = USB_SPEED_FULL;
 	if (dum->gadget.speed < driver->speed)
-		dev_dbg(udc_dev(dum), "This device can perform faster if"
-				      " you connect it to a "
-				      "SupeSpeed port...\n");
+		dev_dbg(udc_dev(dum), "This device can perform faster"
+				" if you connect it to a %s port...\n",
+			(driver->speed == USB_SPEED_SUPER ?
+			 "SuperSpeed" : "HighSpeed"));
 
 	if (dum->gadget.speed == USB_SPEED_SUPER) {
 		for (i = 0; i < DUMMY_ENDPOINTS; i++)
@@ -2417,6 +2424,9 @@ static int __init init (void)
 	if (usb_disabled ())
 		return -ENODEV;
 
+	if (!mod_data.is_high_speed && mod_data.is_super_speed)
+		return -EINVAL;
+
 	the_hcd_pdev = platform_device_alloc(driver_name, -1);
 	if (!the_hcd_pdev)
 		return retval;
Signature · 5 lines
1.7.3.3

--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
#1 lore raw
Quoted 3 lines · Tatyana Brokhman

This patch adds a new module parameter to dummy_hcd: is_high_speed When set to false the connected device will be forced to operate in FS mode. The default of this parameter is true.

...

drivers/usb/gadget/dummy_hcd.c usb_gadget_probe_driver(struct usb_gadget_driver *driver, · line 912

Quoted 7 lines
drivers/usb/gadget/dummy_hcd.c +1 -1
@@ -904,12 +908,15 @@ usb_gadget_probe_driver(struct usb_gadget_driver *driver,
 	dum->gadget.ep0 = &dum->ep [0].ep;
 	if (mod_data.is_super_speed)
 		dum->gadget.speed = driver->speed;
-	else
+	else if (mod_data.is_high_speed)
 		dum->gadget.speed = min((u8)USB_SPEED_HIGH, (u8)driver->speed);

Use min_t().

Quoted 14 lines
drivers/usb/gadget/dummy_hcd.c +6 -3
+	else
+		dum->gadget.speed = USB_SPEED_FULL;
 	if (dum->gadget.speed < driver->speed)
-		dev_dbg(udc_dev(dum), "This device can perform faster if"
-				      " you connect it to a "
-				      "SupeSpeed port...\n");
+		dev_dbg(udc_dev(dum), "This device can perform faster"
+				" if you connect it to a %s port...\n",
+			(driver->speed == USB_SPEED_SUPER ?
+			 "SuperSpeed" : "HighSpeed"));
 
 	if (dum->gadget.speed == USB_SPEED_SUPER) {
 		for (i = 0; i < DUMMY_ENDPOINTS; i++)

drivers/usb/gadget/dummy_hcd.c static int __init init (void) · line 2428

Quoted 5 lines
drivers/usb/gadget/dummy_hcd.c +2 -0
@@ -2417,6 +2424,9 @@ static int __init init (void)
 	if (usb_disabled ())
 		return -ENODEV;
 
+	if (!mod_data.is_high_speed && mod_data.is_super_speed)
+		return -EINVAL;

Print an error message in the log so that the user will know why the failure occurred.

Alan Stern

#2 lore raw
Quoted 11 lines

Review usb_gadget_probe_driver(struct

Quoted 1 line
(quoted diff) +0 -0
@@ -904,12 +908,15 @@ usb_gadget_probe_driver(struct

usb_gadget_driver *driver,

drivers/usb/gadget/dummy_hcd.c usb_gadget_probe_driver(struct usb_gadget_driver *driver,

Quoted 7 lines
drivers/usb/gadget/dummy_hcd.c +1 -1
 	dum->gadget.ep0 = &dum->ep [0].ep;
 	if (mod_data.is_super_speed)
 		dum->gadget.speed = driver->speed;
-	else
+	else if (mod_data.is_high_speed)
 		dum->gadget.speed = min((u8)USB_SPEED_HIGH, (u8)driver-
 speed);

Use min_t().

Ok, will update.

Quoted 18 lines
Quoted 18 lines
drivers/usb/gadget/dummy_hcd.c +6 -3
+	else
+		dum->gadget.speed = USB_SPEED_FULL;
 	if (dum->gadget.speed < driver->speed)
-		dev_dbg(udc_dev(dum), "This device can perform faster if"
-				      " you connect it to a "
-				      "SupeSpeed port...\n");
+		dev_dbg(udc_dev(dum), "This device can perform faster"
+				" if you connect it to a %s port...\n",
+			(driver->speed == USB_SPEED_SUPER ?
+			 "SuperSpeed" : "HighSpeed"));
 
 	if (dum->gadget.speed == USB_SPEED_SUPER) {
drivers/usb/gadget/dummy_hcd.c +0 -0
 		for (i = 0; i < DUMMY_ENDPOINTS; i++)
@@ -2417,6 +2424,9 @@ static int __init init (void)
 	if (usb_disabled ())
 		return -ENODEV;
 
Quoted 6 lines

drivers/usb/gadget/dummy_hcd.c static int __init init (void) · line 2428

Quoted 2 lines
drivers/usb/gadget/dummy_hcd.c +2 -0
+	if (!mod_data.is_high_speed && mod_data.is_super_speed)
+		return -EINVAL;

Print an error message in the log so that the user will know why the failure occurred.

But when the module fails to load the message sais that it's invalid parameter (or something like that). That's why I thought it will be enough. You mean to add something that explains WHY these values are wrong?

Thanks,
Tanya Brokhman
---
Sent by an consultant of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

#3 lore raw
Quoted 9 lines · Tanya Brokhman
Quoted 6 lines

drivers/usb/gadget/dummy_hcd.c static int __init init (void) · line 2428

Quoted 2 lines
drivers/usb/gadget/dummy_hcd.c +2 -0
+	if (!mod_data.is_high_speed && mod_data.is_super_speed)
+		return -EINVAL;

Print an error message in the log so that the user will know why the failure occurred.

But when the module fails to load the message sais that it's invalid parameter (or something like that). That's why I thought it will be enough.

Oh yes, that's true.

Quoted 1 line

You mean to add something that explains WHY these values are wrong?

That's what I had in mind. But "invalid parameter" is probably good enough, since these are the _only_ parameters. :-) So this part is okay as it stands.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html