blob: 9ee2ad6a0a07ccdc20aa5d4878adfb4c635d9a2c [file] [log] [blame]
Eric Miao40298132010-11-22 10:49:55 +08001/*
2 * linux/arch/arm/mach-pxa/clock-pxa2xx.c
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/module.h>
10#include <linux/kernel.h>
11#include <linux/init.h>
Rob Herring23019a72012-03-20 14:33:19 -050012#include <linux/io.h>
Rafael J. Wysocki2eaa03b2011-04-22 22:03:11 +020013#include <linux/syscore_ops.h>
Eric Miao40298132010-11-22 10:49:55 +080014
15#include <mach/pxa2xx-regs.h>
16
17#include "clock.h"
18
19void clk_pxa2xx_cken_enable(struct clk *clk)
20{
21 CKEN |= 1 << clk->cken;
22}
23
24void clk_pxa2xx_cken_disable(struct clk *clk)
25{
26 CKEN &= ~(1 << clk->cken);
27}
28
29const struct clkops clk_pxa2xx_cken_ops = {
30 .enable = clk_pxa2xx_cken_enable,
31 .disable = clk_pxa2xx_cken_disable,
32};
Eric Miaof113fe42010-11-23 17:00:03 +080033
34#ifdef CONFIG_PM
35static uint32_t saved_cken;
36
Rafael J. Wysocki2eaa03b2011-04-22 22:03:11 +020037static int pxa2xx_clock_suspend(void)
Eric Miaof113fe42010-11-23 17:00:03 +080038{
39 saved_cken = CKEN;
40 return 0;
41}
42
Rafael J. Wysocki2eaa03b2011-04-22 22:03:11 +020043static void pxa2xx_clock_resume(void)
Eric Miaof113fe42010-11-23 17:00:03 +080044{
45 CKEN = saved_cken;
Eric Miaof113fe42010-11-23 17:00:03 +080046}
47#else
48#define pxa2xx_clock_suspend NULL
49#define pxa2xx_clock_resume NULL
50#endif
51
Rafael J. Wysocki2eaa03b2011-04-22 22:03:11 +020052struct syscore_ops pxa2xx_clock_syscore_ops = {
Eric Miaof113fe42010-11-23 17:00:03 +080053 .suspend = pxa2xx_clock_suspend,
54 .resume = pxa2xx_clock_resume,
55};