leds.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * linux/arch/arm/mach-s3c6400/leds.c
  3. *
  4. * S3C6400 LEDs dispatcher
  5. */
  6. #include <linux/errno.h>
  7. #include <linux/kernel.h>
  8. #include <linux/module.h>
  9. #include <linux/slab.h>
  10. #include <linux/input.h>
  11. #include <linux/init.h>
  12. #include <linux/serio.h>
  13. #include <linux/delay.h>
  14. #include <linux/platform_device.h>
  15. #include <linux/miscdevice.h>
  16. #include <linux/clk.h>
  17. #include <linux/mutex.h>
  18. #include <asm/io.h>
  19. #include <asm/irq.h>
  20. #include <asm/hardware.h>
  21. #include <asm/leds.h>
  22. #include <asm/mach-types.h>
  23. #include <asm/arch/regs-gpio.h>
  24. #include <asm/arch/irqs.h>
  25. #include <asm/mach/irq.h>
  26. #include "leds.h"
  27. static irqreturn_t eint9_switch(int irq, void *_dev)
  28. {
  29. printk("EINT9 interrupt occures!!!\n");
  30. return IRQ_HANDLED;
  31. }
  32. static int __init
  33. s3c6410_leds_init(void)
  34. {
  35. if (machine_is_smdk6410())
  36. leds_event = smdk6400_leds_event;
  37. else
  38. return -1;
  39. if (machine_is_smdk6410())
  40. {
  41. /*GPN12~15 used for LED*/
  42. /*Set GPN12~15 to output mode */
  43. s3c_gpio_cfgpin(S3C_GPN12, S3C_GPN12_OUTP);
  44. if(s3c_gpio_getcfg(S3C_GPN12) == 0)
  45. {
  46. printk(KERN_WARNING "LED: can't set GPN12 output mode\n");
  47. }
  48. s3c_gpio_cfgpin(S3C_GPN13, S3C_GPN13_OUTP);
  49. if(s3c_gpio_getcfg(S3C_GPN13) == 0)
  50. {
  51. printk(KERN_WARNING "LED: can't set GPN13 output mode\n");
  52. }
  53. s3c_gpio_cfgpin(S3C_GPN14, S3C_GPN14_OUTP);
  54. if(s3c_gpio_getcfg(S3C_GPN14) == 0)
  55. {
  56. printk(KERN_WARNING "LED: can't set GPN14 output mode\n");
  57. }
  58. s3c_gpio_cfgpin(S3C_GPN15, S3C_GPN15_OUTP);
  59. if(s3c_gpio_getcfg(S3C_GPN15) == 0)
  60. {
  61. printk(KERN_WARNING "LED: can't set GPN15 output mode\n");
  62. }
  63. }
  64. /* Get irqs */
  65. set_irq_type(IRQ_EINT9, IRQT_FALLING);
  66. s3c_gpio_pullup(S3C_GPN9, 0x0);
  67. if (request_irq(IRQ_EINT9, eint9_switch, SA_TRIGGER_FALLING, "EINT9", NULL)) {
  68. printk(KERN_ERR "leds.c: Could not allocate EINT9 !\n");
  69. return -EIO;
  70. }
  71. leds_event(led_start);
  72. return 0;
  73. }
  74. __initcall(s3c6410_leds_init);