Skip to content

Commit 8c4a51f

Browse files
committed
pinctrl: intel: Refactor __intel_gpio_set_direction() to be more useful
Refactor __intel_gpio_set_direction() to be more useful, i.e. 1) use one parameter per each direction to support all combinatios; 2) move IO to the only user that needs it. With that done, update current users and deduplicate existing code. Acked-by: Mika Westerberg <[email protected]> Signed-off-by: Andy Shevchenko <[email protected]>
1 parent e5544d9 commit 8c4a51f

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

drivers/pinctrl/intel/pinctrl-intel.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -429,19 +429,19 @@ static int intel_pinmux_set_mux(struct pinctrl_dev *pctldev,
429429
return 0;
430430
}
431431

432-
static void __intel_gpio_set_direction(void __iomem *padcfg0, bool input)
432+
static u32 __intel_gpio_set_direction(u32 value, bool input, bool output)
433433
{
434-
u32 value;
435-
436-
value = readl(padcfg0);
437-
if (input) {
434+
if (input)
438435
value &= ~PADCFG0_GPIORXDIS;
439-
value |= PADCFG0_GPIOTXDIS;
440-
} else {
441-
value &= ~PADCFG0_GPIOTXDIS;
436+
else
442437
value |= PADCFG0_GPIORXDIS;
443-
}
444-
writel(value, padcfg0);
438+
439+
if (output)
440+
value &= ~PADCFG0_GPIOTXDIS;
441+
else
442+
value |= PADCFG0_GPIOTXDIS;
443+
444+
return value;
445445
}
446446

447447
static int __intel_gpio_get_gpio_mode(u32 value)
@@ -465,8 +465,7 @@ static void intel_gpio_set_gpio_mode(void __iomem *padcfg0)
465465
value |= PADCFG0_PMODE_GPIO;
466466

467467
/* Disable TX buffer and enable RX (this will be input) */
468-
value &= ~PADCFG0_GPIORXDIS;
469-
value |= PADCFG0_GPIOTXDIS;
468+
value = __intel_gpio_set_direction(value, true, false);
470469

471470
/* Disable SCI/SMI/NMI generation */
472471
value &= ~(PADCFG0_GPIROUTIOXAPIC | PADCFG0_GPIROUTSCI);
@@ -512,12 +511,18 @@ static int intel_gpio_set_direction(struct pinctrl_dev *pctldev,
512511
{
513512
struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
514513
void __iomem *padcfg0;
514+
u32 value;
515515

516516
padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0);
517517

518518
guard(raw_spinlock_irqsave)(&pctrl->lock);
519519

520-
__intel_gpio_set_direction(padcfg0, input);
520+
value = readl(padcfg0);
521+
if (input)
522+
value = __intel_gpio_set_direction(value, true, false);
523+
else
524+
value = __intel_gpio_set_direction(value, false, true);
525+
writel(value, padcfg0);
521526

522527
return 0;
523528
}

0 commit comments

Comments
 (0)