Lines Matching +full:pin +full:- +full:mask

5  * SPDX-License-Identifier: Apache-2.0
17 #include <zephyr/dt-bindings/gpio/atmel-sam-gpio.h>
41 static int gpio_sam_port_configure(const struct device *dev, uint32_t mask, in gpio_sam_port_configure() argument
44 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_configure()
45 Pio * const pio = cfg->regs; in gpio_sam_port_configure()
49 /* Enable open-drain drive mode */ in gpio_sam_port_configure()
50 pio->PIO_MDER = mask; in gpio_sam_port_configure()
52 /* Open-drain is the only supported single-ended mode */ in gpio_sam_port_configure()
53 return -ENOTSUP; in gpio_sam_port_configure()
56 /* Disable open-drain drive mode */ in gpio_sam_port_configure()
57 pio->PIO_MDDR = mask; in gpio_sam_port_configure()
64 pio->PIO_IDR = mask; in gpio_sam_port_configure()
65 /* Disable pull-up. */ in gpio_sam_port_configure()
66 pio->PIO_PUDR = mask; in gpio_sam_port_configure()
71 /* Disable pull-down. */ in gpio_sam_port_configure()
72 pio->PIO_PPDDR = mask; in gpio_sam_port_configure()
74 /* Let the PIO control the pin (instead of a peripheral). */ in gpio_sam_port_configure()
75 pio->PIO_PER = mask; in gpio_sam_port_configure()
77 pio->PIO_ODR = mask; in gpio_sam_port_configure()
82 /* Setup the pin direction. */ in gpio_sam_port_configure()
85 /* Set the pin. */ in gpio_sam_port_configure()
86 pio->PIO_SODR = mask; in gpio_sam_port_configure()
89 /* Clear the pin. */ in gpio_sam_port_configure()
90 pio->PIO_CODR = mask; in gpio_sam_port_configure()
93 pio->PIO_OER = mask; in gpio_sam_port_configure()
95 pio->PIO_OWER = mask; in gpio_sam_port_configure()
98 pio->PIO_ODR = mask; in gpio_sam_port_configure()
108 pio->PIO_PUDR = mask; in gpio_sam_port_configure()
113 pio->PIO_PPDDR = mask; in gpio_sam_port_configure()
116 /* Enable pull-up. */ in gpio_sam_port_configure()
117 pio->PIO_PUER = mask; in gpio_sam_port_configure()
123 /* Setup Pull-down resistor. */ in gpio_sam_port_configure()
125 /* Enable pull-down. */ in gpio_sam_port_configure()
126 pio->PIO_PPDER = mask; in gpio_sam_port_configure()
133 pio->PIO_DIFSR = mask; in gpio_sam_port_configure()
135 pio->PIO_SCIFSR = mask; in gpio_sam_port_configure()
144 pio->PIO_IFSCER = mask; in gpio_sam_port_configure()
146 pio->PIO_IFSCDR = mask; in gpio_sam_port_configure()
150 /* Enable the PIO to control the pin (instead of a peripheral). */ in gpio_sam_port_configure()
151 pio->PIO_PER = mask; in gpio_sam_port_configure()
156 static int gpio_sam_config(const struct device *dev, gpio_pin_t pin, in gpio_sam_config() argument
159 return gpio_sam_port_configure(dev, BIT(pin), flags); in gpio_sam_config()
164 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_get_raw()
165 Pio * const pio = cfg->regs; in gpio_sam_port_get_raw()
167 *value = pio->PIO_PDSR; in gpio_sam_port_get_raw()
173 uint32_t mask, in gpio_sam_port_set_masked_raw() argument
176 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_set_masked_raw()
177 Pio * const pio = cfg->regs; in gpio_sam_port_set_masked_raw()
179 pio->PIO_ODSR = (pio->PIO_ODSR & ~mask) | (mask & value); in gpio_sam_port_set_masked_raw()
184 static int gpio_sam_port_set_bits_raw(const struct device *dev, uint32_t mask) in gpio_sam_port_set_bits_raw() argument
186 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_set_bits_raw()
187 Pio * const pio = cfg->regs; in gpio_sam_port_set_bits_raw()
190 pio->PIO_SODR = mask; in gpio_sam_port_set_bits_raw()
196 uint32_t mask) in gpio_sam_port_clear_bits_raw() argument
198 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_clear_bits_raw()
199 Pio * const pio = cfg->regs; in gpio_sam_port_clear_bits_raw()
202 pio->PIO_CODR = mask; in gpio_sam_port_clear_bits_raw()
207 static int gpio_sam_port_toggle_bits(const struct device *dev, uint32_t mask) in gpio_sam_port_toggle_bits() argument
209 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_toggle_bits()
210 Pio * const pio = cfg->regs; in gpio_sam_port_toggle_bits()
213 pio->PIO_ODSR ^= mask; in gpio_sam_port_toggle_bits()
219 uint32_t mask, in gpio_sam_port_interrupt_configure() argument
223 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_port_interrupt_configure()
224 Pio * const pio = cfg->regs; in gpio_sam_port_interrupt_configure()
227 pio->PIO_IDR = mask; in gpio_sam_port_interrupt_configure()
229 pio->PIO_AIMDR = mask; in gpio_sam_port_interrupt_configure()
235 pio->PIO_AIMER = mask; in gpio_sam_port_interrupt_configure()
238 pio->PIO_ESR = mask; in gpio_sam_port_interrupt_configure()
240 pio->PIO_LSR = mask; in gpio_sam_port_interrupt_configure()
246 rising_edge = mask; in gpio_sam_port_interrupt_configure()
248 rising_edge = ~mask; in gpio_sam_port_interrupt_configure()
251 /* Set to high-level or rising edge. */ in gpio_sam_port_interrupt_configure()
252 pio->PIO_REHLSR = rising_edge & mask; in gpio_sam_port_interrupt_configure()
253 /* Set to low-level or falling edge. */ in gpio_sam_port_interrupt_configure()
254 pio->PIO_FELLSR = ~rising_edge & mask; in gpio_sam_port_interrupt_configure()
259 (void)pio->PIO_ISR; in gpio_sam_port_interrupt_configure()
261 pio->PIO_IER = mask; in gpio_sam_port_interrupt_configure()
268 gpio_pin_t pin, in gpio_sam_pin_interrupt_configure() argument
272 return gpio_sam_port_interrupt_configure(dev, BIT(pin), mode, trig); in gpio_sam_pin_interrupt_configure()
277 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_isr()
278 Pio * const pio = cfg->regs; in gpio_sam_isr()
279 struct gpio_sam_runtime *context = dev->data; in gpio_sam_isr()
282 int_stat = pio->PIO_ISR; in gpio_sam_isr()
284 gpio_fire_callbacks(&context->cb, dev, int_stat); in gpio_sam_isr()
291 struct gpio_sam_runtime *context = port->data; in gpio_sam_manage_callback()
293 return gpio_manage_callback(&context->cb, callback, set); in gpio_sam_manage_callback()
309 const struct gpio_sam_config * const cfg = dev->config; in gpio_sam_init()
313 (clock_control_subsys_t)&cfg->clock_cfg); in gpio_sam_init()
315 cfg->config_func(dev); in gpio_sam_init()