Input: wm97xx - do not access dev->driver_data directly
[firefly-linux-kernel-4.4.55.git] / drivers / input / touchscreen / wm97xx-core.c
index d15aa11d705686adb89203e396577752d44c9cf3..2957d48e0045fa05d68bb38aafe6ec8c9d3462d8 100644 (file)
@@ -370,8 +370,7 @@ static int wm97xx_init_pen_irq(struct wm97xx *wm)
         * provided. */
        BUG_ON(!wm->mach_ops->irq_enable);
 
-       if (request_irq(wm->pen_irq, wm97xx_pen_interrupt,
-                       IRQF_SHARED | IRQF_SAMPLE_RANDOM,
+       if (request_irq(wm->pen_irq, wm97xx_pen_interrupt, IRQF_SHARED,
                        "wm97xx-pen", wm)) {
                dev_err(wm->dev,
                        "Failed to register pen down interrupt, polling");
@@ -409,6 +408,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
                        wm->pen_is_down = 0;
                        dev_dbg(wm->dev, "pen up\n");
                        input_report_abs(wm->input_dev, ABS_PRESSURE, 0);
+                       input_report_key(wm->input_dev, BTN_TOUCH, 0);
                        input_sync(wm->input_dev);
                } else if (!(rc & RC_AGAIN)) {
                        /* We need high frequency updates only while
@@ -433,6 +433,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
                input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
                input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff);
                input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff);
+               input_report_key(wm->input_dev, BTN_TOUCH, 1);
                input_sync(wm->input_dev);
                wm->pen_is_down = 1;
                wm->ts_reader_interval = wm->ts_reader_min_interval;
@@ -568,7 +569,7 @@ static int wm97xx_probe(struct device *dev)
        mutex_init(&wm->codec_mutex);
 
        wm->dev = dev;
-       dev->driver_data = wm;
+       dev_set_drvdata(dev, wm);
        wm->ac97 = to_ac97_t(dev);
 
        /* check that we have a supported codec */
@@ -628,18 +629,21 @@ static int wm97xx_probe(struct device *dev)
        wm->input_dev->phys = "wm97xx";
        wm->input_dev->open = wm97xx_ts_input_open;
        wm->input_dev->close = wm97xx_ts_input_close;
-       set_bit(EV_ABS, wm->input_dev->evbit);
-       set_bit(ABS_X, wm->input_dev->absbit);
-       set_bit(ABS_Y, wm->input_dev->absbit);
-       set_bit(ABS_PRESSURE, wm->input_dev->absbit);
+
+       __set_bit(EV_ABS, wm->input_dev->evbit);
+       __set_bit(EV_KEY, wm->input_dev->evbit);
+       __set_bit(BTN_TOUCH, wm->input_dev->keybit);
+
        input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1],
                             abs_x[2], 0);
        input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1],
                             abs_y[2], 0);
        input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1],
                             abs_p[2], 0);
+
        input_set_drvdata(wm->input_dev, wm);
        wm->input_dev->dev.parent = dev;
+
        ret = input_register_device(wm->input_dev);
        if (ret < 0)
                goto dev_alloc_err;