* [PATCH] input:Add clk api support for w90p910 touchscreen
@ 2009-07-07 14:28 Wan ZongShun
2009-07-07 17:19 ` Trilok Soni
0 siblings, 1 reply; 9+ messages in thread
From: Wan ZongShun @ 2009-07-07 14:28 UTC (permalink / raw)
To: linux-input, linux-arm-kernel, Dmitry Torokhov
Dear Dmitry,
Now,the w90p910 clock API has been submitted to "linux-arm-kernel",so using it for w90p910 touchscreen driver.Thanks!
Add clk api support for w90p910 touchscreen.
Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
---
drivers/input/touchscreen/w90p910_ts.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
index 6071f58..4a42d66 100644
--- a/drivers/input/touchscreen/w90p910_ts.c
+++ b/drivers/input/touchscreen/w90p910_ts.c
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/io.h>
+#include <linux/clk.h>
#include <linux/input.h>
#include <linux/interrupt.h>
@@ -47,6 +48,7 @@ enum ts_state {
struct w90p910_ts {
struct input_dev *input;
struct timer_list timer;
+ struct clk *clk;
int irq_num;
void __iomem *clocken;
void __iomem *ts_reg;
@@ -166,8 +168,7 @@ static int w90p910_open(struct input_dev *dev)
unsigned long val;
/* enable the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
+ clk_enable(w90p910_ts->clk);
__raw_writel(ADC_RST1, w90p910_ts->ts_reg);
msleep(1);
@@ -211,8 +212,8 @@ static void w90p910_close(struct input_dev *dev)
del_timer_sync(&w90p910_ts->timer);
/* stop the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
+ clk_disable(w90p910_ts->clk);
+ clk_put(w90p910_ts->clk);
}
static int __devinit w90x900ts_probe(struct platform_device *pdev)
@@ -253,9 +254,9 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
goto fail2;
}
- res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (!res) {
- err = -ENXIO;
+ w90p910_ts->clk = clk_get(&pdev->dev, pdev->name);
+ if (IS_ERR(w90p910_ts->clk)) {
+ err = PTR_ERR(w90p910_ts->clk);
goto fail3;
}
@@ -283,18 +284,19 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
if (request_irq(w90p910_ts->irq_num, w90p910_ts_interrupt,
IRQF_DISABLED, "w90p910ts", w90p910_ts)) {
err = -EBUSY;
- goto fail3;
+ goto fail4;
}
err = input_register_device(w90p910_ts->input);
if (err)
- goto fail4;
+ goto fail5;
platform_set_drvdata(pdev, w90p910_ts);
return 0;
-fail4: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail5: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail4: clk_put(w90p910_ts->clk);
fail3: iounmap(w90p910_ts->ts_reg);
fail2: release_mem_region(res->start, res->end - res->start + 1);
fail1: input_free_device(input_dev);
--
1.5.6.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-07 14:28 [PATCH] input:Add clk api support for w90p910 touchscreen Wan ZongShun
@ 2009-07-07 17:19 ` Trilok Soni
2009-07-08 5:22 ` Wan ZongShun
0 siblings, 1 reply; 9+ messages in thread
From: Trilok Soni @ 2009-07-07 17:19 UTC (permalink / raw)
To: Wan ZongShun; +Cc: linux-input, linux-arm-kernel, Dmitry Torokhov
Hi,
> + w90p910_ts->clk = clk_get(&pdev->dev, pdev->name);
Having clk_name coming from pdev->name looks strange to me. I feel it
should either "NULL" or const string.
> + if (IS_ERR(w90p910_ts->clk)) {
> + err = PTR_ERR(w90p910_ts->clk);
> goto fail3;
> }
>
--
---Trilok Soni
http://triloksoni.wordpress.com
http://www.linkedin.com/in/triloksoni
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-07 17:19 ` Trilok Soni
@ 2009-07-08 5:22 ` Wan ZongShun
2009-07-08 6:51 ` Dmitry Torokhov
0 siblings, 1 reply; 9+ messages in thread
From: Wan ZongShun @ 2009-07-08 5:22 UTC (permalink / raw)
To: Trilok Soni; +Cc: linux-input, linux-arm-kernel, Dmitry Torokhov
Dear Trilok,
You are right, here should be put "NULL",thanks for your help.
Now, I fixed up my patch.
Add clk api support for w90p910 touchscreen.
Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
---
drivers/input/touchscreen/w90p910_ts.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
index 6071f58..bf8dd52 100644
--- a/drivers/input/touchscreen/w90p910_ts.c
+++ b/drivers/input/touchscreen/w90p910_ts.c
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/io.h>
+#include <linux/clk.h>
#include <linux/input.h>
#include <linux/interrupt.h>
@@ -47,6 +48,7 @@ enum ts_state {
struct w90p910_ts {
struct input_dev *input;
struct timer_list timer;
+ struct clk *clk;
int irq_num;
void __iomem *clocken;
void __iomem *ts_reg;
@@ -166,8 +168,7 @@ static int w90p910_open(struct input_dev *dev)
unsigned long val;
/* enable the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
+ clk_enable(w90p910_ts->clk);
__raw_writel(ADC_RST1, w90p910_ts->ts_reg);
msleep(1);
@@ -211,8 +212,8 @@ static void w90p910_close(struct input_dev *dev)
del_timer_sync(&w90p910_ts->timer);
/* stop the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
+ clk_disable(w90p910_ts->clk);
+ clk_put(w90p910_ts->clk);
}
static int __devinit w90x900ts_probe(struct platform_device *pdev)
@@ -253,9 +254,9 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
goto fail2;
}
- res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (!res) {
- err = -ENXIO;
+ w90p910_ts->clk = clk_get(&pdev->dev, NULL);
+ if (IS_ERR(w90p910_ts->clk)) {
+ err = PTR_ERR(w90p910_ts->clk);
goto fail3;
}
@@ -283,18 +284,19 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
if (request_irq(w90p910_ts->irq_num, w90p910_ts_interrupt,
IRQF_DISABLED, "w90p910ts", w90p910_ts)) {
err = -EBUSY;
- goto fail3;
+ goto fail4;
}
err = input_register_device(w90p910_ts->input);
if (err)
- goto fail4;
+ goto fail5;
platform_set_drvdata(pdev, w90p910_ts);
return 0;
-fail4: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail5: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail4: clk_put(w90p910_ts->clk);
fail3: iounmap(w90p910_ts->ts_reg);
fail2: release_mem_region(res->start, res->end - res->start + 1);
fail1: input_free_device(input_dev);
--
1.5.6.3
B&R
Wan.
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 5:22 ` Wan ZongShun
@ 2009-07-08 6:51 ` Dmitry Torokhov
2009-07-08 7:10 ` Wan ZongShun
0 siblings, 1 reply; 9+ messages in thread
From: Dmitry Torokhov @ 2009-07-08 6:51 UTC (permalink / raw)
To: Wan ZongShun; +Cc: Trilok Soni, linux-input, linux-arm-kernel
On Wed, Jul 08, 2009 at 01:22:56PM +0800, Wan ZongShun wrote:
> Dear Trilok,
>
> You are right, here should be put "NULL",thanks for your help.
> Now, I fixed up my patch.
>
It looks like clocken can be removed as well?
--
Dmitry
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 6:51 ` Dmitry Torokhov
@ 2009-07-08 7:10 ` Wan ZongShun
2009-07-08 10:34 ` Trilok Soni
0 siblings, 1 reply; 9+ messages in thread
From: Wan ZongShun @ 2009-07-08 7:10 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: Trilok Soni, linux-input, linux-arm-kernel
Dear Dmitry,
Okay, this clocken should be removed here.
I fixed up my patch and re-submitted it.
thanks a lot for your help.
Add clk api support for w90p910 touchscreen.
Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
---
drivers/input/touchscreen/w90p910_ts.c | 25 ++++++++++++-------------
1 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
index 6071f58..7bef19e 100644
--- a/drivers/input/touchscreen/w90p910_ts.c
+++ b/drivers/input/touchscreen/w90p910_ts.c
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/io.h>
+#include <linux/clk.h>
#include <linux/input.h>
#include <linux/interrupt.h>
@@ -47,8 +48,8 @@ enum ts_state {
struct w90p910_ts {
struct input_dev *input;
struct timer_list timer;
+ struct clk *clk;
int irq_num;
- void __iomem *clocken;
void __iomem *ts_reg;
spinlock_t lock;
enum ts_state state;
@@ -166,8 +167,7 @@ static int w90p910_open(struct input_dev *dev)
unsigned long val;
/* enable the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
+ clk_enable(w90p910_ts->clk);
__raw_writel(ADC_RST1, w90p910_ts->ts_reg);
msleep(1);
@@ -211,8 +211,8 @@ static void w90p910_close(struct input_dev *dev)
del_timer_sync(&w90p910_ts->timer);
/* stop the ADC clock */
- val = __raw_readl(w90p910_ts->clocken);
- __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
+ clk_disable(w90p910_ts->clk);
+ clk_put(w90p910_ts->clk);
}
static int __devinit w90x900ts_probe(struct platform_device *pdev)
@@ -253,14 +253,12 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
goto fail2;
}
- res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (!res) {
- err = -ENXIO;
+ w90p910_ts->clk = clk_get(&pdev->dev, NULL);
+ if (IS_ERR(w90p910_ts->clk)) {
+ err = PTR_ERR(w90p910_ts->clk);
goto fail3;
}
- w90p910_ts->clocken = (void __iomem *)res->start;
-
input_dev->name = "W90P910 TouchScreen";
input_dev->phys = "w90p910ts/event0";
input_dev->id.bustype = BUS_HOST;
@@ -283,18 +281,19 @@ static int __devinit w90x900ts_probe(struct platform_device *pdev)
if (request_irq(w90p910_ts->irq_num, w90p910_ts_interrupt,
IRQF_DISABLED, "w90p910ts", w90p910_ts)) {
err = -EBUSY;
- goto fail3;
+ goto fail4;
}
err = input_register_device(w90p910_ts->input);
if (err)
- goto fail4;
+ goto fail5;
platform_set_drvdata(pdev, w90p910_ts);
return 0;
-fail4: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail5: free_irq(w90p910_ts->irq_num, w90p910_ts);
+fail4: clk_put(w90p910_ts->clk);
fail3: iounmap(w90p910_ts->ts_reg);
fail2: release_mem_region(res->start, res->end - res->start + 1);
fail1: input_free_device(input_dev);
--
1.5.6.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 7:10 ` Wan ZongShun
@ 2009-07-08 10:34 ` Trilok Soni
2009-07-08 14:06 ` Wan ZongShun
0 siblings, 1 reply; 9+ messages in thread
From: Trilok Soni @ 2009-07-08 10:34 UTC (permalink / raw)
To: Wan ZongShun; +Cc: Dmitry Torokhov, linux-input, linux-arm-kernel
Hi Wan ZongShun,
>
> ---
> drivers/input/touchscreen/w90p910_ts.c | 25 ++++++++++++-------------
> 1 files changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
> index 6071f58..7bef19e 100644
> --- a/drivers/input/touchscreen/w90p910_ts.c
> +++ b/drivers/input/touchscreen/w90p910_ts.c
> @@ -13,6 +13,7 @@
> #include <linux/module.h>
> #include <linux/platform_device.h>
> #include <linux/io.h>
> +#include <linux/clk.h>
> #include <linux/input.h>
> #include <linux/interrupt.h>
>
> @@ -47,8 +48,8 @@ enum ts_state {
> struct w90p910_ts {
> struct input_dev *input;
> struct timer_list timer;
> + struct clk *clk;
> int irq_num;
> - void __iomem *clocken;
> void __iomem *ts_reg;
> spinlock_t lock;
> enum ts_state state;
> @@ -166,8 +167,7 @@ static int w90p910_open(struct input_dev *dev)
> unsigned long val;
>
> /* enable the ADC clock */
> - val = __raw_readl(w90p910_ts->clocken);
> - __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
> + clk_enable(w90p910_ts->clk);
>
> __raw_writel(ADC_RST1, w90p910_ts->ts_reg);
> msleep(1);
> @@ -211,8 +211,8 @@ static void w90p910_close(struct input_dev *dev)
> del_timer_sync(&w90p910_ts->timer);
>
> /* stop the ADC clock */
> - val = __raw_readl(w90p910_ts->clocken);
> - __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
> + clk_disable(w90p910_ts->clk);
> + clk_put(w90p910_ts->clk);
why you are doing clk_put on _close? I think you are calling clk_get
only on _probe, so there is a mismatch here. Also I don't see
clk_disable/clk_put in driver remove function.
--
---Trilok Soni
http://triloksoni.wordpress.com
http://www.linkedin.com/in/triloksoni
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 10:34 ` Trilok Soni
@ 2009-07-08 14:06 ` Wan ZongShun
2009-07-08 14:21 ` Trilok Soni
0 siblings, 1 reply; 9+ messages in thread
From: Wan ZongShun @ 2009-07-08 14:06 UTC (permalink / raw)
To: Trilok Soni, Eric miao; +Cc: Dmitry Torokhov, linux-input, linux-arm-kernel
Dear Trilok ,
2009/7/8 Trilok Soni <soni.trilok@gmail.com>:
> Hi Wan ZongShun,
>
>>
>> ---
>> drivers/input/touchscreen/w90p910_ts.c | 25 ++++++++++++-------------
>> 1 files changed, 12 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
>> index 6071f58..7bef19e 100644
>> --- a/drivers/input/touchscreen/w90p910_ts.c
>> +++ b/drivers/input/touchscreen/w90p910_ts.c
>> @@ -13,6 +13,7 @@
>> #include <linux/module.h>
>> #include <linux/platform_device.h>
>> #include <linux/io.h>
>> +#include <linux/clk.h>
>> #include <linux/input.h>
>> #include <linux/interrupt.h>
>>
>> @@ -47,8 +48,8 @@ enum ts_state {
>> struct w90p910_ts {
>> struct input_dev *input;
>> struct timer_list timer;
>> + struct clk *clk;
>> int irq_num;
>> - void __iomem *clocken;
>> void __iomem *ts_reg;
>> spinlock_t lock;
>> enum ts_state state;
>> @@ -166,8 +167,7 @@ static int w90p910_open(struct input_dev *dev)
>> unsigned long val;
>>
>> /* enable the ADC clock */
>> - val = __raw_readl(w90p910_ts->clocken);
>> - __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
>> + clk_enable(w90p910_ts->clk);
>>
>> __raw_writel(ADC_RST1, w90p910_ts->ts_reg);
>> msleep(1);
>> @@ -211,8 +211,8 @@ static void w90p910_close(struct input_dev *dev)
>> del_timer_sync(&w90p910_ts->timer);
>>
>> /* stop the ADC clock */
>> - val = __raw_readl(w90p910_ts->clocken);
>> - __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
>> + clk_disable(w90p910_ts->clk);
>> + clk_put(w90p910_ts->clk);
>
>
> why you are doing clk_put on _close? I think you are calling clk_get
> only on _probe, so there is a mismatch here. Also I don't see
> clk_disable/clk_put in driver remove function.
Just imitate the method from pxa27x_keypad.c.
Do you mean there is no need to free the clock source here?
> --
> ---Trilok Soni
> http://triloksoni.wordpress.com
> http://www.linkedin.com/in/triloksoni
>
--
Wan z.s
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 14:06 ` Wan ZongShun
@ 2009-07-08 14:21 ` Trilok Soni
2009-07-08 14:31 ` Wan ZongShun
0 siblings, 1 reply; 9+ messages in thread
From: Trilok Soni @ 2009-07-08 14:21 UTC (permalink / raw)
To: Wan ZongShun; +Cc: Eric miao, Dmitry Torokhov, linux-input, linux-arm-kernel
Hi Wan ZongShun,
On Wed, Jul 8, 2009 at 7:36 PM, Wan ZongShun<mcuos.com@gmail.com> wrote:
> Dear Trilok ,
>
>
> 2009/7/8 Trilok Soni <soni.trilok@gmail.com>:
>> Hi Wan ZongShun,
>>
>>>
>>> ---
>>> drivers/input/touchscreen/w90p910_ts.c | 25 ++++++++++++-------------
>>> 1 files changed, 12 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
>>> index 6071f58..7bef19e 100644
>>> --- a/drivers/input/touchscreen/w90p910_ts.c
>>> +++ b/drivers/input/touchscreen/w90p910_ts.c
>>> @@ -13,6 +13,7 @@
>>> #include <linux/module.h>
>>> #include <linux/platform_device.h>
>>> #include <linux/io.h>
>>> +#include <linux/clk.h>
>>> #include <linux/input.h>
>>> #include <linux/interrupt.h>
>>>
>>> @@ -47,8 +48,8 @@ enum ts_state {
>>> struct w90p910_ts {
>>> struct input_dev *input;
>>> struct timer_list timer;
>>> + struct clk *clk;
>>> int irq_num;
>>> - void __iomem *clocken;
>>> void __iomem *ts_reg;
>>> spinlock_t lock;
>>> enum ts_state state;
>>> @@ -166,8 +167,7 @@ static int w90p910_open(struct input_dev *dev)
>>> unsigned long val;
>>>
>>> /* enable the ADC clock */
>>> - val = __raw_readl(w90p910_ts->clocken);
>>> - __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
>>> + clk_enable(w90p910_ts->clk);
>>>
>>> __raw_writel(ADC_RST1, w90p910_ts->ts_reg);
>>> msleep(1);
>>> @@ -211,8 +211,8 @@ static void w90p910_close(struct input_dev *dev)
>>> del_timer_sync(&w90p910_ts->timer);
>>>
>>> /* stop the ADC clock */
>>> - val = __raw_readl(w90p910_ts->clocken);
>>> - __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
>>> + clk_disable(w90p910_ts->clk);
>>> + clk_put(w90p910_ts->clk);
>>
>>
>> why you are doing clk_put on _close? I think you are calling clk_get
>> only on _probe, so there is a mismatch here. Also I don't see
>> clk_disable/clk_put in driver remove function.
>
> Just imitate the method from pxa27x_keypad.c.
> Do you mean there is no need to free the clock source here?
>
I don't see clk_put in pxa27x_keypad.c _close function, which driver
you are referring too?
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=drivers/input/keyboard/pxa27x_keypad.c;h=0d2fc64a5e1cead895be0a0c22cd96a500faf1c0;hb=HEAD
clk_put is not needed in _close function. You should instead update
_remove method of your driver with clk_disable + clk_put.
--
---Trilok Soni
http://triloksoni.wordpress.com
http://www.linkedin.com/in/triloksoni
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] input:Add clk api support for w90p910 touchscreen
2009-07-08 14:21 ` Trilok Soni
@ 2009-07-08 14:31 ` Wan ZongShun
0 siblings, 0 replies; 9+ messages in thread
From: Wan ZongShun @ 2009-07-08 14:31 UTC (permalink / raw)
To: Trilok Soni; +Cc: Eric miao, Dmitry Torokhov, linux-input, linux-arm-kernel
Dear Trilok,
2009/7/8 Trilok Soni <soni.trilok@gmail.com>:
> Hi Wan ZongShun,
>
> On Wed, Jul 8, 2009 at 7:36 PM, Wan ZongShun<mcuos.com@gmail.com> wrote:
>> Dear Trilok ,
>>
>>
>> 2009/7/8 Trilok Soni <soni.trilok@gmail.com>:
>>> Hi Wan ZongShun,
>>>
>>>>
>>>> ---
>>>> drivers/input/touchscreen/w90p910_ts.c | 25 ++++++++++++-------------
>>>> 1 files changed, 12 insertions(+), 13 deletions(-)
>>>>
>>>> diff --git a/drivers/input/touchscreen/w90p910_ts.c b/drivers/input/touchscreen/w90p910_ts.c
>>>> index 6071f58..7bef19e 100644
>>>> --- a/drivers/input/touchscreen/w90p910_ts.c
>>>> +++ b/drivers/input/touchscreen/w90p910_ts.c
>>>> @@ -13,6 +13,7 @@
>>>> #include <linux/module.h>
>>>> #include <linux/platform_device.h>
>>>> #include <linux/io.h>
>>>> +#include <linux/clk.h>
>>>> #include <linux/input.h>
>>>> #include <linux/interrupt.h>
>>>>
>>>> @@ -47,8 +48,8 @@ enum ts_state {
>>>> struct w90p910_ts {
>>>> struct input_dev *input;
>>>> struct timer_list timer;
>>>> + struct clk *clk;
>>>> int irq_num;
>>>> - void __iomem *clocken;
>>>> void __iomem *ts_reg;
>>>> spinlock_t lock;
>>>> enum ts_state state;
>>>> @@ -166,8 +167,7 @@ static int w90p910_open(struct input_dev *dev)
>>>> unsigned long val;
>>>>
>>>> /* enable the ADC clock */
>>>> - val = __raw_readl(w90p910_ts->clocken);
>>>> - __raw_writel(val | ADC_CLK_EN, w90p910_ts->clocken);
>>>> + clk_enable(w90p910_ts->clk);
>>>>
>>>> __raw_writel(ADC_RST1, w90p910_ts->ts_reg);
>>>> msleep(1);
>>>> @@ -211,8 +211,8 @@ static void w90p910_close(struct input_dev *dev)
>>>> del_timer_sync(&w90p910_ts->timer);
>>>>
>>>> /* stop the ADC clock */
>>>> - val = __raw_readl(w90p910_ts->clocken);
>>>> - __raw_writel(val & ~ADC_CLK_EN, w90p910_ts->clocken);
>>>> + clk_disable(w90p910_ts->clk);
>>>> + clk_put(w90p910_ts->clk);
>>>
>>>
>>> why you are doing clk_put on _close? I think you are calling clk_get
>>> only on _probe, so there is a mismatch here. Also I don't see
>>> clk_disable/clk_put in driver remove function.
>>
>> Just imitate the method from pxa27x_keypad.c.
>> Do you mean there is no need to free the clock source here?
>>
>
> I don't see clk_put in pxa27x_keypad.c _close function, which driver
> you are referring too?
Okay, got it ,I should put clk_disable + clk_put in _remove rather
than in _close.
thanks for your help.
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=drivers/input/keyboard/pxa27x_keypad.c;h=0d2fc64a5e1cead895be0a0c22cd96a500faf1c0;hb=HEAD
>
> clk_put is not needed in _close function. You should instead update
> _remove method of your driver with clk_disable + clk_put.
>
> --
> ---Trilok Soni
> http://triloksoni.wordpress.com
> http://www.linkedin.com/in/triloksoni
>
--
Wan z.s
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-07-08 14:31 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-07 14:28 [PATCH] input:Add clk api support for w90p910 touchscreen Wan ZongShun
2009-07-07 17:19 ` Trilok Soni
2009-07-08 5:22 ` Wan ZongShun
2009-07-08 6:51 ` Dmitry Torokhov
2009-07-08 7:10 ` Wan ZongShun
2009-07-08 10:34 ` Trilok Soni
2009-07-08 14:06 ` Wan ZongShun
2009-07-08 14:21 ` Trilok Soni
2009-07-08 14:31 ` Wan ZongShun
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).