Lines Matching refs:hdev
95 struct hid_device *hdev; member
105 static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
121 static int rmi_set_page(struct hid_device *hdev, u8 page) in rmi_set_page() argument
123 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_set_page()
131 retval = rmi_write_report(hdev, data->writeReport, in rmi_set_page()
134 dev_err(&hdev->dev, in rmi_set_page()
143 static int rmi_set_mode(struct hid_device *hdev, u8 mode) in rmi_set_mode() argument
153 ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, buf, in rmi_set_mode()
157 dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode, in rmi_set_mode()
165 static int rmi_write_report(struct hid_device *hdev, u8 *report, int len) in rmi_write_report() argument
167 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_write_report()
174 ret = hid_hw_raw_request(hdev, report[0], report, in rmi_write_report()
177 ret = hid_hw_output_report(hdev, (void *)report, len); in rmi_write_report()
181 dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret); in rmi_write_report()
192 struct hid_device *hdev = data->hdev; in rmi_hid_read_block() local
202 ret = rmi_set_page(hdev, RMI_PAGE(addr)); in rmi_hid_read_block()
217 ret = rmi_write_report(hdev, data->writeReport, in rmi_hid_read_block()
220 dev_err(&hdev->dev, in rmi_hid_read_block()
232 hid_warn(hdev, "%s: timeout elapsed\n", in rmi_hid_read_block()
263 struct hid_device *hdev = data->hdev; in rmi_hid_write_block() local
269 ret = rmi_set_page(hdev, RMI_PAGE(addr)); in rmi_hid_write_block()
280 ret = rmi_write_report(hdev, data->writeReport, in rmi_hid_write_block()
283 dev_err(&hdev->dev, in rmi_hid_write_block()
295 static int rmi_reset_attn_mode(struct hid_device *hdev) in rmi_reset_attn_mode() argument
297 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_reset_attn_mode()
301 ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS); in rmi_reset_attn_mode()
317 rmi_reset_attn_mode(hdata->hdev); in rmi_reset_work()
320 static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) in rmi_input_event() argument
322 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_input_event()
329 pm_wakeup_event(hdev->dev.parent, 0); in rmi_input_event()
342 static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size) in rmi_read_data_event() argument
344 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_read_data_event()
347 hid_dbg(hdev, "no read request pending\n"); in rmi_read_data_event()
358 static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size) in rmi_check_sanity() argument
374 static int rmi_raw_event(struct hid_device *hdev, in rmi_raw_event() argument
377 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_raw_event()
382 size = rmi_check_sanity(hdev, data, size); in rmi_raw_event()
388 return rmi_read_data_event(hdev, data, size); in rmi_raw_event()
390 return rmi_input_event(hdev, data, size); in rmi_raw_event()
398 static int rmi_event(struct hid_device *hdev, struct hid_field *field, in rmi_event() argument
401 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_event()
439 static int rmi_suspend(struct hid_device *hdev, pm_message_t message) in rmi_suspend() argument
441 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_suspend()
450 hid_warn(hdev, "Failed to suspend device: %d\n", ret); in rmi_suspend()
457 static int rmi_post_resume(struct hid_device *hdev) in rmi_post_resume() argument
459 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_post_resume()
467 ret = hid_hw_open(hdev); in rmi_post_resume()
471 ret = rmi_reset_attn_mode(hdev); in rmi_post_resume()
477 hid_warn(hdev, "Failed to resume device: %d\n", ret); in rmi_post_resume()
482 hid_hw_close(hdev); in rmi_post_resume()
489 struct hid_device *hdev = data->hdev; in rmi_hid_reset() local
491 return rmi_reset_attn_mode(hdev); in rmi_hid_reset()
494 static int rmi_input_configured(struct hid_device *hdev, struct hid_input *hi) in rmi_input_configured() argument
496 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_configured()
505 hid_dbg(hdev, "Opening low level driver\n"); in rmi_input_configured()
506 ret = hid_hw_open(hdev); in rmi_input_configured()
511 hid_device_io_start(hdev); in rmi_input_configured()
513 ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS); in rmi_input_configured()
515 dev_err(&hdev->dev, "failed to set rmi mode\n"); in rmi_input_configured()
519 ret = rmi_set_page(hdev, 0); in rmi_input_configured()
521 dev_err(&hdev->dev, "failed to set page select to 0.\n"); in rmi_input_configured()
527 dev_err(&hdev->dev, "failed to register transport driver\n"); in rmi_input_configured()
534 hid_device_io_stop(hdev); in rmi_input_configured()
535 hid_hw_close(hdev); in rmi_input_configured()
539 static int rmi_input_mapping(struct hid_device *hdev, in rmi_input_mapping() argument
543 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_mapping()
560 static int rmi_check_valid_report_id(struct hid_device *hdev, unsigned type, in rmi_check_valid_report_id() argument
565 *report = hdev->report_enum[type].report_id_hash[id]; in rmi_check_valid_report_id()
619 static int rmi_setup_irq_domain(struct hid_device *hdev) in rmi_setup_irq_domain() argument
621 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_setup_irq_domain()
624 hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, in rmi_setup_irq_domain()
629 ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); in rmi_setup_irq_domain()
635 hid_err(hdev, "Can't allocate an IRQ\n"); in rmi_setup_irq_domain()
642 static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) in rmi_probe() argument
651 data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL); in rmi_probe()
656 data->hdev = hdev; in rmi_probe()
658 hid_set_drvdata(hdev, data); in rmi_probe()
660 hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS; in rmi_probe()
661 hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC; in rmi_probe()
663 ret = hid_parse(hdev); in rmi_probe()
665 hid_err(hdev, "parse failed\n"); in rmi_probe()
676 if (!rmi_check_valid_report_id(hdev, HID_FEATURE_REPORT, in rmi_probe()
678 hid_dbg(hdev, "device does not have set mode feature report\n"); in rmi_probe()
682 if (!rmi_check_valid_report_id(hdev, HID_INPUT_REPORT, in rmi_probe()
684 hid_dbg(hdev, "device does not have attention input report\n"); in rmi_probe()
690 if (!rmi_check_valid_report_id(hdev, HID_OUTPUT_REPORT, in rmi_probe()
692 hid_dbg(hdev, in rmi_probe()
702 data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL); in rmi_probe()
704 hid_err(hdev, "failed to allocate buffer for HID reports\n"); in rmi_probe()
714 ret = rmi_setup_irq_domain(hdev); in rmi_probe()
716 hid_err(hdev, "failed to allocate IRQ domain\n"); in rmi_probe()
723 data->xport.dev = hdev->dev.parent; in rmi_probe()
730 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); in rmi_probe()
732 hid_err(hdev, "hw start failed\n"); in rmi_probe()
739 static void rmi_remove(struct hid_device *hdev) in rmi_remove() argument
741 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_remove()
750 hid_hw_stop(hdev); in rmi_remove()