diff options
author | Dan Carpenter <error27@gmail.com> | 2010-06-28 14:34:24 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-06-28 14:35:15 -0400 |
commit | 1796b983cc4cbbed5e9e478b03591609a2c21987 (patch) | |
tree | 2cbb7e583d38a76cbf0f036857350deb8c5216f6 /drivers/input/keyboard/lm8323.c | |
parent | 28ed684fa3c0a75b59a00e209afef98aff7fa617 (diff) |
Input: lm8323 - fix error handling in lm8323_probe()
We reuse the "i" variable later on so if we goto fail3 or fail4
then "i" will be set to the wrong thing and cause a crash.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/keyboard/lm8323.c')
-rw-r--r-- | drivers/input/keyboard/lm8323.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/input/keyboard/lm8323.c b/drivers/input/keyboard/lm8323.c index bc696931fed7..6ecd37a845f2 100644 --- a/drivers/input/keyboard/lm8323.c +++ b/drivers/input/keyboard/lm8323.c | |||
@@ -642,6 +642,7 @@ static int __devinit lm8323_probe(struct i2c_client *client, | |||
642 | struct lm8323_platform_data *pdata = client->dev.platform_data; | 642 | struct lm8323_platform_data *pdata = client->dev.platform_data; |
643 | struct input_dev *idev; | 643 | struct input_dev *idev; |
644 | struct lm8323_chip *lm; | 644 | struct lm8323_chip *lm; |
645 | int pwm; | ||
645 | int i, err; | 646 | int i, err; |
646 | unsigned long tmo; | 647 | unsigned long tmo; |
647 | u8 data[2]; | 648 | u8 data[2]; |
@@ -710,8 +711,9 @@ static int __devinit lm8323_probe(struct i2c_client *client, | |||
710 | goto fail1; | 711 | goto fail1; |
711 | } | 712 | } |
712 | 713 | ||
713 | for (i = 0; i < LM8323_NUM_PWMS; i++) { | 714 | for (pwm = 0; pwm < LM8323_NUM_PWMS; pwm++) { |
714 | err = init_pwm(lm, i + 1, &client->dev, pdata->pwm_names[i]); | 715 | err = init_pwm(lm, pwm + 1, &client->dev, |
716 | pdata->pwm_names[pwm]); | ||
715 | if (err < 0) | 717 | if (err < 0) |
716 | goto fail2; | 718 | goto fail2; |
717 | } | 719 | } |
@@ -764,9 +766,9 @@ fail4: | |||
764 | fail3: | 766 | fail3: |
765 | device_remove_file(&client->dev, &dev_attr_disable_kp); | 767 | device_remove_file(&client->dev, &dev_attr_disable_kp); |
766 | fail2: | 768 | fail2: |
767 | while (--i >= 0) | 769 | while (--pwm >= 0) |
768 | if (lm->pwm[i].enabled) | 770 | if (lm->pwm[pwm].enabled) |
769 | led_classdev_unregister(&lm->pwm[i].cdev); | 771 | led_classdev_unregister(&lm->pwm[pwm].cdev); |
770 | fail1: | 772 | fail1: |
771 | input_free_device(idev); | 773 | input_free_device(idev); |
772 | kfree(lm); | 774 | kfree(lm); |