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,
.close = quicki2c_hid_close,
.power = quicki2c_hid_power,
.raw_request = quicki2c_hid_raw_request,
+ .output_report = quicki2c_hid_output_report,
};
/**
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)
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);