Logo Search packages:      
Sourcecode: linux version File versions


 * linux/include/asm-arm/arch-omap/clockdomain.h
 * OMAP2/3 clockdomain framework functions
 * Copyright (C) 2008 Texas Instruments, Inc.
 * Copyright (C) 2008 Nokia Corporation
 * Written by Paul Walmsley
 * 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 <mach/powerdomain.h>
#include <mach/clock.h>
#include <mach/cpu.h>

/* Clockdomain capability flags */
#define CLKDM_CAN_FORCE_SLEEP             (1 << 0)
#define CLKDM_CAN_FORCE_WAKEUP                  (1 << 1)
#define CLKDM_CAN_ENABLE_AUTO             (1 << 2)
#define CLKDM_CAN_DISABLE_AUTO                  (1 << 3)


/* OMAP24XX CM_CLKSTCTRL_*.AUTOSTATE_* register bit values */
#define OMAP24XX_CLKSTCTRL_ENABLE_AUTO          0x1

/* OMAP3XXX CM_CLKSTCTRL_*.CLKTRCTRL_* register bit values */
#define OMAP34XX_CLKSTCTRL_FORCE_SLEEP          0x1
#define OMAP34XX_CLKSTCTRL_ENABLE_AUTO          0x3

 * struct clkdm_pwrdm_autodep - a powerdomain that should have wkdeps
 * and sleepdeps added when a powerdomain should stay active in hwsup mode;
 * and conversely, removed when the powerdomain should be allowed to go
 * inactive in hwsup mode.
struct clkdm_pwrdm_autodep {

      /* Name of the powerdomain to add a wkdep/sleepdep on */
      const char *pwrdm_name;

      /* Powerdomain pointer (looked up at clkdm_init() time) */
      struct powerdomain *pwrdm;

      /* OMAP chip types that this clockdomain dep is valid on */
      const struct omap_chip_id omap_chip;


struct clockdomain {

      /* Clockdomain name */
      const char *name;

      /* Powerdomain enclosing this clockdomain */
      const char *pwrdm_name;

      /* CLKTRCTRL/AUTOSTATE field mask in CM_CLKSTCTRL reg */
      const u16 clktrctrl_mask;

      /* Clockdomain capability flags */
      const u8 flags;

      /* OMAP chip types that this clockdomain is valid on */
      const struct omap_chip_id omap_chip;

      /* Usecount tracking */
      atomic_t usecount;

      /* Powerdomain pointer assigned at clkdm_register() */
      struct powerdomain *pwrdm;

      struct list_head node;


void clkdm_init(struct clockdomain **clkdms, struct clkdm_pwrdm_autodep *autodeps);
int clkdm_register(struct clockdomain *clkdm);
int clkdm_unregister(struct clockdomain *clkdm);
struct clockdomain *clkdm_lookup(const char *name);

int clkdm_for_each(int (*fn)(struct clockdomain *clkdm));
struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm);

void omap2_clkdm_allow_idle(struct clockdomain *clkdm);
void omap2_clkdm_deny_idle(struct clockdomain *clkdm);

int omap2_clkdm_wakeup(struct clockdomain *clkdm);
int omap2_clkdm_sleep(struct clockdomain *clkdm);

int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk);
int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);


Generated by  Doxygen 1.6.0   Back to index