To better implement the Rust PCF8574 bindings, move its struct definition to
the header file.

Signed-off-by: chenmiao <[email protected]>
---
 hw/gpio/pcf8574.c         | 32 --------------------------------
 include/hw/gpio/pcf8574.h | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/hw/gpio/pcf8574.c b/hw/gpio/pcf8574.c
index 274b44bb61..670fc006bb 100644
--- a/hw/gpio/pcf8574.c
+++ b/hw/gpio/pcf8574.c
@@ -15,38 +15,6 @@
 #include "qemu/module.h"
 #include "qom/object.h"
 
-/*
- * PCF8574 and compatible chips incorporate quasi-bidirectional
- * IO. Electrically it means that device sustain pull-up to line
- * unless IO port is configured as output _and_ driven low.
- *
- * IO access is implemented as simple I2C single-byte read
- * or write operation. So, to configure line to input user write 1
- * to corresponding bit. To configure line to output and drive it low
- * user write 0 to corresponding bit.
- *
- * In essence, user can think of quasi-bidirectional IO as
- * open-drain line, except presence of builtin rising edge acceleration
- * embedded in PCF8574 IC
- *
- * PCF8574 has interrupt request line, which is being pulled down when
- * port line state differs from last read. Port read operation clears
- * state and INT line returns to high state via pullup.
- */
-
-OBJECT_DECLARE_SIMPLE_TYPE(PCF8574State, PCF8574)
-
-#define PORTS_COUNT (8)
-
-struct PCF8574State {
-    I2CSlave parent_obj;
-    uint8_t  lastrq;     /* Last requested state. If changed - assert irq */
-    uint8_t  input;      /* external electrical line state */
-    uint8_t  output;     /* Pull-up (1) or drive low (0) on bit */
-    qemu_irq handler[PORTS_COUNT];
-    qemu_irq intrq;      /* External irq request */
-};
-
 static void pcf8574_reset(DeviceState *dev)
 {
     PCF8574State *s = PCF8574(dev);
diff --git a/include/hw/gpio/pcf8574.h b/include/hw/gpio/pcf8574.h
index 3291d7dbbc..fe1ce891b7 100644
--- a/include/hw/gpio/pcf8574.h
+++ b/include/hw/gpio/pcf8574.h
@@ -10,6 +10,42 @@
 #ifndef _HW_GPIO_PCF8574
 #define _HW_GPIO_PCF8574
 
+#include "qemu/osdep.h"
+#include "hw/i2c/i2c.h"
+#include "qom/object.h"
+
 #define TYPE_PCF8574 "pcf8574"
 
+/*
+ * PCF8574 and compatible chips incorporate quasi-bidirectional
+ * IO. Electrically it means that device sustain pull-up to line
+ * unless IO port is configured as output _and_ driven low.
+ *
+ * IO access is implemented as simple I2C single-byte read
+ * or write operation. So, to configure line to input user write 1
+ * to corresponding bit. To configure line to output and drive it low
+ * user write 0 to corresponding bit.
+ *
+ * In essence, user can think of quasi-bidirectional IO as
+ * open-drain line, except presence of builtin rising edge acceleration
+ * embedded in PCF8574 IC
+ *
+ * PCF8574 has interrupt request line, which is being pulled down when
+ * port line state differs from last read. Port read operation clears
+ * state and INT line returns to high state via pullup.
+ */
+
+OBJECT_DECLARE_SIMPLE_TYPE(PCF8574State, PCF8574)
+
+#define PORTS_COUNT (8)
+
+struct PCF8574State {
+    I2CSlave parent_obj;
+    uint8_t  lastrq;     /* Last requested state. If changed - assert irq */
+    uint8_t  input;      /* external electrical line state */
+    uint8_t  output;     /* Pull-up (1) or drive low (0) on bit */
+    qemu_irq handler[PORTS_COUNT];
+    qemu_irq intrq;      /* External irq request */
+};
+
 #endif /* _HW_GPIO_PCF8574 */
-- 
2.43.0

Reply via email to