Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * AMD MP2 Sensors transport driver
0004  *
0005  * Copyright 2020-2021 Advanced Micro Devices, Inc.
0006  * Authors: Nehal Bakulchandra Shah <Nehal-bakulchandra.shah@amd.com>
0007  *      Sandeep Singh <sandeep.singh@amd.com>
0008  *      Basavaraj Natikar <Basavaraj.Natikar@amd.com>
0009  */
0010 
0011 #ifndef AMDSFH_HID_H
0012 #define AMDSFH_HID_H
0013 
0014 #define MAX_HID_DEVICES     5
0015 #define AMD_SFH_HID_VENDOR  0x1022
0016 #define AMD_SFH_HID_PRODUCT 0x0001
0017 
0018 struct request_list {
0019     struct hid_device *hid;
0020     struct list_head list;
0021     u8 report_id;
0022     u8 sensor_idx;
0023     u8 report_type;
0024     u8 current_index;
0025 };
0026 
0027 struct amd_input_data {
0028     u32 *sensor_virt_addr[MAX_HID_DEVICES];
0029     u8 *input_report[MAX_HID_DEVICES];
0030 };
0031 
0032 struct amdtp_cl_data {
0033     u8 init_done;
0034     u32 cur_hid_dev;
0035     u32 hid_dev_count;
0036     u32 num_hid_devices;
0037     struct device_info *hid_devices;
0038     u8  *report_descr[MAX_HID_DEVICES];
0039     int report_descr_sz[MAX_HID_DEVICES];
0040     struct hid_device *hid_sensor_hubs[MAX_HID_DEVICES];
0041     u8 *hid_descr[MAX_HID_DEVICES];
0042     int hid_descr_size[MAX_HID_DEVICES];
0043     phys_addr_t phys_addr_base;
0044     dma_addr_t sensor_dma_addr[MAX_HID_DEVICES];
0045     u32 sensor_sts[MAX_HID_DEVICES];
0046     u32 sensor_requested_cnt[MAX_HID_DEVICES];
0047     u8 report_type[MAX_HID_DEVICES];
0048     u8 report_id[MAX_HID_DEVICES];
0049     u8 sensor_idx[MAX_HID_DEVICES];
0050     u8 *feature_report[MAX_HID_DEVICES];
0051     u8 request_done[MAX_HID_DEVICES];
0052     struct amd_input_data *in_data;
0053     struct delayed_work work;
0054     struct delayed_work work_buffer;
0055     struct request_list req_list;
0056 };
0057 
0058 /**
0059  * struct amdtp_hid_data - Per instance HID data
0060  * @index:      Device index in the order of enumeration
0061  * @request_done:   Get Feature/Input report complete flag
0062  *          used during get/set request from hid core
0063  * @cli_data:       Link to the client instance
0064  * @hid_wait:       Completion waitq
0065  *
0066  * Used to tie hid->driver data to driver client instance
0067  */
0068 struct amdtp_hid_data {
0069     int index;
0070     struct amdtp_cl_data *cli_data;
0071     wait_queue_head_t hid_wait;
0072 };
0073 
0074 /* Interface functions between HID LL driver and AMD SFH client */
0075 void hid_amdtp_set_feature(struct hid_device *hid, char *buf, u32 len, int report_id);
0076 void hid_amdtp_get_report(struct hid_device *hid, int report_id, int report_type);
0077 int amdtp_hid_probe(u32 cur_hid_dev, struct amdtp_cl_data *cli_data);
0078 void amdtp_hid_remove(struct amdtp_cl_data *cli_data);
0079 int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type);
0080 void amd_sfh_set_report(struct hid_device *hid, int report_id, int report_type);
0081 void amdtp_hid_wakeup(struct hid_device *hid);
0082 #endif