mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
HID: Intel-thc-hid: Intel-quicki2c: Add output report support
Add support for HID output reports in the intel-quicki2c driver by implementing the output_report callback in the HID low-level driver interface. This enables proper communication with HID devices that require output report functionality, such as setting device configuration or updating device firmware. Tested-by: Rui Zhang <rui1.zhang@intel.com> Signed-off-by: Even Xu <even.xu@intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
e149af9ce1
commit
a788b20570
|
|
@ -82,6 +82,13 @@ static int quicki2c_hid_power(struct hid_device *hid, int lvl)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int quicki2c_hid_output_report(struct hid_device *hid, u8 *buf, size_t count)
|
||||
{
|
||||
struct quicki2c_device *qcdev = hid->driver_data;
|
||||
|
||||
return quicki2c_output_report(qcdev, buf, count);
|
||||
}
|
||||
|
||||
static struct hid_ll_driver quicki2c_hid_ll_driver = {
|
||||
.parse = quicki2c_hid_parse,
|
||||
.start = quicki2c_hid_start,
|
||||
|
|
@ -90,6 +97,7 @@ static struct hid_ll_driver quicki2c_hid_ll_driver = {
|
|||
.close = quicki2c_hid_close,
|
||||
.power = quicki2c_hid_power,
|
||||
.raw_request = quicki2c_hid_raw_request,
|
||||
.output_report = quicki2c_hid_output_report,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -195,6 +195,25 @@ int quicki2c_set_report(struct quicki2c_device *qcdev, u8 report_type,
|
|||
return buf_len;
|
||||
}
|
||||
|
||||
int quicki2c_output_report(struct quicki2c_device *qcdev, void *buf, size_t buf_len)
|
||||
{
|
||||
ssize_t len;
|
||||
int ret;
|
||||
|
||||
len = quicki2c_init_write_buf(qcdev, 0, 0, false, buf, buf_len,
|
||||
qcdev->report_buf, qcdev->report_len);
|
||||
if (len < 0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = thc_dma_write(qcdev->thc_hw, qcdev->report_buf, len);
|
||||
if (ret) {
|
||||
dev_err(qcdev->dev, "Output Report failed, ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return buf_len;
|
||||
}
|
||||
|
||||
#define HIDI2C_RESET_TIMEOUT 5
|
||||
|
||||
int quicki2c_reset(struct quicki2c_device *qcdev)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ int quicki2c_get_report(struct quicki2c_device *qcdev, u8 report_type,
|
|||
unsigned int reportnum, void *buf, size_t buf_len);
|
||||
int quicki2c_set_report(struct quicki2c_device *qcdev, u8 report_type,
|
||||
unsigned int reportnum, void *buf, size_t buf_len);
|
||||
int quicki2c_output_report(struct quicki2c_device *qcdev, void *buf, size_t buf_len);
|
||||
int quicki2c_get_device_descriptor(struct quicki2c_device *qcdev);
|
||||
int quicki2c_get_report_descriptor(struct quicki2c_device *qcdev);
|
||||
int quicki2c_reset(struct quicki2c_device *qcdev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user