mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
pinctrl / gpio: Introduce .set_config() callback for GPIO chips
Currently we already have two pin configuration related callbacks available for GPIO chips .set_single_ended() and .set_debounce(). In future we expect to have even more, which does not scale well if we need to add yet another callback to the GPIO chip structure for each possible configuration parameter. Better solution is to reuse what we already have available in the generic pinconf. To support this, we introduce a new .set_config() callback for GPIO chips. The callback takes a single packed pin configuration value as parameter. This can then be extended easily beyond what is currently supported by just adding new types to the generic pinconf enum. If the GPIO driver is backed up by a pinctrl driver the GPIO driver can just assign gpiochip_generic_config() (introduced in this patch) to .set_config and that will take care configuration requests are directed to the pinctrl driver. We then convert the existing drivers over .set_config() and finally remove the .set_single_ended() and .set_debounce() callbacks. Suggested-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
15381bc7c7
commit
2956b5d94a
26 changed files with 297 additions and 218 deletions
|
@ -12,12 +12,6 @@
|
|||
#ifndef __LINUX_PINCTRL_PINCONF_GENERIC_H
|
||||
#define __LINUX_PINCTRL_PINCONF_GENERIC_H
|
||||
|
||||
/*
|
||||
* You shouldn't even be able to compile with these enums etc unless you're
|
||||
* using generic pin config. That is why this is defined out.
|
||||
*/
|
||||
#ifdef CONFIG_GENERIC_PINCONF
|
||||
|
||||
/**
|
||||
* enum pin_config_param - possible pin configuration parameters
|
||||
* @PIN_CONFIG_BIAS_BUS_HOLD: the pin will be set to weakly latch so that it
|
||||
|
@ -118,18 +112,6 @@ enum pin_config_param {
|
|||
PIN_CONFIG_MAX = 0xFF,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
#define PCONFDUMP(a, b, c, d) { .param = a, .display = b, .format = c, \
|
||||
.has_arg = d }
|
||||
|
||||
struct pin_config_item {
|
||||
const enum pin_config_param param;
|
||||
const char * const display;
|
||||
const char * const format;
|
||||
bool has_arg;
|
||||
};
|
||||
#endif /* CONFIG_DEBUG_FS */
|
||||
|
||||
/*
|
||||
* Helpful configuration macro to be used in tables etc.
|
||||
*/
|
||||
|
@ -158,6 +140,21 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param
|
|||
return PIN_CONF_PACKED(param, argument);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GENERIC_PINCONF
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
#define PCONFDUMP(a, b, c, d) { \
|
||||
.param = a, .display = b, .format = c, .has_arg = d \
|
||||
}
|
||||
|
||||
struct pin_config_item {
|
||||
const enum pin_config_param param;
|
||||
const char * const display;
|
||||
const char * const format;
|
||||
bool has_arg;
|
||||
};
|
||||
#endif /* CONFIG_DEBUG_FS */
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
||||
#include <linux/device.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue