| /* |
| * linux/arch/arm/mach-pxa/clock-pxa2xx.c |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| */ |
| |
| #include <linux/module.h> |
| #include <linux/kernel.h> |
| #include <linux/init.h> |
| #include <linux/io.h> |
| #include <linux/syscore_ops.h> |
| |
| #include <mach/pxa2xx-regs.h> |
| |
| #include "clock.h" |
| |
| void clk_pxa2xx_cken_enable(struct clk *clk) |
| { |
| CKEN |= 1 << clk->cken; |
| } |
| |
| void clk_pxa2xx_cken_disable(struct clk *clk) |
| { |
| CKEN &= ~(1 << clk->cken); |
| } |
| |
| const struct clkops clk_pxa2xx_cken_ops = { |
| .enable = clk_pxa2xx_cken_enable, |
| .disable = clk_pxa2xx_cken_disable, |
| }; |
| |
| #ifdef CONFIG_PM |
| static uint32_t saved_cken; |
| |
| static int pxa2xx_clock_suspend(void) |
| { |
| saved_cken = CKEN; |
| return 0; |
| } |
| |
| static void pxa2xx_clock_resume(void) |
| { |
| CKEN = saved_cken; |
| } |
| #else |
| #define pxa2xx_clock_suspend NULL |
| #define pxa2xx_clock_resume NULL |
| #endif |
| |
| struct syscore_ops pxa2xx_clock_syscore_ops = { |
| .suspend = pxa2xx_clock_suspend, |
| .resume = pxa2xx_clock_resume, |
| }; |