flash_led_driver.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * @Description:
  3. */
  4. #ifndef _FLASH_LED_DRIVER_H_
  5. #define _FLASH_LED_DRIVER_H_
  6. #include <linux/module.h>
  7. #include <linux/uaccess.h>
  8. #include <linux/i2c.h>
  9. #include <linux/slab.h>
  10. #include <linux/interrupt.h>
  11. #include <linux/cdev.h>
  12. #include <linux/debugfs.h>
  13. #include <linux/delay.h>
  14. #include <linux/gpio.h>
  15. #include <linux/io.h>
  16. #include <linux/kernel.h>
  17. #include <linux/module.h>
  18. #include <linux/of.h>
  19. #include <linux/of_address.h>
  20. #include <linux/of_gpio.h>
  21. #include <linux/platform_device.h>
  22. #include <linux/spinlock.h>
  23. #include "flash_led_ioctl.h"
  24. #define UNDEFINED_IN_DTS 0xFF
  25. #define FLASH_LED_MAX_REGULATORS 10
  26. struct flash_led_driver_dev
  27. {
  28. struct cdev cdev;
  29. dev_t devt;
  30. struct class *class;
  31. struct mutex vvmutex;
  32. void *private;
  33. };
  34. struct flash_led_regulators {
  35. struct regulator *supply[FLASH_LED_MAX_REGULATORS];
  36. const char *name[FLASH_LED_MAX_REGULATORS];
  37. int num;
  38. };
  39. struct flash_led_function_s {
  40. uint8_t flash_led_name[100];
  41. uint32_t reserve_id;
  42. uint32_t time_out_ms;
  43. int (*init) (void *cxt);
  44. int (*uninit) (void *cxt);
  45. int (*enable_channel) (void *cxt, int channel);
  46. int (*disable_channel) (void *cxt, int channel);
  47. int (*set_mode) (void *cxt, flash_led_mode_t mode);
  48. int (*set_flash_brightness) (void *cxt, int channel, uint32_t val);
  49. int (*set_torch_brightness) (void *cxt, int channel, uint32_t val);
  50. };
  51. struct flash_led_dev {
  52. struct flash_led_function_s *flash_led_func;
  53. uint8_t i2c_bus;
  54. void *i2c_client;
  55. struct flash_led_sccb_cfg_s flash_led_sccb_cfg;
  56. struct flash_led_regulators regulators;
  57. };
  58. struct flash_led_ctrl {
  59. struct work_struct flash_led_work;
  60. const char *flash_led_name;
  61. long reg_size;
  62. void __iomem *base;
  63. int32_t device_idx;
  64. int touch_pin;
  65. int floodlight_en_pin;
  66. int projection_en_pin;
  67. int enable;
  68. struct iio_channel *floodlight_adc;
  69. struct iio_channel *projection_adc;
  70. struct flash_led_dev floodlight;
  71. struct flash_led_dev projection;
  72. dma_addr_t frame_mark_info_addr;
  73. volatile frame_mark_t *frame_mark;
  74. flash_led_switch_mod_t switch_mode;
  75. };
  76. int flash_led_init(struct flash_led_ctrl *dev);
  77. int flash_led_deinit(struct flash_led_ctrl *dev);
  78. long flash_led_priv_ioctl(struct flash_led_ctrl *dev, unsigned int cmd, void __user *args);
  79. int32_t flash_led_i2c_write(struct flash_led_dev *dev, uint32_t address, uint32_t data);
  80. int32_t flash_led_i2c_read(struct flash_led_dev *dev, uint32_t address, uint32_t *pdata);
  81. int flash_led_switch(struct flash_led_ctrl *pflash_led_dev ,uint64_t frame_id);
  82. #endif