linux/arch/arm/mach-pxa/clock-pxa2xx.c
<<
>>
Prefs
   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