1 /*
2 * Copyright (c) 2021, Commonwealth Scientific and Industrial Research
3 * Organisation (CSIRO) ABN 41 687 119 230.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8 /*
9 * This is not a real GPIO driver. It is used to instantiate struct
10 * devices for the "vnd,gpio" devicetree compatible used in test code.
11 */
12
13 #define DT_DRV_COMPAT vnd_gpio
14
15 #include <zephyr/drivers/gpio.h>
16 #include <zephyr/drivers/gpio/gpio_utils.h>
17
18 struct vnd_gpio_config {
19 /* gpio_driver_config needs to be first */
20 struct gpio_driver_config common;
21 };
22
23 struct vnd_gpio_data {
24 /* gpio_driver_data needs to be first */
25 struct gpio_driver_data common;
26 };
27
vnd_gpio_pin_configure(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)28 static int vnd_gpio_pin_configure(const struct device *port,
29 gpio_pin_t pin,
30 gpio_flags_t flags)
31 {
32 return -ENOTSUP;
33 }
34
vnd_gpio_port_get_raw(const struct device * port,gpio_port_value_t * value)35 static int vnd_gpio_port_get_raw(const struct device *port,
36 gpio_port_value_t *value)
37 {
38 return -ENOTSUP;
39 }
40
vnd_gpio_port_set_masked_raw(const struct device * port,gpio_port_pins_t mask,gpio_port_value_t value)41 static int vnd_gpio_port_set_masked_raw(const struct device *port,
42 gpio_port_pins_t mask,
43 gpio_port_value_t value)
44 {
45 return -ENOTSUP;
46 }
47
vnd_gpio_port_set_bits_raw(const struct device * port,gpio_port_pins_t pins)48 static int vnd_gpio_port_set_bits_raw(const struct device *port,
49 gpio_port_pins_t pins)
50 {
51 return -ENOTSUP;
52 }
53
vnd_gpio_port_clear_bits_raw(const struct device * port,gpio_port_pins_t pins)54 static int vnd_gpio_port_clear_bits_raw(const struct device *port,
55 gpio_port_pins_t pins)
56 {
57 return -ENOTSUP;
58 }
59
vnd_gpio_port_toggle_bits(const struct device * port,gpio_port_pins_t pins)60 static int vnd_gpio_port_toggle_bits(const struct device *port,
61 gpio_port_pins_t pins)
62 {
63 return -ENOTSUP;
64 }
65
66 static const struct gpio_driver_api vnd_gpio_api = {
67 .pin_configure = vnd_gpio_pin_configure,
68 .port_get_raw = vnd_gpio_port_get_raw,
69 .port_set_masked_raw = vnd_gpio_port_set_masked_raw,
70 .port_set_bits_raw = vnd_gpio_port_set_bits_raw,
71 .port_clear_bits_raw = vnd_gpio_port_clear_bits_raw,
72 .port_toggle_bits = vnd_gpio_port_toggle_bits,
73 };
74
75 #define VND_GPIO_INIT(n) \
76 static const struct vnd_gpio_config vnd_gpio_config_##n = { \
77 .common = { \
78 .port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(n), \
79 }, \
80 }; \
81 \
82 static struct vnd_gpio_data vnd_gpio_data_##n; \
83 \
84 DEVICE_DT_INST_DEFINE(n, NULL, NULL, &vnd_gpio_data_##n, \
85 &vnd_gpio_config_##n, POST_KERNEL, \
86 CONFIG_GPIO_INIT_PRIORITY, \
87 &vnd_gpio_api);
88
89 DT_INST_FOREACH_STATUS_OKAY(VND_GPIO_INIT)
90