#include <linux/delay.h>
 #include <linux/pm.h>
 #include <linux/of.h>
-#include <linux/spi/tsc2005.h>
 #include <linux/regulator/consumer.h>
 #include <linux/regmap.h>
 #include <linux/gpio/consumer.h>
        struct regulator        *vio;
 
        struct gpio_desc        *reset_gpio;
-       void                    (*set_reset)(bool enable);
        int                     (*tsc200x_cmd)(struct device *dev, u8 cmd);
        int                     irq;
 };
        ts->tsc200x_cmd(ts->dev, TSC200X_CMD_STOP);
 }
 
-static void tsc200x_set_reset(struct tsc200x *ts, bool enable)
+static void tsc200x_reset(struct tsc200x *ts)
 {
-       if (ts->reset_gpio)
-               gpiod_set_value_cansleep(ts->reset_gpio, enable);
-       else if (ts->set_reset)
-               ts->set_reset(enable);
+       if (ts->reset_gpio) {
+               gpiod_set_value_cansleep(ts->reset_gpio, 1);
+               usleep_range(100, 500); /* only 10us required */
+               gpiod_set_value_cansleep(ts->reset_gpio, 0);
+       }
 }
 
 /* must be called with ts->mutex held */
 {
        tsc200x_start_scan(ts);
 
-       if (ts->esd_timeout && (ts->set_reset || ts->reset_gpio)) {
+       if (ts->esd_timeout && ts->reset_gpio) {
                ts->last_valid_interrupt = jiffies;
                schedule_delayed_work(&ts->esd_work,
                                round_jiffies_relative(
        }
 
        /* hardware reset */
-       tsc200x_set_reset(ts, false);
-       usleep_range(100, 500); /* only 10us required */
-       tsc200x_set_reset(ts, true);
+       tsc200x_reset(ts);
 
        if (!success)
                goto out;
        umode_t mode = attr->mode;
 
        if (attr == &dev_attr_selftest.attr) {
-               if (!ts->set_reset && !ts->reset_gpio)
+               if (!ts->reset_gpio)
                        mode = 0;
        }
 
 
        tsc200x_update_pen_state(ts, 0, 0, 0);
 
-       tsc200x_set_reset(ts, false);
-       usleep_range(100, 500); /* only 10us required */
-       tsc200x_set_reset(ts, true);
+       tsc200x_reset(ts);
 
        enable_irq(ts->irq);
        tsc200x_start_scan(ts);
                  struct regmap *regmap,
                  int (*tsc200x_cmd)(struct device *dev, u8 cmd))
 {
-       const struct tsc2005_platform_data *pdata = dev_get_platdata(dev);
-       struct device_node *np = dev->of_node;
-
        struct tsc200x *ts;
        struct input_dev *input_dev;
-       unsigned int max_x = MAX_12BIT;
-       unsigned int max_y = MAX_12BIT;
-       unsigned int max_p = MAX_12BIT;
-       unsigned int fudge_x = TSC200X_DEF_X_FUZZ;
-       unsigned int fudge_y = TSC200X_DEF_Y_FUZZ;
-       unsigned int fudge_p = TSC200X_DEF_P_FUZZ;
-       unsigned int x_plate_ohm = TSC200X_DEF_RESISTOR;
-       unsigned int esd_timeout;
+       u32 x_plate_ohm;
+       u32 esd_timeout;
        int error;
 
-       if (!np && !pdata) {
-               dev_err(dev, "no platform data\n");
-               return -ENODEV;
-       }
-
        if (irq <= 0) {
                dev_err(dev, "no irq\n");
                return -ENODEV;
                return -ENODEV;
        }
 
-       if (pdata) {
-               fudge_x = pdata->ts_x_fudge;
-               fudge_y = pdata->ts_y_fudge;
-               fudge_p = pdata->ts_pressure_fudge;
-               max_x   = pdata->ts_x_max;
-               max_y   = pdata->ts_y_max;
-               max_p   = pdata->ts_pressure_max;
-               x_plate_ohm = pdata->ts_x_plate_ohm;
-               esd_timeout = pdata->esd_timeout_ms;
-       } else {
-               x_plate_ohm = TSC200X_DEF_RESISTOR;
-               of_property_read_u32(np, "ti,x-plate-ohms", &x_plate_ohm);
-               esd_timeout = 0;
-               of_property_read_u32(np, "ti,esd-recovery-timeout-ms",
-                                                               &esd_timeout);
-       }
-
        ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
        if (!ts)
                return -ENOMEM;
        ts->idev = input_dev;
        ts->regmap = regmap;
        ts->tsc200x_cmd = tsc200x_cmd;
-       ts->x_plate_ohm = x_plate_ohm;
-       ts->esd_timeout = esd_timeout;
+
+       error = device_property_read_u32(dev, "ti,x-plate-ohms", &x_plate_ohm);
+       ts->x_plate_ohm = error ? TSC200X_DEF_RESISTOR : x_plate_ohm;
+
+       error = device_property_read_u32(dev, "ti,esd-recovery-timeout-ms",
+                                        &esd_timeout);
+       ts->esd_timeout = error ? 0 : esd_timeout;
 
        ts->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
        if (IS_ERR(ts->reset_gpio)) {
                return error;
        }
 
-       if (!ts->reset_gpio && pdata)
-               ts->set_reset = pdata->set_reset;
-
        mutex_init(&ts->mutex);
 
        spin_lock_init(&ts->lock);
 
        input_dev->phys = ts->phys;
        input_dev->id = *tsc_id;
-       input_dev->dev.parent = dev;
-       input_dev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY);
-       input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
-
-       input_set_abs_params(input_dev, ABS_X, 0, max_x, fudge_x, 0);
-       input_set_abs_params(input_dev, ABS_Y, 0, max_y, fudge_y, 0);
-       input_set_abs_params(input_dev, ABS_PRESSURE, 0, max_p, fudge_p, 0);
-
-       if (np)
-               touchscreen_parse_properties(input_dev, false, NULL);
 
        input_dev->open = tsc200x_open;
        input_dev->close = tsc200x_close;
 
        input_set_drvdata(input_dev, ts);
 
+       input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
+
+       input_set_abs_params(input_dev, ABS_X,
+                            0, MAX_12BIT, TSC200X_DEF_X_FUZZ, 0);
+       input_set_abs_params(input_dev, ABS_Y,
+                            0, MAX_12BIT, TSC200X_DEF_Y_FUZZ, 0);
+       input_set_abs_params(input_dev, ABS_PRESSURE,
+                            0, MAX_12BIT, TSC200X_DEF_P_FUZZ, 0);
+
+       touchscreen_parse_properties(input_dev, false, NULL);
+
        /* Ensure the touchscreen is off */
        tsc200x_stop_scan(ts);