|
@@ -335,47 +335,48 @@ static int palm_os_3_probe(struct usb_serial *serial,
|
|
goto exit;
|
|
goto exit;
|
|
}
|
|
}
|
|
|
|
|
|
- if (retval == sizeof(*connection_info)) {
|
|
|
|
- connection_info = (struct visor_connection_info *)
|
|
|
|
- transfer_buffer;
|
|
|
|
-
|
|
|
|
- num_ports = le16_to_cpu(connection_info->num_ports);
|
|
|
|
- for (i = 0; i < num_ports; ++i) {
|
|
|
|
- switch (
|
|
|
|
- connection_info->connections[i].port_function_id) {
|
|
|
|
- case VISOR_FUNCTION_GENERIC:
|
|
|
|
- string = "Generic";
|
|
|
|
- break;
|
|
|
|
- case VISOR_FUNCTION_DEBUGGER:
|
|
|
|
- string = "Debugger";
|
|
|
|
- break;
|
|
|
|
- case VISOR_FUNCTION_HOTSYNC:
|
|
|
|
- string = "HotSync";
|
|
|
|
- break;
|
|
|
|
- case VISOR_FUNCTION_CONSOLE:
|
|
|
|
- string = "Console";
|
|
|
|
- break;
|
|
|
|
- case VISOR_FUNCTION_REMOTE_FILE_SYS:
|
|
|
|
- string = "Remote File System";
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- string = "unknown";
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- dev_info(dev, "%s: port %d, is for %s use\n",
|
|
|
|
- serial->type->description,
|
|
|
|
- connection_info->connections[i].port, string);
|
|
|
|
- }
|
|
|
|
|
|
+ if (retval != sizeof(*connection_info)) {
|
|
|
|
+ dev_err(dev, "Invalid connection information received from device\n");
|
|
|
|
+ retval = -ENODEV;
|
|
|
|
+ goto exit;
|
|
}
|
|
}
|
|
- /*
|
|
|
|
- * Handle devices that report invalid stuff here.
|
|
|
|
- */
|
|
|
|
|
|
+
|
|
|
|
+ connection_info = (struct visor_connection_info *)transfer_buffer;
|
|
|
|
+
|
|
|
|
+ num_ports = le16_to_cpu(connection_info->num_ports);
|
|
|
|
+
|
|
|
|
+ /* Handle devices that report invalid stuff here. */
|
|
if (num_ports == 0 || num_ports > 2) {
|
|
if (num_ports == 0 || num_ports > 2) {
|
|
dev_warn(dev, "%s: No valid connect info available\n",
|
|
dev_warn(dev, "%s: No valid connect info available\n",
|
|
serial->type->description);
|
|
serial->type->description);
|
|
num_ports = 2;
|
|
num_ports = 2;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ for (i = 0; i < num_ports; ++i) {
|
|
|
|
+ switch (connection_info->connections[i].port_function_id) {
|
|
|
|
+ case VISOR_FUNCTION_GENERIC:
|
|
|
|
+ string = "Generic";
|
|
|
|
+ break;
|
|
|
|
+ case VISOR_FUNCTION_DEBUGGER:
|
|
|
|
+ string = "Debugger";
|
|
|
|
+ break;
|
|
|
|
+ case VISOR_FUNCTION_HOTSYNC:
|
|
|
|
+ string = "HotSync";
|
|
|
|
+ break;
|
|
|
|
+ case VISOR_FUNCTION_CONSOLE:
|
|
|
|
+ string = "Console";
|
|
|
|
+ break;
|
|
|
|
+ case VISOR_FUNCTION_REMOTE_FILE_SYS:
|
|
|
|
+ string = "Remote File System";
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ string = "unknown";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ dev_info(dev, "%s: port %d, is for %s use\n",
|
|
|
|
+ serial->type->description,
|
|
|
|
+ connection_info->connections[i].port, string);
|
|
|
|
+ }
|
|
dev_info(dev, "%s: Number of ports: %d\n", serial->type->description,
|
|
dev_info(dev, "%s: Number of ports: %d\n", serial->type->description,
|
|
num_ports);
|
|
num_ports);
|
|
|
|
|