1/* 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> 12#include <linux/sysdev.h> 13 14#include <mach/pxa2xx-regs.h> 15 16#include "clock.h" 17 18void clk_pxa2xx_cken_enable(struct clk *clk) 19{ 20 CKEN |= 1 << clk->cken; 21} 22 23void clk_pxa2xx_cken_disable(struct clk *clk) 24{ 25 CKEN &= ~(1 << clk->cken); 26} 27 28const struct clkops clk_pxa2xx_cken_ops = { 29 .enable = clk_pxa2xx_cken_enable, 30 .disable = clk_pxa2xx_cken_disable, 31}; 32 33#ifdef CONFIG_PM 34static uint32_t saved_cken; 35 36static int pxa2xx_clock_suspend(struct sys_device *d, pm_message_t state) 37{ 38 saved_cken = CKEN; 39 return 0; 40} 41 42static int pxa2xx_clock_resume(struct sys_device *d) 43{ 44 CKEN = saved_cken; 45 return 0; 46} 47#else 48#define pxa2xx_clock_suspend NULL 49#define pxa2xx_clock_resume NULL 50#endif 51 52struct sysdev_class pxa2xx_clock_sysclass = { 53 .name = "pxa2xx-clock", 54 .suspend = pxa2xx_clock_suspend, 55 .resume = pxa2xx_clock_resume, 56}; 57 58static int __init pxa2xx_clock_init(void) 59{ 60 if (cpu_is_pxa2xx()) 61 return sysdev_class_register(&pxa2xx_clock_sysclass); 62 return 0; 63} 64postcore_initcall(pxa2xx_clock_init); 65