mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 01:41:39 +00:00
![Uwe Kleine-König](/assets/img/avatar_default.png)
The value returned by an spi driver's remove function is mostly ignored. (Only an error message is printed if the value is non-zero that the error is ignored.) So change the prototype of the remove function to return no value. This way driver authors are not tempted to assume that passing an error to the upper layer is a good idea. All drivers are adapted accordingly. There is no intended change of behaviour, all callbacks were prepared to return 0 before. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Acked-by: Miquel Raynal <miquel.raynal@bootlin.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Claudius Heine <ch@denx.de> Acked-by: Stefan Schmidt <stefan@datenfreihafen.org> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # For MMC Acked-by: Marcus Folkesson <marcus.folkesson@gmail.com> Acked-by: Łukasz Stelmach <l.stelmach@samsung.com> Acked-by: Lee Jones <lee.jones@linaro.org> Link: https://lore.kernel.org/r/20220123175201.34839-6-u.kleine-koenig@pengutronix.de Signed-off-by: Mark Brown <broonie@kernel.org>
94 lines
2.1 KiB
C
94 lines
2.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* TSC2005 touchscreen driver
|
|
*
|
|
* Copyright (C) 2006-2010 Nokia Corporation
|
|
* Copyright (C) 2015 QWERTY Embedded Design
|
|
* Copyright (C) 2015 EMAC Inc.
|
|
*
|
|
* Based on original tsc2005.c by Lauri Leukkunen <lauri.leukkunen@nokia.com>
|
|
*/
|
|
|
|
#include <linux/input.h>
|
|
#include <linux/module.h>
|
|
#include <linux/of.h>
|
|
#include <linux/spi/spi.h>
|
|
#include <linux/regmap.h>
|
|
#include "tsc200x-core.h"
|
|
|
|
static const struct input_id tsc2005_input_id = {
|
|
.bustype = BUS_SPI,
|
|
.product = 2005,
|
|
};
|
|
|
|
static int tsc2005_cmd(struct device *dev, u8 cmd)
|
|
{
|
|
u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd;
|
|
struct spi_transfer xfer = {
|
|
.tx_buf = &tx,
|
|
.len = 1,
|
|
.bits_per_word = 8,
|
|
};
|
|
struct spi_message msg;
|
|
struct spi_device *spi = to_spi_device(dev);
|
|
int error;
|
|
|
|
spi_message_init(&msg);
|
|
spi_message_add_tail(&xfer, &msg);
|
|
|
|
error = spi_sync(spi, &msg);
|
|
if (error) {
|
|
dev_err(dev, "%s: failed, command: %x, spi error: %d\n",
|
|
__func__, cmd, error);
|
|
return error;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int tsc2005_probe(struct spi_device *spi)
|
|
{
|
|
int error;
|
|
|
|
spi->mode = SPI_MODE_0;
|
|
spi->bits_per_word = 8;
|
|
if (!spi->max_speed_hz)
|
|
spi->max_speed_hz = TSC2005_SPI_MAX_SPEED_HZ;
|
|
|
|
error = spi_setup(spi);
|
|
if (error)
|
|
return error;
|
|
|
|
return tsc200x_probe(&spi->dev, spi->irq, &tsc2005_input_id,
|
|
devm_regmap_init_spi(spi, &tsc200x_regmap_config),
|
|
tsc2005_cmd);
|
|
}
|
|
|
|
static void tsc2005_remove(struct spi_device *spi)
|
|
{
|
|
tsc200x_remove(&spi->dev);
|
|
}
|
|
|
|
#ifdef CONFIG_OF
|
|
static const struct of_device_id tsc2005_of_match[] = {
|
|
{ .compatible = "ti,tsc2005" },
|
|
{ /* sentinel */ }
|
|
};
|
|
MODULE_DEVICE_TABLE(of, tsc2005_of_match);
|
|
#endif
|
|
|
|
static struct spi_driver tsc2005_driver = {
|
|
.driver = {
|
|
.name = "tsc2005",
|
|
.of_match_table = of_match_ptr(tsc2005_of_match),
|
|
.pm = &tsc200x_pm_ops,
|
|
},
|
|
.probe = tsc2005_probe,
|
|
.remove = tsc2005_remove,
|
|
};
|
|
module_spi_driver(tsc2005_driver);
|
|
|
|
MODULE_AUTHOR("Michael Welling <mwelling@ieee.org>");
|
|
MODULE_DESCRIPTION("TSC2005 Touchscreen Driver");
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_ALIAS("spi:tsc2005");
|