misc: isa1200: Reset gpios properly in error path

Change-Id: I835e5ea520fe2e745b741e9e106a461062018199
Signed-off-by: Mohan Pallaka <mpallaka@codeaurora.org>
This commit is contained in:
Mohan Pallaka
2011-11-21 13:08:00 +05:30
parent b9599f1d4d
commit acdca0fc02

View File

@@ -187,7 +187,7 @@ static int isa1200_setup(struct i2c_client *client)
rc = isa1200_write_reg(client, ISA1200_HCTRL1, value); rc = isa1200_write_reg(client, ISA1200_HCTRL1, value);
if (rc < 0) { if (rc < 0) {
pr_err("%s: i2c write failure\n", __func__); pr_err("%s: i2c write failure\n", __func__);
return rc; goto reset_gpios;
} }
if (haptic->pdata->mode_ctrl == PWM_GEN_MODE) { if (haptic->pdata->mode_ctrl == PWM_GEN_MODE) {
@@ -224,6 +224,10 @@ static int isa1200_setup(struct i2c_client *client)
reset_hctrl1: reset_hctrl1:
i2c_smbus_write_byte_data(client, ISA1200_HCTRL1, i2c_smbus_write_byte_data(client, ISA1200_HCTRL1,
ISA1200_HCTRL1_RESET); ISA1200_HCTRL1_RESET);
reset_gpios:
gpio_set_value_cansleep(haptic->pdata->hap_en_gpio, 0);
if (haptic->is_len_gpio_valid == true)
gpio_set_value_cansleep(haptic->pdata->hap_len_gpio, 0);
return rc; return rc;
} }
@@ -449,6 +453,11 @@ static int __devinit isa1200_probe(struct i2c_client *client,
return 0; return 0;
reset_hctrl0: reset_hctrl0:
gpio_set_value_cansleep(haptic->pdata->hap_en_gpio, 0);
if (haptic->is_len_gpio_valid == true)
gpio_set_value_cansleep(haptic->pdata->hap_len_gpio, 0);
i2c_smbus_write_byte_data(client, ISA1200_HCTRL1,
ISA1200_HCTRL1_RESET);
i2c_smbus_write_byte_data(client, ISA1200_HCTRL0, i2c_smbus_write_byte_data(client, ISA1200_HCTRL0,
ISA1200_HCTRL0_RESET); ISA1200_HCTRL0_RESET);
setup_fail: setup_fail:
@@ -490,6 +499,10 @@ static int __devexit isa1200_remove(struct i2c_client *client)
timed_output_dev_unregister(&haptic->dev); timed_output_dev_unregister(&haptic->dev);
gpio_set_value_cansleep(haptic->pdata->hap_en_gpio, 0);
if (haptic->is_len_gpio_valid == true)
gpio_set_value_cansleep(haptic->pdata->hap_len_gpio, 0);
gpio_free(haptic->pdata->hap_en_gpio); gpio_free(haptic->pdata->hap_en_gpio);
if (haptic->is_len_gpio_valid == true) if (haptic->is_len_gpio_valid == true)
gpio_free(haptic->pdata->hap_len_gpio); gpio_free(haptic->pdata->hap_len_gpio);