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) 21enum 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 30struct 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 44struct 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 57struct 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 69struct 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 81struct sfh_sensor_list { 82 union { 83 u32 slist; 84 struct { 85 u32 sensors : 16; 86 u32 rsvd : 16; 87 } sl; 88 }; 89}; 90 91struct sfh_sensor_prop { 92 union { 93 u32 sprop; 94 struct { 95 u32 elist : 16; 96 u32 feat : 16; 97 } sf; 98 }; 99}; 100 101struct 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 114struct 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 122struct sfh_float32 { 123 u32 x; 124 u32 y; 125 u32 z; 126}; 127 128struct sfh_accel_data { 129 struct sfh_common_data commondata; 130 struct sfh_float32 acceldata; 131 u32 accelstatus; 132}; 133 134struct sfh_gyro_data { 135 struct sfh_common_data commondata; 136 struct sfh_float32 gyrodata; 137 u32 result; 138}; 139 140struct sfh_mag_data { 141 struct sfh_common_data commondata; 142 struct sfh_float32 magdata; 143 u32 accuracy; 144}; 145 146struct 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 154struct 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 167void sfh_interface_init(struct amd_mp2_dev *mp2); 168void sfh_deinit_emp2(void); 169void amd_sfh1_1_set_desc_ops(struct amd_mp2_ops *mp2_ops); 170int amd_sfh_float_to_int(u32 flt32_val); 171#endif 172