Clang warns when one enumerated type is implicitly converted to another, which happens several times in the pinctrl drivers for a few reasons: * The PCONFDUMP macro, which sets the param member in pin_config_item. * The pinconf_generic_params structure, which is used by drivers to configure their bindings, which has a param member like pin_config_item. * The pinconf_to_config_packed, which takes either the generic enum pin_config_param or a specialized one. Drivers are allowed to extend this enumerated type because of the gap betweem PIN_CONFIG_END and PIN_CONFIG_MAX. Make it clear to Clang that this is allowed by changing param's type in all of these instances to int so no conversion needs to happen. Link: https://github.com/ClangBuiltLinux/linux/issues/138 Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> --- include/linux/pinctrl/pinconf-generic.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h index 6c0680641108..13076ae7acfb 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h @@ -150,7 +150,7 @@ static inline u32 pinconf_to_config_argument(unsigned long config) return (u32) ((config >> 8) & 0xffffffUL); } -static inline unsigned long pinconf_to_config_packed(enum pin_config_param param, +static inline unsigned long pinconf_to_config_packed(int param, u32 argument) { return PIN_CONF_PACKED(param, argument); @@ -164,7 +164,7 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param } struct pin_config_item { - const enum pin_config_param param; + const int param; const char * const display; const char * const format; bool has_arg; @@ -180,7 +180,7 @@ struct pinctrl_map; struct pinconf_generic_params { const char * const property; - enum pin_config_param param; + int param; u32 default_value; }; -- 2.19.0