[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190415220546.bvrp7jodgdq7phwg@porty>
Date: Tue, 16 Apr 2019 00:05:46 +0200
From: Stefan Lengfeld <contact@...fanchrist.eu>
To: Wolfram Sang <wsa+renesas@...g-engineering.com>
Cc: linux-i2c@...r.kernel.org, linux-renesas-soc@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
Peter Rosin <peda@...ntia.se>, linux-omap@...r.kernel.org,
linux-tegra@...r.kernel.org,
Linus Walleij <linus.walleij@...aro.org>,
Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
Tero Kristo <t-kristo@...com>, Keerthy <j-keerthy@...com>,
Simon Horman <horms+renesas@...ge.net.au>
Subject: Re: [PATCH 06/12] i2c: omap: Add the master_xfer_irqless hook
Hi Wolfram,
the subject line of this patch
i2c: omap: Add the master_xfer_irqless hook
still contains the old name of the callback '_irqless'. It should be
'_atomic' instead.
On Wed, Apr 03, 2019 at 02:40:13PM +0200, Wolfram Sang wrote:
> Add the master_xfer_irqless hook to enable i2c transactions
Here again. It should be 'master_xfer_atomic'.
> in irq disabled contexts like the poweroff case.
>
> Signed-off-by: Tero Kristo <t-kristo@...com>
> Signed-off-by: Keerthy <j-keerthy@...com>
> [wsa: simplified code a little: 'timeout = !ret']
> Reviewed-by: Simon Horman <horms+renesas@...ge.net.au>
> Signed-off-by: Wolfram Sang <wsa+renesas@...g-engineering.com>
> ---
> drivers/i2c/busses/i2c-omap.c | 76 +++++++++++++++++++++++++++++++++++--------
> 1 file changed, 63 insertions(+), 13 deletions(-)
>
snipped
> @@ -648,15 +650,28 @@ static void omap_i2c_resize_fifo(struct omap_i2c_dev *omap, u8 size, bool is_rx)
> (1000 * omap->speed / 8);
> }
>
> +static void omap_i2c_wait(struct omap_i2c_dev *omap)
> +{
> + u16 stat;
> + u16 mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG);
> + int count = 0;
> +
> + do {
> + stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG);
> + count++;
> + } while (!(stat & mask) && count < 5);
> +}
> +
> /*
> * Low level master read/write transaction.
> */
> static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
> - struct i2c_msg *msg, int stop)
> + struct i2c_msg *msg, int stop, bool polling)
Nitpick. In the patches for the other drivers the boolean flag is called
'atomic' and not 'polling'.
> {
> struct omap_i2c_dev *omap = i2c_get_adapdata(adap);
> unsigned long timeout;
> u16 w;
> + int ret;
>
> dev_dbg(omap->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
> msg->addr, msg->len, msg->flags, stop);
sniped
> @@ -1165,14 +1204,25 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
> }
> } while (stat);
>
> - omap_i2c_complete_cmd(omap, err);
> + return err;
> +}
> +
> +static irqreturn_t
> +omap_i2c_isr_thread(int this_irq, void *dev_id)
> +{
> + int ret;
> + struct omap_i2c_dev *omap = dev_id;
> +
> + ret = omap_i2c_xfer_data(omap);
> + if (ret != -EAGAIN)
> + omap_i2c_complete_cmd(omap, ret);
>
> -out:
> return IRQ_HANDLED;
> }
>
> static const struct i2c_algorithm omap_i2c_algo = {
> - .master_xfer = omap_i2c_xfer,
> + .master_xfer = omap_i2c_xfer_irq,
> + .master_xfer_atomic = omap_i2c_xfer_polling,
When consistency with other drivers is a goal, the functions should be
named like:
.master_xfe = omap_i2c_xfer,
.master_xfer_atomic = omap_i2c_xfer_atomic,
The first without a suffix and the second with the '_atomic' suffix.
Kind regards,
Stefan
Powered by blists - more mailing lists