Re: [PATCH v2] Input: bcm5974 - check endpoint type before starting traffic

From: Dmitry Torokhov
Date: Fri Oct 13 2023 - 23:04:21 EST


Hi Javier,

On Thu, Oct 12, 2023 at 06:51:49PM +0200, Javier Carrasco wrote:
>
> +static bool bcm5974_ep_is_int_in(struct usb_host_interface *iface, int addr)
> +{
> + struct usb_endpoint_descriptor *endpoint;
> + int i;
> +
> + for (i = 0; i < iface->desc.bNumEndpoints; i++) {
> + endpoint = &iface->endpoint[i].desc;
> + if (endpoint->bEndpointAddress == addr) {
> + if (usb_endpoint_is_int_in(endpoint))
> + return true;
> + }
> + }
> + return false;
> +}

This essentially reimplements usb_find_endpoint() in a sense, so can we
instead do:

ep = usb_find_endpoint(iface, addr);
if (!ep || !usb_endpoint_is_int_in(ep)) {
dev_err(...);
return ...;
}


Also it looks like the handling of button endpoint is interleaved with
the trackpad endpoint, I wonder if it would not be better if we have a
separate "if (cfg->tp_type == TYPE1)" where we would do the check,
allocate URB, and did all the rest of set up for button transfers.

Thanks.

--
Dmitry