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