From: David Heidelberg <[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]>

