led.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. static void
  16. mach_led(int position, int value)
  17. {
  18. volatile unsigned short *p = (volatile unsigned short *) PA_LED;
  19. if (value) {
  20. *p |= (1 << LED_SHIFT);
  21. } else {
  22. *p &= ~(1 << LED_SHIFT);
  23. }
  24. }
  25. /* Cycle the LED's in the clasic Knightrider/Sun pattern */
  26. void
  27. heartbeat_73180se(void)
  28. {
  29. static unsigned int cnt = 0, period = 0;
  30. volatile unsigned short *p = (volatile unsigned short *) PA_LED;
  31. static unsigned bit = 0, up = 1;
  32. cnt += 1;
  33. if (cnt < period) {
  34. return;
  35. }
  36. cnt = 0;
  37. /* Go through the points (roughly!):
  38. * f(0)=10, f(1)=16, f(2)=20, f(5)=35,f(inf)->110
  39. */
  40. period = 110 - ((300 << FSHIFT) / ((avenrun[0] / 5) + (3 << FSHIFT)));
  41. if (up) {
  42. if (bit == 7) {
  43. bit--;
  44. up = 0;
  45. } else {
  46. bit++;
  47. }
  48. } else {
  49. if (bit == 0) {
  50. bit++;
  51. up = 1;
  52. } else {
  53. bit--;
  54. }
  55. }
  56. *p = 1 << (bit + LED_SHIFT);
  57. }