From patchwork Wed Jan 12 06:35:26 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naveen Kumar GADDIPATI X-Patchwork-Id: 473111 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p0C8XI2T022364 for ; Wed, 12 Jan 2011 08:33:40 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752122Ab1ALGgS (ORCPT ); Wed, 12 Jan 2011 01:36:18 -0500 Received: from eu1sys200aog111.obsmtp.com ([207.126.144.131]:51845 "EHLO eu1sys200aog111.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752112Ab1ALGgR (ORCPT ); Wed, 12 Jan 2011 01:36:17 -0500 Received: from source ([138.198.100.35]) (using TLSv1) by eu1sys200aob111.postini.com ([207.126.147.11]) with SMTP ID DSNKTS1L1AKxZGUKbnk8YQEuhBrHnV4n5Hrb@postini.com; Wed, 12 Jan 2011 06:36:16 UTC Received: from zeta.dmz-ap.st.com (ns6.st.com [138.198.234.13]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 51639E9; Wed, 12 Jan 2011 06:35:33 +0000 (GMT) Received: from relay2.stm.gmessaging.net (unknown [10.230.100.18]) by zeta.dmz-ap.st.com (STMicroelectronics) with ESMTP id A475C762; Wed, 12 Jan 2011 06:35:32 +0000 (GMT) Received: from exdcvycastm022.EQ1STM.local (alteon-source-exch [10.230.100.61]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (Client CN "exdcvycastm022", Issuer "exdcvycastm022" (not verified)) by relay2.stm.gmessaging.net (Postfix) with ESMTPS id 3D74DA8065; Wed, 12 Jan 2011 07:35:29 +0100 (CET) Received: from localhost (10.201.50.252) by exdcvycastm022.EQ1STM.local (10.230.100.30) with Microsoft SMTP Server (TLS) id 8.2.254.0; Wed, 12 Jan 2011 07:35:31 +0100 From: Naveen Kumar G To: Dmitry Torokhov Cc: , , , , Naveen Kumar Gaddipati Subject: [PATCH 1/2] input:Regulator support in ROHM BU21013 touch panel Date: Wed, 12 Jan 2011 12:05:26 +0530 Message-ID: <1294814126-13632-1-git-send-email-naveen.gaddipati@stericsson.com> X-Mailer: git-send-email 1.7.2.dirty MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 12 Jan 2011 08:33:40 +0000 (UTC) diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c index f7fa9ef..531e982 100644 --- a/drivers/input/touchscreen/bu21013_ts.c +++ b/drivers/input/touchscreen/bu21013_ts.c @@ -12,6 +12,7 @@ #include #include #include +#include #define PEN_DOWN_INTR 0 #define MAX_FINGERS 2 @@ -139,6 +140,7 @@ * @chip: pointer to the touch panel controller * @in_dev: pointer to the input device structure * @intr_pin: interrupt pin value + * @regulator: pointer to the Regulator used for touch screen * * Touch panel device data structure */ @@ -149,6 +151,7 @@ struct bu21013_ts_data { const struct bu21013_platform_device *chip; struct input_dev *in_dev; unsigned int intr_pin; + struct regulator *regulator; }; /** @@ -456,6 +459,16 @@ static int __devinit bu21013_probe(struct i2c_client *client, bu21013_data->in_dev = in_dev; bu21013_data->chip = pdata; bu21013_data->client = client; + dev_set_name(&client->dev, pdata->name); + + bu21013_data->regulator = regulator_get(&client->dev, "V-TOUCH"); + if (IS_ERR(bu21013_data->regulator)) { + dev_warn(&client->dev, "regulator_get failed\n"); + bu21013_data->regulator = NULL; + } + if (bu21013_data->regulator) + regulator_enable(bu21013_data->regulator); + bu21013_data->touch_stopped = false; init_waitqueue_head(&bu21013_data->wait); @@ -514,6 +527,10 @@ err_free_irq: err_cs_disable: pdata->cs_dis(pdata->cs_pin); err_free_mem: + if (bu21013_data->regulator) { + regulator_disable(bu21013_data->regulator); + regulator_put(bu21013_data->regulator); + } input_free_device(in_dev); kfree(bu21013_data); @@ -535,6 +552,10 @@ static int __devexit bu21013_remove(struct i2c_client *client) bu21013_data->chip->cs_dis(bu21013_data->chip->cs_pin); input_unregister_device(bu21013_data->in_dev); + if (bu21013_data->regulator) { + regulator_disable(bu21013_data->regulator); + regulator_put(bu21013_data->regulator); + } kfree(bu21013_data); device_init_wakeup(&client->dev, false); @@ -561,6 +582,9 @@ static int bu21013_suspend(struct device *dev) else disable_irq(bu21013_data->chip->irq); + if (bu21013_data->regulator) + regulator_disable(bu21013_data->regulator); + return 0; } @@ -577,6 +601,9 @@ static int bu21013_resume(struct device *dev) struct i2c_client *client = bu21013_data->client; int retval; + if (bu21013_data->regulator) + regulator_enable(bu21013_data->regulator); + retval = bu21013_init_chip(bu21013_data); if (retval < 0) { dev_err(&client->dev, "bu21013 controller config failed\n"); diff --git a/include/linux/input/bu21013.h b/include/linux/input/bu21013.h index e470d38..ac9ed7b 100644 --- a/include/linux/input/bu21013.h +++ b/include/linux/input/bu21013.h @@ -9,6 +9,7 @@ /** * struct bu21013_platform_device - Handle the platform data + * @name: name of the touch panel device * @cs_en: pointer to the cs enable function * @cs_dis: pointer to the cs disable function * @irq_read_val: pointer to read the pen irq value function @@ -26,6 +27,7 @@ * This is used to handle the platform data */ struct bu21013_platform_device { + const char *name; int (*cs_en)(int reset_pin); int (*cs_dis)(int reset_pin); int (*irq_read_val)(void);