summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Dyer <nick.dyer@itdev.co.uk>2014-12-23 16:27:29 +0000
committerNick Dyer <nick.dyer@itdev.co.uk>2015-05-01 14:57:57 +0100
commit7d38a7f342c33e9a65c9ac56f811c7614e63ba84 (patch)
tree8e809d7f110fb980f71428f8bb36ff75ddc8c837
parent3380b3f981188e2f3bc04e395126143805a0e3f0 (diff)
downloadolio-linux-3.10-7d38a7f342c33e9a65c9ac56f811c7614e63ba84.tar.xz
olio-linux-3.10-7d38a7f342c33e9a65c9ac56f811c7614e63ba84.zip
Input: atmel_mxt_ts - refactor code to enter bootloader into separate func
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index beb847151b6..13fd2d9eae5 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -2907,23 +2907,10 @@ static int mxt_check_firmware_format(struct device *dev,
return -EINVAL;
}
-static int mxt_load_fw(struct device *dev)
+static int mxt_enter_bootloader(struct mxt_data *data)
{
- struct mxt_data *data = dev_get_drvdata(dev);
- struct mxt_flash f = { 0, };
int ret;
- ret = request_firmware(&f.fw, data->fw_name, dev);
- if (ret) {
- dev_err(dev, "Unable to open firmware %s\n", data->fw_name);
- return ret;
- }
-
- /* Check for incorrect enc file */
- ret = mxt_check_firmware_format(dev, f.fw);
- if (ret)
- goto release_firmware;
-
if (data->suspended) {
if (data->pdata->suspend_mode == MXT_SUSPEND_REGULATOR)
mxt_regulator_enable(data);
@@ -2941,14 +2928,14 @@ static int mxt_load_fw(struct device *dev)
ret = mxt_t6_command(data, MXT_COMMAND_RESET,
MXT_BOOT_VALUE, false);
if (ret)
- goto release_firmware;
+ return ret;
msleep(MXT_RESET_TIME);
/* Do not need to scan since we know family ID */
ret = mxt_lookup_bootloader_address(data, 0);
if (ret)
- goto release_firmware;
+ return ret;
mxt_free_input_device(data);
mxt_free_object_table(data);
@@ -2958,6 +2945,30 @@ static int mxt_load_fw(struct device *dev)
INIT_COMPLETION(data->bl_completion);
+ return 0;
+}
+
+static int mxt_load_fw(struct device *dev)
+{
+ struct mxt_data *data = dev_get_drvdata(dev);
+ struct mxt_flash f = { 0, };
+ int ret;
+
+ ret = request_firmware(&f.fw, data->fw_name, dev);
+ if (ret) {
+ dev_err(dev, "Unable to open firmware %s\n", data->fw_name);
+ return ret;
+ }
+
+ ret = mxt_enter_bootloader(data);
+ if (ret)
+ goto release_firmware;
+
+ /* Check for incorrect enc file */
+ ret = mxt_check_firmware_format(dev, f.fw);
+ if (ret)
+ goto release_firmware;
+
ret = mxt_check_bootloader(data, MXT_WAITING_BOOTLOAD_CMD, false);
if (ret) {
/* Bootloader may still be unlocked from previous attempt */