Line data Source code
1 0 : /*
2 : * Copyright (c) 2023 Martin Kiepfer
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_AXP192_H_
8 : #define ZEPHYR_INCLUDE_DRIVERS_MFD_AXP192_H_
9 :
10 : #include <stddef.h>
11 : #include <stdint.h>
12 :
13 : #include <zephyr/device.h>
14 : #include <zephyr/drivers/gpio.h>
15 :
16 : #ifdef __cplusplus
17 : extern "C" {
18 : #endif
19 :
20 : /**
21 : * @brief GPIO function type. Only one function can be configured per GPIO.
22 : */
23 0 : enum axp192_gpio_func {
24 : AXP192_GPIO_FUNC_INPUT = BIT(0),
25 : AXP192_GPIO_FUNC_OUTPUT_OD = BIT(1),
26 : AXP192_GPIO_FUNC_OUTPUT_LOW = BIT(2),
27 : AXP192_GPIO_FUNC_LDO = BIT(3),
28 : AXP192_GPIO_FUNC_ADC = BIT(4),
29 : AXP192_GPIO_FUNC_PWM = BIT(5),
30 : AXP192_GPIO_FUNC_FLOAT = BIT(6),
31 : AXP192_GPIO_FUNC_CHARGE_CTL = BIT(7),
32 : AXP192_GPIO_FUNC_INVALID
33 : };
34 :
35 : /**
36 : * @brief Check if a given GPIO function value is valid.
37 : */
38 1 : #define AXP192_GPIO_FUNC_VALID(func) (func < AXP192_GPIO_FUNC_INVALID)
39 :
40 : /**
41 : * @brief Maximum number of GPIOs supported by AXP192 PMIC.
42 : */
43 1 : #define AXP192_GPIO_MAX_NUM 6U
44 :
45 : /**
46 : * @defgroup mdf_interface_axp192 MFD AXP192 interface
47 : *
48 : * Pins of AXP192 support several different functions. The mfd interface offers
49 : * an API to configure and control these different functions.
50 : *
51 : * The 6 GPIOS are mapped as follows:
52 : * [0]: GPIO0
53 : * [1]: GPIO1
54 : * [2]: GPIO2
55 : * [3]: GPIO3
56 : * [4]: GPIO4
57 : * [5]: EXTEN
58 : *
59 : * @ingroup mfd_interfaces
60 : * @{
61 : */
62 :
63 : /**
64 : * @brief Request a GPIO pin to be configured to a specific function. GPIO0..5
65 : * of AXP192 feature various functions (see @ref axp192_gpio_func for details).
66 : * A GPIO can only be used by one driver instance. Subsequential calls on the
67 : * same GPIO will overwrite according function.
68 : *
69 : * @param dev axp192 mfd device
70 : * @param client_dev client device the gpio is used in
71 : * @param gpio GPIO to be configured (0..5)
72 : * @param func Function to be configured (see @ref axp192_gpio_func for details)
73 : * @retval 0 on success
74 : * @retval -EINVAL if an invalid GPIO number is passed
75 : * @retval -ENOTSUP if the requested function is not supported by the given
76 : * @retval -errno in case of any bus error
77 : */
78 1 : int mfd_axp192_gpio_func_ctrl(const struct device *dev, const struct device *client_dev,
79 : uint8_t gpio, enum axp192_gpio_func func);
80 :
81 : /**
82 : * @brief Read out current configuration of a specific GPIO pin.
83 : *
84 : * @param dev axp192 mfd device
85 : * @param gpio GPIO to read configuration from
86 : * @param func Pointer to store current function configuration in.
87 : * @return 0 on success
88 : * @retval -EINVAL if an invalid GPIO number is passed
89 : * @retval -errno in case of any bus error
90 : */
91 1 : int mfd_axp192_gpio_func_get(const struct device *dev, uint8_t gpio, enum axp192_gpio_func *func);
92 :
93 : /**
94 : * @brief Enable pull-down on specified GPIO pin. AXP192 only supports
95 : * pull-down on GPIO3..5. Pull-ups are not supported.
96 : *
97 : * @param dev axp192 mfd device
98 : * @param gpio GPIO to control pull-downs
99 : * @param enable true to enable, false to disable pull-down
100 : * @retval 0 on success
101 : * @retval -EINVAL if an invalid argument is given (e.g. invalid GPIO number)
102 : * @retval -ENOTSUP if pull-down is not supported by the givenn GPIO
103 : * @retval -errno in case of any bus error
104 : */
105 1 : int mfd_axp192_gpio_pd_ctrl(const struct device *dev, uint8_t gpio, bool enable);
106 :
107 : /**
108 : * @brief Read out the current pull-down configuration of a specific GPIO.
109 : *
110 : * @param dev axp192 mfd device
111 : * @param gpio GPIO to control pull-downs
112 : * @param enabled Pointer to current pull-down configuration (true: pull-down
113 : * enabled/ false: pull-down disabled)
114 : * @retval -EINVAL if an invalid argument is given (e.g. invalid GPIO number)
115 : * @retval -ENOTSUP if pull-down is not supported by the givenn GPIO
116 : * @retval -errno in case of any bus error
117 : */
118 1 : int mfd_axp192_gpio_pd_get(const struct device *dev, uint8_t gpio, bool *enabled);
119 :
120 : /**
121 : * @brief Read GPIO port.
122 : *
123 : * @param dev axp192 mfd device
124 : * @param value Pointer to port value
125 : * @retval 0 on success
126 : * @retval -errno in case of any bus error
127 : */
128 1 : int mfd_axp192_gpio_read_port(const struct device *dev, uint8_t *value);
129 :
130 : /**
131 : * @brief Write GPIO port.
132 : *
133 : * @param dev axp192 mfd device
134 : * @param value port value
135 : * @param mask pin mask within the port
136 : * @retval 0 on success
137 : * @retval -errno in case of any bus error
138 : */
139 1 : int mfd_axp192_gpio_write_port(const struct device *dev, uint8_t value, uint8_t mask);
140 :
141 : /**
142 : * @}
143 : */
144 :
145 : #ifdef __cplusplus
146 : }
147 : #endif
148 :
149 : #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_AXP192_H_ */
|