Dear Trilok, 2009/7/8 Trilok Soni <soni.trilok@xxxxxxxxx>: > Hi Wan ZongShun, > > On Wed, Jul 8, 2009 at 7:36 PM, Wan ZongShun<mcuos.com@xxxxxxxxx> wrote: >> Dear Trilok , >> >> >> 2009/7/8 Trilok Soni <soni.trilok@xxxxxxxxx>: >>> 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html