Lines Matching +full:out +full:- +full:gpio

5  * SPDX-License-Identifier: Apache-2.0
10 /* Include esp-idf headers first to avoid redefining BIT() macro */
21 #include <zephyr/drivers/gpio.h>
22 #include <zephyr/dt-bindings/gpio/espressif-esp32-gpio.h>
33 #include <zephyr/drivers/gpio/gpio_utils.h>
39 #define out out.val macro
47 /* gpio structs in esp32c3 series are different from xtensa ones */
48 #define out out.data macro
56 /* gpio structs in esp32c6 are also different */
57 #define out out.out_data_orig macro
65 #define CPU_ID() arch_curr_cpu()->id
110 const struct gpio_esp32_config *const cfg = dev->config; in gpio_esp32_config()
111 uint32_t io_pin = (uint32_t) pin + ((cfg->gpio_port == 1 && pin < 32) ? 32 : 0); in gpio_esp32_config()
117 return -EINVAL; in gpio_esp32_config()
130 ret = -EINVAL; in gpio_esp32_config()
134 /* Set pin function as GPIO */ in gpio_esp32_config()
139 gpio_ll_pullup_en(&GPIO, io_pin); in gpio_esp32_config()
147 ret = -ENOTSUP; in gpio_esp32_config()
154 gpio_ll_pullup_dis(&GPIO, io_pin); in gpio_esp32_config()
163 ret = -ENOTSUP; in gpio_esp32_config()
171 gpio_ll_od_enable(cfg->gpio_base, io_pin); in gpio_esp32_config()
173 LOG_ERR("GPIO configuration not supported"); in gpio_esp32_config()
174 ret = -ENOTSUP; in gpio_esp32_config()
178 gpio_ll_od_disable(cfg->gpio_base, io_pin); in gpio_esp32_config()
183 gpio_ll_pulldown_en(&GPIO, io_pin); in gpio_esp32_config()
191 ret = -ENOTSUP; in gpio_esp32_config()
198 gpio_ll_pulldown_dis(&GPIO, io_pin); in gpio_esp32_config()
207 ret = -ENOTSUP; in gpio_esp32_config()
216 LOG_ERR("GPIO can only be used as input"); in gpio_esp32_config()
217 ret = -EINVAL; in gpio_esp32_config()
223 * to either low or high states. Alternative drive strength is weak-only, in gpio_esp32_config()
229 gpio_ll_set_drive_capability(cfg->gpio_base, in gpio_esp32_config()
241 gpio_ll_set_drive_capability(cfg->gpio_base, in gpio_esp32_config()
252 ret = -EINVAL; in gpio_esp32_config()
256 gpio_ll_output_enable(&GPIO, io_pin); in gpio_esp32_config()
261 gpio_ll_set_level(cfg->gpio_base, io_pin, 1); in gpio_esp32_config()
263 gpio_ll_set_level(cfg->gpio_base, io_pin, 0); in gpio_esp32_config()
267 gpio_ll_output_disable(&GPIO, io_pin); in gpio_esp32_config()
272 gpio_ll_input_enable(&GPIO, io_pin); in gpio_esp32_config()
275 gpio_ll_input_disable(&GPIO, io_pin); in gpio_esp32_config()
287 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_port_get_raw()
289 if (cfg->gpio_port == 0) { in gpio_esp32_port_get_raw()
290 *value = cfg->gpio_dev->in; in gpio_esp32_port_get_raw()
293 *value = cfg->gpio_dev->in1.data; in gpio_esp32_port_get_raw()
303 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_port_set_masked_raw()
307 if (cfg->gpio_port == 0) { in gpio_esp32_port_set_masked_raw()
308 cfg->gpio_dev->out = (cfg->gpio_dev->out & ~mask) | (mask & value); in gpio_esp32_port_set_masked_raw()
311 cfg->gpio_dev->out1.data = (cfg->gpio_dev->out1.data & ~mask) | (mask & value); in gpio_esp32_port_set_masked_raw()
323 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_port_set_bits_raw()
325 if (cfg->gpio_port == 0) { in gpio_esp32_port_set_bits_raw()
326 cfg->gpio_dev->out_w1ts = pins; in gpio_esp32_port_set_bits_raw()
329 cfg->gpio_dev->out1_w1ts.data = pins; in gpio_esp32_port_set_bits_raw()
339 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_port_clear_bits_raw()
341 if (cfg->gpio_port == 0) { in gpio_esp32_port_clear_bits_raw()
342 cfg->gpio_dev->out_w1tc = pins; in gpio_esp32_port_clear_bits_raw()
345 cfg->gpio_dev->out1_w1tc.data = pins; in gpio_esp32_port_clear_bits_raw()
355 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_port_toggle_bits()
358 if (cfg->gpio_port == 0) { in gpio_esp32_port_toggle_bits()
359 cfg->gpio_dev->out ^= pins; in gpio_esp32_port_toggle_bits()
362 cfg->gpio_dev->out1.data ^= pins; in gpio_esp32_port_toggle_bits()
385 return -EINVAL; in convert_int_type()
396 return -EINVAL; in convert_int_type()
401 return -EINVAL; in convert_int_type()
409 const struct gpio_esp32_config *const cfg = port->config; in gpio_esp32_pin_interrupt_configure()
410 uint32_t io_pin = (uint32_t) pin + ((cfg->gpio_port == 1 && pin < 32) ? 32 : 0); in gpio_esp32_pin_interrupt_configure()
419 if (cfg->gpio_port == 0) { in gpio_esp32_pin_interrupt_configure()
420 gpio_ll_clear_intr_status(cfg->gpio_base, BIT(pin)); in gpio_esp32_pin_interrupt_configure()
422 gpio_ll_clear_intr_status_high(cfg->gpio_base, BIT(pin)); in gpio_esp32_pin_interrupt_configure()
425 gpio_ll_set_intr_type(cfg->gpio_base, io_pin, intr_trig_mode); in gpio_esp32_pin_interrupt_configure()
426 gpio_ll_intr_enable_on_core(cfg->gpio_base, CPU_ID(), io_pin); in gpio_esp32_pin_interrupt_configure()
436 struct gpio_esp32_data *data = dev->data; in gpio_esp32_manage_callback()
438 return gpio_manage_callback(&data->cb, callback, set); in gpio_esp32_manage_callback()
443 const struct gpio_esp32_config *const cfg = dev->config; in gpio_esp32_get_pending_int()
447 if (cfg->gpio_port == 0) { in gpio_esp32_get_pending_int()
448 gpio_ll_get_intr_status(cfg->gpio_base, core_id, &irq_status); in gpio_esp32_get_pending_int()
450 gpio_ll_get_intr_status_high(cfg->gpio_base, core_id, &irq_status); in gpio_esp32_get_pending_int()
458 const struct gpio_esp32_config *const cfg = dev->config; in gpio_esp32_fire_callbacks()
459 struct gpio_esp32_data *data = dev->data; in gpio_esp32_fire_callbacks()
463 if (cfg->gpio_port == 0) { in gpio_esp32_fire_callbacks()
464 gpio_ll_get_intr_status(cfg->gpio_base, core_id, &irq_status); in gpio_esp32_fire_callbacks()
465 gpio_ll_clear_intr_status(cfg->gpio_base, irq_status); in gpio_esp32_fire_callbacks()
467 gpio_ll_get_intr_status_high(cfg->gpio_base, core_id, &irq_status); in gpio_esp32_fire_callbacks()
468 gpio_ll_clear_intr_status_high(cfg->gpio_base, irq_status); in gpio_esp32_fire_callbacks()
472 gpio_fire_callbacks(&data->cb, dev, irq_status); in gpio_esp32_fire_callbacks()
501 static DEVICE_API(gpio, gpio_esp32_driver_api) = {
520 .gpio_dev = (gpio_dev_t *)DT_REG_ADDR(DT_NODELABEL(gpio##_id)), \
523 DEVICE_DT_DEFINE(DT_NODELABEL(gpio##_id), \