@@ -141,6 +141,24 @@ u32 amd_sfh_wait_for_response(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_sts)
141141 return sensor_sts ;
142142}
143143
144+ const char * get_sensor_name (int idx )
145+ {
146+ switch (idx ) {
147+ case accel_idx :
148+ return "accelerometer" ;
149+ case gyro_idx :
150+ return "gyroscope" ;
151+ case mag_idx :
152+ return "magnetometer" ;
153+ case als_idx :
154+ return "ALS" ;
155+ case HPD_IDX :
156+ return "HPD" ;
157+ default :
158+ return "unknown sensor type" ;
159+ }
160+ }
161+
144162int amd_sfh_hid_client_init (struct amd_mp2_dev * privdata )
145163{
146164 struct amd_input_data * in_data = & privdata -> in_data ;
@@ -219,13 +237,27 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
219237 (privdata , cl_data -> sensor_idx [i ], SENSOR_DISABLED );
220238 if (status != SENSOR_ENABLED )
221239 cl_data -> sensor_sts [i ] = SENSOR_DISABLED ;
222- dev_dbg (dev , "sid 0x%x status 0x%x\n" ,
223- cl_data -> sensor_idx [i ], cl_data -> sensor_sts [i ]);
240+ dev_dbg (dev , "sid 0x%x (%s) status 0x%x\n" ,
241+ cl_data -> sensor_idx [i ],
242+ get_sensor_name (cl_data -> sensor_idx [i ]),
243+ cl_data -> sensor_sts [i ]);
224244 goto cleanup ;
225245 }
226246 }
227- dev_dbg (dev , "sid 0x%x status 0x%x\n" ,
228- cl_data -> sensor_idx [i ], cl_data -> sensor_sts [i ]);
247+ dev_dbg (dev , "sid 0x%x (%s) status 0x%x\n" ,
248+ cl_data -> sensor_idx [i ], get_sensor_name (cl_data -> sensor_idx [i ]),
249+ cl_data -> sensor_sts [i ]);
250+ }
251+ if (privdata -> mp2_ops -> discovery_status &&
252+ privdata -> mp2_ops -> discovery_status (privdata ) == 0 ) {
253+ amd_sfh_hid_client_deinit (privdata );
254+ for (i = 0 ; i < cl_data -> num_hid_devices ; i ++ ) {
255+ devm_kfree (dev , cl_data -> feature_report [i ]);
256+ devm_kfree (dev , in_data -> input_report [i ]);
257+ devm_kfree (dev , cl_data -> report_descr [i ]);
258+ }
259+ dev_warn (dev , "Failed to discover, sensors not enabled\n" );
260+ return - EOPNOTSUPP ;
229261 }
230262 schedule_delayed_work (& cl_data -> work_buffer , msecs_to_jiffies (AMD_SFH_IDLE_LOOP ));
231263 return 0 ;
@@ -257,8 +289,9 @@ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
257289 (privdata , cl_data -> sensor_idx [i ], SENSOR_DISABLED );
258290 if (status != SENSOR_ENABLED )
259291 cl_data -> sensor_sts [i ] = SENSOR_DISABLED ;
260- dev_dbg (& privdata -> pdev -> dev , "stopping sid 0x%x status 0x%x\n" ,
261- cl_data -> sensor_idx [i ], cl_data -> sensor_sts [i ]);
292+ dev_dbg (& privdata -> pdev -> dev , "stopping sid 0x%x (%s) status 0x%x\n" ,
293+ cl_data -> sensor_idx [i ], get_sensor_name (cl_data -> sensor_idx [i ]),
294+ cl_data -> sensor_sts [i ]);
262295 }
263296 }
264297
0 commit comments