Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'pinctrl-v5.3-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl

Pull pin control fix from Linus Walleij:
"Hopefully last pin control fix: a single patch for some Aspeed
problems. The BMCs are much happier now"

* tag 'pinctrl-v5.3-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
pinctrl: aspeed: Fix spurious mux failures on the AST2500

+38 -6
+29 -1
drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
··· 2552 2552 if (IS_ERR(map)) 2553 2553 return map; 2554 2554 } else 2555 - map = ERR_PTR(-ENODEV); 2555 + return ERR_PTR(-ENODEV); 2556 2556 2557 2557 ctx->maps[ASPEED_IP_LPC] = map; 2558 2558 dev_dbg(ctx->dev, "Acquired LPC regmap"); ··· 2560 2560 } 2561 2561 2562 2562 return ERR_PTR(-EINVAL); 2563 + } 2564 + 2565 + static int aspeed_g5_sig_expr_eval(struct aspeed_pinmux_data *ctx, 2566 + const struct aspeed_sig_expr *expr, 2567 + bool enabled) 2568 + { 2569 + int ret; 2570 + int i; 2571 + 2572 + for (i = 0; i < expr->ndescs; i++) { 2573 + const struct aspeed_sig_desc *desc = &expr->descs[i]; 2574 + struct regmap *map; 2575 + 2576 + map = aspeed_g5_acquire_regmap(ctx, desc->ip); 2577 + if (IS_ERR(map)) { 2578 + dev_err(ctx->dev, 2579 + "Failed to acquire regmap for IP block %d\n", 2580 + desc->ip); 2581 + return PTR_ERR(map); 2582 + } 2583 + 2584 + ret = aspeed_sig_desc_eval(desc, enabled, ctx->maps[desc->ip]); 2585 + if (ret <= 0) 2586 + return ret; 2587 + } 2588 + 2589 + return 1; 2563 2590 } 2564 2591 2565 2592 /** ··· 2674 2647 } 2675 2648 2676 2649 static const struct aspeed_pinmux_ops aspeed_g5_ops = { 2650 + .eval = aspeed_g5_sig_expr_eval, 2677 2651 .set = aspeed_g5_sig_expr_set, 2678 2652 }; 2679 2653
+5 -2
drivers/pinctrl/aspeed/pinmux-aspeed.c
··· 78 78 * neither the enabled nor disabled state. Thus we must explicitly test for 79 79 * either condition as required. 80 80 */ 81 - int aspeed_sig_expr_eval(const struct aspeed_pinmux_data *ctx, 81 + int aspeed_sig_expr_eval(struct aspeed_pinmux_data *ctx, 82 82 const struct aspeed_sig_expr *expr, bool enabled) 83 83 { 84 - int i; 85 84 int ret; 85 + int i; 86 + 87 + if (ctx->ops->eval) 88 + return ctx->ops->eval(ctx, expr, enabled); 86 89 87 90 for (i = 0; i < expr->ndescs; i++) { 88 91 const struct aspeed_sig_desc *desc = &expr->descs[i];
+4 -3
drivers/pinctrl/aspeed/pinmux-aspeed.h
··· 702 702 struct aspeed_pinmux_data; 703 703 704 704 struct aspeed_pinmux_ops { 705 + int (*eval)(struct aspeed_pinmux_data *ctx, 706 + const struct aspeed_sig_expr *expr, bool enabled); 705 707 int (*set)(struct aspeed_pinmux_data *ctx, 706 708 const struct aspeed_sig_expr *expr, bool enabled); 707 709 }; ··· 724 722 int aspeed_sig_desc_eval(const struct aspeed_sig_desc *desc, bool enabled, 725 723 struct regmap *map); 726 724 727 - int aspeed_sig_expr_eval(const struct aspeed_pinmux_data *ctx, 728 - const struct aspeed_sig_expr *expr, 729 - bool enabled); 725 + int aspeed_sig_expr_eval(struct aspeed_pinmux_data *ctx, 726 + const struct aspeed_sig_expr *expr, bool enabled); 730 727 731 728 static inline int aspeed_sig_expr_set(struct aspeed_pinmux_data *ctx, 732 729 const struct aspeed_sig_expr *expr,