| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| /* |
| * HID report descriptors, structures and routines |
| * Copyright 2020 Advanced Micro Devices, Inc. |
| * Authors: Nehal Bakulchandra Shah <Nehal-bakulchandra.shah@amd.com> |
| * Sandeep Singh <Sandeep.singh@amd.com> |
| */ |
| |
| #ifndef AMD_SFH_HID_DESCRIPTOR_H |
| #define AMD_SFH_HID_DESCRIPTOR_H |
| |
| enum desc_type { |
| /* Report descriptor name */ |
| descr_size = 1, |
| input_size, |
| feature_size, |
| }; |
| |
| struct common_feature_property { |
| /* common properties */ |
| u8 report_id; |
| u8 connection_type; |
| u8 report_state; |
| u8 power_state; |
| u8 sensor_state; |
| u32 report_interval; |
| } __packed; |
| |
| struct common_input_property { |
| /* common properties */ |
| u8 report_id; |
| u8 sensor_state; |
| u8 event_type; |
| } __packed; |
| |
| struct accel3_feature_report { |
| struct common_feature_property common_property; |
| /* properties specific to this sensor */ |
| u16 accel_change_sesnitivity; |
| s16 accel_sensitivity_max; |
| s16 accel_sensitivity_min; |
| } __packed; |
| |
| struct accel3_input_report { |
| struct common_input_property common_property; |
| /* values specific to this sensor */ |
| int in_accel_x_value; |
| int in_accel_y_value; |
| int in_accel_z_value; |
| /* include if required to support the "shake" event */ |
| u8 in_accel_shake_detection; |
| } __packed; |
| |
| struct gyro_feature_report { |
| struct common_feature_property common_property; |
| /* properties specific to this sensor */ |
| u16 gyro_change_sesnitivity; |
| s16 gyro_sensitivity_max; |
| s16 gyro_sensitivity_min; |
| } __packed; |
| |
| struct gyro_input_report { |
| struct common_input_property common_property; |
| /* values specific to this sensor */ |
| int in_angel_x_value; |
| int in_angel_y_value; |
| int in_angel_z_value; |
| } __packed; |
| |
| struct magno_feature_report { |
| struct common_feature_property common_property; |
| /*properties specific to this sensor */ |
| u16 magno_headingchange_sensitivity; |
| s16 heading_min; |
| s16 heading_max; |
| u16 flux_change_sensitivity; |
| s16 flux_min; |
| s16 flux_max; |
| } __packed; |
| |
| struct magno_input_report { |
| struct common_input_property common_property; |
| int in_magno_x; |
| int in_magno_y; |
| int in_magno_z; |
| int in_magno_accuracy; |
| } __packed; |
| |
| struct als_feature_report { |
| struct common_feature_property common_property; |
| /* properties specific to this sensor */ |
| u16 als_change_sesnitivity; |
| s16 als_sensitivity_max; |
| s16 als_sensitivity_min; |
| } __packed; |
| |
| struct als_input_report { |
| struct common_input_property common_property; |
| /* values specific to this sensor */ |
| int illuminance_value; |
| } __packed; |
| |
| struct hpd_feature_report { |
| struct common_feature_property common_property; |
| } __packed; |
| |
| struct hpd_input_report { |
| struct common_input_property common_property; |
| /* values specific to human presence sensor */ |
| u8 human_presence; |
| } __packed; |
| |
| int get_report_descriptor(int sensor_idx, u8 rep_desc[]); |
| u32 get_descr_sz(int sensor_idx, int descriptor_name); |
| u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report); |
| #endif |