Merge branch 'next' into for-linus
Prepare input updates for 5.2 merge window.
This commit is contained in:
@@ -1312,4 +1312,14 @@ config TOUCHSCREEN_ROHM_BU21023
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called bu21023_ts.
|
||||
|
||||
config TOUCHSCREEN_IQS5XX
|
||||
tristate "Azoteq IQS550/572/525 trackpad/touchscreen controller"
|
||||
depends on I2C
|
||||
help
|
||||
Say Y to enable support for the Azoteq IQS550/572/525
|
||||
family of trackpad/touchscreen controllers.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called iqs5xx.
|
||||
|
||||
endif
|
||||
|
@@ -110,3 +110,4 @@ obj-$(CONFIG_TOUCHSCREEN_ZFORCE) += zforce_ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_COLIBRI_VF50) += colibri-vf50-ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_ROHM_BU21023) += rohm_bu21023.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_RASPBERRYPI_FW) += raspberrypi-ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_IQS5XX) += iqs5xx.o
|
||||
|
@@ -1,20 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
|
||||
* Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
|
||||
* Lothar Waßmann <LW@KARO-electronics.de> (DT support)
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -39,7 +27,6 @@
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/input/mt.h>
|
||||
#include <linux/input/touchscreen.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#define WORK_REGISTER_THRESHOLD 0x00
|
||||
#define WORK_REGISTER_REPORT_RATE 0x08
|
||||
@@ -1073,7 +1060,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
chip_data = of_device_get_match_data(&client->dev);
|
||||
chip_data = device_get_match_data(&client->dev);
|
||||
if (!chip_data)
|
||||
chip_data = (const struct edt_i2c_chip_data *)id->driver_data;
|
||||
if (!chip_data || !chip_data->max_support_points) {
|
||||
@@ -1254,7 +1241,6 @@ static const struct i2c_device_id edt_ft5x06_ts_id[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id edt_ft5x06_of_match[] = {
|
||||
{ .compatible = "edt,edt-ft5206", .data = &edt_ft5x06_data },
|
||||
{ .compatible = "edt,edt-ft5306", .data = &edt_ft5x06_data },
|
||||
@@ -1266,12 +1252,11 @@ static const struct of_device_id edt_ft5x06_of_match[] = {
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
|
||||
#endif
|
||||
|
||||
static struct i2c_driver edt_ft5x06_ts_driver = {
|
||||
.driver = {
|
||||
.name = "edt_ft5x06",
|
||||
.of_match_table = of_match_ptr(edt_ft5x06_of_match),
|
||||
.of_match_table = edt_ft5x06_of_match,
|
||||
.pm = &edt_ft5x06_ts_pm_ops,
|
||||
},
|
||||
.id_table = edt_ft5x06_ts_id,
|
||||
@@ -1283,4 +1268,4 @@ module_i2c_driver(edt_ft5x06_ts_driver);
|
||||
|
||||
MODULE_AUTHOR("Simon Budig <simon.budig@kernelconcepts.de>");
|
||||
MODULE_DESCRIPTION("EDT FT5x06 I2C Touchscreen Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/of.h>
|
||||
@@ -47,6 +48,8 @@ struct goodix_ts_data {
|
||||
struct touchscreen_properties prop;
|
||||
unsigned int max_touch_num;
|
||||
unsigned int int_trigger_type;
|
||||
struct regulator *avdd28;
|
||||
struct regulator *vddio;
|
||||
struct gpio_desc *gpiod_int;
|
||||
struct gpio_desc *gpiod_rst;
|
||||
u16 id;
|
||||
@@ -216,6 +219,7 @@ static const struct goodix_chip_data *goodix_get_chip_data(u16 id)
|
||||
{
|
||||
switch (id) {
|
||||
case 1151:
|
||||
case 5663:
|
||||
case 5688:
|
||||
return >1x_chip_data;
|
||||
|
||||
@@ -532,6 +536,24 @@ static int goodix_get_gpio_config(struct goodix_ts_data *ts)
|
||||
return -EINVAL;
|
||||
dev = &ts->client->dev;
|
||||
|
||||
ts->avdd28 = devm_regulator_get(dev, "AVDD28");
|
||||
if (IS_ERR(ts->avdd28)) {
|
||||
error = PTR_ERR(ts->avdd28);
|
||||
if (error != -EPROBE_DEFER)
|
||||
dev_err(dev,
|
||||
"Failed to get AVDD28 regulator: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
ts->vddio = devm_regulator_get(dev, "VDDIO");
|
||||
if (IS_ERR(ts->vddio)) {
|
||||
error = PTR_ERR(ts->vddio);
|
||||
if (error != -EPROBE_DEFER)
|
||||
dev_err(dev,
|
||||
"Failed to get VDDIO regulator: %d\n", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Get the interrupt GPIO pin number */
|
||||
gpiod = devm_gpiod_get_optional(dev, GOODIX_GPIO_INT_NAME, GPIOD_IN);
|
||||
if (IS_ERR(gpiod)) {
|
||||
@@ -764,6 +786,14 @@ err_release_cfg:
|
||||
complete_all(&ts->firmware_loading_complete);
|
||||
}
|
||||
|
||||
static void goodix_disable_regulators(void *arg)
|
||||
{
|
||||
struct goodix_ts_data *ts = arg;
|
||||
|
||||
regulator_disable(ts->vddio);
|
||||
regulator_disable(ts->avdd28);
|
||||
}
|
||||
|
||||
static int goodix_ts_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
@@ -789,6 +819,29 @@ static int goodix_ts_probe(struct i2c_client *client,
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* power up the controller */
|
||||
error = regulator_enable(ts->avdd28);
|
||||
if (error) {
|
||||
dev_err(&client->dev,
|
||||
"Failed to enable AVDD28 regulator: %d\n",
|
||||
error);
|
||||
return error;
|
||||
}
|
||||
|
||||
error = regulator_enable(ts->vddio);
|
||||
if (error) {
|
||||
dev_err(&client->dev,
|
||||
"Failed to enable VDDIO regulator: %d\n",
|
||||
error);
|
||||
regulator_disable(ts->avdd28);
|
||||
return error;
|
||||
}
|
||||
|
||||
error = devm_add_action_or_reset(&client->dev,
|
||||
goodix_disable_regulators, ts);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (ts->gpiod_int && ts->gpiod_rst) {
|
||||
/* reset the controller */
|
||||
error = goodix_reset(ts);
|
||||
@@ -945,6 +998,7 @@ MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id goodix_of_match[] = {
|
||||
{ .compatible = "goodix,gt1151" },
|
||||
{ .compatible = "goodix,gt5663" },
|
||||
{ .compatible = "goodix,gt5688" },
|
||||
{ .compatible = "goodix,gt911" },
|
||||
{ .compatible = "goodix,gt9110" },
|
||||
|
1133
drivers/input/touchscreen/iqs5xx.c
Normal file
1133
drivers/input/touchscreen/iqs5xx.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user