diff options
author | nirim000 <[email protected]> | 2022-07-02 19:37:02 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2022-07-03 00:37:02 +0100 |
commit | fb40abe2f25336b653d3c8ee787756e4260acd4c (patch) | |
tree | 02f706447a937eb9445d8f2ad95881c3183396ee /drivers/gpio/pca9505.h | |
parent | ce29cb0f10d1ddefcce164e8f6376f67900568a6 (diff) | |
download | qmk_firmware-fb40abe2f25336b653d3c8ee787756e4260acd4c.tar.gz qmk_firmware-fb40abe2f25336b653d3c8ee787756e4260acd4c.zip |
Pca9505/6 driver (#17333)
Diffstat (limited to 'drivers/gpio/pca9505.h')
-rw-r--r-- | drivers/gpio/pca9505.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/drivers/gpio/pca9505.h b/drivers/gpio/pca9505.h new file mode 100644 index 0000000000..732ddb88ea --- /dev/null +++ b/drivers/gpio/pca9505.h @@ -0,0 +1,67 @@ +// Copyright 2022 nirim000 +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <stdint.h> +#include <stdbool.h> + +/** + * Port ID + */ +typedef enum { + PCA9505_PORT0, + PCA9505_PORT1, + PCA9505_PORT2, + PCA9505_PORT3, + PCA9505_PORT4, +} pca9505_port_t; + +/** + * Helpers for set_config + */ +enum { + ALL_NORMAL = 0, + ALL_INVERTED = 0xFF, +}; + +/** + * Helpers for set_config + */ +enum { + ALL_OUTPUT = 0, + ALL_INPUT = 0xFF, +}; + +/** + * Helpers for set_output + */ +enum { + ALL_LOW = 0, + ALL_HIGH = 0xFF, +}; + +/** + * Init expander and any other dependent drivers + */ +void pca9505_init(uint8_t slave_addr); + +/** + * Configure input/output to a given port + */ +bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf); + +/** + * Configure polarity to a given port + */ +bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf); + +/** + * Write high/low to a given port + */ +bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf); + +/** + * Read state of a given port + */ +bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* ret); |