1#ifndef PCA954X__H 2#define PCA954X__H 3 4#include "hw/i2c/i2c.h" 5#define MAX_I2C_BUSES 8 6#define PCA954X_CONTROL_ADDR 0x74 7 8typedef struct pca954x_type { 9 const char *name; 10 uint8_t lanes; /* Number of i2c out buses */ 11 bool mux; /* mux or switch */ 12} pca954x_type; 13 14typedef struct PCA954X_class { 15 I2CSlaveClass parent_class; 16 17 pca954x_type *device; 18} PCA954XClass; 19 20typedef struct { 21 I2CSlave i2c; 22 I2CBus *busses[MAX_I2C_BUSES]; 23 24 /*state */ 25 uint8_t control_reg; 26 enum i2c_event event; 27 bool control_decoded; 28 uint8_t active_lanes; 29 30 bool mux; 31 uint8_t lanes; 32 uint8_t chip_enable; /*property */ 33} PCA954XState; 34 35#define TYPE_PCA954X "pca954x" 36 37#define PCA954X(obj) \ 38 OBJECT_CHECK(PCA954XState, (obj), TYPE_PCA954X) 39#define PCA954X_CLASS(klass) \ 40 OBJECT_CLASS_CHECK(PCA954XClass, klass, TYPE_PCA954X) 41#define PCA954X_GET_CLASS(obj) \ 42 OBJECT_GET_CLASS(PCA954XClass, (obj), TYPE_PCA954X) 43 44#endif 45