Hi, Pawel Laszczak writes: > Please look at the changes in drivers/usb/common/common.c file. > I'm going to add it as next patch to next version. > > >>Pawel Laszczak writes: >>>>> +void cdns3_role_stop(struct cdns3 *cdns) >> >>>>> +static const char *const cdns3_mode[] = { >>>>> + [USB_DR_MODE_UNKNOWN] = "unknown", >>>>> + [USB_DR_MODE_OTG] = "otg", >>>>> + [USB_DR_MODE_HOST] = "host", >>>>> + [USB_DR_MODE_PERIPHERAL] = "device", >>>>> +}; >>>> >>>>don't we have a generic version of this under usb/common ? >>>> >>> Yes, there is a similar array, but it is defined also as static >>> and there is no function for converting value to string. >>> There is only function for converting string to value. >> >>right. You can add the missing interface generically instead of >>duplicating the enumeration. >> >>> There is also: >>> [USB_DR_MODE_UNKNOWN] = "", >>> Instead of: >>> [USB_DR_MODE_UNKNOWN] = "unknown", >>> >>> So, for USB_DR_MODE_UNKNOWN user will not see anything information. >> >>But that's what "unknown" means :-) We don't know the information. >> > > ////// start > commit 607754c60fabc43408f4f2de82d3560c72870787 (HEAD) > Author: Pawel Laszczak > Date: Mon Jul 8 12:53:47 2019 +0200 > > usb:common Added usb_get_dr_mode_from_string and usb_dr_mode_to_string. This would read better as: usb: common: Add usb_get_dr_mode_from_string and usb_dr_mode_to_string. > > Patch introduces new function usb_dr_mode_to_string for converting dual role > mod to string and removes static from usb_dr_mode_to_string definition. > > Both changes have made to avoid duplication of code by cdns3 driver. > > diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c > index 18f5dcf58b0d..ab59954deff8 100644 > --- a/drivers/usb/common/common.c > +++ b/drivers/usb/common/common.c > @@ -118,13 +118,20 @@ static const char *const usb_dr_modes[] = { > [USB_DR_MODE_OTG] = "otg", > }; > > -static enum usb_dr_mode usb_get_dr_mode_from_string(const char *str) > +/** > + * usb_get_dr_mode_from_string - Convert string to dual role mode. > + * @str: Pointer to the given string > + * > + * The function gets string and returns the correspondig enum usb_dr_mode. > + */ > +enum usb_dr_mode usb_get_dr_mode_from_string(const char *str) > { > int ret; > > ret = match_string(usb_dr_modes, ARRAY_SIZE(usb_dr_modes), str); > return (ret < 0) ? USB_DR_MODE_UNKNOWN : ret; > } > +EXPORT_SYMBOL_GPL(usb_get_dr_mode_from_string); > > enum usb_dr_mode usb_get_dr_mode(struct device *dev) > { > @@ -139,6 +146,21 @@ enum usb_dr_mode usb_get_dr_mode(struct device *dev) > } > EXPORT_SYMBOL_GPL(usb_get_dr_mode); > > +/** > + * usb_dr_mode_to_string - Convert dual role mode to stringi. s/stringi/string > + * @dr_mode: Pointer to the given dual role mode > + * > + * The function gets enum usb_dr_mode, and returns the correspondig string. > + */ > +const *char usb_dr_mode_to_string(const enum usb_dr_mode dr_mode) > +{ > + if (dr_mode > USB_DR_MODE_UNKNOWN || dr_mode <= USB_DR_MODE_PERIPHERAL) > + return usb_dr_modes[dr_mode]; > + > + return usb_dr_modes[USB_DR_MODE_UNKNOWN]; > +} > +EXPORT_SYMBOL_GPL(usb_dr_mode_to_string); missing prototype in a header file. -- balbi