Lines Matching refs:qsdev

23 static int write_cmd_to_txdma(struct quickspi_device *qsdev,  in write_cmd_to_txdma()  argument
31 write_buf = (struct output_report *)qsdev->report_buf; in write_cmd_to_txdma()
42 ret = thc_dma_write(qsdev->thc_hw, write_buf, write_buf_len); in write_cmd_to_txdma()
44 dev_err_once(qsdev->dev, "DMA write failed, ret = %d\n", ret); in write_cmd_to_txdma()
49 static int quickspi_get_device_descriptor(struct quickspi_device *qsdev) in quickspi_get_device_descriptor() argument
62 qsdev->nondma_int_received = false; in quickspi_get_device_descriptor()
64 ret = thc_tic_pio_write(qsdev->thc_hw, qsdev->output_report_addr, in quickspi_get_device_descriptor()
67 dev_err_once(qsdev->dev, in quickspi_get_device_descriptor()
72 ret = wait_event_interruptible_timeout(qsdev->nondma_int_received_wq, in quickspi_get_device_descriptor()
73 qsdev->nondma_int_received, in quickspi_get_device_descriptor()
75 if (ret <= 0 || !qsdev->nondma_int_received) { in quickspi_get_device_descriptor()
76 dev_err_once(qsdev->dev, "Wait DEVICE_DESCRIPTOR timeout, ret:%d\n", ret); in quickspi_get_device_descriptor()
79 qsdev->nondma_int_received = false; in quickspi_get_device_descriptor()
81 int_cause_val = thc_int_cause_read(qsdev->thc_hw); in quickspi_get_device_descriptor()
86 dev_err_once(qsdev->dev, "Receive wrong DEVICE_DESCRIPTOR length, len = %u\n", in quickspi_get_device_descriptor()
91 ret = thc_tic_pio_read(qsdev->thc_hw, qsdev->input_report_bdy_addr, in quickspi_get_device_descriptor()
94 dev_err_once(qsdev->dev, "Read DEVICE_DESCRIPTOR failed, ret = %d\n", ret); in quickspi_get_device_descriptor()
95 dev_err_once(qsdev->dev, "DEVICE_DESCRIPTOR expected len = %u, actual read = %u\n", in quickspi_get_device_descriptor()
103 memcpy(&qsdev->dev_desc, in quickspi_get_device_descriptor()
110 dev_err_once(qsdev->dev, "Unexpected input report type: %d\n", input_rep_type); in quickspi_get_device_descriptor()
114 int quickspi_get_report_descriptor(struct quickspi_device *qsdev) in quickspi_get_report_descriptor() argument
118 ret = write_cmd_to_txdma(qsdev, REPORT_DESCRIPTOR, 0, NULL, 0); in quickspi_get_report_descriptor()
120 dev_err_once(qsdev->dev, in quickspi_get_report_descriptor()
125 ret = wait_event_interruptible_timeout(qsdev->report_desc_got_wq, in quickspi_get_report_descriptor()
126 qsdev->report_desc_got, in quickspi_get_report_descriptor()
128 if (ret <= 0 || !qsdev->report_desc_got) { in quickspi_get_report_descriptor()
129 dev_err_once(qsdev->dev, "Wait Report Descriptor timeout, ret:%d\n", ret); in quickspi_get_report_descriptor()
132 qsdev->report_desc_got = false; in quickspi_get_report_descriptor()
137 int quickspi_set_power(struct quickspi_device *qsdev, in quickspi_set_power() argument
143 ret = write_cmd_to_txdma(qsdev, COMMAND_CONTENT, in quickspi_set_power()
148 dev_err_once(qsdev->dev, "Write SET_POWER command failed, ret = %d\n", ret); in quickspi_set_power()
155 void quickspi_handle_input_data(struct quickspi_device *qsdev, u32 buf_len) in quickspi_handle_input_data() argument
163 input_body = (struct input_report_body *)qsdev->input_buf; in quickspi_handle_input_data()
168 dev_err_once(qsdev->dev, "Wrong input report length: %u", in quickspi_handle_input_data()
175 if (input_len != le16_to_cpu(qsdev->dev_desc.rep_desc_len)) { in quickspi_handle_input_data()
176 dev_err_once(qsdev->dev, "Unexpected report descriptor length: %u\n", in quickspi_handle_input_data()
181 memcpy(qsdev->report_descriptor, input_body->content, input_len); in quickspi_handle_input_data()
183 qsdev->report_desc_got = true; in quickspi_handle_input_data()
184 wake_up_interruptible(&qsdev->report_desc_got_wq); in quickspi_handle_input_data()
190 dev_dbg(qsdev->dev, "Receive set power on response\n"); in quickspi_handle_input_data()
192 dev_err_once(qsdev->dev, "Unknown command response type: %u\n", in quickspi_handle_input_data()
199 if (qsdev->state == QUICKSPI_RESETING) { in quickspi_handle_input_data()
200 qsdev->reset_ack = true; in quickspi_handle_input_data()
201 wake_up_interruptible(&qsdev->reset_ack_wq); in quickspi_handle_input_data()
202 dev_dbg(qsdev->dev, "Receive HIR reset response\n"); in quickspi_handle_input_data()
204 dev_info(qsdev->dev, "Receive DIR\n"); in quickspi_handle_input_data()
210 qsdev->report_len = sizeof(body_hdr->content_id) + input_len; in quickspi_handle_input_data()
213 memcpy(qsdev->report_buf, input_report, qsdev->report_len); in quickspi_handle_input_data()
215 qsdev->get_report_cmpl = true; in quickspi_handle_input_data()
216 wake_up_interruptible(&qsdev->get_report_cmpl_wq); in quickspi_handle_input_data()
222 qsdev->set_report_cmpl = true; in quickspi_handle_input_data()
223 wake_up_interruptible(&qsdev->set_report_cmpl_wq); in quickspi_handle_input_data()
228 if (qsdev->state != QUICKSPI_ENABLED) in quickspi_handle_input_data()
231 if (input_len > le16_to_cpu(qsdev->dev_desc.max_input_len)) { in quickspi_handle_input_data()
232 dev_err_once(qsdev->dev, "Unexpected too large input report length: %u\n", in quickspi_handle_input_data()
240 ret = quickspi_hid_send_report(qsdev, input_report, input_len); in quickspi_handle_input_data()
242 dev_err_once(qsdev->dev, "Failed to send HID input report: %d\n", ret); in quickspi_handle_input_data()
247 dev_err_once(qsdev->dev, "Unsupported input report type: %u\n", in quickspi_handle_input_data()
253 static int acpi_tic_reset(struct quickspi_device *qsdev) in acpi_tic_reset() argument
258 if (!qsdev->acpi_dev) in acpi_tic_reset()
261 handle = acpi_device_handle(qsdev->acpi_dev); in acpi_tic_reset()
264 dev_err_once(qsdev->dev, in acpi_tic_reset()
272 int reset_tic(struct quickspi_device *qsdev) in reset_tic() argument
279 qsdev->state = QUICKSPI_RESETING; in reset_tic()
281 qsdev->reset_ack = false; in reset_tic()
284 thc_int_trigger_type_select(qsdev->thc_hw, false); in reset_tic()
286 ret = acpi_tic_reset(qsdev); in reset_tic()
290 ret = thc_interrupt_quiesce(qsdev->thc_hw, false); in reset_tic()
294 ret = wait_event_interruptible_timeout(qsdev->reset_ack_wq, in reset_tic()
295 qsdev->reset_ack, in reset_tic()
297 if (ret <= 0 || !qsdev->reset_ack) { in reset_tic()
298 dev_err_once(qsdev->dev, "Wait RESET_RESPONSE timeout, ret:%d\n", ret); in reset_tic()
302 int_cause_val = thc_int_cause_read(qsdev->thc_hw); in reset_tic()
307 dev_err_once(qsdev->dev, "Receive wrong RESET_RESPONSE, len = %u\n", in reset_tic()
313 thc_int_trigger_type_select(qsdev->thc_hw, true); in reset_tic()
315 ret = thc_tic_pio_read(qsdev->thc_hw, qsdev->input_report_bdy_addr, in reset_tic()
319 dev_err_once(qsdev->dev, "Read RESET_RESPONSE body failed, ret = %d\n", ret); in reset_tic()
320 dev_err_once(qsdev->dev, "RESET_RESPONSE body expected len = %u, actual = %u\n", in reset_tic()
328 dev_dbg(qsdev->dev, "RESET_RESPONSE received\n"); in reset_tic()
330 dev_err_once(qsdev->dev, in reset_tic()
336 qsdev->state = QUICKSPI_RESET; in reset_tic()
338 ret = quickspi_get_device_descriptor(qsdev); in reset_tic()
345 int quickspi_get_report(struct quickspi_device *qsdev, in quickspi_get_report() argument
356 dev_err_once(qsdev->dev, "Unsupported report type for GET REPORT: %d\n", in quickspi_get_report()
361 ret = write_cmd_to_txdma(qsdev, rep_type, report_id, NULL, 0); in quickspi_get_report()
363 dev_err_once(qsdev->dev, "Write GET_REPORT command failed, ret = %d\n", ret); in quickspi_get_report()
367 ret = wait_event_interruptible_timeout(qsdev->get_report_cmpl_wq, in quickspi_get_report()
368 qsdev->get_report_cmpl, in quickspi_get_report()
370 if (ret <= 0 || !qsdev->get_report_cmpl) { in quickspi_get_report()
371 dev_err_once(qsdev->dev, "Wait Get Report Response timeout, ret:%d\n", ret); in quickspi_get_report()
374 qsdev->get_report_cmpl = false; in quickspi_get_report()
376 memcpy(buf, qsdev->report_buf, qsdev->report_len); in quickspi_get_report()
378 return qsdev->report_len; in quickspi_get_report()
381 int quickspi_set_report(struct quickspi_device *qsdev, in quickspi_set_report() argument
393 dev_err_once(qsdev->dev, "Unsupported report type for SET REPORT: %d\n", in quickspi_set_report()
398 ret = write_cmd_to_txdma(qsdev, rep_type, report_id, buf + 1, buf_len - 1); in quickspi_set_report()
400 dev_err_once(qsdev->dev, "Write SET_REPORT command failed, ret = %d\n", ret); in quickspi_set_report()
404 ret = wait_event_interruptible_timeout(qsdev->set_report_cmpl_wq, in quickspi_set_report()
405 qsdev->set_report_cmpl, in quickspi_set_report()
407 if (ret <= 0 || !qsdev->set_report_cmpl) { in quickspi_set_report()
408 dev_err_once(qsdev->dev, "Wait Set Report Response timeout, ret:%d\n", ret); in quickspi_set_report()
411 qsdev->set_report_cmpl = false; in quickspi_set_report()