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