Commit 27aced19 authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Dmitry Torokhov
Browse files
parent 3bdd21c6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ properties:
    const: 0x2a
  interrupts:
    maxItems: 1
  reset-gpios:
    maxItems: 1
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-inverted-x: true
+17 −0
Original line number Diff line number Diff line
@@ -8,7 +8,9 @@
 */

#include <linux/bitops.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/input/mt.h>
@@ -30,6 +32,9 @@

#define EXC3000_TIMEOUT_MS		100

#define EXC3000_RESET_MS		10
#define EXC3000_READY_MS		100

static const struct i2c_device_id exc3000_id[];

struct eeti_dev_info {
@@ -63,6 +68,7 @@ struct exc3000_data {
	const struct eeti_dev_info *info;
	struct input_dev *input;
	struct touchscreen_properties prop;
	struct gpio_desc *reset;
	struct timer_list timer;
	u8 buf[2 * EXC3000_LEN_FRAME];
};
@@ -204,6 +210,17 @@ static int exc3000_probe(struct i2c_client *client)
	}
	timer_setup(&data->timer, exc3000_timer, 0);

	data->reset = devm_gpiod_get_optional(&client->dev, "reset",
					      GPIOD_OUT_HIGH);
	if (IS_ERR(data->reset))
		return PTR_ERR(data->reset);

	if (data->reset) {
		msleep(EXC3000_RESET_MS);
		gpiod_set_value_cansleep(data->reset, 0);
		msleep(EXC3000_READY_MS);
	}

	input = devm_input_allocate_device(&client->dev);
	if (!input)
		return -ENOMEM;