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

Input: ad7879 - return plain error code from ad7879_probe()

With the switch to devm, there is no need for ad7879_probe() to return the
touchscreen structure, we can use plain error code. This also fixes issue
introduced with devm concersion, where we returned 0 on success (which
worked OK since IS_ERR(0) would not trigger, but was not correct
regardless).

Fixes: 381f688eee3d ("Input: ad7879 - use more devm interfaces")
Acked-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+19 -30
+2 -7
drivers/input/touchscreen/ad7879-i2c.c
··· 27 27 static int ad7879_i2c_probe(struct i2c_client *client, 28 28 const struct i2c_device_id *id) 29 29 { 30 - struct ad7879 *ts; 31 30 struct regmap *regmap; 32 31 33 32 if (!i2c_check_functionality(client->adapter, ··· 39 40 if (IS_ERR(regmap)) 40 41 return PTR_ERR(regmap); 41 42 42 - ts = ad7879_probe(&client->dev, regmap, client->irq, 43 - BUS_I2C, AD7879_DEVID); 44 - if (IS_ERR(ts)) 45 - return PTR_ERR(ts); 46 - 47 - return 0; 43 + return ad7879_probe(&client->dev, regmap, client->irq, 44 + BUS_I2C, AD7879_DEVID); 48 45 } 49 46 50 47 static const struct i2c_device_id ad7879_id[] = {
+1 -6
drivers/input/touchscreen/ad7879-spi.c
··· 32 32 33 33 static int ad7879_spi_probe(struct spi_device *spi) 34 34 { 35 - struct ad7879 *ts; 36 35 struct regmap *regmap; 37 36 38 37 /* don't exceed max specified SPI CLK frequency */ ··· 44 45 if (IS_ERR(regmap)) 45 46 return PTR_ERR(regmap); 46 47 47 - ts = ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID); 48 - if (IS_ERR(ts)) 49 - return PTR_ERR(ts); 50 - 51 - return 0; 48 + return ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID); 52 49 } 53 50 54 51 #ifdef CONFIG_OF
+14 -14
drivers/input/touchscreen/ad7879.c
··· 531 531 sysfs_remove_group(&ts->dev->kobj, &ad7879_attr_group); 532 532 } 533 533 534 - struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap, 535 - int irq, u16 bustype, u8 devid) 534 + int ad7879_probe(struct device *dev, struct regmap *regmap, 535 + int irq, u16 bustype, u8 devid) 536 536 { 537 537 struct ad7879_platform_data *pdata = dev_get_platdata(dev); 538 538 struct ad7879 *ts; ··· 542 542 543 543 if (irq <= 0) { 544 544 dev_err(dev, "No IRQ specified\n"); 545 - return ERR_PTR(-EINVAL); 545 + return -EINVAL; 546 546 } 547 547 548 548 ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL); 549 549 if (!ts) 550 - return ERR_PTR(-ENOMEM); 550 + return -ENOMEM; 551 551 552 552 if (pdata) { 553 553 /* Platform data use swapped axis (backward compatibility) */ ··· 564 564 ad7879_parse_dt(dev, ts); 565 565 } else { 566 566 dev_err(dev, "No platform data\n"); 567 - return ERR_PTR(-EINVAL); 567 + return -EINVAL; 568 568 } 569 569 570 570 input_dev = devm_input_allocate_device(dev); 571 571 if (!input_dev) { 572 572 dev_err(dev, "Failed to allocate input device\n"); 573 - return ERR_PTR(-ENOMEM); 573 + return -ENOMEM; 574 574 } 575 575 576 576 ts->dev = dev; ··· 618 618 touchscreen_parse_properties(input_dev, false, NULL); 619 619 if (!input_abs_get_max(input_dev, ABS_PRESSURE)) { 620 620 dev_err(dev, "Touchscreen pressure is not specified\n"); 621 - return ERR_PTR(-EINVAL); 621 + return -EINVAL; 622 622 } 623 623 } 624 624 625 625 err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET); 626 626 if (err < 0) { 627 627 dev_err(dev, "Failed to write %s\n", input_dev->name); 628 - return ERR_PTR(err); 628 + return err; 629 629 } 630 630 631 631 revid = ad7879_read(ts, AD7879_REG_REVID); ··· 634 634 if (input_dev->id.product != devid) { 635 635 dev_err(dev, "Failed to probe %s (%x vs %x)\n", 636 636 input_dev->name, devid, revid); 637 - return ERR_PTR(-ENODEV); 637 + return -ENODEV; 638 638 } 639 639 640 640 ts->cmd_crtl3 = AD7879_YPLUS_BIT | ··· 659 659 dev_name(dev), ts); 660 660 if (err) { 661 661 dev_err(dev, "Failed to request IRQ: %d\n", err); 662 - return ERR_PTR(err); 662 + return err; 663 663 } 664 664 665 665 __ad7879_disable(ts); 666 666 667 667 err = sysfs_create_group(&dev->kobj, &ad7879_attr_group); 668 668 if (err) 669 - return ERR_PTR(err); 669 + return err; 670 670 671 671 err = devm_add_action_or_reset(dev, ad7879_cleanup_sysfs, ts); 672 672 if (err) 673 - return ERR_PTR(err); 673 + return err; 674 674 675 675 err = ad7879_gpio_add(ts, pdata); 676 676 if (err) 677 - return ERR_PTR(err); 677 + return err; 678 678 679 679 err = input_register_device(input_dev); 680 680 if (err) 681 - return ERR_PTR(err); 681 + return err; 682 682 683 683 dev_set_drvdata(dev, ts); 684 684
+2 -3
drivers/input/touchscreen/ad7879.h
··· 11 11 12 12 #include <linux/types.h> 13 13 14 - struct ad7879; 15 14 struct device; 16 15 struct regmap; 17 16 18 17 extern const struct dev_pm_ops ad7879_pm_ops; 19 18 20 - struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap, 21 - int irq, u16 bustype, u8 devid); 19 + int ad7879_probe(struct device *dev, struct regmap *regmap, 20 + int irq, u16 bustype, u8 devid); 22 21 23 22 #endif