| /* |
| * Copyright (c) 2015 Intel Corporation. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file Header file for the PCAL9535A driver. |
| */ |
| |
| #ifndef _GPIO_PCAL9535A_H_ |
| #define _GPIO_PCAL9535A_H_ |
| |
| #include <kernel.h> |
| |
| #include <gpio.h> |
| #include <i2c.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** Configuration data */ |
| struct gpio_pcal9535a_config { |
| /** The master I2C device's name */ |
| const char * const i2c_master_dev_name; |
| |
| /** The slave address of the chip */ |
| u16_t i2c_slave_addr; |
| |
| u8_t stride[2]; |
| }; |
| |
| /** Store the port 0/1 data for each register pair. */ |
| union gpio_pcal9535a_port_data { |
| u16_t all; |
| u8_t port[2]; |
| u8_t byte[2]; |
| }; |
| |
| /** Runtime driver data */ |
| struct gpio_pcal9535a_drv_data { |
| /** Master I2C device */ |
| struct device *i2c_master; |
| |
| /** |
| * Specify polarity inversion of pin. This is used for ouput as |
| * the polarity inversion registers on chip affects inputs only. |
| */ |
| u32_t out_pol_inv; |
| |
| struct { |
| union gpio_pcal9535a_port_data output; |
| union gpio_pcal9535a_port_data pol_inv; |
| union gpio_pcal9535a_port_data dir; |
| union gpio_pcal9535a_port_data pud_en; |
| union gpio_pcal9535a_port_data pud_sel; |
| } reg_cache; |
| |
| u8_t stride[2]; |
| }; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _GPIO_PCAL9535A_H_ */ |