From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f53.google.com (mail-dl1-f53.google.com [74.125.82.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95D743CF66E for ; Tue, 5 May 2026 05:00:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777957221; cv=none; b=c0P2QPRoHhR0dPhgPNxkPTbU6R1slXsFEOQ4SJYDO+o2kF9U2DBk56zB/D5i3iaVnxEOnjrqr41qfl/cIsMjer8dmecDf5gswZEkpwq8O9QfYyaCqNjFfnRswK0DiQirGIGBEZTYtrsegxOc7MSAdicAF7LfdEzHsWIOCVx2Vtc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777957221; c=relaxed/simple; bh=/XcQ/vHrQKND6P1keM0qbILLtaIrPDLZPJklV8CW56s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BjNtWCXz2t5o51eiN0Z0SoJjaB6JDwLw1EeL07QTnewoFo0kFijYZMgophFNG+F3M4Yy2euZ5NbuYTLx4xup3njE6p4WCRS4FQQNBGwduH40MSmxgMF3ExvcQvnz0RtcU3V3hBG5k55QiEvFOIrI9MvaOKE3AbyTf05+pcxVwrM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=enFSE3EC; arc=none smtp.client-ip=74.125.82.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="enFSE3EC" Received: by mail-dl1-f53.google.com with SMTP id a92af1059eb24-12dbd0f7ecaso10803115c88.0 for ; Mon, 04 May 2026 22:00:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777957219; x=1778562019; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MrRIUSCQHk+6yCp7kcAAyv8TYXxHCFqbx+b4o8R1yqo=; b=enFSE3EC4ucw0KlcuTQdYgZ8KvCfPFdwt7zVwOiwOpr5Cf1huOFBh/wZXNoIjSj+IA gpMpddv7bL2iVXj63WNNFZAyXc83PY3Rws/aghTUzR3T2XzY2sTFRgHTt8AwwwtiseNc Jq3/bGWKJo17/n28iSm2jNSG80hgJF4SDMpehxNaFndAsEFqiSUhx3NoOb2r7jrCyPXN XSK5861uYugpE//HYy670HYyJK9gjQoetJ2vQfKjq5yKF8fu6vI2Q06Ynd+1Qil44iM6 N5B7ZlQVTnv1oQ9K6tJdvMRF7dIj1m8D0qwh9KM6npzgZKbrq+bRpEi6rVDKKMMhMYWj 4xSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777957219; x=1778562019; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=MrRIUSCQHk+6yCp7kcAAyv8TYXxHCFqbx+b4o8R1yqo=; b=JiUs9rDf3YRVaJyAcZwYX7NLVcF64jReDj2U3HN2YQiiH7uBAJMKsTjiVq1L8q3Tle tvKdyN+UgvZ23GwBwwduOFVmaRyKQJ07wl69xYSesrvjHYYUIKk9sDaTLhB/C/LjdQDd nfiCdqsgfWInim8cI9xxsD2abMwbWBjxpI9wpPi2PxX14MdzPL1pVbSzqSWkBPlLoEhB KBrA0xCWoB0yRs28/j2qKlR//8OzaXqcfuXsLSu9sCLdkaNr/C6OsvBcwLYa7j8moFz0 uCUQNkzf4fpYo55JqVoXVpvlzoUsGYotobHWJbk9Kk0IAv8aQ8qMe5r9PPssMd3ak12q AQ8g== X-Forwarded-Encrypted: i=1; AFNElJ/YJwmHk+6linC8vnnPeLmr0Kw11NruJOKK5MU16v2sQmjDPtTKnms4biN6hlUV2pPQBPyvUUnlJG0FUlo=@vger.kernel.org X-Gm-Message-State: AOJu0YxfM792YRPFVU8GqtrmehdKoqJP1AI2CyW64GqwP/F6Hq4Xq4g4 L9G+cJR+bl/xJNIof8B8X6P3lo8VrmmFUNuTkmx3gkMLICt4RF9cVmEm X-Gm-Gg: AeBDievhhxcmfI5DkqmSfODrom3cuE/0HzQQIK1FDJPXKqsITA3WjwpF/WEmw5njKyp lxwDGV7I+jZs/LSw1gkME7nShdSa1uyS16IpNLWLXSmgvXZlDVmgPCADgwjO3lcUOC7ILy6qsCY 5abBVyR4+Rls8710wm+yq5VYXTGrw5RxaEuLbmjK5geyHMQQMJv8gV0Hu57JBa+ijLJ0GSzXZuw 9MEnt26KDAVIHrN3UIUyuTDiJtqchzOZqqkyiBe7FepHKsj8txux0Kz3DJ8G4XOB4z79vVExGWV HrkT7w64VljBucY89nxmDWit32HDMzpAR5DcreDxtN0XFaUbbq+Ot89Ylz+jYx+/kUZg2iKh5nz fhctQnFLasnHfGRipk9XpYj7yU437KsAIk+ewrZmOHe7FKHyovcHbtcEfHVt92oAEI5ZOi85iMR 1+1WLf9QjKpNOUew10Kgh+j/vc7gJ8RmeX3pXDQ1xfjjpc0e8N+L/cMt082fTGgCCI6qeHb8TdT qf0pD8Ti5uclkdzIztMvyipXQ== X-Received: by 2002:a05:7022:78f:b0:12a:713b:8964 with SMTP id a92af1059eb24-12dfd7ec572mr5932633c88.11.1777957218594; Mon, 04 May 2026 22:00:18 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:94ef:a6f3:2c96:2d58]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12df827a73fsm16897502c88.1.2026.05.04.22.00.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 22:00:17 -0700 (PDT) From: Dmitry Torokhov To: linux-input@vger.kernel.org Cc: Marge Yang , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: [PATCH v2 12/20] Input: rmi4 - refactor F12 probe function Date: Mon, 4 May 2026 21:59:42 -0700 Message-ID: <20260505045952.1570713-12-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.54.0.545.g6539524ca2-goog In-Reply-To: <20260505045952.1570713-1-dmitry.torokhov@gmail.com> References: <20260505045952.1570713-1-dmitry.torokhov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The F12 probe function contains highly repetitive logic for parsing register descriptors and their individual data items. Refactor the function to use loops to eliminate redundancy, and clarify the code. Assisted-by: Gemini:gemini-3.1-pro Signed-off-by: Dmitry Torokhov --- drivers/input/rmi4/rmi_f12.c | 197 ++++++++++++++--------------------- 1 file changed, 81 insertions(+), 116 deletions(-) diff --git a/drivers/input/rmi4/rmi_f12.c b/drivers/input/rmi4/rmi_f12.c index c2b07c6905d7..973288103b6a 100644 --- a/drivers/input/rmi4/rmi_f12.c +++ b/drivers/input/rmi4/rmi_f12.c @@ -61,6 +61,36 @@ struct f12_data { unsigned long *rel_mask; }; +static int rmi_f12_read_register_descs(struct rmi_function *fn, + struct f12_data *f12, u16 query_addr) +{ + struct { + struct rmi_register_descriptor *desc; + const char *name; + } descriptors[] = { + { &f12->query_reg_desc, "Query" }, + { &f12->control_reg_desc, "Control" }, + { &f12->data_reg_desc, "Data" }, + }; + struct rmi_device *rmi_dev = fn->rmi_dev; + int error; + int i; + + for (i = 0; i < ARRAY_SIZE(descriptors); i++) { + error = rmi_read_register_desc(rmi_dev, query_addr, + descriptors[i].desc); + if (error) { + dev_err(&fn->dev, + "Failed to read the %s Register Descriptor: %d\n", + descriptors[i].name, error); + return error; + } + query_addr += 3; + } + + return 0; +} + static int rmi_f12_read_sensor_tuning(struct f12_data *f12) { const struct rmi_register_desc_item *item; @@ -351,6 +381,7 @@ static int rmi_f12_probe(struct rmi_function *fn) struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); u16 data_offset = 0; int mask_size; + int i; rmi_dbg(RMI_DEBUG_FN, &fn->dev, "%s\n", __func__); @@ -393,35 +424,9 @@ static int rmi_f12_probe(struct rmi_function *fn) f12->sensor_pdata = pdata->sensor_pdata; } - ret = rmi_read_register_desc(rmi_dev, query_addr, - &f12->query_reg_desc); - if (ret) { - dev_err(&fn->dev, - "Failed to read the Query Register Descriptor: %d\n", - ret); - return ret; - } - query_addr += 3; - - ret = rmi_read_register_desc(rmi_dev, query_addr, - &f12->control_reg_desc); - if (ret) { - dev_err(&fn->dev, - "Failed to read the Control Register Descriptor: %d\n", - ret); - return ret; - } - query_addr += 3; - - ret = rmi_read_register_desc(rmi_dev, query_addr, - &f12->data_reg_desc); - if (ret) { - dev_err(&fn->dev, - "Failed to read the Data Register Descriptor: %d\n", - ret); + ret = rmi_f12_read_register_descs(fn, f12, query_addr); + if (ret) return ret; - } - query_addr += 3; sensor = &f12->sensor; sensor->fn = fn; @@ -452,101 +457,61 @@ static int rmi_f12_probe(struct rmi_function *fn) return ret; /* - * Figure out what data is contained in the data registers. HID devices - * may have registers defined, but their data is not reported in the - * HID attention report. Registers which are not reported in the HID - * attention report check to see if the device is receiving data from - * HID attention reports. + * Identify available data registers and calculate their offsets within + * the attention report. For HID devices, only Data1 and Data5 are + * included in the report; other registers may be described but are + * not transmitted in the attention packet and thus skipped here. */ - item = rmi_get_register_desc_item(&f12->data_reg_desc, 0); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 1); - if (item) { - f12->data1 = item; - f12->data1_offset = data_offset; - data_offset += item->reg_size; - - if (item->num_subpackets > 255) { - dev_err(&fn->dev, "Too many fingers declared: %d\n", - item->num_subpackets); - return -EINVAL; - } - - sensor->nbr_fingers = item->num_subpackets; - sensor->report_abs = 1; - sensor->attn_size += item->reg_size; - } - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 2); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 3); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 4); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 5); - if (item) { - f12->data5 = item; - f12->data5_offset = data_offset; - data_offset += item->reg_size; - sensor->attn_size += item->reg_size; - } - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 6); - if (item && !drvdata->attn_data.data) { - f12->data6 = item; - f12->data6_offset = data_offset; - data_offset += item->reg_size; - } - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 7); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 8); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; - - item = rmi_get_register_desc_item(&f12->data_reg_desc, 9); - if (item && !drvdata->attn_data.data) { - f12->data9 = item; - f12->data9_offset = data_offset; - data_offset += item->reg_size; - if (!sensor->report_abs) - sensor->report_rel = 1; - } + for (i = 0; i < 16; i++) { + item = rmi_get_register_desc_item(&f12->data_reg_desc, i); + if (!item) + continue; + + /* HID attention reports only contain Data1 and Data5 */ + if (drvdata->attn_data.data && i != 1 && i != 5) + continue; + + switch (i) { + case 1: + f12->data1 = item; + f12->data1_offset = data_offset; + + if (item->num_subpackets > 255) { + dev_err(&fn->dev, + "Too many fingers declared: %d\n", + item->num_subpackets); + return -EINVAL; + } - item = rmi_get_register_desc_item(&f12->data_reg_desc, 10); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; + sensor->nbr_fingers = item->num_subpackets; + sensor->report_abs = 1; + sensor->attn_size += item->reg_size; + break; - item = rmi_get_register_desc_item(&f12->data_reg_desc, 11); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; + case 5: + f12->data5 = item; + f12->data5_offset = data_offset; + sensor->attn_size += item->reg_size; + break; - item = rmi_get_register_desc_item(&f12->data_reg_desc, 12); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; + case 6: + f12->data6 = item; + f12->data6_offset = data_offset; + break; - item = rmi_get_register_desc_item(&f12->data_reg_desc, 13); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; + case 9: + f12->data9 = item; + f12->data9_offset = data_offset; + if (!sensor->report_abs) + sensor->report_rel = 1; + break; - item = rmi_get_register_desc_item(&f12->data_reg_desc, 14); - if (item && !drvdata->attn_data.data) - data_offset += item->reg_size; + case 15: + f12->data15 = item; + f12->data15_offset = data_offset; + break; + } - item = rmi_get_register_desc_item(&f12->data_reg_desc, 15); - if (item && !drvdata->attn_data.data) { - f12->data15 = item; - f12->data15_offset = data_offset; data_offset += item->reg_size; } -- 2.54.0.545.g6539524ca2-goog