amd_sfh_hid.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * AMD MP2 Sensors transport driver
  4. *
  5. * Copyright 2020-2021 Advanced Micro Devices, Inc.
  6. * Authors: Nehal Bakulchandra Shah <[email protected]>
  7. * Sandeep Singh <[email protected]>
  8. * Basavaraj Natikar <[email protected]>
  9. */
  10. #ifndef AMDSFH_HID_H
  11. #define AMDSFH_HID_H
  12. #define MAX_HID_DEVICES 5
  13. #define AMD_SFH_HID_VENDOR 0x1022
  14. #define AMD_SFH_HID_PRODUCT 0x0001
  15. struct request_list {
  16. struct hid_device *hid;
  17. struct list_head list;
  18. u8 report_id;
  19. u8 sensor_idx;
  20. u8 report_type;
  21. u8 current_index;
  22. };
  23. struct amd_input_data {
  24. u32 *sensor_virt_addr[MAX_HID_DEVICES];
  25. u8 *input_report[MAX_HID_DEVICES];
  26. };
  27. struct amdtp_cl_data {
  28. u8 init_done;
  29. u32 cur_hid_dev;
  30. bool is_any_sensor_enabled;
  31. u32 hid_dev_count;
  32. u32 num_hid_devices;
  33. struct device_info *hid_devices;
  34. u8 *report_descr[MAX_HID_DEVICES];
  35. int report_descr_sz[MAX_HID_DEVICES];
  36. struct hid_device *hid_sensor_hubs[MAX_HID_DEVICES];
  37. u8 *hid_descr[MAX_HID_DEVICES];
  38. int hid_descr_size[MAX_HID_DEVICES];
  39. phys_addr_t phys_addr_base;
  40. dma_addr_t sensor_dma_addr[MAX_HID_DEVICES];
  41. u32 sensor_sts[MAX_HID_DEVICES];
  42. u32 sensor_requested_cnt[MAX_HID_DEVICES];
  43. u8 report_type[MAX_HID_DEVICES];
  44. u8 report_id[MAX_HID_DEVICES];
  45. u8 sensor_idx[MAX_HID_DEVICES];
  46. u8 *feature_report[MAX_HID_DEVICES];
  47. u8 request_done[MAX_HID_DEVICES];
  48. struct amd_input_data *in_data;
  49. struct delayed_work work;
  50. struct delayed_work work_buffer;
  51. struct request_list req_list;
  52. };
  53. /**
  54. * struct amdtp_hid_data - Per instance HID data
  55. * @index: Device index in the order of enumeration
  56. * @request_done: Get Feature/Input report complete flag
  57. * used during get/set request from hid core
  58. * @cli_data: Link to the client instance
  59. * @hid_wait: Completion waitq
  60. *
  61. * Used to tie hid->driver data to driver client instance
  62. */
  63. struct amdtp_hid_data {
  64. int index;
  65. struct amdtp_cl_data *cli_data;
  66. wait_queue_head_t hid_wait;
  67. };
  68. /* Interface functions between HID LL driver and AMD SFH client */
  69. void hid_amdtp_set_feature(struct hid_device *hid, char *buf, u32 len, int report_id);
  70. void hid_amdtp_get_report(struct hid_device *hid, int report_id, int report_type);
  71. int amdtp_hid_probe(u32 cur_hid_dev, struct amdtp_cl_data *cli_data);
  72. void amdtp_hid_remove(struct amdtp_cl_data *cli_data);
  73. int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type);
  74. void amd_sfh_set_report(struct hid_device *hid, int report_id, int report_type);
  75. void amdtp_hid_wakeup(struct hid_device *hid);
  76. #endif