clocks.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* arch/arm/mach-lh7a40x/clocks.c
  2. *
  3. * Copyright (C) 2004 Marc Singer
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License
  7. * version 2 as published by the Free Software Foundation.
  8. *
  9. */
  10. #include <mach/hardware.h>
  11. #include <mach/clocks.h>
  12. #include <linux/err.h>
  13. struct module;
  14. struct clk {
  15. struct list_head node;
  16. unsigned long rate;
  17. struct module *owner;
  18. const char *name;
  19. };
  20. /* ----- */
  21. #define MAINDIV1(c) (((c) >> 7) & 0x0f)
  22. #define MAINDIV2(c) (((c) >> 11) & 0x1f)
  23. #define PS(c) (((c) >> 18) & 0x03)
  24. #define PREDIV(c) (((c) >> 2) & 0x1f)
  25. #define HCLKDIV(c) (((c) >> 0) & 0x02)
  26. #define PCLKDIV(c) (((c) >> 16) & 0x03)
  27. unsigned int fclkfreq_get (void)
  28. {
  29. unsigned int clkset = CSC_CLKSET;
  30. unsigned int gclk
  31. = XTAL_IN
  32. / (1 << PS(clkset))
  33. * (MAINDIV1(clkset) + 2)
  34. / (PREDIV(clkset) + 2)
  35. * (MAINDIV2(clkset) + 2)
  36. ;
  37. return gclk;
  38. }
  39. unsigned int hclkfreq_get (void)
  40. {
  41. unsigned int clkset = CSC_CLKSET;
  42. unsigned int hclk = fclkfreq_get () / (HCLKDIV(clkset) + 1);
  43. return hclk;
  44. }
  45. unsigned int pclkfreq_get (void)
  46. {
  47. unsigned int clkset = CSC_CLKSET;
  48. int pclkdiv = PCLKDIV(clkset);
  49. unsigned int pclk;
  50. if (pclkdiv == 0x3)
  51. pclkdiv = 0x2;
  52. pclk = hclkfreq_get () / (1 << pclkdiv);
  53. return pclk;
  54. }
  55. /* ----- */
  56. struct clk *clk_get (struct device *dev, const char *id)
  57. {
  58. return dev && strcmp(dev_name(dev), "cldc-lh7a40x") == 0
  59. ? NULL : ERR_PTR(-ENOENT);
  60. }
  61. EXPORT_SYMBOL(clk_get);
  62. void clk_put (struct clk *clk)
  63. {
  64. }
  65. EXPORT_SYMBOL(clk_put);
  66. int clk_enable (struct clk *clk)
  67. {
  68. return 0;
  69. }
  70. EXPORT_SYMBOL(clk_enable);
  71. void clk_disable (struct clk *clk)
  72. {
  73. }
  74. EXPORT_SYMBOL(clk_disable);
  75. unsigned long clk_get_rate (struct clk *clk)
  76. {
  77. return 0;
  78. }
  79. EXPORT_SYMBOL(clk_get_rate);
  80. long clk_round_rate (struct clk *clk, unsigned long rate)
  81. {
  82. return rate;
  83. }
  84. EXPORT_SYMBOL(clk_round_rate);
  85. int clk_set_rate (struct clk *clk, unsigned long rate)
  86. {
  87. return -EIO;
  88. }
  89. EXPORT_SYMBOL(clk_set_rate);