1*de0c7d54SGlenn Miles /* 2*de0c7d54SGlenn Miles * PCA9554 I/O port 3*de0c7d54SGlenn Miles * 4*de0c7d54SGlenn Miles * Copyright (c) 2023, IBM Corporation. 5*de0c7d54SGlenn Miles * 6*de0c7d54SGlenn Miles * SPDX-License-Identifier: GPL-2.0-or-later 7*de0c7d54SGlenn Miles */ 8*de0c7d54SGlenn Miles #ifndef PCA9554_H 9*de0c7d54SGlenn Miles #define PCA9554_H 10*de0c7d54SGlenn Miles 11*de0c7d54SGlenn Miles #include "hw/i2c/i2c.h" 12*de0c7d54SGlenn Miles #include "qom/object.h" 13*de0c7d54SGlenn Miles 14*de0c7d54SGlenn Miles #define TYPE_PCA9554 "pca9554" 15*de0c7d54SGlenn Miles typedef struct PCA9554State PCA9554State; 16*de0c7d54SGlenn Miles DECLARE_INSTANCE_CHECKER(PCA9554State, PCA9554, 17*de0c7d54SGlenn Miles TYPE_PCA9554) 18*de0c7d54SGlenn Miles 19*de0c7d54SGlenn Miles #define PCA9554_NR_REGS 4 20*de0c7d54SGlenn Miles #define PCA9554_PIN_COUNT 8 21*de0c7d54SGlenn Miles 22*de0c7d54SGlenn Miles struct PCA9554State { 23*de0c7d54SGlenn Miles /*< private >*/ 24*de0c7d54SGlenn Miles I2CSlave i2c; 25*de0c7d54SGlenn Miles /*< public >*/ 26*de0c7d54SGlenn Miles 27*de0c7d54SGlenn Miles uint8_t len; 28*de0c7d54SGlenn Miles uint8_t pointer; 29*de0c7d54SGlenn Miles 30*de0c7d54SGlenn Miles uint8_t regs[PCA9554_NR_REGS]; 31*de0c7d54SGlenn Miles qemu_irq gpio_out[PCA9554_PIN_COUNT]; 32*de0c7d54SGlenn Miles uint8_t ext_state[PCA9554_PIN_COUNT]; 33*de0c7d54SGlenn Miles char *description; /* For debugging purpose only */ 34*de0c7d54SGlenn Miles }; 35*de0c7d54SGlenn Miles 36*de0c7d54SGlenn Miles #endif 37