1 /*
2  * Copyright (c) 2024 SILA Embedded Solutions GmbH
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_TLE9104_H_
7 #define ZEPHYR_INCLUDE_DRIVERS_MFD_TLE9104_H_
8 
9 #include <stdbool.h>
10 #include <zephyr/device.h>
11 
12 #define TLE9104_GPIO_COUNT 4
13 
14 enum tle9104_on_state_diagnostics {
15 	/* overtemperature */
16 	TLE9104_ONDIAG_OT = 5,
17 	/* overcurrent timeout */
18 	TLE9104_ONDIAG_OCTIME = 4,
19 	/* overtemperature during overcurrent */
20 	TLE9104_ONDIAG_OCOT = 3,
21 	/* short to battery */
22 	TLE9104_ONDIAG_SCB = 2,
23 	/* no failure */
24 	TLE9104_ONDIAG_NOFAIL = 1,
25 	/* no diagnosis done */
26 	TLE9104_ONDIAG_UNKNOWN = 0,
27 };
28 
29 enum tle9104_off_state_diagnostics {
30 	/* short to ground */
31 	TLE9104_OFFDIAG_SCG = 3,
32 	/* open load */
33 	TLE9104_OFFDIAG_OL = 2,
34 	/* no failure */
35 	TLE9104_OFFDIAG_NOFAIL = 1,
36 	/* no diagnosis done */
37 	TLE9104_OFFDIAG_UNKNOWN = 0,
38 };
39 
40 struct gpio_tle9104_channel_diagnostics {
41 	enum tle9104_on_state_diagnostics on: 3;
42 	enum tle9104_off_state_diagnostics off: 2;
43 };
44 
45 /**
46  * @brief get the diagnostics of the outputs
47  *
48  * @param dev instance of TLE9104
49  * @param diag destination where the result is written to
50  *
51  * @retval 0 If successful.
52  */
53 int tle9104_get_diagnostics(const struct device *dev,
54 			    struct gpio_tle9104_channel_diagnostics diag[TLE9104_GPIO_COUNT]);
55 /**
56  * @brief clear the diagnostics of the outputs
57  *
58  * @param dev instance of TLE9104
59  *
60  * @retval 0 If successful.
61  */
62 int tle9104_clear_diagnostics(const struct device *dev);
63 /*!
64  * @brief write output state
65  *
66  * @param dev instance of TLE9104
67  * @param state output state, each bit represents on output
68  *
69  * @retval 0 If successful.
70  */
71 int tle9104_write_state(const struct device *dev, uint8_t state);
72 
73 #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_TLE9104_H_ */
74