home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / clock.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.8 KB  |  99 lines

  1. #ifndef __ASM_SH_CLOCK_H
  2. #define __ASM_SH_CLOCK_H
  3.  
  4. #include <linux/kref.h>
  5. #include <linux/list.h>
  6. #include <linux/seq_file.h>
  7. #include <linux/clk.h>
  8. #include <linux/err.h>
  9.  
  10. struct clk;
  11.  
  12. struct clk_ops {
  13.     void (*init)(struct clk *clk);
  14.     void (*enable)(struct clk *clk);
  15.     void (*disable)(struct clk *clk);
  16.     void (*recalc)(struct clk *clk);
  17.     int (*set_rate)(struct clk *clk, unsigned long rate, int algo_id);
  18.     long (*round_rate)(struct clk *clk, unsigned long rate);
  19. };
  20.  
  21. struct clk {
  22.     struct list_head    node;
  23.     const char        *name;
  24.     int            id;
  25.     struct module        *owner;
  26.  
  27.     struct clk        *parent;
  28.     struct clk_ops        *ops;
  29.  
  30.     struct kref        kref;
  31.  
  32.     unsigned long        rate;
  33.     unsigned long        flags;
  34.     unsigned long        arch_flags;
  35. };
  36.  
  37. #define CLK_ALWAYS_ENABLED    (1 << 0)
  38. #define CLK_RATE_PROPAGATES    (1 << 1)
  39.  
  40. /* Should be defined by processor-specific code */
  41. void arch_init_clk_ops(struct clk_ops **, int type);
  42. int __init arch_clk_init(void);
  43.  
  44. /* arch/sh/kernel/cpu/clock.c */
  45. int clk_init(void);
  46.  
  47. void clk_recalc_rate(struct clk *);
  48.  
  49. int clk_register(struct clk *);
  50. void clk_unregister(struct clk *);
  51.  
  52. static inline int clk_always_enable(const char *id)
  53. {
  54.     struct clk *clk;
  55.     int ret;
  56.  
  57.     clk = clk_get(NULL, id);
  58.     if (IS_ERR(clk))
  59.         return PTR_ERR(clk);
  60.  
  61.     ret = clk_enable(clk);
  62.     if (ret)
  63.         clk_put(clk);
  64.  
  65.     return ret;
  66. }
  67.  
  68. /* the exported API, in addition to clk_set_rate */
  69. /**
  70.  * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter
  71.  * @clk: clock source
  72.  * @rate: desired clock rate in Hz
  73.  * @algo_id: algorithm id to be passed down to ops->set_rate
  74.  *
  75.  * Returns success (0) or negative errno.
  76.  */
  77. int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id);
  78.  
  79. enum clk_sh_algo_id {
  80.     NO_CHANGE = 0,
  81.  
  82.     IUS_N1_N1,
  83.     IUS_322,
  84.     IUS_522,
  85.     IUS_N11,
  86.  
  87.     SB_N1,
  88.  
  89.     SB3_N1,
  90.     SB3_32,
  91.     SB3_43,
  92.     SB3_54,
  93.  
  94.     BP_N1,
  95.  
  96.     IP_N1,
  97. };
  98. #endif /* __ASM_SH_CLOCK_H */
  99.