Re: [PATCH 16/17] usb: common: add function to get interval expressed in us unit

Greg Kroah-Hartman
2021-03-05T15:48:33Z

On Fri, Mar 05, 2021 at 10:33:12AM -0500, Alan Stern wrote:
> On Fri, Mar 05, 2021 at 05:02:54PM +0800, Chunfeng Yun wrote:
> > Add a new function to convert bInterval into the time expressed
> > in 1us unit.
> >
> > Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
> > ---
>
> > --- a/drivers/usb/common/common.c
> > +++ b/drivers/usb/common/common.c
> > @@ -165,6 +165,39 @@ enum usb_dr_mode usb_get_dr_mode(struct device *dev)
> > }
> > EXPORT_SYMBOL_GPL(usb_get_dr_mode);
> >
> > +unsigned int usb_decode_interval(const struct usb_endpoint_descriptor *epd,
> > + enum usb_device_speed speed)
> > +{
> > + unsigned int interval = 0;
> > +
> > + switch (usb_endpoint_type(epd)) {
> > + case USB_ENDPOINT_XFER_CONTROL:
> > + /* uframes per NAK */
> > + if (speed == USB_SPEED_HIGH)
> > + interval = epd->bInterval;
> > + break;
> > + case USB_ENDPOINT_XFER_ISOC:
> > + interval = 1 << (epd->bInterval - 1);
> > + break;
> > + case USB_ENDPOINT_XFER_BULK:
> > + /* uframes per NAK */
> > + if (speed == USB_SPEED_HIGH && usb_endpoint_dir_out(epd))
> > + interval = epd->bInterval;
> > + break;
> > + case USB_ENDPOINT_XFER_INT:
> > + if (speed >= USB_SPEED_HIGH)
> > + interval = 1 << (epd->bInterval - 1);
> > + else
> > + interval = epd->bInterval;
> > + break;
> > + }
> > +
> > + interval *= (speed >= USB_SPEED_HIGH) ? 125 : 1000;
> > +
> > + return interval;
> > +}
> > +EXPORT_SYMBOL_GPL(usb_decode_interval);
>
> > --- a/include/linux/usb/ch9.h
> > +++ b/include/linux/usb/ch9.h
> > @@ -90,6 +90,17 @@ extern enum usb_ssp_rate usb_get_maximum_ssp_rate(struct device *dev);
> > */
> > extern const char *usb_state_string(enum usb_device_state state);
> >
> > +/**
> > + * usb_decode_interval - Decode bInterval into the time expressed in 1us unit
> > + * @epd: The descriptor of the endpoint
> > + * @speed: The speed that the endpoint works as
> > + *
> > + * Function returns the interval expressed in 1us unit for servicing
> > + * endpoint for data transfers.
> > + */
> > +unsigned int usb_decode_interval(const struct usb_endpoint_descriptor *epd,
> > + enum usb_device_speed speed);
>
> As a general rule, I believe people expect to find the kerneldoc for a
> function next to the function's definition, not next to the declaration
> in a header file.

I was going to make the same review comment, but if you look above this
in that file, there's other kernel doc information in the .h file, so
this does match with the style of the file :(

We can fix that all up later.

thanks,

greg k-h