From: Potin Lai <potin.lai.pt@gmail.com>
Add pca9543 2-channel i2c-mux switch support.
Signed-off-by: Potin Lai <potin.lai.pt@gmail.com>
Reviewed-by: Patrick Venture <venture@google.com>
Message-Id: <20231113063156.2264941-1-potin.lai.pt@gmail.com>
Signed-off-by: Corey Minyard <minyard@acm.org>
---
hw/i2c/i2c_mux_pca954x.c | 12 ++++++++++++
include/hw/i2c/i2c_mux_pca954x.h | 1 +
2 files changed, 13 insertions(+)
diff --git a/hw/i2c/i2c_mux_pca954x.c b/hw/i2c/i2c_mux_pca954x.c
index db5db956a6..6aace0fc47 100644
--- a/hw/i2c/i2c_mux_pca954x.c
+++ b/hw/i2c/i2c_mux_pca954x.c
@@ -30,6 +30,7 @@
#define PCA9548_CHANNEL_COUNT 8
#define PCA9546_CHANNEL_COUNT 4
+#define PCA9543_CHANNEL_COUNT 2
/*
* struct Pca954xState - The pca954x state object.
@@ -172,6 +173,12 @@ I2CBus *pca954x_i2c_get_bus(I2CSlave *mux, uint8_t channel)
return pca954x->bus[channel];
}
+static void pca9543_class_init(ObjectClass *klass, void *data)
+{
+ Pca954xClass *s = PCA954X_CLASS(klass);
+ s->nchans = PCA9543_CHANNEL_COUNT;
+}
+
static void pca9546_class_init(ObjectClass *klass, void *data)
{
Pca954xClass *s = PCA954X_CLASS(klass);
@@ -246,6 +253,11 @@ static const TypeInfo pca954x_info[] = {
.class_init = pca954x_class_init,
.abstract = true,
},
+ {
+ .name = TYPE_PCA9543,
+ .parent = TYPE_PCA954X,
+ .class_init = pca9543_class_init,
+ },
{
.name = TYPE_PCA9546,
.parent = TYPE_PCA954X,
diff --git a/include/hw/i2c/i2c_mux_pca954x.h b/include/hw/i2c/i2c_mux_pca954x.h
index 3dd25ec983..1da5508ed5 100644
--- a/include/hw/i2c/i2c_mux_pca954x.h
+++ b/include/hw/i2c/i2c_mux_pca954x.h
@@ -3,6 +3,7 @@
#include "hw/i2c/i2c.h"
+#define TYPE_PCA9543 "pca9543"
#define TYPE_PCA9546 "pca9546"
#define TYPE_PCA9548 "pca9548"
--
2.34.1