pll.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright 2005-2009 Analog Devices Inc.
  3. *
  4. * Licensed under the GPL-2 or later.
  5. */
  6. #ifndef _MACH_PLL_H
  7. #define _MACH_PLL_H
  8. #include <asm/blackfin.h>
  9. #include <asm/irqflags.h>
  10. /* Writing to PLL_CTL initiates a PLL relock sequence. */
  11. static __inline__ void bfin_write_PLL_CTL(unsigned int val)
  12. {
  13. unsigned long flags, iwr0, iwr1;
  14. if (val == bfin_read_PLL_CTL())
  15. return;
  16. local_irq_save_hw(flags);
  17. /* Enable the PLL Wakeup bit in SIC IWR */
  18. iwr0 = bfin_read32(SICA_IWR0);
  19. iwr1 = bfin_read32(SICA_IWR1);
  20. /* Only allow PPL Wakeup) */
  21. bfin_write32(SICA_IWR0, IWR_ENABLE(0));
  22. bfin_write32(SICA_IWR1, 0);
  23. bfin_write16(PLL_CTL, val);
  24. SSYNC();
  25. asm("IDLE;");
  26. bfin_write32(SICA_IWR0, iwr0);
  27. bfin_write32(SICA_IWR1, iwr1);
  28. local_irq_restore_hw(flags);
  29. }
  30. /* Writing to VR_CTL initiates a PLL relock sequence. */
  31. static __inline__ void bfin_write_VR_CTL(unsigned int val)
  32. {
  33. unsigned long flags, iwr0, iwr1;
  34. if (val == bfin_read_VR_CTL())
  35. return;
  36. local_irq_save_hw(flags);
  37. /* Enable the PLL Wakeup bit in SIC IWR */
  38. iwr0 = bfin_read32(SICA_IWR0);
  39. iwr1 = bfin_read32(SICA_IWR1);
  40. /* Only allow PPL Wakeup) */
  41. bfin_write32(SICA_IWR0, IWR_ENABLE(0));
  42. bfin_write32(SICA_IWR1, 0);
  43. bfin_write16(VR_CTL, val);
  44. SSYNC();
  45. asm("IDLE;");
  46. bfin_write32(SICA_IWR0, iwr0);
  47. bfin_write32(SICA_IWR1, iwr1);
  48. local_irq_restore_hw(flags);
  49. }
  50. #endif /* _MACH_PLL_H */