summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorClaudiu Beznea <claudiu.beznea@microchip.com>2019-02-07 04:24:49 -0500
committerLinus Walleij <linus.walleij@linaro.org>2019-02-08 07:05:23 -0500
commit42ef75576bdd2ca8019c553d25847e124153a7ee (patch)
treebc5a393d08a4eb5b55865363eaf14692b901f2cb /drivers/pinctrl
parentb67328e1cf9735d2491ef9402fb7439db1d6e2ae (diff)
pinctrl: at91: add drive strength support for SAM9X60
Add drive strength support for SAM9X60 pin controller. Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r--drivers/pinctrl/pinctrl-at91.c52
-rw-r--r--drivers/pinctrl/pinctrl-at91.h2
2 files changed, 54 insertions, 0 deletions
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index e907093b5b13..6f443c3728cb 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -574,6 +574,17 @@ static unsigned at91_mux_sam9x5_get_drivestrength(void __iomem *pio,
574 return tmp; 574 return tmp;
575} 575}
576 576
577static unsigned at91_mux_sam9x60_get_drivestrength(void __iomem *pio,
578 unsigned pin)
579{
580 unsigned tmp = readl_relaxed(pio + SAM9X60_PIO_DRIVER1);
581
582 if (tmp & BIT(pin))
583 return DRIVE_STRENGTH_BIT_HI;
584
585 return DRIVE_STRENGTH_BIT_LOW;
586}
587
577static void set_drive_strength(void __iomem *reg, unsigned pin, u32 strength) 588static void set_drive_strength(void __iomem *reg, unsigned pin, u32 strength)
578{ 589{
579 unsigned tmp = readl_relaxed(reg); 590 unsigned tmp = readl_relaxed(reg);
@@ -611,6 +622,27 @@ static void at91_mux_sam9x5_set_drivestrength(void __iomem *pio, unsigned pin,
611 setting); 622 setting);
612} 623}
613 624
625static void at91_mux_sam9x60_set_drivestrength(void __iomem *pio, unsigned pin,
626 u32 setting)
627{
628 unsigned int tmp;
629
630 if (setting <= DRIVE_STRENGTH_BIT_DEF ||
631 setting == DRIVE_STRENGTH_BIT_MED ||
632 setting > DRIVE_STRENGTH_BIT_HI)
633 return;
634
635 tmp = readl_relaxed(pio + SAM9X60_PIO_DRIVER1);
636
637 /* Strength is 0: low, 1: hi */
638 if (setting == DRIVE_STRENGTH_BIT_LOW)
639 tmp &= ~BIT(pin);
640 else
641 tmp |= BIT(pin);
642
643 writel_relaxed(tmp, pio + SAM9X60_PIO_DRIVER1);
644}
645
614static struct at91_pinctrl_mux_ops at91rm9200_ops = { 646static struct at91_pinctrl_mux_ops at91rm9200_ops = {
615 .get_periph = at91_mux_get_periph, 647 .get_periph = at91_mux_get_periph,
616 .mux_A_periph = at91_mux_set_A_periph, 648 .mux_A_periph = at91_mux_set_A_periph,
@@ -639,6 +671,26 @@ static struct at91_pinctrl_mux_ops at91sam9x5_ops = {
639 .irq_type = alt_gpio_irq_type, 671 .irq_type = alt_gpio_irq_type,
640}; 672};
641 673
674static const struct at91_pinctrl_mux_ops sam9x60_ops = {
675 .get_periph = at91_mux_pio3_get_periph,
676 .mux_A_periph = at91_mux_pio3_set_A_periph,
677 .mux_B_periph = at91_mux_pio3_set_B_periph,
678 .mux_C_periph = at91_mux_pio3_set_C_periph,
679 .mux_D_periph = at91_mux_pio3_set_D_periph,
680 .get_deglitch = at91_mux_pio3_get_deglitch,
681 .set_deglitch = at91_mux_pio3_set_deglitch,
682 .get_debounce = at91_mux_pio3_get_debounce,
683 .set_debounce = at91_mux_pio3_set_debounce,
684 .get_pulldown = at91_mux_pio3_get_pulldown,
685 .set_pulldown = at91_mux_pio3_set_pulldown,
686 .get_schmitt_trig = at91_mux_pio3_get_schmitt_trig,
687 .disable_schmitt_trig = at91_mux_pio3_disable_schmitt_trig,
688 .get_drivestrength = at91_mux_sam9x60_get_drivestrength,
689 .set_drivestrength = at91_mux_sam9x60_set_drivestrength,
690 .irq_type = alt_gpio_irq_type,
691
692};
693
642static struct at91_pinctrl_mux_ops sama5d3_ops = { 694static struct at91_pinctrl_mux_ops sama5d3_ops = {
643 .get_periph = at91_mux_pio3_get_periph, 695 .get_periph = at91_mux_pio3_get_periph,
644 .mux_A_periph = at91_mux_pio3_set_A_periph, 696 .mux_A_periph = at91_mux_pio3_set_A_periph,
diff --git a/drivers/pinctrl/pinctrl-at91.h b/drivers/pinctrl/pinctrl-at91.h
index 79b957f1dfa2..19fc27e66bfd 100644
--- a/drivers/pinctrl/pinctrl-at91.h
+++ b/drivers/pinctrl/pinctrl-at91.h
@@ -69,4 +69,6 @@
69#define AT91SAM9X5_PIO_DRIVER1 0x114 /*PIO Driver 1 register offset*/ 69#define AT91SAM9X5_PIO_DRIVER1 0x114 /*PIO Driver 1 register offset*/
70#define AT91SAM9X5_PIO_DRIVER2 0x118 /*PIO Driver 2 register offset*/ 70#define AT91SAM9X5_PIO_DRIVER2 0x118 /*PIO Driver 2 register offset*/
71 71
72#define SAM9X60_PIO_DRIVER1 0x118 /* PIO Driver 1 register offset */
73
72#endif 74#endif