pinctrl: aspeed: Split out pinmux from general pinctrl
ASPEED have completely rearranged the System Control Unit register layout with the AST2600. The existing code took advantage of the fact that the AST2400 and AST2500 had layouts that were similar enough to have little impact on the pinmux infrastructure (though there is a wart with read-modify-write vs write-1-clear semantics of the hardware strapping registers between the two). Given that any similarity has been thrown out with the AST2600, separate out the function applying an expression state to be driver-specific. With it, extract out the pinmux macro jungle to its own header and implementation so the pieces can be composed without dependency cycles. Cc: Johnny Huang <johnny_huang@aspeedtech.com> Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Link: https://lore.kernel.org/r/20190628023838.15426-8-andrew@aj.id.au Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:

committed by
Linus Walleij

parent
d0d88b5c9e
commit
efa5623981
@@ -528,22 +528,6 @@ struct aspeed_pin_config {
|
||||
u8 value;
|
||||
};
|
||||
|
||||
struct aspeed_pinctrl_data {
|
||||
struct regmap *maps[ASPEED_NR_PINMUX_IPS];
|
||||
|
||||
const struct pinctrl_pin_desc *pins;
|
||||
const unsigned int npins;
|
||||
|
||||
const struct aspeed_pin_group *groups;
|
||||
const unsigned int ngroups;
|
||||
|
||||
const struct aspeed_pin_function *functions;
|
||||
const unsigned int nfunctions;
|
||||
|
||||
const struct aspeed_pin_config *configs;
|
||||
const unsigned int nconfigs;
|
||||
};
|
||||
|
||||
#define ASPEED_PINCTRL_PIN(name_) \
|
||||
[name_] = { \
|
||||
.number = name_, \
|
||||
@@ -551,30 +535,19 @@ struct aspeed_pinctrl_data {
|
||||
.drv_data = (void *) &(PIN_SYM(name_)) \
|
||||
}
|
||||
|
||||
struct aspeed_pin_group {
|
||||
const char *name;
|
||||
const unsigned int *pins;
|
||||
struct aspeed_pinctrl_data {
|
||||
struct regmap *scu;
|
||||
|
||||
const struct pinctrl_pin_desc *pins;
|
||||
const unsigned int npins;
|
||||
|
||||
const struct aspeed_pin_config *configs;
|
||||
const unsigned int nconfigs;
|
||||
|
||||
struct aspeed_pinmux_data pinmux;
|
||||
};
|
||||
|
||||
#define ASPEED_PINCTRL_GROUP(name_) { \
|
||||
.name = #name_, \
|
||||
.pins = &(PIN_GROUP_SYM(name_))[0], \
|
||||
.npins = ARRAY_SIZE(PIN_GROUP_SYM(name_)), \
|
||||
}
|
||||
|
||||
struct aspeed_pin_function {
|
||||
const char *name;
|
||||
const char *const *groups;
|
||||
unsigned int ngroups;
|
||||
};
|
||||
|
||||
#define ASPEED_PINCTRL_FUNC(name_, ...) { \
|
||||
.name = #name_, \
|
||||
.groups = &FUNC_GROUP_SYM(name_)[0], \
|
||||
.ngroups = ARRAY_SIZE(FUNC_GROUP_SYM(name_)), \
|
||||
}
|
||||
|
||||
/* Aspeed pinctrl helpers */
|
||||
int aspeed_pinctrl_get_groups_count(struct pinctrl_dev *pctldev);
|
||||
const char *aspeed_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
|
||||
unsigned int group);
|
||||
|
Reference in New Issue
Block a user