From: "chenmiao" <chenmiao@openatom.club>
To: <pbonzini@redhat.com>, <manos.pitsidianakis@linaro.org>,
<richard.henderson@linaro.org>, <philmd@linaro.org>
Cc: <qemu-rust@nongnu.org>, <qemu-devel@nongnu.org>,
<hust-os-kernel-patches@googlegroups.com>
Subject: [RFC 3/5] hw: gpio: Move the pcf8574 struct to header
Date: Sat, 25 Oct 2025 12:38:51 +0000 [thread overview]
Message-ID: <20251025123853.63139-4-chenmiao@openatom.club> (raw)
To better implement the Rust PCF8574 bindings, move its struct definition to
the header file.
Signed-off-by: chenmiao <chenmiao@openatom.club>
---
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 274b44b..670fc00 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 3291d7d..fe1ce89 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 other threads:[~2025-10-25 14:27 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251025123853.63139-4-chenmiao@openatom.club \
--to=chenmiao@openatom.club \
--cc=hust-os-kernel-patches@googlegroups.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-rust@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).