Lines Matching refs:hdev
138 struct hid_device *hdev; member
150 static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
166 static int rmi_set_page(struct hid_device *hdev, u8 page) in rmi_set_page() argument
168 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_set_page()
176 retval = rmi_write_report(hdev, data->writeReport, in rmi_set_page()
179 dev_err(&hdev->dev, in rmi_set_page()
188 static int rmi_set_mode(struct hid_device *hdev, u8 mode) in rmi_set_mode() argument
193 ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, txbuf, in rmi_set_mode()
196 dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode, in rmi_set_mode()
204 static int rmi_write_report(struct hid_device *hdev, u8 *report, int len) in rmi_write_report() argument
208 ret = hid_hw_output_report(hdev, (void *)report, len); in rmi_write_report()
210 dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret); in rmi_write_report()
217 static int rmi_read_block(struct hid_device *hdev, u16 addr, void *buf, in rmi_read_block() argument
220 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_read_block()
230 ret = rmi_set_page(hdev, RMI_PAGE(addr)); in rmi_read_block()
245 ret = rmi_write_report(hdev, data->writeReport, in rmi_read_block()
249 dev_err(&hdev->dev, in rmi_read_block()
261 hid_warn(hdev, "%s: timeout elapsed\n", in rmi_read_block()
289 static inline int rmi_read(struct hid_device *hdev, u16 addr, void *buf) in rmi_read() argument
291 return rmi_read_block(hdev, addr, buf, 1); in rmi_read()
294 static int rmi_write_block(struct hid_device *hdev, u16 addr, void *buf, in rmi_write_block() argument
297 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_write_block()
303 ret = rmi_set_page(hdev, RMI_PAGE(addr)); in rmi_write_block()
314 ret = rmi_write_report(hdev, data->writeReport, in rmi_write_block()
317 dev_err(&hdev->dev, in rmi_write_block()
329 static inline int rmi_write(struct hid_device *hdev, u16 addr, void *buf) in rmi_write() argument
331 return rmi_write_block(hdev, addr, buf, 1); in rmi_write()
366 static int rmi_reset_attn_mode(struct hid_device *hdev) in rmi_reset_attn_mode() argument
368 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_reset_attn_mode()
371 ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS); in rmi_reset_attn_mode()
376 ret = rmi_write(hdev, data->f01.control_base_addr + 1, in rmi_reset_attn_mode()
379 hid_err(hdev, "can not write F01 control register\n"); in rmi_reset_attn_mode()
393 rmi_reset_attn_mode(hdata->hdev); in rmi_reset_work()
396 static inline int rmi_schedule_reset(struct hid_device *hdev) in rmi_schedule_reset() argument
398 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_schedule_reset()
402 static int rmi_f11_input_event(struct hid_device *hdev, u8 irq, u8 *data, in rmi_f11_input_event() argument
405 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_f11_input_event()
424 dev_driver_string(&hdev->dev), in rmi_f11_input_event()
425 dev_name(&hdev->dev)); in rmi_f11_input_event()
426 hid_dbg(hdev, "Incomplete finger report\n"); in rmi_f11_input_event()
437 static int rmi_f30_input_event(struct hid_device *hdev, u8 irq, u8 *data, in rmi_f30_input_event() argument
440 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_f30_input_event()
449 hid_warn(hdev, "Click Button pressed, but the click data is missing\n"); in rmi_f30_input_event()
465 static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) in rmi_input_event() argument
467 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_input_event()
478 hid_dbg(hdev, "unknown intr source:%02lx %s:%d\n", in rmi_input_event()
482 index += rmi_f11_input_event(hdev, data[1], &data[index], in rmi_input_event()
484 index += rmi_f30_input_event(hdev, data[1], &data[index], in rmi_input_event()
487 index += rmi_f30_input_event(hdev, data[1], &data[index], in rmi_input_event()
489 index += rmi_f11_input_event(hdev, data[1], &data[index], in rmi_input_event()
496 static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size) in rmi_read_data_event() argument
498 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_read_data_event()
501 hid_dbg(hdev, "no read request pending\n"); in rmi_read_data_event()
513 static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size) in rmi_check_sanity() argument
529 static int rmi_raw_event(struct hid_device *hdev, in rmi_raw_event() argument
532 size = rmi_check_sanity(hdev, data, size); in rmi_raw_event()
538 return rmi_read_data_event(hdev, data, size); in rmi_raw_event()
540 return rmi_input_event(hdev, data, size); in rmi_raw_event()
548 static int rmi_event(struct hid_device *hdev, struct hid_field *field, in rmi_event() argument
551 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_event()
565 rmi_schedule_reset(hdev); in rmi_event()
573 static int rmi_set_sleep_mode(struct hid_device *hdev, int sleep_mode) in rmi_set_sleep_mode() argument
575 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_set_sleep_mode()
581 ret = rmi_write(hdev, data->f01.control_base_addr, in rmi_set_sleep_mode()
584 hid_err(hdev, "can not write sleep mode\n"); in rmi_set_sleep_mode()
591 static int rmi_suspend(struct hid_device *hdev, pm_message_t message) in rmi_suspend() argument
593 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_suspend()
597 ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, in rmi_suspend()
600 hid_warn(hdev, "can not read F11 control registers\n"); in rmi_suspend()
605 if (!device_may_wakeup(hdev->dev.parent)) in rmi_suspend()
606 return rmi_set_sleep_mode(hdev, RMI_SLEEP_DEEP_SLEEP); in rmi_suspend()
611 static int rmi_post_reset(struct hid_device *hdev) in rmi_post_reset() argument
613 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_post_reset()
616 ret = rmi_reset_attn_mode(hdev); in rmi_post_reset()
618 hid_err(hdev, "can not set rmi mode\n"); in rmi_post_reset()
623 ret = rmi_write_block(hdev, data->f11.control_base_addr, in rmi_post_reset()
626 hid_warn(hdev, in rmi_post_reset()
630 if (!device_may_wakeup(hdev->dev.parent)) { in rmi_post_reset()
631 ret = rmi_set_sleep_mode(hdev, RMI_SLEEP_NORMAL); in rmi_post_reset()
633 hid_err(hdev, "can not write sleep mode\n"); in rmi_post_reset()
641 static int rmi_post_resume(struct hid_device *hdev) in rmi_post_resume() argument
643 return rmi_reset_attn_mode(hdev); in rmi_post_resume()
703 static int rmi_scan_pdt(struct hid_device *hdev) in rmi_scan_pdt() argument
705 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_scan_pdt()
714 hid_info(hdev, "Scanning PDT...\n"); in rmi_scan_pdt()
723 retval = rmi_read_block(hdev, i, &entry, sizeof(entry)); in rmi_scan_pdt()
725 hid_err(hdev, in rmi_scan_pdt()
736 hid_info(hdev, "Found F%02X on page %#04x\n", in rmi_scan_pdt()
747 hid_info(hdev, "%s: Done with PDT scan.\n", __func__); in rmi_scan_pdt()
756 static int rmi_populate_f01(struct hid_device *hdev) in rmi_populate_f01() argument
758 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f01()
772 ret = rmi_read_block(hdev, query_offset, basic_queries, in rmi_populate_f01()
775 hid_err(hdev, "Can not read basic queries from Function 0x1.\n"); in rmi_populate_f01()
794 ret = rmi_read(hdev, query_offset, info); in rmi_populate_f01()
796 hid_err(hdev, "Can not read query42.\n"); in rmi_populate_f01()
804 ret = rmi_read(hdev, query_offset, &ds4_query_len); in rmi_populate_f01()
806 hid_err(hdev, "Can not read DS4 Query length.\n"); in rmi_populate_f01()
812 ret = rmi_read(hdev, query_offset, info); in rmi_populate_f01()
814 hid_err(hdev, "Can not read DS4 query.\n"); in rmi_populate_f01()
827 ret = rmi_read_block(hdev, prod_info_addr, info, 3); in rmi_populate_f01()
829 hid_err(hdev, "Can not read product info.\n"); in rmi_populate_f01()
837 ret = rmi_read_block(hdev, data->f01.control_base_addr, info, in rmi_populate_f01()
841 hid_err(hdev, "can not read f01 ctrl registers\n"); in rmi_populate_f01()
857 ret = rmi_write(hdev, data->f01.control_base_addr + 1, in rmi_populate_f01()
860 hid_err(hdev, "can not write to control reg 1: %d.\n", in rmi_populate_f01()
869 static int rmi_populate_f11(struct hid_device *hdev) in rmi_populate_f11() argument
871 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f11()
891 hid_err(hdev, "No 2D sensor found, giving up.\n"); in rmi_populate_f11()
896 ret = rmi_read(hdev, data->f11.query_base_addr, buf); in rmi_populate_f11()
898 hid_err(hdev, "can not get query 0: %d.\n", ret); in rmi_populate_f11()
908 ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf); in rmi_populate_f11()
910 hid_err(hdev, "can not get NumberOfFingers: %d.\n", ret); in rmi_populate_f11()
921 hid_err(hdev, "No absolute events, giving up.\n"); in rmi_populate_f11()
928 ret = rmi_read(hdev, data->f11.query_base_addr + 5, buf); in rmi_populate_f11()
930 hid_err(hdev, "can not get absolute data sources: %d.\n", ret); in rmi_populate_f11()
948 ret = rmi_read(hdev, in rmi_populate_f11()
951 hid_err(hdev, "can not read gesture information: %d.\n", in rmi_populate_f11()
972 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
975 hid_err(hdev, "can not get query 12: %d.\n", ret); in rmi_populate_f11()
982 ret = rmi_read_block(hdev, in rmi_populate_f11()
986 hid_err(hdev, "can not read query 15-18: %d.\n", in rmi_populate_f11()
997 hid_info(hdev, "%s: size in mm: %d x %d\n", in rmi_populate_f11()
1012 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
1015 hid_err(hdev, "can not get query 28: %d.\n", ret); in rmi_populate_f11()
1024 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
1027 hid_err(hdev, "can not get query 36: %d.\n", ret); in rmi_populate_f11()
1038 ret = rmi_read_block(hdev, data->f11.control_base_addr, in rmi_populate_f11()
1041 hid_err(hdev, "can not read ctrl block of size 11: %d.\n", ret); in rmi_populate_f11()
1053 ret = rmi_write(hdev, data->f11.control_base_addr, in rmi_populate_f11()
1056 hid_err(hdev, "can not write to control reg 0: %d.\n", in rmi_populate_f11()
1064 ret = rmi_write(hdev, data->f11.control_base_addr + 11, in rmi_populate_f11()
1067 hid_err(hdev, "can not write to control reg 11: %d.\n", in rmi_populate_f11()
1076 static int rmi_populate_f30(struct hid_device *hdev) in rmi_populate_f30() argument
1078 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f30()
1089 hid_err(hdev, "No GPIO/LEDs found, giving up.\n"); in rmi_populate_f30()
1093 ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2); in rmi_populate_f30()
1095 hid_err(hdev, "can not get F30 query registers: %d.\n", ret); in rmi_populate_f30()
1113 ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr, in rmi_populate_f30()
1116 hid_err(hdev, "can not read ctrl 2&3 block of size %d: %d.\n", in rmi_populate_f30()
1144 static int rmi_populate(struct hid_device *hdev) in rmi_populate() argument
1146 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate()
1149 ret = rmi_scan_pdt(hdev); in rmi_populate()
1151 hid_err(hdev, "PDT scan failed with code %d.\n", ret); in rmi_populate()
1155 ret = rmi_populate_f01(hdev); in rmi_populate()
1157 hid_err(hdev, "Error while initializing F01 (%d).\n", ret); in rmi_populate()
1161 ret = rmi_populate_f11(hdev); in rmi_populate()
1163 hid_err(hdev, "Error while initializing F11 (%d).\n", ret); in rmi_populate()
1168 ret = rmi_populate_f30(hdev); in rmi_populate()
1170 hid_warn(hdev, "Error while initializing F30 (%d).\n", ret); in rmi_populate()
1176 static int rmi_input_configured(struct hid_device *hdev, struct hid_input *hi) in rmi_input_configured() argument
1178 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_configured()
1185 hid_dbg(hdev, "Opening low level driver\n"); in rmi_input_configured()
1186 ret = hid_hw_open(hdev); in rmi_input_configured()
1194 hid_device_io_start(hdev); in rmi_input_configured()
1196 ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS); in rmi_input_configured()
1198 dev_err(&hdev->dev, "failed to set rmi mode\n"); in rmi_input_configured()
1202 ret = rmi_set_page(hdev, 0); in rmi_input_configured()
1204 dev_err(&hdev->dev, "failed to set page select to 0.\n"); in rmi_input_configured()
1208 ret = rmi_populate(hdev); in rmi_input_configured()
1212 hid_info(hdev, "firmware id: %ld\n", data->firmware_id); in rmi_input_configured()
1247 hid_device_io_stop(hdev); in rmi_input_configured()
1248 hid_hw_close(hdev); in rmi_input_configured()
1252 static int rmi_input_mapping(struct hid_device *hdev, in rmi_input_mapping() argument
1256 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_mapping()
1273 static int rmi_check_valid_report_id(struct hid_device *hdev, unsigned type, in rmi_check_valid_report_id() argument
1278 *report = hdev->report_enum[type].report_id_hash[id]; in rmi_check_valid_report_id()
1290 static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) in rmi_probe() argument
1299 data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL); in rmi_probe()
1304 data->hdev = hdev; in rmi_probe()
1306 hid_set_drvdata(hdev, data); in rmi_probe()
1308 hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS; in rmi_probe()
1310 ret = hid_parse(hdev); in rmi_probe()
1312 hid_err(hdev, "parse failed\n"); in rmi_probe()
1323 if (!rmi_check_valid_report_id(hdev, HID_FEATURE_REPORT, in rmi_probe()
1325 hid_dbg(hdev, "device does not have set mode feature report\n"); in rmi_probe()
1329 if (!rmi_check_valid_report_id(hdev, HID_INPUT_REPORT, in rmi_probe()
1331 hid_dbg(hdev, "device does not have attention input report\n"); in rmi_probe()
1337 if (!rmi_check_valid_report_id(hdev, HID_OUTPUT_REPORT, in rmi_probe()
1339 hid_dbg(hdev, in rmi_probe()
1349 data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL); in rmi_probe()
1362 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); in rmi_probe()
1364 hid_err(hdev, "hw start failed\n"); in rmi_probe()
1377 hid_err(hdev, "Device failed to be properly configured\n"); in rmi_probe()
1382 static void rmi_remove(struct hid_device *hdev) in rmi_remove() argument
1384 struct rmi_data *hdata = hid_get_drvdata(hdev); in rmi_remove()
1388 hid_hw_stop(hdev); in rmi_remove()