led.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * arch/sh/boards/se/73180/led.c
  3. *
  4. * Derived from arch/sh/boards/se/770x/led.c
  5. *
  6. * Copyright (C) 2000 Stuart Menefy <stuart.menefy@st.com>
  7. *
  8. * May be copied or modified under the terms of the GNU General Public
  9. * License. See linux/COPYING for more information.
  10. *
  11. * This file contains Solution Engine specific LED code.
  12. */
  13. #include <linux/sched.h>
  14. #include <asm/mach/se73180.h>
  15. /* Cycle the LED's in the clasic Knightrider/Sun pattern */
  16. void heartbeat_73180se(void)
  17. {
  18. static unsigned int cnt = 0, period = 0;
  19. volatile unsigned short *p = (volatile unsigned short *) PA_LED;
  20. static unsigned bit = 0, up = 1;
  21. cnt += 1;
  22. if (cnt < period) {
  23. return;
  24. }
  25. cnt = 0;
  26. /* Go through the points (roughly!):
  27. * f(0)=10, f(1)=16, f(2)=20, f(5)=35,f(inf)->110
  28. */
  29. period = 110 - ((300 << FSHIFT) / ((avenrun[0] / 5) + (3 << FSHIFT)));
  30. if (up) {
  31. if (bit == 7) {
  32. bit--;
  33. up = 0;
  34. } else {
  35. bit++;
  36. }
  37. } else {
  38. if (bit == 0) {
  39. bit++;
  40. up = 1;
  41. } else {
  42. bit--;
  43. }
  44. }
  45. *p = 1 << (bit + LED_SHIFT);
  46. }