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
13enum desc_type {
14	/* Report descriptor name */
15	descr_size = 1,
16	input_size,
17	feature_size,
18};
19
20struct 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
30struct common_input_property {
31	/* common properties */
32	u8 report_id;
33	u8 sensor_state;
34	u8 event_type;
35} __packed;
36
37struct 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
45struct 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
55struct 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
63struct 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
71struct 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
82struct 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
90struct 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
98struct als_input_report {
99	struct common_input_property common_property;
100	/* values specific to this sensor */
101	int illuminance_value;
102	int light_color_temp;
103	int chromaticity_x_value;
104	int chromaticity_y_value;
105} __packed;
106
107struct hpd_feature_report {
108	struct common_feature_property common_property;
109} __packed;
110
111struct hpd_input_report {
112	struct common_input_property common_property;
113	 /* values specific to human presence sensor */
114	u8 human_presence;
115} __packed;
116
117#endif
118