From: Jean Delvare <jdelvare@suse.de>
To: Heiner Kallweit <hkallweit1@gmail.com>
Cc: Linux I2C <linux-i2c@vger.kernel.org>
Subject: Re: [PATCH v3] i2c: i801: Don't clear status flags twice in interrupt mode
Date: Thu, 9 Dec 2021 14:10:03 +0100 [thread overview]
Message-ID: <20211209141003.7b406f2f@endymion> (raw)
In-Reply-To: <bd0def53-4e63-61eb-c0bb-9975a308cb1a@gmail.com>
On Sat, 04 Dec 2021 21:04:40 +0100, Heiner Kallweit wrote:
> In interrupt mode we clear the status flags twice, in the interrupt
> handler and in i801_check_post(). Remove clearing the status flags
> from i801_check_post() and handle polling mode by using the
> SMBus unlocking write to also clear the status flags if still set.
> To be precise: One could still argue that the status flags are
> cleared twice in interrupt mode, but it comes for free.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - clear status flags also in i801_wait_byte_done()
> - remove outdated comment at i801_check_post()
> v3:
> - merge unlocking SMBus and clearing status flags
> - avoid the complexity added with v2
> ---
> drivers/i2c/busses/i2c-i801.c | 16 +++++-----------
> 1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
> index 930c6edbe..128a25de7 100644
> --- a/drivers/i2c/busses/i2c-i801.c
> +++ b/drivers/i2c/busses/i2c-i801.c
> @@ -372,11 +372,6 @@ static int i801_check_pre(struct i801_priv *priv)
> return 0;
> }
>
> -/*
> - * Convert the status register to an error code, and clear it.
> - * Note that status only contains the bits we want to clear, not the
> - * actual register value.
> - */
> static int i801_check_post(struct i801_priv *priv, int status)
> {
> int result = 0;
> @@ -401,7 +396,6 @@ static int i801_check_post(struct i801_priv *priv, int status)
> !(status & SMBHSTSTS_FAILED))
> dev_err(&priv->pci_dev->dev,
> "Failed terminating the transaction\n");
> - outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
> return -ETIMEDOUT;
> }
>
> @@ -440,9 +434,6 @@ static int i801_check_post(struct i801_priv *priv, int status)
> dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
> }
>
> - /* Clear status flags except BYTE_DONE, to be cleared by caller */
> - outb_p(status, SMBHSTSTS(priv));
> -
> return result;
> }
>
> @@ -939,8 +930,11 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr,
> }
>
> out:
> - /* Unlock the SMBus device for use by BIOS/ACPI */
> - outb_p(SMBHSTSTS_INUSE_STS, SMBHSTSTS(priv));
> + /*
> + * Unlock the SMBus device for use by BIOS/ACPI,
> + * and clear status flags if not done already.
> + */
> + outb_p(SMBHSTSTS_INUSE_STS | STATUS_FLAGS, SMBHSTSTS(priv));
>
> pm_runtime_mark_last_busy(&priv->pci_dev->dev);
> pm_runtime_put_autosuspend(&priv->pci_dev->dev);
Looks good to me.
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Tested-by: Jean Delvare <jdelvare@suse.de>
--
Jean Delvare
SUSE L3 Support
next prev parent reply other threads:[~2021-12-09 13:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-04 20:04 [PATCH v3] i2c: i801: Don't clear status flags twice in interrupt mode Heiner Kallweit
2021-12-09 13:10 ` Jean Delvare [this message]
2021-12-09 14:52 ` Wolfram Sang
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=20211209141003.7b406f2f@endymion \
--to=jdelvare@suse.de \
--cc=hkallweit1@gmail.com \
--cc=linux-i2c@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.