]>
Commit | Line | Data |
---|---|---|
37bd4469 LL |
1 | /* |
2 | * TSC2005 touchscreen driver | |
3 | * | |
4 | * Copyright (C) 2006-2010 Nokia Corporation | |
6ac24381 MW |
5 | * Copyright (C) 2015 QWERTY Embedded Design |
6 | * Copyright (C) 2015 EMAC Inc. | |
37bd4469 | 7 | * |
6ac24381 | 8 | * Based on original tsc2005.c by Lauri Leukkunen <lauri.leukkunen@nokia.com> |
37bd4469 LL |
9 | * |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License as published by | |
12 | * the Free Software Foundation; either version 2 of the License, or | |
13 | * (at your option) any later version. | |
14 | * | |
15 | * This program is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | * GNU General Public License for more details. | |
37bd4469 LL |
19 | */ |
20 | ||
37bd4469 LL |
21 | #include <linux/module.h> |
22 | #include <linux/input.h> | |
37bd4469 | 23 | #include <linux/spi/spi.h> |
273cf48a | 24 | #include <linux/regmap.h> |
6ac24381 | 25 | #include "tsc200x-core.h" |
37bd4469 | 26 | |
6ac24381 | 27 | static int tsc2005_cmd(struct device *dev, u8 cmd) |
37bd4469 | 28 | { |
ef3b98c2 | 29 | u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd; |
9a6e180a | 30 | struct spi_transfer xfer = { |
6ac24381 MW |
31 | .tx_buf = &tx, |
32 | .len = 1, | |
33 | .bits_per_word = 8, | |
9a6e180a | 34 | }; |
37bd4469 | 35 | struct spi_message msg; |
6ac24381 | 36 | struct spi_device *spi = to_spi_device(dev); |
71f80045 | 37 | int error; |
37bd4469 LL |
38 | |
39 | spi_message_init(&msg); | |
40 | spi_message_add_tail(&xfer, &msg); | |
71f80045 | 41 | |
6ac24381 | 42 | error = spi_sync(spi, &msg); |
71f80045 | 43 | if (error) { |
6ac24381 | 44 | dev_err(dev, "%s: failed, command: %x, spi error: %d\n", |
71f80045 DT |
45 | __func__, cmd, error); |
46 | return error; | |
47 | } | |
48 | ||
49 | return 0; | |
37bd4469 LL |
50 | } |
51 | ||
5298cc4c | 52 | static int tsc2005_probe(struct spi_device *spi) |
37bd4469 | 53 | { |
99bb892d | 54 | int error; |
37bd4469 | 55 | |
99bb892d DT |
56 | spi->mode = SPI_MODE_0; |
57 | spi->bits_per_word = 8; | |
58 | if (!spi->max_speed_hz) | |
59 | spi->max_speed_hz = TSC2005_SPI_MAX_SPEED_HZ; | |
37bd4469 | 60 | |
99bb892d DT |
61 | error = spi_setup(spi); |
62 | if (error) | |
63 | return error; | |
37bd4469 | 64 | |
6ac24381 MW |
65 | return tsc200x_probe(&spi->dev, spi->irq, BUS_SPI, |
66 | devm_regmap_init_spi(spi, &tsc200x_regmap_config), | |
67 | tsc2005_cmd); | |
37bd4469 LL |
68 | } |
69 | ||
e2619cf7 | 70 | static int tsc2005_remove(struct spi_device *spi) |
37bd4469 | 71 | { |
6ac24381 | 72 | return tsc200x_remove(&spi->dev); |
37bd4469 | 73 | } |
37bd4469 LL |
74 | |
75 | static struct spi_driver tsc2005_driver = { | |
3ff8ff53 DT |
76 | .driver = { |
77 | .name = "tsc2005", | |
6ac24381 | 78 | .pm = &tsc200x_pm_ops, |
37bd4469 | 79 | }, |
3ff8ff53 | 80 | .probe = tsc2005_probe, |
1cb0aa88 | 81 | .remove = tsc2005_remove, |
37bd4469 | 82 | }; |
ca83922e | 83 | module_spi_driver(tsc2005_driver); |
37bd4469 | 84 | |
6ac24381 | 85 | MODULE_AUTHOR("Michael Welling <mwelling@ieee.org>"); |
b88aa494 | 86 | MODULE_DESCRIPTION("TSC2005 Touchscreen Driver"); |
37bd4469 | 87 | MODULE_LICENSE("GPL"); |
938789fe | 88 | MODULE_ALIAS("spi:tsc2005"); |