]>
git.ipfire.org Git - thirdparty/u-boot.git/blob - arch/avr32/cpu/portmux-pio.c
2 * Copyright (C) 2006, 2008 Atmel Corporation
4 * SPDX-License-Identifier: GPL-2.0+
9 #include <asm/arch/hardware.h>
10 #include <asm/arch/gpio.h>
12 void portmux_select_peripheral(void *port
, unsigned long pin_mask
,
13 enum portmux_function func
, unsigned long flags
)
15 if (flags
& PORTMUX_PULL_UP
)
16 pio_writel(port
, PUER
, pin_mask
);
18 pio_writel(port
, PUDR
, pin_mask
);
22 pio_writel(port
, ASR
, pin_mask
);
25 pio_writel(port
, BSR
, pin_mask
);
29 pio_writel(port
, PDR
, pin_mask
);
32 void portmux_select_gpio(void *port
, unsigned long pin_mask
,
35 if (flags
& PORTMUX_PULL_UP
)
36 pio_writel(port
, PUER
, pin_mask
);
38 pio_writel(port
, PUDR
, pin_mask
);
40 if (flags
& PORTMUX_OPEN_DRAIN
)
41 pio_writel(port
, MDER
, pin_mask
);
43 pio_writel(port
, MDDR
, pin_mask
);
45 if (flags
& PORTMUX_DIR_OUTPUT
) {
46 if (flags
& PORTMUX_INIT_HIGH
)
47 pio_writel(port
, SODR
, pin_mask
);
49 pio_writel(port
, CODR
, pin_mask
);
50 pio_writel(port
, OER
, pin_mask
);
52 pio_writel(port
, ODR
, pin_mask
);
55 pio_writel(port
, PER
, pin_mask
);
58 void pio_set_output_value(unsigned int pin
, int value
)
60 void *port
= pio_pin_to_port(pin
);
63 panic("Invalid GPIO pin %u\n", pin
);
65 __pio_set_output_value(port
, pin
& 0x1f, value
);
68 int pio_get_input_value(unsigned int pin
)
70 void *port
= pio_pin_to_port(pin
);
73 panic("Invalid GPIO pin %u\n", pin
);
75 return __pio_get_input_value(port
, pin
& 0x1f);