162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * AMD MP2 Sensors transport driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2020-2021 Advanced Micro Devices, Inc. 662306a36Sopenharmony_ci * Authors: Nehal Bakulchandra Shah <Nehal-bakulchandra.shah@amd.com> 762306a36Sopenharmony_ci * Sandeep Singh <sandeep.singh@amd.com> 862306a36Sopenharmony_ci * Basavaraj Natikar <Basavaraj.Natikar@amd.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef AMDSFH_HID_H 1262306a36Sopenharmony_ci#define AMDSFH_HID_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define MAX_HID_DEVICES 6 1562306a36Sopenharmony_ci#define AMD_SFH_HID_VENDOR 0x1022 1662306a36Sopenharmony_ci#define AMD_SFH_HID_PRODUCT 0x0001 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct request_list { 1962306a36Sopenharmony_ci struct hid_device *hid; 2062306a36Sopenharmony_ci struct list_head list; 2162306a36Sopenharmony_ci u8 report_id; 2262306a36Sopenharmony_ci u8 sensor_idx; 2362306a36Sopenharmony_ci u8 report_type; 2462306a36Sopenharmony_ci u8 current_index; 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct amd_input_data { 2862306a36Sopenharmony_ci u32 *sensor_virt_addr[MAX_HID_DEVICES]; 2962306a36Sopenharmony_ci u8 *input_report[MAX_HID_DEVICES]; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistruct amdtp_cl_data { 3362306a36Sopenharmony_ci u8 init_done; 3462306a36Sopenharmony_ci u32 cur_hid_dev; 3562306a36Sopenharmony_ci bool is_any_sensor_enabled; 3662306a36Sopenharmony_ci u32 hid_dev_count; 3762306a36Sopenharmony_ci u32 num_hid_devices; 3862306a36Sopenharmony_ci struct device_info *hid_devices; 3962306a36Sopenharmony_ci u8 *report_descr[MAX_HID_DEVICES]; 4062306a36Sopenharmony_ci int report_descr_sz[MAX_HID_DEVICES]; 4162306a36Sopenharmony_ci struct hid_device *hid_sensor_hubs[MAX_HID_DEVICES]; 4262306a36Sopenharmony_ci u8 *hid_descr[MAX_HID_DEVICES]; 4362306a36Sopenharmony_ci int hid_descr_size[MAX_HID_DEVICES]; 4462306a36Sopenharmony_ci phys_addr_t phys_addr_base; 4562306a36Sopenharmony_ci dma_addr_t sensor_dma_addr[MAX_HID_DEVICES]; 4662306a36Sopenharmony_ci u32 sensor_sts[MAX_HID_DEVICES]; 4762306a36Sopenharmony_ci u32 sensor_requested_cnt[MAX_HID_DEVICES]; 4862306a36Sopenharmony_ci u8 report_type[MAX_HID_DEVICES]; 4962306a36Sopenharmony_ci u8 report_id[MAX_HID_DEVICES]; 5062306a36Sopenharmony_ci u8 sensor_idx[MAX_HID_DEVICES]; 5162306a36Sopenharmony_ci u8 *feature_report[MAX_HID_DEVICES]; 5262306a36Sopenharmony_ci u8 request_done[MAX_HID_DEVICES]; 5362306a36Sopenharmony_ci struct amd_input_data *in_data; 5462306a36Sopenharmony_ci struct delayed_work work; 5562306a36Sopenharmony_ci struct delayed_work work_buffer; 5662306a36Sopenharmony_ci struct request_list req_list; 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci/** 6062306a36Sopenharmony_ci * struct amdtp_hid_data - Per instance HID data 6162306a36Sopenharmony_ci * @index: Device index in the order of enumeration 6262306a36Sopenharmony_ci * @request_done: Get Feature/Input report complete flag 6362306a36Sopenharmony_ci * used during get/set request from hid core 6462306a36Sopenharmony_ci * @cli_data: Link to the client instance 6562306a36Sopenharmony_ci * @hid_wait: Completion waitq 6662306a36Sopenharmony_ci * 6762306a36Sopenharmony_ci * Used to tie hid->driver data to driver client instance 6862306a36Sopenharmony_ci */ 6962306a36Sopenharmony_cistruct amdtp_hid_data { 7062306a36Sopenharmony_ci int index; 7162306a36Sopenharmony_ci struct amdtp_cl_data *cli_data; 7262306a36Sopenharmony_ci wait_queue_head_t hid_wait; 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci/* Interface functions between HID LL driver and AMD SFH client */ 7662306a36Sopenharmony_civoid hid_amdtp_set_feature(struct hid_device *hid, char *buf, u32 len, int report_id); 7762306a36Sopenharmony_civoid hid_amdtp_get_report(struct hid_device *hid, int report_id, int report_type); 7862306a36Sopenharmony_ciint amdtp_hid_probe(u32 cur_hid_dev, struct amdtp_cl_data *cli_data); 7962306a36Sopenharmony_civoid amdtp_hid_remove(struct amdtp_cl_data *cli_data); 8062306a36Sopenharmony_ciint amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type); 8162306a36Sopenharmony_civoid amd_sfh_set_report(struct hid_device *hid, int report_id, int report_type); 8262306a36Sopenharmony_civoid amdtp_hid_wakeup(struct hid_device *hid); 8362306a36Sopenharmony_ci#endif 84