From: Jeff Garzik Signed-off-by: Jeff Garzik Cc: Dmitry Torokhov Signed-off-by: Andrew Morton --- drivers/input/mouse/logips2pp.c | 5 +- drivers/input/touchscreen/ads7846.c | 45 +++++++++++++++++--------- 2 files changed, 33 insertions(+), 17 deletions(-) diff -puN drivers/input/mouse/logips2pp.c~input-drivers-handle-sysfs-errors drivers/input/mouse/logips2pp.c --- a/drivers/input/mouse/logips2pp.c~input-drivers-handle-sysfs-errors +++ a/drivers/input/mouse/logips2pp.c @@ -393,8 +393,9 @@ int ps2pp_init(struct psmouse *psmouse, psmouse->set_resolution = ps2pp_set_resolution; psmouse->disconnect = ps2pp_disconnect; - device_create_file(&psmouse->ps2dev.serio->dev, - &psmouse_attr_smartscroll.dattr); + if (device_create_file(&psmouse->ps2dev.serio->dev, + &psmouse_attr_smartscroll.dattr)) + return -1; } } diff -puN drivers/input/touchscreen/ads7846.c~input-drivers-handle-sysfs-errors drivers/input/touchscreen/ads7846.c --- a/drivers/input/touchscreen/ads7846.c~input-drivers-handle-sysfs-errors +++ a/drivers/input/touchscreen/ads7846.c @@ -792,34 +792,49 @@ static int __devinit ads7846_probe(struc * use the other sensors a bit differently too */ if (ts->model == 7846) { - device_create_file(&spi->dev, &dev_attr_temp0); - device_create_file(&spi->dev, &dev_attr_temp1); + err = device_create_file(&spi->dev, &dev_attr_temp0); + if (err) + goto err_irq; + err = device_create_file(&spi->dev, &dev_attr_temp1); + if (err) + goto err_temp0; } - if (ts->model != 7845) - device_create_file(&spi->dev, &dev_attr_vbatt); - device_create_file(&spi->dev, &dev_attr_vaux); + if (ts->model != 7845) { + err = device_create_file(&spi->dev, &dev_attr_vbatt); + if (err) + goto err_temp1; + } + err = device_create_file(&spi->dev, &dev_attr_vaux); + if (err) goto err_vbatt; - device_create_file(&spi->dev, &dev_attr_pen_down); + err = device_create_file(&spi->dev, &dev_attr_pen_down); + if (err) goto err_vaux; - device_create_file(&spi->dev, &dev_attr_disable); + err = device_create_file(&spi->dev, &dev_attr_disable); + if (err) goto err_pen; err = input_register_device(input_dev); if (err) - goto err_remove_attr; + goto err_disable; return 0; - err_remove_attr: + err_disable: device_remove_file(&spi->dev, &dev_attr_disable); + err_pen: device_remove_file(&spi->dev, &dev_attr_pen_down); - if (ts->model == 7846) { - device_remove_file(&spi->dev, &dev_attr_temp1); - device_remove_file(&spi->dev, &dev_attr_temp0); - } + err_vaux: + device_remove_file(&spi->dev, &dev_attr_vaux); + err_vbatt: if (ts->model != 7845) device_remove_file(&spi->dev, &dev_attr_vbatt); - device_remove_file(&spi->dev, &dev_attr_vaux); - + err_temp1: + if (ts->model == 7846) + device_remove_file(&spi->dev, &dev_attr_temp1); + err_temp0: + if (ts->model == 7846) + device_remove_file(&spi->dev, &dev_attr_temp0); + err_irq: free_irq(spi->irq, ts); err_free_mem: input_free_device(input_dev); _