gcpu.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /******************************************************************************
  2. * INCLUDE LINUX HEADER
  3. ******************************************************************************/
  4. #include <linux/kernel.h>
  5. #include <linux/module.h>
  6. #include <linux/cdev.h>
  7. #include <linux/platform_device.h>
  8. #include <linux/device.h>
  9. #include <linux/cdev.h>
  10. #include <linux/proc_fs.h>
  11. #include <linux/interrupt.h>
  12. #include <linux/irq.h>
  13. #include <linux/of_platform.h>
  14. #include <linux/of_irq.h>
  15. #include <linux/of_address.h>
  16. /******************************************************************************
  17. * INCLUDE LIBRARY
  18. ******************************************************************************/
  19. /**************************************************************************
  20. * EXTERNAL VARIABLE
  21. **************************************************************************/
  22. /*************************************************************************
  23. * GLOBAL VARIABLE
  24. **************************************************************************/
  25. /**************************************************************************
  26. * EXTERNAL FUNCTION
  27. **************************************************************************/
  28. /* dummy interrupt handler for gcpu */
  29. static irqreturn_t gcpu_irq_handler(int irq, void *dev_id)
  30. {
  31. return IRQ_HANDLED;
  32. }
  33. /**************************************************************************
  34. * GCPU DRIVER INIT
  35. **************************************************************************/
  36. static int __init gcpu_init(void)
  37. {
  38. struct device_node *node = NULL;
  39. unsigned int gcpu_irq = 0;
  40. int ret = 0;
  41. /* register for GCPU */
  42. node = of_find_compatible_node(NULL, NULL, "mediatek,gcpu");
  43. if (node) {
  44. gcpu_irq = irq_of_parse_and_map(node, 0);
  45. pr_debug("[GCPU] irq_no: (%d)\n", gcpu_irq);
  46. ret = request_irq(gcpu_irq, (irq_handler_t)gcpu_irq_handler, IRQF_TRIGGER_LOW , "gcpu", NULL);
  47. if (ret != 0)
  48. pr_err("[GCPU] Failed to request irq! (%d) irq no: (%d)\n", ret, gcpu_irq);
  49. else
  50. pr_debug("[GCPU] request irq (%d) succeed!!\n", gcpu_irq);
  51. } else{
  52. pr_err("[GCPU] DT find compatible node failed!!\n");
  53. ret = -1;
  54. }
  55. return ret;
  56. }
  57. /**************************************************************************
  58. * GCPU DRIVER EXIT
  59. **************************************************************************/
  60. static void __exit gcpu_exit(void)
  61. {
  62. ;
  63. }
  64. module_init(gcpu_init);
  65. module_exit(gcpu_exit);
  66. /**************************************************************************
  67. * EXPORT FUNCTION
  68. **************************************************************************/
  69. MODULE_LICENSE("GPL");
  70. MODULE_AUTHOR("MediaTek Inc.");
  71. MODULE_DESCRIPTION("Mediatek GCPU Module");