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? 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@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html