14b2c53d9SSandeep Singh /* SPDX-License-Identifier: GPL-2.0-or-later */ 24b2c53d9SSandeep Singh /* 34b2c53d9SSandeep Singh * AMD MP2 Sensors transport driver 44b2c53d9SSandeep Singh * 5f75203cdSBasavaraj Natikar * Copyright 2020-2021 Advanced Micro Devices, Inc. 64b2c53d9SSandeep Singh * Authors: Nehal Bakulchandra Shah <Nehal-bakulchandra.shah@amd.com> 74b2c53d9SSandeep Singh * Sandeep Singh <sandeep.singh@amd.com> 8f75203cdSBasavaraj Natikar * Basavaraj Natikar <Basavaraj.Natikar@amd.com> 94b2c53d9SSandeep Singh */ 104b2c53d9SSandeep Singh 114b2c53d9SSandeep Singh #ifndef AMDSFH_HID_H 124b2c53d9SSandeep Singh #define AMDSFH_HID_H 134b2c53d9SSandeep Singh 14*37386669SBasavaraj Natikar #define MAX_HID_DEVICES 6 154b2c53d9SSandeep Singh #define AMD_SFH_HID_VENDOR 0x1022 164b2c53d9SSandeep Singh #define AMD_SFH_HID_PRODUCT 0x0001 174b2c53d9SSandeep Singh 188c68db65SBasavaraj Natikar struct request_list { 198c68db65SBasavaraj Natikar struct hid_device *hid; 208c68db65SBasavaraj Natikar struct list_head list; 218c68db65SBasavaraj Natikar u8 report_id; 228c68db65SBasavaraj Natikar u8 sensor_idx; 238c68db65SBasavaraj Natikar u8 report_type; 248c68db65SBasavaraj Natikar u8 current_index; 258c68db65SBasavaraj Natikar }; 268c68db65SBasavaraj Natikar 270aad9c95SBasavaraj Natikar struct amd_input_data { 280aad9c95SBasavaraj Natikar u32 *sensor_virt_addr[MAX_HID_DEVICES]; 290aad9c95SBasavaraj Natikar u8 *input_report[MAX_HID_DEVICES]; 300aad9c95SBasavaraj Natikar }; 310aad9c95SBasavaraj Natikar 324b2c53d9SSandeep Singh struct amdtp_cl_data { 334b2c53d9SSandeep Singh u8 init_done; 344b2c53d9SSandeep Singh u32 cur_hid_dev; 357bcfdab3SMario Limonciello bool is_any_sensor_enabled; 364b2c53d9SSandeep Singh u32 hid_dev_count; 374b2c53d9SSandeep Singh u32 num_hid_devices; 384b2c53d9SSandeep Singh struct device_info *hid_devices; 394b2c53d9SSandeep Singh u8 *report_descr[MAX_HID_DEVICES]; 404b2c53d9SSandeep Singh int report_descr_sz[MAX_HID_DEVICES]; 414b2c53d9SSandeep Singh struct hid_device *hid_sensor_hubs[MAX_HID_DEVICES]; 424b2c53d9SSandeep Singh u8 *hid_descr[MAX_HID_DEVICES]; 434b2c53d9SSandeep Singh int hid_descr_size[MAX_HID_DEVICES]; 444b2c53d9SSandeep Singh phys_addr_t phys_addr_base; 45de30491eSArnd Bergmann dma_addr_t sensor_dma_addr[MAX_HID_DEVICES]; 464b2c53d9SSandeep Singh u32 sensor_sts[MAX_HID_DEVICES]; 474b2c53d9SSandeep Singh u32 sensor_requested_cnt[MAX_HID_DEVICES]; 484b2c53d9SSandeep Singh u8 report_type[MAX_HID_DEVICES]; 494b2c53d9SSandeep Singh u8 report_id[MAX_HID_DEVICES]; 504b2c53d9SSandeep Singh u8 sensor_idx[MAX_HID_DEVICES]; 514b2c53d9SSandeep Singh u8 *feature_report[MAX_HID_DEVICES]; 524b2c53d9SSandeep Singh u8 request_done[MAX_HID_DEVICES]; 530aad9c95SBasavaraj Natikar struct amd_input_data *in_data; 544b2c53d9SSandeep Singh struct delayed_work work; 554b2c53d9SSandeep Singh struct delayed_work work_buffer; 56c092e274SBasavaraj Natikar struct request_list req_list; 574b2c53d9SSandeep Singh }; 584b2c53d9SSandeep Singh 594b2c53d9SSandeep Singh /** 604b2c53d9SSandeep Singh * struct amdtp_hid_data - Per instance HID data 614b2c53d9SSandeep Singh * @index: Device index in the order of enumeration 624b2c53d9SSandeep Singh * @request_done: Get Feature/Input report complete flag 634b2c53d9SSandeep Singh * used during get/set request from hid core 644b2c53d9SSandeep Singh * @cli_data: Link to the client instance 654b2c53d9SSandeep Singh * @hid_wait: Completion waitq 664b2c53d9SSandeep Singh * 674b2c53d9SSandeep Singh * Used to tie hid->driver data to driver client instance 684b2c53d9SSandeep Singh */ 694b2c53d9SSandeep Singh struct amdtp_hid_data { 704b2c53d9SSandeep Singh int index; 714b2c53d9SSandeep Singh struct amdtp_cl_data *cli_data; 724b2c53d9SSandeep Singh wait_queue_head_t hid_wait; 734b2c53d9SSandeep Singh }; 744b2c53d9SSandeep Singh 754b2c53d9SSandeep Singh /* Interface functions between HID LL driver and AMD SFH client */ 764b2c53d9SSandeep Singh void hid_amdtp_set_feature(struct hid_device *hid, char *buf, u32 len, int report_id); 774b2c53d9SSandeep Singh void hid_amdtp_get_report(struct hid_device *hid, int report_id, int report_type); 784b2c53d9SSandeep Singh int amdtp_hid_probe(u32 cur_hid_dev, struct amdtp_cl_data *cli_data); 794b2c53d9SSandeep Singh void amdtp_hid_remove(struct amdtp_cl_data *cli_data); 804b2c53d9SSandeep Singh int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type); 814b2c53d9SSandeep Singh void amd_sfh_set_report(struct hid_device *hid, int report_id, int report_type); 824b2c53d9SSandeep Singh void amdtp_hid_wakeup(struct hid_device *hid); 834b2c53d9SSandeep Singh #endif 84