setup.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * s6105 control routines
  3. *
  4. * Copyright (c) 2009 emlix GmbH
  5. */
  6. #include <linux/irq.h>
  7. #include <linux/io.h>
  8. #include <linux/gpio.h>
  9. #include <asm/bootparam.h>
  10. #include <variant/hardware.h>
  11. #include <platform/gpio.h>
  12. void platform_halt(void)
  13. {
  14. local_irq_disable();
  15. while (1)
  16. ;
  17. }
  18. void platform_power_off(void)
  19. {
  20. platform_halt();
  21. }
  22. void platform_restart(void)
  23. {
  24. platform_halt();
  25. }
  26. void __init platform_setup(char **cmdline)
  27. {
  28. unsigned long reg;
  29. reg = readl(S6_REG_GREG1 + S6_GREG1_CLKGATE);
  30. reg &= ~(1 << S6_GREG1_BLOCK_SB);
  31. writel(reg, S6_REG_GREG1 + S6_GREG1_CLKGATE);
  32. reg = readl(S6_REG_GREG1 + S6_GREG1_BLOCKENA);
  33. reg |= 1 << S6_GREG1_BLOCK_SB;
  34. writel(reg, S6_REG_GREG1 + S6_GREG1_BLOCKENA);
  35. printk(KERN_NOTICE "S6105 on Stretch S6000 - "
  36. "Copyright (C) 2009 emlix GmbH <info@emlix.com>\n");
  37. }
  38. void __init platform_init(bp_tag_t *first)
  39. {
  40. gpio_request(GPIO_LED1_NGREEN, "led1_green");
  41. gpio_request(GPIO_LED1_RED, "led1_red");
  42. gpio_direction_output(GPIO_LED1_NGREEN, 1);
  43. }
  44. void platform_heartbeat(void)
  45. {
  46. static unsigned int c;
  47. if (!(++c & 0x4F))
  48. gpio_direction_output(GPIO_LED1_RED, !(c & 0x10));
  49. }