diff options
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/aspeed/pinctrl-aspeed.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed.c b/drivers/pinctrl/aspeed/pinctrl-aspeed.c index f2d5133f6993..7f13ce8450a3 100644 --- a/drivers/pinctrl/aspeed/pinctrl-aspeed.c +++ b/drivers/pinctrl/aspeed/pinctrl-aspeed.c @@ -183,7 +183,6 @@ static int aspeed_sig_expr_set(const struct aspeed_sig_expr *expr, { int ret; int i; - unsigned int rev_id; for (i = 0; i < expr->ndescs; i++) { const struct aspeed_sig_desc *desc = &expr->descs[i]; @@ -216,20 +215,27 @@ static int aspeed_sig_expr_set(const struct aspeed_sig_expr *expr, /* On AST2500, Set bits in SCU7C are cleared from SCU70 */ if (desc->ip == ASPEED_IP_SCU && desc->reg == HW_STRAP1) { + unsigned int rev_id; + ret = regmap_read(maps[ASPEED_IP_SCU], HW_REVISION_ID, &rev_id); if (ret < 0) return ret; - if (0x04 == ((rev_id >> 24) & 0xff)) - ret = regmap_write(maps[desc->ip], - HW_REVISION_ID, (~val & desc->mask)); - else - ret = regmap_update_bits(maps[desc->ip], - desc->reg, desc->mask, val); - } else - ret = regmap_update_bits(maps[desc->ip], desc->reg, - desc->mask, val); + if (0x04 == (rev_id >> 24)) { + u32 value = ~val & desc->mask; + + if (value) { + ret = regmap_write(maps[desc->ip], + HW_REVISION_ID, value); + if (ret < 0) + return ret; + } + } + } + + ret = regmap_update_bits(maps[desc->ip], desc->reg, + desc->mask, val); if (ret) return ret; |