summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2026-05-04 21:59:39 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2026-06-11 22:39:28 -0700
commit4e5336f303e2845a82735b5578f7c0e4a175f8c5 (patch)
treeabdcd48f5bf5c923e961f6f531fff90d13a5cc2a /drivers/input
parent97b16e777ba49a25a1d3883ff7f7d38e61648bb0 (diff)
Input: rmi4 - use local presence map in rmi_read_register_desc()
The presence map is only used during the parsing of the register descriptor, so we can make it a local variable instead of storing it in struct rmi_register_descriptor. Also fix the spelling of the constant and the variable name (presence instead of presense). Assisted-by: Gemini:gemini-3.1-pro Link: https://patch.msgid.link/20260505045952.1570713-9-dmitry.torokhov@gmail.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/rmi4/rmi_driver.c22
-rw-r--r--drivers/input/rmi4/rmi_driver.h4
2 files changed, 14 insertions, 12 deletions
diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
index d15d04a66636..94b49e4dd0fa 100644
--- a/drivers/input/rmi4/rmi_driver.c
+++ b/drivers/input/rmi4/rmi_driver.c
@@ -610,15 +610,16 @@ static int rmi_parse_register_desc_item(struct rmi_register_desc_item *item,
int rmi_read_register_desc(struct rmi_device *d, u16 addr,
struct rmi_register_descriptor *rdesc)
{
- int ret;
+ DECLARE_BITMAP(presence_map, RMI_REG_DESC_PRESENCE_BITS);
+ u8 buf[RMI_REG_DESC_PRESENCE_REGS_MAX];
u8 size_presence_reg;
- u8 buf[35];
unsigned int presence_offset;
unsigned int map_offset;
unsigned int offset;
unsigned int reg;
int i;
int b;
+ int ret;
/*
* The first register of the register descriptor is the size of
@@ -629,7 +630,7 @@ int rmi_read_register_desc(struct rmi_device *d, u16 addr,
return ret;
++addr;
- if (size_presence_reg < 1 || size_presence_reg > 35)
+ if (size_presence_reg < 1 || size_presence_reg > RMI_REG_DESC_PRESENCE_REGS_MAX)
return -EIO;
memset(buf, 0, sizeof(buf));
@@ -654,20 +655,21 @@ int rmi_read_register_desc(struct rmi_device *d, u16 addr,
rdesc->struct_size = buf[0];
}
+ memset(presence_map, 0, sizeof(presence_map));
map_offset = 0;
for (i = presence_offset; i < size_presence_reg; i++) {
for (b = 0; b < 8; b++) {
if (buf[i] & BIT(b)) {
- if (map_offset >= RMI_REG_DESC_PRESENSE_BITS)
+ if (map_offset >= RMI_REG_DESC_PRESENCE_BITS)
return -EIO;
- bitmap_set(rdesc->presense_map, map_offset, 1);
+ bitmap_set(presence_map, map_offset, 1);
}
++map_offset;
}
}
- rdesc->num_registers = bitmap_weight(rdesc->presense_map,
- RMI_REG_DESC_PRESENSE_BITS);
+ rdesc->num_registers = bitmap_weight(presence_map,
+ RMI_REG_DESC_PRESENCE_BITS);
rdesc->registers = devm_kcalloc(&d->dev,
rdesc->num_registers,
@@ -695,7 +697,7 @@ int rmi_read_register_desc(struct rmi_device *d, u16 addr,
if (ret)
return ret;
- reg = find_first_bit(rdesc->presense_map, RMI_REG_DESC_PRESENSE_BITS);
+ reg = find_first_bit(presence_map, RMI_REG_DESC_PRESENCE_BITS);
offset = 0;
for (i = 0; i < rdesc->num_registers; i++) {
struct rmi_register_desc_item *item = &rdesc->registers[i];
@@ -714,8 +716,8 @@ int rmi_read_register_desc(struct rmi_device *d, u16 addr,
"%s: reg: %d reg size: %ld subpackets: %d\n", __func__,
item->reg, item->reg_size, item->num_subpackets);
- reg = find_next_bit(rdesc->presense_map,
- RMI_REG_DESC_PRESENSE_BITS, reg + 1);
+ reg = find_next_bit(presence_map,
+ RMI_REG_DESC_PRESENCE_BITS, reg + 1);
}
return 0;
diff --git a/drivers/input/rmi4/rmi_driver.h b/drivers/input/rmi4/rmi_driver.h
index 6952059bf4f5..b93905a6a43a 100644
--- a/drivers/input/rmi4/rmi_driver.h
+++ b/drivers/input/rmi4/rmi_driver.h
@@ -46,7 +46,8 @@ struct pdt_entry {
u8 function_number;
};
-#define RMI_REG_DESC_PRESENSE_BITS (32 * BITS_PER_BYTE)
+#define RMI_REG_DESC_PRESENCE_BITS (32 * BITS_PER_BYTE)
+#define RMI_REG_DESC_PRESENCE_REGS_MAX (3 + RMI_REG_DESC_PRESENCE_BITS / 8)
#define RMI_REG_DESC_SUBPACKET_BITS (37 * BITS_PER_BYTE)
/* describes a single packet register */
@@ -64,7 +65,6 @@ struct rmi_register_desc_item {
*/
struct rmi_register_descriptor {
unsigned long struct_size;
- unsigned long presense_map[BITS_TO_LONGS(RMI_REG_DESC_PRESENSE_BITS)];
u16 num_registers;
struct rmi_register_desc_item *registers;
};