mt_gpio_base_linux.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <linux/gpio.h>
  2. #include <linux/kernel.h>
  3. #include <linux/slab.h>
  4. #include <linux/module.h>
  5. #include <linux/mfd/core.h>
  6. #include <linux/platform_device.h>
  7. #include <linux/seq_file.h>
  8. #include <mt_gpio_base.h>
  9. #include <mt-plat/mt_gpio_core.h>
  10. /*#include <mach/eint.h>*/
  11. #include <linux/interrupt.h>
  12. #include <linux/irq.h>
  13. #include <linux/spinlock.h>
  14. #include <linux/device.h>
  15. #include <linux/err.h>
  16. #include <linux/debugfs.h>
  17. #include <linux/of_gpio.h>
  18. #include <linux/idr.h>
  19. static const signed int pin_eint_map[MT_GPIO_BASE_MAX] = {
  20. };
  21. static int mtk_gpio_request(struct gpio_chip *chip, unsigned offset)
  22. {
  23. return mt_set_gpio_mode_base(offset, 0);
  24. }
  25. static int mtk_get_gpio_direction(struct gpio_chip *chip, unsigned offset)
  26. {
  27. return 1 - mt_get_gpio_dir_base(offset);
  28. }
  29. static int mtk_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
  30. {
  31. return mt_set_gpio_dir_base(offset, 0);
  32. }
  33. static int mtk_gpio_get(struct gpio_chip *chip, unsigned offset)
  34. {
  35. int status = mt_get_gpio_dir_base(offset);
  36. if (status == 0)
  37. return mt_get_gpio_in_base(offset);
  38. else if (status == 1)
  39. return mt_get_gpio_out_base(offset);
  40. return 1;
  41. }
  42. static int mtk_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value)
  43. {
  44. return mt_set_gpio_dir_base(offset, 1);
  45. }
  46. static void mtk_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
  47. {
  48. mt_set_gpio_out_base(offset, value);
  49. }
  50. static int mtk_gpio_to_irq(struct gpio_chip *chip, unsigned pin)
  51. {
  52. /*return mt_gpio_to_irq(pin);*/
  53. return 0;
  54. }
  55. static int mtk_gpio_set_debounce(struct gpio_chip *chip, unsigned offset, unsigned debounce)
  56. {
  57. /*mt_eint_set_hw_debounce(offset, debounce);*/
  58. return 0;
  59. }
  60. static struct gpio_chip mtk_gpio_chip = {
  61. .label = "mtk-gpio",
  62. .request = mtk_gpio_request,
  63. .get_direction = mtk_get_gpio_direction,
  64. .direction_input = mtk_gpio_direction_input,
  65. .get = mtk_gpio_get,
  66. .direction_output = mtk_gpio_direction_output,
  67. .set = mtk_gpio_set,
  68. .base = MT_GPIO_BASE_START,
  69. .ngpio = MT_GPIO_BASE_MAX,
  70. .to_irq = mtk_gpio_to_irq,
  71. .set_debounce = mtk_gpio_set_debounce,
  72. };
  73. static int __init mtk_gpio_init(void)
  74. {
  75. return gpiochip_add(&mtk_gpio_chip);
  76. }
  77. postcore_initcall(mtk_gpio_init);