xref: /openbmc/linux/drivers/hid/amd-sfh-hid/amd_sfh_hid.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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