Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: egalax_ts - move to devm_* functions

The usage of devm_* functions makes code cleaner and tidier.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Andy Shevchenko and committed by
Dmitry Torokhov
1ffb064e 0c6a6165

+14 -39
+14 -39
drivers/input/touchscreen/egalax_ts.c
··· 166 166 } 167 167 168 168 static int egalax_ts_probe(struct i2c_client *client, 169 - const struct i2c_device_id *id) 169 + const struct i2c_device_id *id) 170 170 { 171 171 struct egalax_ts *ts; 172 172 struct input_dev *input_dev; 173 - int ret; 174 173 int error; 175 174 176 - ts = kzalloc(sizeof(struct egalax_ts), GFP_KERNEL); 175 + ts = devm_kzalloc(&client->dev, sizeof(struct egalax_ts), GFP_KERNEL); 177 176 if (!ts) { 178 177 dev_err(&client->dev, "Failed to allocate memory\n"); 179 178 return -ENOMEM; 180 179 } 181 180 182 - input_dev = input_allocate_device(); 181 + input_dev = devm_input_allocate_device(&client->dev); 183 182 if (!input_dev) { 184 183 dev_err(&client->dev, "Failed to allocate memory\n"); 185 - error = -ENOMEM; 186 - goto err_free_ts; 184 + return -ENOMEM; 187 185 } 188 186 189 187 ts->client = client; ··· 191 193 error = egalax_wake_up_device(client); 192 194 if (error) { 193 195 dev_err(&client->dev, "Failed to wake up the controller\n"); 194 - goto err_free_dev; 196 + return error; 195 197 } 196 198 197 - ret = egalax_firmware_version(client); 198 - if (ret < 0) { 199 + error = egalax_firmware_version(client); 200 + if (error < 0) { 199 201 dev_err(&client->dev, "Failed to read firmware version\n"); 200 - error = -EIO; 201 - goto err_free_dev; 202 + return error; 202 203 } 203 204 204 205 input_dev->name = "EETI eGalax Touch Screen"; 205 206 input_dev->id.bustype = BUS_I2C; 206 - input_dev->dev.parent = &client->dev; 207 207 208 208 __set_bit(EV_ABS, input_dev->evbit); 209 209 __set_bit(EV_KEY, input_dev->evbit); ··· 217 221 218 222 input_set_drvdata(input_dev, ts); 219 223 220 - error = request_threaded_irq(client->irq, NULL, egalax_ts_interrupt, 221 - IRQF_TRIGGER_LOW | IRQF_ONESHOT, 222 - "egalax_ts", ts); 224 + error = devm_request_threaded_irq(&client->dev, client->irq, NULL, 225 + egalax_ts_interrupt, 226 + IRQF_TRIGGER_LOW | IRQF_ONESHOT, 227 + "egalax_ts", ts); 223 228 if (error < 0) { 224 229 dev_err(&client->dev, "Failed to register interrupt\n"); 225 - goto err_free_dev; 230 + return error; 226 231 } 227 232 228 233 error = input_register_device(ts->input_dev); 229 234 if (error) 230 - goto err_free_irq; 235 + return error; 231 236 232 237 i2c_set_clientdata(client, ts); 233 - return 0; 234 - 235 - err_free_irq: 236 - free_irq(client->irq, ts); 237 - err_free_dev: 238 - input_free_device(input_dev); 239 - err_free_ts: 240 - kfree(ts); 241 - 242 - return error; 243 - } 244 - 245 - static int egalax_ts_remove(struct i2c_client *client) 246 - { 247 - struct egalax_ts *ts = i2c_get_clientdata(client); 248 - 249 - free_irq(client->irq, ts); 250 - 251 - input_unregister_device(ts->input_dev); 252 - kfree(ts); 253 - 254 238 return 0; 255 239 } 256 240 ··· 277 301 }, 278 302 .id_table = egalax_ts_id, 279 303 .probe = egalax_ts_probe, 280 - .remove = egalax_ts_remove, 281 304 }; 282 305 283 306 module_i2c_driver(egalax_ts_driver);