HID: pidff: Support device error response from PID_BLOCK_LOAD

[ Upstream commit 9d4174dc4a234408d91fd83725e1899766cd1731 ]

If an error happens on the device, the driver will no longer fall
into the trap of reading this status 60 times before it decides that
this reply won't change to success/memory full.

Greatly reduces communication overhead during device error situation.

Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Tomasz Pakuła
2025-02-11 15:35:11 +01:00
committed by Greg Kroah-Hartman
parent 2d698115f9
commit 239c8ac58c

View File

@@ -138,7 +138,8 @@ static const u8 pidff_effect_types[] = {
#define PID_BLOCK_LOAD_SUCCESS 0
#define PID_BLOCK_LOAD_FULL 1
static const u8 pidff_block_load_status[] = { 0x8c, 0x8d };
#define PID_BLOCK_LOAD_ERROR 2
static const u8 pidff_block_load_status[] = { 0x8c, 0x8d, 0x8e};
#define PID_EFFECT_START 0
#define PID_EFFECT_STOP 1
@@ -666,6 +667,11 @@ static int pidff_request_effect_upload(struct pidff_device *pidff, int efnum)
pidff->block_load[PID_RAM_POOL_AVAILABLE].value[0] : -1);
return -ENOSPC;
}
if (pidff->block_load_status->value[0] ==
pidff->status_id[PID_BLOCK_LOAD_ERROR]) {
hid_dbg(pidff->hid, "device error during effect creation\n");
return -EREMOTEIO;
}
}
hid_err(pidff->hid, "pid_block_load failed 60 times\n");
return -EIO;