dummy-gpio.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <linux/kernel.h>
  2. #include <linux/platform_device.h>
  3. #include <linux/gpio.h>
  4. #include <linux/gpio/driver.h>
  5. #include <linux/module.h>
  6. #include <linux/init.h>
  7. struct dummy_gpio {
  8. struct gpio_chip gc;
  9. struct mutex lock;
  10. };
  11. static struct dummy_gpio dgpio;
  12. static int dummy_gpio_direction_input(struct gpio_chip *chip, unsigned offset) {
  13. printk("direction input\n");
  14. return 0;
  15. }
  16. static void dummy_gpio_set(struct gpio_chip *chip, unsigned offset, int value) {
  17. printk("set\n");
  18. }
  19. static int dummy_gpio_direction_output(struct gpio_chip *chip, unsigned offset, int value) {
  20. printk("output\n");
  21. return 0;
  22. }
  23. static int dummy_gpio_get(struct gpio_chip *chip, unsigned offset) {
  24. printk("get\n");
  25. return 0;
  26. }
  27. static int __init dummy_gpio_init(void) {
  28. int err;
  29. mutex_init(&dgpio.lock);
  30. dgpio.gc.label = "dummy_gpio";
  31. dgpio.gc.direction_input = dummy_gpio_direction_input;
  32. dgpio.gc.get = dummy_gpio_get;
  33. dgpio.gc.direction_output = dummy_gpio_direction_output;
  34. dgpio.gc.set = dummy_gpio_set;
  35. dgpio.gc.ngpio = 8;
  36. dgpio.gc.can_sleep = true;
  37. // from 4.5
  38. dgpio.gc.parent = NULL;
  39. // dgpio.gc.dev = NULL;
  40. dgpio.gc.owner = THIS_MODULE;
  41. // gpiochip_add_data from 4.5
  42. err = gpiochip_add(&dgpio.gc);
  43. //err = gpiochip_add_data()
  44. if(err)
  45. goto exit_destroy;
  46. return err;
  47. exit_destroy:
  48. mutex_destroy(&dgpio.lock);
  49. return err;
  50. }
  51. static void __exit dummy_gpio_exit(void) {
  52. gpiochip_remove(&dgpio.gc);
  53. mutex_destroy(&dgpio.lock);
  54. printk("dummy_gpio: Cya in another life\n");
  55. }
  56. module_init(dummy_gpio_init);
  57. module_exit(dummy_gpio_exit);
  58. MODULE_LICENSE("GPL");
  59. MODULE_AUTHOR("encrypt";)
  60. MODULE_DESCRIPTION("Dummy gpiochip");