qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: minyard@acm.org
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	minyard@acm.org, Corey Minyard <cminyard@mvista.com>
Subject: [Qemu-devel] [PULL 07/19] i2c:smbus: Simplify read handling
Date: Thu, 28 Feb 2019 12:16:58 -0600	[thread overview]
Message-ID: <20190228181710.2477-8-minyard@acm.org> (raw)
In-Reply-To: <20190228181710.2477-1-minyard@acm.org>

From: Corey Minyard <cminyard@mvista.com>

There were two different read functions, and with the removal of
the command passed in there is no functional difference.  So remove
one of them.  With that you don't need one of the states, so that
can be removed, too.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
---
 hw/i2c/smbus_eeprom.c        |  8 --------
 hw/i2c/smbus_slave.c         | 21 +++------------------
 include/hw/i2c/smbus_slave.h | 17 ++++++++++-------
 3 files changed, 13 insertions(+), 33 deletions(-)

diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
index 7fbb5ca27f..760594b3f1 100644
--- a/hw/i2c/smbus_eeprom.c
+++ b/hw/i2c/smbus_eeprom.c
@@ -79,13 +79,6 @@ static int eeprom_write_data(SMBusDevice *dev, uint8_t *buf, uint8_t len)
     return 0;
 }
 
-static uint8_t eeprom_read_data(SMBusDevice *dev, int n)
-{
-    /* As with writes, we implement block reads without the
-       SMBus length byte.  */
-    return eeprom_receive_byte(dev);
-}
-
 static void smbus_eeprom_realize(DeviceState *dev, Error **errp)
 {
     SMBusEEPROMDevice *eeprom = (SMBusEEPROMDevice *)dev;
@@ -107,7 +100,6 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data)
     sc->quick_cmd = eeprom_quick_cmd;
     sc->receive_byte = eeprom_receive_byte;
     sc->write_data = eeprom_write_data;
-    sc->read_data = eeprom_read_data;
     dc->props = smbus_eeprom_properties;
     /* Reason: pointer property "data" */
     dc->user_creatable = false;
diff --git a/hw/i2c/smbus_slave.c b/hw/i2c/smbus_slave.c
index 92c7a5086c..52a57423ee 100644
--- a/hw/i2c/smbus_slave.c
+++ b/hw/i2c/smbus_slave.c
@@ -34,7 +34,6 @@ do { fprintf(stderr, "smbus: error: " fmt , ## __VA_ARGS__);} while (0)
 enum {
     SMBUS_IDLE,
     SMBUS_WRITE_DATA,
-    SMBUS_RECV_BYTE,
     SMBUS_READ_DATA,
     SMBUS_DONE,
     SMBUS_CONFUSED = -1
@@ -82,7 +81,7 @@ static int smbus_i2c_event(I2CSlave *s, enum i2c_event event)
         switch (dev->mode) {
         case SMBUS_IDLE:
             DPRINTF("Read mode\n");
-            dev->mode = SMBUS_RECV_BYTE;
+            dev->mode = SMBUS_READ_DATA;
             break;
         case SMBUS_WRITE_DATA:
             if (dev->data_len == 0) {
@@ -91,7 +90,6 @@ static int smbus_i2c_event(I2CSlave *s, enum i2c_event event)
             } else {
                 smbus_do_write(dev);
                 DPRINTF("Read mode\n");
-                dev->data_len = 0;
                 dev->mode = SMBUS_READ_DATA;
             }
             break;
@@ -148,31 +146,18 @@ static uint8_t smbus_i2c_recv(I2CSlave *s)
 {
     SMBusDevice *dev = SMBUS_DEVICE(s);
     SMBusDeviceClass *sc = SMBUS_DEVICE_GET_CLASS(dev);
-    uint8_t ret;
+    uint8_t ret = 0xff;
 
     switch (dev->mode) {
-    case SMBUS_RECV_BYTE:
+    case SMBUS_READ_DATA:
         if (sc->receive_byte) {
             ret = sc->receive_byte(dev);
-        } else {
-            ret = 0;
-        }
-        DPRINTF("Receive Byte %02x\n", ret);
-        dev->mode = SMBUS_DONE;
-        break;
-    case SMBUS_READ_DATA:
-        if (sc->read_data) {
-            ret = sc->read_data(dev, dev->data_len);
-            dev->data_len++;
-        } else {
-            ret = 0;
         }
         DPRINTF("Read data %02x\n", ret);
         break;
     default:
         BADF("Unexpected read in state %d\n", dev->mode);
         dev->mode = SMBUS_CONFUSED;
-        ret = 0;
         break;
     }
     return ret;
diff --git a/include/hw/i2c/smbus_slave.h b/include/hw/i2c/smbus_slave.h
index fa92201ec6..79050fb92d 100644
--- a/include/hw/i2c/smbus_slave.h
+++ b/include/hw/i2c/smbus_slave.h
@@ -47,8 +47,6 @@ typedef struct SMBusDeviceClass
      */
     void (*quick_cmd)(SMBusDevice *dev, uint8_t read);
 
-    uint8_t (*receive_byte)(SMBusDevice *dev);
-
     /*
      * We can't distinguish between a word write and a block write with
      * length 1, so pass the whole data block including the length byte
@@ -59,11 +57,16 @@ typedef struct SMBusDeviceClass
      */
     int (*write_data)(SMBusDevice *dev, uint8_t *buf, uint8_t len);
 
-    /* Likewise we can't distinguish between different reads, or even know
-       the length of the read until the read is complete, so read data a
-       byte at a time.  The device is responsible for adding the length
-       byte on block reads.  */
-    uint8_t (*read_data)(SMBusDevice *dev, int n);
+    /*
+     * Likewise we can't distinguish between different reads, or even know
+     * the length of the read until the read is complete, so read data a
+     * byte at a time.  The device is responsible for adding the length
+     * byte on block reads.  This call cannot fail, it should return
+     * something, preferably 0xff if nothing is available.
+     * This may be NULL if no data is read from the device.  Reads will
+     * return 0xff in that case.
+     */
+    uint8_t (*receive_byte)(SMBusDevice *dev);
 } SMBusDeviceClass;
 
 struct SMBusDevice {
-- 
2.17.1

  parent reply	other threads:[~2019-02-28 18:18 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-28 18:16 [Qemu-devel] [PULL 00/19] Fix/add vmstate handling in some I2C code minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 01/19] i2c: Split smbus into parts minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 02/19] i2c: have I2C receive operation return uint8_t minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 03/19] arm:i2c: Don't mask return from i2c_recv() minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 04/19] i2c: Don't check return value " minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 05/19] i2c:smbus: Correct the working of quick commands minyard
2019-02-28 18:16 ` [Qemu-devel] [PULL 06/19] i2c:smbus: Simplify write operation minyard
2019-02-28 18:16 ` minyard [this message]
2019-02-28 18:16 ` [Qemu-devel] [PULL 08/19] i2c:smbus_eeprom: Get rid of the quick command minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 09/19] i2c:smbus: Make white space in switch statements consistent minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 10/19] boards.h: Ignore migration for SMBus devices on older machines minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 11/19] i2c:pm_smbus: Fix pm_smbus handling of I2C block read minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 12/19] migration: Add a VMSTATE_BOOL_TEST() macro minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 13/19] i2c:pm_smbus: Fix state transfer minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 14/19] i2c:smbus_slave: Add an SMBus vmstate structure minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 15/19] i2c:smbus_eeprom: Add normal type name and cast to smbus_eeprom.c minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 16/19] i2c:smbus_eeprom: Add a size constant for the smbus_eeprom size minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 17/19] i2c:smbus_eeprom: Add vmstate handling to the smbus eeprom minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 18/19] i2c:smbus_eeprom: Add a reset function to smbus_eeprom minyard
2019-02-28 18:17 ` [Qemu-devel] [PULL 19/19] i2c: Verify that the count passed in to smbus_eeprom_init() is valid minyard
2019-03-01 14:23 ` [Qemu-devel] [PULL 00/19] Fix/add vmstate handling in some I2C code Peter Maydell

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=20190228181710.2477-8-minyard@acm.org \
    --to=minyard@acm.org \
    --cc=cminyard@mvista.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.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).