lkml.org 
[lkml]   [2020]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 009/134] Input: mms114 - fix handling of mms345l
    Date
    From: Stephan Gerhold <stephan@gerhold.net>

    [ Upstream commit 3f8f770575d911c989043d8f0fb8dec96360c41c ]

    MMS345L is another first generation touch screen from Melfas,
    which uses the same registers as MMS152.

    However, using I2C_M_NOSTART for it causes errors when reading:

    i2c i2c-0: sendbytes: NAK bailout.
    mms114 0-0048: __mms114_read_reg: i2c transfer failed (-5)

    The driver works fine as soon as I2C_M_NOSTART is removed.

    Reviewed-by: Andi Shyti <andi@etezian.org>
    Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
    Link: https://lore.kernel.org/r/20200405170904.61512-1-stephan@gerhold.net
    [dtor: removed separate mms345l handling, made everyone use standard
    transfer mode, propagated the 10bit addressing flag to the read part of the
    transfer as well.]
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/input/touchscreen/mms114.c | 12 +++++-------
    1 file changed, 5 insertions(+), 7 deletions(-)

    diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
    index a5ab774da4cc..fca908ba4841 100644
    --- a/drivers/input/touchscreen/mms114.c
    +++ b/drivers/input/touchscreen/mms114.c
    @@ -91,15 +91,15 @@ static int __mms114_read_reg(struct mms114_data *data, unsigned int reg,
    if (reg <= MMS114_MODE_CONTROL && reg + len > MMS114_MODE_CONTROL)
    BUG();

    - /* Write register: use repeated start */
    + /* Write register */
    xfer[0].addr = client->addr;
    - xfer[0].flags = I2C_M_TEN | I2C_M_NOSTART;
    + xfer[0].flags = client->flags & I2C_M_TEN;
    xfer[0].len = 1;
    xfer[0].buf = &buf;

    /* Read data */
    xfer[1].addr = client->addr;
    - xfer[1].flags = I2C_M_RD;
    + xfer[1].flags = (client->flags & I2C_M_TEN) | I2C_M_RD;
    xfer[1].len = len;
    xfer[1].buf = val;

    @@ -428,10 +428,8 @@ static int mms114_probe(struct i2c_client *client,
    const void *match_data;
    int error;

    - if (!i2c_check_functionality(client->adapter,
    - I2C_FUNC_PROTOCOL_MANGLING)) {
    - dev_err(&client->dev,
    - "Need i2c bus that supports protocol mangling\n");
    + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
    + dev_err(&client->dev, "Not supported I2C adapter\n");
    return -ENODEV;
    }

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-16 18:19    [W:4.167 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site