> >Hi, > >Pawel Laszczak <pawell@xxxxxxxxxxx> 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 <pawell@xxxxxxxxxxx> 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 <pawell@xxxxxxxxxxx> >> 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. > The prototype was added , but not all text was past. Sorry for that. Fixed version: with your changes. ///// v2 corrected commit 4553d48dd0500085d90c8280e28714072279c3dd (HEAD) Author: Pawel Laszczak <pawell@xxxxxxxxxxx> Date: Mon Jul 8 12:53:47 2019 +0200 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..76634b8e92db 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 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); + #ifdef CONFIG_OF /** * of_usb_get_dr_mode_by_phy - Get dual role mode for the controller device diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h index 69f1b6328532..c156817672c4 100644 --- a/include/linux/usb/otg.h +++ b/include/linux/usb/otg.h @@ -129,4 +129,20 @@ enum usb_dr_mode { */ extern enum usb_dr_mode usb_get_dr_mode(struct device *dev); +/** + * 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. + */ +extern enum usb_dr_mode usb_get_dr_mode_from_string(const char *str); + +/** + * usb_dr_mode_to_string - Convert dual role mode to string. + * @dr_mode: Pointer to the given dual role mode + * + * The function gets enum usb_dr_mode, and returns the correspondig string. + */ +extern const char *usb_dr_mode_to_string(const enum usb_dr_mode dr_mode); + #endif /* __LINUX_USB_OTG_H */ //////////////// >-- >balbi