Lines Matching +full:io +full:- +full:low +full:- +full:port

4  * SPDX-License-Identifier: Apache-2.0
13 #include <zephyr/dt-bindings/gpio/snps-designware-gpio.h>
29 static int gpio_dw_port_set_bits_raw(const struct device *port, uint32_t mask);
30 static int gpio_dw_port_clear_bits_raw(const struct device *port,
34 * ARC architecture configure IP through IO auxiliary registers.
88 uint32_t port = (base_addr & 0x3f) / 12U; in dw_derive_port_from_base() local
89 return port; in dw_derive_port_from_base()
94 return ((int)(config->irq_num) > 0U); in dw_interrupt_support()
101 /* 4-port GPIO implementation translates from base address to port */ in dw_get_ext_port()
125 /* 4-port GPIO implementation translates from base address to port */ in dw_get_data_port()
149 /* 4-port GPIO implementation translates from base address to port */ in dw_get_dir_port()
169 static int gpio_dw_pin_interrupt_configure(const struct device *port, in gpio_dw_pin_interrupt_configure() argument
174 struct gpio_dw_runtime *context = port->data; in gpio_dw_pin_interrupt_configure()
175 const struct gpio_dw_config *config = port->config; in gpio_dw_pin_interrupt_configure()
176 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_pin_interrupt_configure()
177 uint32_t port_base_addr = context->base_addr; in gpio_dw_pin_interrupt_configure()
183 if (pin >= config->ngpios) { in gpio_dw_pin_interrupt_configure()
184 return -EINVAL; in gpio_dw_pin_interrupt_configure()
187 /* Only PORT-A supports interrupts */ in gpio_dw_pin_interrupt_configure()
189 return -ENOTSUP; in gpio_dw_pin_interrupt_configure()
193 /* Check if GPIO port supports interrupts */ in gpio_dw_pin_interrupt_configure()
195 return -ENOTSUP; in gpio_dw_pin_interrupt_configure()
201 return -EINVAL; in gpio_dw_pin_interrupt_configure()
208 return -ENOTSUP; in gpio_dw_pin_interrupt_configure()
223 /* Active low/high */ in gpio_dw_pin_interrupt_configure()
235 static inline void dw_pin_config(const struct device *port, in dw_pin_config() argument
238 struct gpio_dw_runtime *context = port->data; in dw_pin_config()
239 const struct gpio_dw_config *config = port->config; in dw_pin_config()
240 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in dw_pin_config()
241 uint32_t port_base_addr = context->base_addr; in dw_pin_config()
252 gpio_dw_port_set_bits_raw(port, BIT(pin)); in dw_pin_config()
254 gpio_dw_port_clear_bits_raw(port, BIT(pin)); in dw_pin_config()
258 /* Use built-in debounce. in dw_pin_config()
268 static inline int gpio_dw_config(const struct device *port, in gpio_dw_config() argument
272 const struct gpio_dw_config *config = port->config; in gpio_dw_config()
276 if (pin >= config->ngpios) { in gpio_dw_config()
277 return -EINVAL; in gpio_dw_config()
286 return -ENOTSUP; in gpio_dw_config()
289 /* No open-drain support */ in gpio_dw_config()
291 return -ENOTSUP; in gpio_dw_config()
294 /* Does not support pull-up/pull-down */ in gpio_dw_config()
296 return -ENOTSUP; in gpio_dw_config()
299 dw_pin_config(port, pin, flags); in gpio_dw_config()
304 static int gpio_dw_port_get_raw(const struct device *port, uint32_t *value) in gpio_dw_port_get_raw() argument
306 struct gpio_dw_runtime *context = port->data; in gpio_dw_port_get_raw()
307 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_port_get_raw()
308 uint32_t port_base_addr = context->base_addr; in gpio_dw_port_get_raw()
316 static int gpio_dw_port_set_masked_raw(const struct device *port, in gpio_dw_port_set_masked_raw() argument
319 struct gpio_dw_runtime *context = port->data; in gpio_dw_port_set_masked_raw()
320 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_port_set_masked_raw()
321 uint32_t port_base_addr = context->base_addr; in gpio_dw_port_set_masked_raw()
332 static int gpio_dw_port_set_bits_raw(const struct device *port, uint32_t mask) in gpio_dw_port_set_bits_raw() argument
334 struct gpio_dw_runtime *context = port->data; in gpio_dw_port_set_bits_raw()
335 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_port_set_bits_raw()
336 uint32_t port_base_addr = context->base_addr; in gpio_dw_port_set_bits_raw()
347 static int gpio_dw_port_clear_bits_raw(const struct device *port, in gpio_dw_port_clear_bits_raw() argument
350 struct gpio_dw_runtime *context = port->data; in gpio_dw_port_clear_bits_raw()
351 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_port_clear_bits_raw()
352 uint32_t port_base_addr = context->base_addr; in gpio_dw_port_clear_bits_raw()
363 static int gpio_dw_port_toggle_bits(const struct device *port, uint32_t mask) in gpio_dw_port_toggle_bits() argument
365 struct gpio_dw_runtime *context = port->data; in gpio_dw_port_toggle_bits()
366 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_port_toggle_bits()
367 uint32_t port_base_addr = context->base_addr; in gpio_dw_port_toggle_bits()
378 static inline int gpio_dw_manage_callback(const struct device *port, in gpio_dw_manage_callback() argument
382 struct gpio_dw_runtime *context = port->data; in gpio_dw_manage_callback()
384 return gpio_manage_callback(&context->callbacks, callback, set); in gpio_dw_manage_callback()
388 static void gpio_dw_isr(const struct device *port) in gpio_dw_isr() argument
390 struct gpio_dw_runtime *context = port->data; in gpio_dw_isr()
391 uint32_t base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_isr()
398 gpio_fire_callbacks(&context->callbacks, port, int_status); in gpio_dw_isr()
413 static int gpio_dw_initialize(const struct device *port) in gpio_dw_initialize() argument
415 struct gpio_dw_runtime *context = port->data; in gpio_dw_initialize()
416 const struct gpio_dw_config *config = port->config; in gpio_dw_initialize()
421 base_addr = dw_base_to_block_base(context->base_addr); in gpio_dw_initialize()
431 config->config_func(port); in gpio_dw_initialize()
448 static void gpio_config_##n##_irq(const struct device *port) \
450 ARG_UNUSED(port); \