Browse Source

Add basic presence check for cirque trackpad. (#22546)

Dasky 2 years ago
parent
commit
86f073a8ea
2 changed files with 18 additions and 6 deletions
  1. 7 6
      docs/feature_pointing_device.md
  2. 11 0
      drivers/sensors/cirque_pinnacle.c

+ 7 - 6
docs/feature_pointing_device.md

@@ -177,12 +177,13 @@ This supports the Cirque Pinnacle 1CA027 Touch Controller, which is used in the
 
 #### Common settings
 
-| Setting                          | Description                                                | Default                                     |
-| -------------------------------- | ---------------------------------------------------------- | ------------------------------------------- |
-| `CIRQUE_PINNACLE_DIAMETER_MM`    | (Optional) Diameter of the trackpad sensor in millimeters. | `40`                                        |
-| `CIRQUE_PINNACLE_ATTENUATION`    | (Optional) Sets the attenuation of the sensor data.        | `EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X` |
-| `CIRQUE_PINNACLE_CURVED_OVERLAY` | (Optional) Applies settings tuned for curved overlay.      | _not defined_                               |
-| `CIRQUE_PINNACLE_POSITION_MODE`  | (Optional) Mode of operation.                              | _not defined_                               |
+| Setting                              | Description                                                | Default                                     |
+| ------------------------------------ | ---------------------------------------------------------- | ------------------------------------------- |
+| `CIRQUE_PINNACLE_DIAMETER_MM`        | (Optional) Diameter of the trackpad sensor in millimeters. | `40`                                        |
+| `CIRQUE_PINNACLE_ATTENUATION`        | (Optional) Sets the attenuation of the sensor data.        | `EXTREG__TRACK_ADCCONFIG__ADC_ATTENUATE_4X` |
+| `CIRQUE_PINNACLE_CURVED_OVERLAY`     | (Optional) Applies settings tuned for curved overlay.      | _not defined_                               |
+| `CIRQUE_PINNACLE_POSITION_MODE`      | (Optional) Mode of operation.                              | _not defined_                               |
+| `CIRQUE_PINNACLE_SKIP_SENSOR_CHECK`  | (Optional) Skips sensor presence check                     | _not defined_                               |
 
 **`CIRQUE_PINNACLE_ATTENUATION`** is a measure of how much data is suppressed in regards to sensitivity. The higher the attenuation, the less sensitive the touchpad will be.
 

+ 11 - 0
drivers/sensors/cirque_pinnacle.c

@@ -216,6 +216,13 @@ void cirque_pinnacle_cursor_smoothing(bool enable) {
     RAP_Write(HOSTREG__FEEDCONFIG3, feedconfig3);
 }
 
+// Check sensor is connected
+bool cirque_pinnacle_connected(void) {
+    uint8_t zidle = 0;
+    RAP_ReadBytes(HOSTREG__ZIDLE, &zidle, 1);
+    return zidle == HOSTREG__ZIDLE_DEFVAL;
+}
+
 /*  Pinnacle-based TM040040/TM035035/TM023023 Functions  */
 void cirque_pinnacle_init(void) {
 #if defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi)
@@ -274,6 +281,10 @@ void cirque_pinnacle_init(void) {
     }
 
     cirque_pinnacle_enable_feed(true);
+
+#ifndef CIRQUE_PINNACLE_SKIP_SENSOR_CHECK
+    touchpad_init = cirque_pinnacle_connected();
+#endif
 }
 
 pinnacle_data_t cirque_pinnacle_read_data(void) {