aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/tps65910.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/tps65910.c')
-rw-r--r--drivers/mfd/tps65910.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index 2229e66d80db..6f5b8cf2f652 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -147,12 +147,11 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
147 if (init_data == NULL) 147 if (init_data == NULL)
148 return -ENOMEM; 148 return -ENOMEM;
149 149
150 init_data->irq = pmic_plat_data->irq;
151 init_data->irq_base = pmic_plat_data->irq;
152
153 tps65910 = kzalloc(sizeof(struct tps65910), GFP_KERNEL); 150 tps65910 = kzalloc(sizeof(struct tps65910), GFP_KERNEL);
154 if (tps65910 == NULL) 151 if (tps65910 == NULL) {
152 kfree(init_data);
155 return -ENOMEM; 153 return -ENOMEM;
154 }
156 155
157 i2c_set_clientdata(i2c, tps65910); 156 i2c_set_clientdata(i2c, tps65910);
158 tps65910->dev = &i2c->dev; 157 tps65910->dev = &i2c->dev;
@@ -168,17 +167,22 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
168 if (ret < 0) 167 if (ret < 0)
169 goto err; 168 goto err;
170 169
170 init_data->irq = pmic_plat_data->irq;
171 init_data->irq_base = pmic_plat_data->irq;
172
171 tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base); 173 tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base);
172 174
173 ret = tps65910_irq_init(tps65910, init_data->irq, init_data); 175 ret = tps65910_irq_init(tps65910, init_data->irq, init_data);
174 if (ret < 0) 176 if (ret < 0)
175 goto err; 177 goto err;
176 178
179 kfree(init_data);
177 return ret; 180 return ret;
178 181
179err: 182err:
180 mfd_remove_devices(tps65910->dev); 183 mfd_remove_devices(tps65910->dev);
181 kfree(tps65910); 184 kfree(tps65910);
185 kfree(init_data);
182 return ret; 186 return ret;
183} 187}
184 188
@@ -187,6 +191,7 @@ static int tps65910_i2c_remove(struct i2c_client *i2c)
187 struct tps65910 *tps65910 = i2c_get_clientdata(i2c); 191 struct tps65910 *tps65910 = i2c_get_clientdata(i2c);
188 192
189 mfd_remove_devices(tps65910->dev); 193 mfd_remove_devices(tps65910->dev);
194 tps65910_irq_exit(tps65910);
190 kfree(tps65910); 195 kfree(tps65910);
191 196
192 return 0; 197 return 0;