diff options
author | Hans de Goede <hdegoede@redhat.com> | 2023-12-02 23:46:10 +0100 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.com> | 2023-12-06 11:48:40 +0100 |
commit | aa69d6974185e9f7a552ba982540a38e34f69690 (patch) | |
tree | eca2366a4d2a49940071fac9aea1e44356772528 /drivers/hid/i2c-hid | |
parent | 96d3098db835d58649b73a5788898bd7672a319b (diff) | |
download | lwn-aa69d6974185e9f7a552ba982540a38e34f69690.tar.gz lwn-aa69d6974185e9f7a552ba982540a38e34f69690.zip |
HID: i2c-hid: Switch i2c_hid_parse() to goto style error handling
Switch i2c_hid_parse() to goto style error handling.
This is a preparation patch for removing the need for
I2C_HID_QUIRK_NO_IRQ_AFTER_RESET by making i2c-hid behave
more like Windows.
Note this changes the descriptor read error path to propagate
the actual i2c_hid_read_register() error code (which is always
negative) instead of hardcoding a -EIO return.
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Diffstat (limited to 'drivers/hid/i2c-hid')
-rw-r--r-- | drivers/hid/i2c-hid/i2c-hid-core.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c index 21d65ca32866..71d742aeaf35 100644 --- a/drivers/hid/i2c-hid/i2c-hid-core.c +++ b/drivers/hid/i2c-hid/i2c-hid-core.c @@ -773,23 +773,21 @@ static int i2c_hid_parse(struct hid_device *hid) rdesc, rsize); if (ret) { hid_err(hid, "reading report descriptor failed\n"); - kfree(rdesc); - return -EIO; + goto out; } } i2c_hid_dbg(ihid, "Report Descriptor: %*ph\n", rsize, rdesc); ret = hid_parse_report(hid, rdesc, rsize); + if (ret) + dbg_hid("parsing report descriptor failed\n"); + +out: if (!use_override) kfree(rdesc); - if (ret) { - dbg_hid("parsing report descriptor failed\n"); - return ret; - } - - return 0; + return ret; } static int i2c_hid_start(struct hid_device *hid) |