[PATCH v2] Input: rmi4 - Use platform data instead of query, when available

David Heidelberg <[email protected]>
Newsgroups org.kernel.feeds.b4-sent,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel,org.kernel.vger.phone-devel
Message-ID <[email protected]>
Platform data may define touchscreen-x-mm and touchscreen-y-mm, but
these were quietly overridden by data provided by sensor.

Signed-off-by: David Heidelberg <[email protected]>
---
This series ensures, that when invalid value is detected or mismatch
between value defined in the device-tree and the read from the
touchscreen is observed, the user is notified and zero is ignored.
---
Changes in v2:
- Reworked to use device-tree values, when available, but still detect
  when both or one is missing. (Dmitry)
- Link to v1: https://patch.msgid.link/[email protected]
---
 drivers/input/rmi4/rmi_f12.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/input/rmi4/rmi_f12.c b/drivers/input/rmi4/rmi_f12.c
index 88c28089de993..841884d967a3d 100644
--- a/drivers/input/rmi4/rmi_f12.c
+++ b/drivers/input/rmi4/rmi_f12.c
@@ -150,47 +150,55 @@ static int rmi_f12_read_sensor_tuning(struct f12_data *f12)
 			"%s: Inactive Border xlo:%d xhi:%d ylo:%d yhi:%d\n",
 			__func__,
 			buf[offset], buf[offset + 1],
 			buf[offset + 2], buf[offset + 3]);
 
 		offset += 4;
 	}
 
+	/* When platform data are provided, we're done */
+	if (sensor->x_mm && sensor->y_mm)
+		return 0;
+
 	/*
 	 * Use the Query DPM feature when the resolution query register
 	 * exists.
 	 */
 	if (rmi_get_register_desc_item(&f12->query_reg_desc,
 				       RMI_F12_QUERY_RESOLUTION)) {
 		offset = rmi_register_desc_calc_reg_offset(&f12->query_reg_desc,
 							   RMI_F12_QUERY_RESOLUTION);
 		query_dpm_addr = fn->fd.query_base_addr	+ offset;
 		ret = rmi_read(fn->rmi_dev, query_dpm_addr, buf);
 		if (ret) {
 			dev_err(&fn->dev, "Failed to read DPM value: %d\n", ret);
 			return ret;
 		}
 		dpm_resolution = buf[0];
 
-		sensor->x_mm = sensor->max_x / dpm_resolution;
-		sensor->y_mm = sensor->max_y / dpm_resolution;
+		if (!sensor->x_mm)
+			sensor->x_mm = sensor->max_x / dpm_resolution;
+		if (!sensor->y_mm)
+			sensor->y_mm = sensor->max_y / dpm_resolution;
 	} else {
 		if (rmi_register_desc_has_subpacket(item, 3)) {
 			rx_receivers = buf[offset];
 			tx_receivers = buf[offset + 1];
 			offset += 2;
 		}
 
 		/* Skip over sensor flags */
 		if (rmi_register_desc_has_subpacket(item, 4))
 			offset += 1;
 
-		sensor->x_mm = (pitch_x * rx_receivers) >> 12;
-		sensor->y_mm = (pitch_y * tx_receivers) >> 12;
+		if (!sensor->x_mm)
+			sensor->x_mm = (pitch_x * rx_receivers) >> 12;
+		if (!sensor->y_mm)
+			sensor->y_mm = (pitch_y * tx_receivers) >> 12;
 	}
 
 	rmi_dbg(RMI_DEBUG_FN, &fn->dev, "%s: x_mm: %d y_mm: %d\n", __func__,
 		sensor->x_mm, sensor->y_mm);
 
 	return 0;
 }
 

---
base-commit: 95d6a9ccef99117115e41e9adb271243bd5e985b
change-id: 20260731-respect-x-y-mm-f74a2970e9b7

Best regards,
--  
David Heidelberg <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.