xref: /illumos-gate/usr/src/uts/common/sys/gpio/pca953x.h (revision a3ebb524df668b0fc3a38f33d0049380f5f11ec1)
1*a3ebb524SRobert Mustacchi /*
2*a3ebb524SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*a3ebb524SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*a3ebb524SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*a3ebb524SRobert Mustacchi  * 1.0 of the CDDL.
6*a3ebb524SRobert Mustacchi  *
7*a3ebb524SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*a3ebb524SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*a3ebb524SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*a3ebb524SRobert Mustacchi  */
11*a3ebb524SRobert Mustacchi 
12*a3ebb524SRobert Mustacchi /*
13*a3ebb524SRobert Mustacchi  * Copyright 2025 Oxide Computer Company
14*a3ebb524SRobert Mustacchi  */
15*a3ebb524SRobert Mustacchi 
16*a3ebb524SRobert Mustacchi #ifndef _SYS_GPIO_PCA953X_H
17*a3ebb524SRobert Mustacchi #define	_SYS_GPIO_PCA953X_H
18*a3ebb524SRobert Mustacchi 
19*a3ebb524SRobert Mustacchi /*
20*a3ebb524SRobert Mustacchi  * PCA953x driver GPIO attribute definitions.
21*a3ebb524SRobert Mustacchi  *
22*a3ebb524SRobert Mustacchi  * The PCA953x driver provides a very simple GPIO interface that supports four
23*a3ebb524SRobert Mustacchi  * basic attributes: controlling the output, controlling the input polarity, and
24*a3ebb524SRobert Mustacchi  * the standard name attribute.
25*a3ebb524SRobert Mustacchi  */
26*a3ebb524SRobert Mustacchi 
27*a3ebb524SRobert Mustacchi #ifdef __cplusplus
28*a3ebb524SRobert Mustacchi extern "C" {
29*a3ebb524SRobert Mustacchi #endif
30*a3ebb524SRobert Mustacchi 
31*a3ebb524SRobert Mustacchi /*
32*a3ebb524SRobert Mustacchi  * PCA953X_GPIO_ATTR_INTPUT -- ro
33*a3ebb524SRobert Mustacchi  *	uint32_t -- pca953x_gpio_input_t
34*a3ebb524SRobert Mustacchi  */
35*a3ebb524SRobert Mustacchi #define	PCA953X_GPIO_ATTR_INPUT		"pca953x:input"
36*a3ebb524SRobert Mustacchi typedef enum {
37*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_INPUT_LOW,
38*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_INPUT_HIGH
39*a3ebb524SRobert Mustacchi } pca953x_gpio_input_t;
40*a3ebb524SRobert Mustacchi 
41*a3ebb524SRobert Mustacchi /*
42*a3ebb524SRobert Mustacchi  * PCA953X_GPIO_ATTR_OUTPUT -- rw
43*a3ebb524SRobert Mustacchi  *	uint32_t -- pca953x_gpio_output_t
44*a3ebb524SRobert Mustacchi  *
45*a3ebb524SRobert Mustacchi  * This controls the GPIO's output value. If the GPIO is configured as an input,
46*a3ebb524SRobert Mustacchi  * modifying this will not impact anything. When the output is set to disabled,
47*a3ebb524SRobert Mustacchi  * then the pin is put into an input-only mode.
48*a3ebb524SRobert Mustacchi  */
49*a3ebb524SRobert Mustacchi #define	PCA953X_GPIO_ATTR_OUTPUT	"pca953x:output"
50*a3ebb524SRobert Mustacchi typedef enum {
51*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_OUTPUT_DISABLED,
52*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_OUTPUT_LOW,
53*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_OUTPUT_HIGH
54*a3ebb524SRobert Mustacchi } pca953x_gpio_output_t;
55*a3ebb524SRobert Mustacchi 
56*a3ebb524SRobert Mustacchi /*
57*a3ebb524SRobert Mustacchi  * PCA953X_GPIO_ATTR_POLARITY -- rw
58*a3ebb524SRobert Mustacchi  *	uint32_t -- pca953x_gpio_polarity_t
59*a3ebb524SRobert Mustacchi  *
60*a3ebb524SRobert Mustacchi  * This controls whether the input register reads back an inverted value or not.
61*a3ebb524SRobert Mustacchi  */
62*a3ebb524SRobert Mustacchi #define	PCA953X_GPIO_ATTR_POLARITY	"pca953x:polarity"
63*a3ebb524SRobert Mustacchi typedef enum {
64*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_POLARITY_NORMAL,
65*a3ebb524SRobert Mustacchi 	PCA953X_GPIO_POLARITY_INVERTED
66*a3ebb524SRobert Mustacchi } pca953x_gpio_polarity_t;
67*a3ebb524SRobert Mustacchi 
68*a3ebb524SRobert Mustacchi #ifdef __cplusplus
69*a3ebb524SRobert Mustacchi }
70*a3ebb524SRobert Mustacchi #endif
71*a3ebb524SRobert Mustacchi 
72*a3ebb524SRobert Mustacchi #endif /* _SYS_GPIO_PCA953X_H */
73