i2c: i801: Call i801_check_pre() from i801_access()
authorHeiner Kallweit <hkallweit1@gmail.com>
Thu, 16 Feb 2023 16:14:51 +0000 (17:14 +0100)
committerWolfram Sang <wsa@kernel.org>
Fri, 17 Feb 2023 21:11:53 +0000 (22:11 +0100)
This avoids code duplication, in a next step we'll call
i801_check_post() from i801_transaction() as well.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-i801.c

index 8972549..3b2b8c4 100644 (file)
@@ -462,10 +462,6 @@ static int i801_transaction(struct i801_priv *priv, int xact)
        unsigned long result;
        const struct i2c_adapter *adap = &priv->adapter;
 
-       status = i801_check_pre(priv);
-       if (status < 0)
-               return status;
-
        if (priv->features & FEATURE_IRQ) {
                reinit_completion(&priv->done);
                outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START,
@@ -653,10 +649,6 @@ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
        if (command == I2C_SMBUS_BLOCK_PROC_CALL)
                return -EOPNOTSUPP;
 
-       status = i801_check_pre(priv);
-       if (status < 0)
-               return status;
-
        len = data->block[0];
 
        if (read_write == I2C_SMBUS_WRITE) {
@@ -891,6 +883,10 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr,
 
        pm_runtime_get_sync(&priv->pci_dev->dev);
 
+       ret = i801_check_pre(priv);
+       if (ret)
+               goto out;
+
        hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
                && size != I2C_SMBUS_QUICK
                && size != I2C_SMBUS_I2C_BLOCK_DATA;
@@ -913,6 +909,7 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr,
         */
        if (hwpec)
                outb_p(inb_p(SMBAUXCTL(priv)) & ~SMBAUXCTL_CRC, SMBAUXCTL(priv));
+out:
        /*
         * Unlock the SMBus device for use by BIOS/ACPI,
         * and clear status flags if not done already.