Skip to content

Commit

Permalink
USB: serial: f81534: use calc_num_endpoints to verify endpoints
Browse files Browse the repository at this point in the history
Simplify the endpoint sanity check by letting core verify that the
required endpoints are present and moving the max-packet check to
calc_num_ports.

Signed-off-by: Johan Hovold <johan@kernel.org>
  • Loading branch information
Johan Hovold committed Mar 28, 2017
1 parent 5f39197 commit cac4cea
Showing 1 changed file with 11 additions and 44 deletions.
55 changes: 11 additions & 44 deletions drivers/usb/serial/f81534.c
Original file line number Diff line number Diff line change
@@ -614,12 +614,21 @@ static int f81534_find_config_idx(struct usb_serial *serial, u8 *index)
static int f81534_calc_num_ports(struct usb_serial *serial,
struct usb_serial_endpoints *epds)
{
struct device *dev = &serial->interface->dev;
int size_bulk_in = usb_endpoint_maxp(epds->bulk_in[0]);
int size_bulk_out = usb_endpoint_maxp(epds->bulk_out[0]);
u8 setting[F81534_CUSTOM_DATA_SIZE];
u8 setting_idx;
u8 num_port = 0;
int status;
size_t i;

if (size_bulk_out != F81534_WRITE_BUFFER_SIZE ||
size_bulk_in != F81534_MAX_RECEIVE_BLOCK_SIZE) {
dev_err(dev, "unsupported endpoint max packet size\n");
return -ENODEV;
}

/* Check had custom setting */
status = f81534_find_config_idx(serial, &setting_idx);
if (status) {
@@ -1115,49 +1124,6 @@ static int f81534_setup_ports(struct usb_serial *serial)
return 0;
}

static int f81534_probe(struct usb_serial *serial,
const struct usb_device_id *id)
{
struct usb_endpoint_descriptor *endpoint;
struct usb_host_interface *iface_desc;
struct device *dev;
int num_bulk_in = 0;
int num_bulk_out = 0;
int size_bulk_in = 0;
int size_bulk_out = 0;
int i;

dev = &serial->interface->dev;
iface_desc = serial->interface->cur_altsetting;

for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
endpoint = &iface_desc->endpoint[i].desc;

if (usb_endpoint_is_bulk_in(endpoint)) {
++num_bulk_in;
size_bulk_in = usb_endpoint_maxp(endpoint);
}

if (usb_endpoint_is_bulk_out(endpoint)) {
++num_bulk_out;
size_bulk_out = usb_endpoint_maxp(endpoint);
}
}

if (num_bulk_in != 1 || num_bulk_out != 1) {
dev_err(dev, "expected endpoints not found\n");
return -ENODEV;
}

if (size_bulk_out != F81534_WRITE_BUFFER_SIZE ||
size_bulk_in != F81534_MAX_RECEIVE_BLOCK_SIZE) {
dev_err(dev, "unsupported endpoint max packet size\n");
return -ENODEV;
}

return 0;
}

static int f81534_attach(struct usb_serial *serial)
{
struct f81534_serial_private *serial_priv;
@@ -1381,12 +1347,13 @@ static struct usb_serial_driver f81534_device = {
},
.description = DRIVER_DESC,
.id_table = f81534_id_table,
.num_bulk_in = 1,
.num_bulk_out = 1,
.open = f81534_open,
.close = f81534_close,
.write = f81534_write,
.tx_empty = f81534_tx_empty,
.calc_num_ports = f81534_calc_num_ports,
.probe = f81534_probe,
.attach = f81534_attach,
.port_probe = f81534_port_probe,
.dtr_rts = f81534_dtr_rts,

0 comments on commit cac4cea

Please sign in to comment.