1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * AMD MP2 1.1 communication interfaces |
4 | * |
5 | * Copyright (c) 2022, Advanced Micro Devices, Inc. |
6 | * All Rights Reserved. |
7 | * |
8 | * Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com> |
9 | */ |
10 | |
11 | #ifndef AMD_SFH_INTERFACE_H |
12 | #define AMD_SFH_INTERFACE_H |
13 | |
14 | #include "../amd_sfh_common.h" |
15 | |
16 | #define SENSOR_DATA_MEM_SIZE_DEFAULT 256 |
17 | #define TOTAL_STATIC_MEM_DEFAULT 1024 |
18 | #define OFFSET_SFH_INFO_BASE_DEFAULT 0 |
19 | #define OFFSET_SENSOR_DATA_DEFAULT (OFFSET_SFH_INFO_BASE_DEFAULT + \ |
20 | TOTAL_STATIC_MEM_DEFAULT) |
21 | enum sensor_index { |
22 | ACCEL_IDX, |
23 | GYRO_IDX, |
24 | MAG_IDX, |
25 | ALS_IDX = 4, |
26 | HPD_IDX = 5, |
27 | MAX_IDX = 15, |
28 | }; |
29 | |
30 | struct sfh_cmd_base { |
31 | union { |
32 | u32 ul; |
33 | struct { |
34 | u32 sensor_id : 4; |
35 | u32 cmd_id : 4; |
36 | u32 sub_cmd_id : 8; |
37 | u32 sub_cmd_value : 12; |
38 | u32 rsvd : 3; |
39 | u32 intr_disable : 1; |
40 | } cmd; |
41 | }; |
42 | }; |
43 | |
44 | struct sfh_cmd_response { |
45 | union { |
46 | u32 resp; |
47 | struct { |
48 | u32 response : 8; |
49 | u32 sensor_id : 4; |
50 | u32 cmd_id : 4; |
51 | u32 sub_cmd : 6; |
52 | u32 rsvd2 : 10; |
53 | } response; |
54 | }; |
55 | }; |
56 | |
57 | struct sfh_platform_info { |
58 | union { |
59 | u32 pi; |
60 | struct { |
61 | u32 cust_id : 16; |
62 | u32 plat_id : 6; |
63 | u32 interface_id : 4; |
64 | u32 rsvd : 6; |
65 | } pinfo; |
66 | }; |
67 | }; |
68 | |
69 | struct sfh_firmware_info { |
70 | union { |
71 | u32 fw_ver; |
72 | struct { |
73 | u32 minor_rev : 8; |
74 | u32 major_rev : 8; |
75 | u32 minor_ver : 8; |
76 | u32 major_ver : 8; |
77 | } fver; |
78 | }; |
79 | }; |
80 | |
81 | struct sfh_sensor_list { |
82 | union { |
83 | u32 slist; |
84 | struct { |
85 | u32 sensors : 16; |
86 | u32 rsvd : 16; |
87 | } sl; |
88 | }; |
89 | }; |
90 | |
91 | struct sfh_sensor_prop { |
92 | union { |
93 | u32 sprop; |
94 | struct { |
95 | u32 elist : 16; |
96 | u32 feat : 16; |
97 | } sf; |
98 | }; |
99 | }; |
100 | |
101 | struct sfh_base_info { |
102 | union { |
103 | u32 sfh_base[24]; |
104 | struct { |
105 | struct sfh_platform_info plat_info; |
106 | struct sfh_firmware_info fw_info; |
107 | struct sfh_sensor_list s_list; |
108 | u32 rsvd; |
109 | struct sfh_sensor_prop s_prop[16]; |
110 | } sbase; |
111 | }; |
112 | }; |
113 | |
114 | struct sfh_common_data { |
115 | u64 timestamp; |
116 | u32 intr_cnt; |
117 | u32 featvalid : 16; |
118 | u32 rsvd : 13; |
119 | u32 sensor_state : 3; |
120 | }; |
121 | |
122 | struct sfh_float32 { |
123 | u32 x; |
124 | u32 y; |
125 | u32 z; |
126 | }; |
127 | |
128 | struct sfh_accel_data { |
129 | struct sfh_common_data commondata; |
130 | struct sfh_float32 acceldata; |
131 | u32 accelstatus; |
132 | }; |
133 | |
134 | struct sfh_gyro_data { |
135 | struct sfh_common_data commondata; |
136 | struct sfh_float32 gyrodata; |
137 | u32 result; |
138 | }; |
139 | |
140 | struct sfh_mag_data { |
141 | struct sfh_common_data commondata; |
142 | struct sfh_float32 magdata; |
143 | u32 accuracy; |
144 | }; |
145 | |
146 | struct sfh_als_data { |
147 | struct sfh_common_data commondata; |
148 | u32 lux; |
149 | u32 light_color_temp; |
150 | u32 chromaticity_x; |
151 | u32 chromaticity_y; |
152 | }; |
153 | |
154 | struct hpd_status { |
155 | union { |
156 | struct { |
157 | u32 distance : 16; |
158 | u32 probablity : 8; |
159 | u32 presence : 2; |
160 | u32 rsvd : 5; |
161 | u32 state : 1; |
162 | } shpd; |
163 | u32 val; |
164 | }; |
165 | }; |
166 | |
167 | void sfh_interface_init(struct amd_mp2_dev *mp2); |
168 | void sfh_deinit_emp2(void); |
169 | void amd_sfh1_1_set_desc_ops(struct amd_mp2_ops *mp2_ops); |
170 | int amd_sfh_float_to_int(u32 flt32_val); |
171 | #endif |
172 | |