xref: /qemu/include/hw/gpio/pca9554.h (revision 6328d8ffa6cb9d750e4bfcfd73ac25d3a39ceb63)
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