mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 16:44:10 +08:00
c942fddf87
Based on 3 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version [author] [kishon] [vijay] [abraham] [i] [kishon]@[ti] [com] this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version [author] [graeme] [gregory] [gg]@[slimlogic] [co] [uk] [author] [kishon] [vijay] [abraham] [i] [kishon]@[ti] [com] [based] [on] [twl6030]_[usb] [c] [author] [hema] [hk] [hemahk]@[ti] [com] this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 1105 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070033.202006027@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
95 lines
2.1 KiB
C
95 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 int tsc2005_remove(struct spi_device *spi)
|
|
{
|
|
return 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");
|