Input: auo-pixcir-ts - handle reset gpio directly
authorHeiko Stübner <heiko@sntech.de>
Sat, 23 Feb 2013 20:06:44 +0000 (12:06 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 25 Feb 2013 03:10:10 +0000 (19:10 -0800)
Devicetree based platforms don't handle device callbacks very well
and until now no board has come along that needs more extended hwinit
than pulling the rst gpio high.

Therefore pull the reset handling directly into the driver and remove
the callbacks from the driver.

If extended device setup is needed at some later point, power-sequences
would probably be the solution of choice.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/auo-pixcir-ts.c
include/linux/input/auo-pixcir-ts.h

index 813413eebab7a456d5154e69c1d5d2e193df2da6..6317a9c7884c3eea510286ea029fa1d8ed410004 100644 (file)
@@ -511,8 +511,21 @@ static int auo_pixcir_probe(struct i2c_client *client,
                goto err_gpio_dir;
        }
 
-       if (pdata->init_hw)
-               pdata->init_hw(client);
+       ret = gpio_request(pdata->gpio_rst, "auo_pixcir_ts_rst");
+       if (ret) {
+               dev_err(&client->dev, "request of gpio %d failed, %d\n",
+                       pdata->gpio_rst, ret);
+               goto err_gpio_dir;
+       }
+
+       ret = gpio_direction_output(pdata->gpio_rst, 1);
+       if (ret) {
+               dev_err(&client->dev, "setting direction of gpio %d failed %d\n",
+                       pdata->gpio_rst, ret);
+               goto err_gpio_rst;
+       }
+
+       msleep(200);
 
        ts->client = client;
        ts->touch_ind_mode = 0;
@@ -597,8 +610,9 @@ err_input_register:
 err_fw_vers:
        input_free_device(input_dev);
 err_input_alloc:
-       if (pdata->exit_hw)
-               pdata->exit_hw(client);
+       gpio_set_value(pdata->gpio_rst, 0);
+err_gpio_rst:
+       gpio_free(pdata->gpio_rst);
 err_gpio_dir:
        gpio_free(pdata->gpio_int);
 err_gpio_int:
@@ -616,8 +630,8 @@ static int auo_pixcir_remove(struct i2c_client *client)
 
        input_unregister_device(ts->input);
 
-       if (pdata->exit_hw)
-               pdata->exit_hw(client);
+       gpio_set_value(pdata->gpio_rst, 0);
+       gpio_free(pdata->gpio_rst);
 
        gpio_free(pdata->gpio_int);
 
index 75d4be717714c90cec93223606e8db8ab0e79a08..5049f21928e482e3c64df8300f13cec196f5e26a 100644 (file)
  */
 struct auo_pixcir_ts_platdata {
        int gpio_int;
+       int gpio_rst;
 
        int int_setting;
 
-       void (*init_hw)(struct i2c_client *);
-       void (*exit_hw)(struct i2c_client *);
-
        unsigned int x_max;
        unsigned int y_max;
 };