1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * HID report descriptors, structures and routines
4  * Copyright 2020-2021 Advanced Micro Devices, Inc.
5  * Authors: Nehal Bakulchandra Shah <Nehal-bakulchandra.shah@amd.com>
6  *	    Sandeep Singh <Sandeep.singh@amd.com>
7  *	    Basavaraj Natikar <Basavaraj.Natikar@amd.com>
8  */
9 
10 #ifndef AMD_SFH_HID_DESCRIPTOR_H
11 #define AMD_SFH_HID_DESCRIPTOR_H
12 
13 enum desc_type {
14 	/* Report descriptor name */
15 	descr_size = 1,
16 	input_size,
17 	feature_size,
18 };
19 
20 struct common_feature_property {
21 	/* common properties */
22 	u8 report_id;
23 	u8 connection_type;
24 	u8 report_state;
25 	u8 power_state;
26 	u8 sensor_state;
27 	u32 report_interval;
28 } __packed;
29 
30 struct common_input_property {
31 	/* common properties */
32 	u8 report_id;
33 	u8 sensor_state;
34 	u8 event_type;
35 } __packed;
36 
37 struct accel3_feature_report {
38 	struct common_feature_property common_property;
39 	/* properties specific to this sensor */
40 	u16 accel_change_sesnitivity;
41 	s16 accel_sensitivity_max;
42 	s16 accel_sensitivity_min;
43 } __packed;
44 
45 struct accel3_input_report {
46 	struct	common_input_property common_property;
47 	/* values specific to this sensor */
48 	int in_accel_x_value;
49 	int in_accel_y_value;
50 	int in_accel_z_value;
51 	/* include if required to support the "shake" event */
52 	u8 in_accel_shake_detection;
53 } __packed;
54 
55 struct gyro_feature_report {
56 	struct common_feature_property common_property;
57 	/* properties specific to this sensor */
58 	u16 gyro_change_sesnitivity;
59 	s16 gyro_sensitivity_max;
60 	s16 gyro_sensitivity_min;
61 } __packed;
62 
63 struct gyro_input_report {
64 	struct	common_input_property common_property;
65 	/* values specific to this sensor */
66 	int in_angel_x_value;
67 	int in_angel_y_value;
68 	int in_angel_z_value;
69 } __packed;
70 
71 struct magno_feature_report {
72 	struct common_feature_property common_property;
73 	/*properties specific to this sensor */
74 	u16 magno_headingchange_sensitivity;
75 	s16 heading_min;
76 	s16 heading_max;
77 	u16 flux_change_sensitivity;
78 	s16 flux_min;
79 	s16 flux_max;
80 } __packed;
81 
82 struct magno_input_report {
83 	struct	common_input_property common_property;
84 	int in_magno_x;
85 	int in_magno_y;
86 	int in_magno_z;
87 	int in_magno_accuracy;
88 } __packed;
89 
90 struct als_feature_report {
91 	struct common_feature_property common_property;
92 	/* properties specific to this sensor */
93 	u16 als_change_sesnitivity;
94 	s16 als_sensitivity_max;
95 	s16 als_sensitivity_min;
96 } __packed;
97 
98 struct als_input_report {
99 	struct common_input_property common_property;
100 	/* values specific to this sensor */
101 	int illuminance_value;
102 } __packed;
103 
104 struct hpd_feature_report {
105 	struct common_feature_property common_property;
106 } __packed;
107 
108 struct hpd_input_report {
109 	struct common_input_property common_property;
110 	 /* values specific to human presence sensor */
111 	u8 human_presence;
112 } __packed;
113 
114 int get_report_descriptor(int sensor_idx, u8 rep_desc[]);
115 u32 get_descr_sz(int sensor_idx, int descriptor_name);
116 u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report);
117 #endif
118