lkml.org 
[lkml]   [2020]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 46/55] Input: Atmel: improve error handling in mxt_initialize()
    Date
    From: Deepak Das <deepak_das@mentor.com>

    Currently mxt_initialize() tries to probe bootloader mode
    even if valid bootloader address is not specified.

    This commit modifies mxt_initialize() to return error
    if Device is not in appmode and bootloader address is
    not specified.

    This commit also returns error code from mxt_send_bootloader_cmd()
    in mxt_initialize().

    Signed-off-by: Deepak Das <deepak_das@mentor.com>
    Signed-off-by: George G. Davis <george_davis@mentor.com>
    Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
    ---
    drivers/input/touchscreen/atmel_mxt_ts.c | 58 +++++++++++++++++-------
    1 file changed, 41 insertions(+), 17 deletions(-)

    diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
    index 0f7ee987a9c5..258dcd8a68e5 100644
    --- a/drivers/input/touchscreen/atmel_mxt_ts.c
    +++ b/drivers/input/touchscreen/atmel_mxt_ts.c
    @@ -716,17 +716,13 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
    return 0;
    }

    -static int mxt_probe_bootloader(struct mxt_data *data, bool alt_address)
    +static int mxt_probe_bootloader(struct mxt_data *data)
    {
    struct device *dev = &data->client->dev;
    int error;
    u8 buf[3];
    bool crc_failure, extended_id;

    - error = mxt_lookup_bootloader_address(data, alt_address);
    - if (error)
    - return error;
    -
    /* Check bootloader status and version information */
    error = mxt_bootloader_read(data, buf, sizeof(buf));
    if (error)
    @@ -2922,6 +2918,32 @@ static void mxt_config_cb(const struct firmware *cfg, void *ctx)
    release_firmware(cfg);
    }

    +static int mxt_bootloader_status(struct mxt_data *data)
    +{
    + struct i2c_client *client = data->client;
    + int error;
    +
    + error = mxt_lookup_bootloader_address(data, false);
    + if (error) {
    + dev_info(&client->dev,
    + "Bootloader address is not specified\n");
    + return error;
    + }
    + /* Check bootloader state */
    + error = mxt_probe_bootloader(data);
    + if (error) {
    + dev_info(&client->dev, "Trying alternate bootloader address\n");
    + mxt_lookup_bootloader_address(data, true);
    + error = mxt_probe_bootloader(data);
    + if (error) {
    + dev_err(&client->dev,
    + "Chip is not in appmode or bootloader mode\n");
    + return error;
    + }
    + }
    + return 0;
    +}
    +
    static int mxt_initialize(struct mxt_data *data)
    {
    struct i2c_client *client = data->client;
    @@ -2933,16 +2955,13 @@ static int mxt_initialize(struct mxt_data *data)
    if (!error)
    break;

    - /* Check bootloader state */
    - error = mxt_probe_bootloader(data, false);
    - if (error) {
    - dev_info(&client->dev, "Trying alternate bootloader address\n");
    - error = mxt_probe_bootloader(data, true);
    - if (error) {
    - /* Chip is not in appmode or bootloader mode */
    - return error;
    - }
    - }
    + dev_info(&client->dev,
    + "info block read failed (%d), so try bootloader method\n",
    + error);
    +
    + error = mxt_bootloader_status(data);
    + if (error)
    + return error;

    /* OK, we are in bootloader, see if we can recover */
    if (++recovery_attempts > 1) {
    @@ -2956,7 +2975,9 @@ static int mxt_initialize(struct mxt_data *data)
    }

    /* Attempt to exit bootloader into app mode */
    - mxt_send_bootloader_cmd(data, false);
    + error = mxt_send_bootloader_cmd(data, false);
    + if (error)
    + return error;
    msleep(MXT_FW_RESET_TIME);
    }

    @@ -3648,8 +3669,11 @@ static int mxt_enter_bootloader(struct mxt_data *data)

    msleep(MXT_RESET_TIME);

    + ret = mxt_lookup_bootloader_address(data, false);
    + if (ret)
    + return ret;
    /* Do not need to scan since we know family ID */
    - ret = mxt_probe_bootloader(data, 0);
    + ret = mxt_probe_bootloader(data);
    if (ret)
    return ret;

    --
    2.17.1
    \
     
     \ /
      Last update: 2020-03-31 12:55    [W:4.067 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site