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