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