Lines Matching refs:data
168 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_set_page() local
171 data->writeReport[0] = RMI_WRITE_REPORT_ID; in rmi_set_page()
172 data->writeReport[1] = 1; in rmi_set_page()
173 data->writeReport[2] = 0xFF; in rmi_set_page()
174 data->writeReport[4] = page; in rmi_set_page()
176 retval = rmi_write_report(hdev, data->writeReport, in rmi_set_page()
177 data->output_report_size); in rmi_set_page()
178 if (retval != data->output_report_size) { in rmi_set_page()
184 data->page = page; in rmi_set_page()
220 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_read_block() local
227 mutex_lock(&data->page_mutex); in rmi_read_block()
229 if (RMI_PAGE(addr) != data->page) { in rmi_read_block()
236 data->writeReport[0] = RMI_READ_ADDR_REPORT_ID; in rmi_read_block()
237 data->writeReport[1] = 0; /* old 1 byte read count */ in rmi_read_block()
238 data->writeReport[2] = addr & 0xFF; in rmi_read_block()
239 data->writeReport[3] = (addr >> 8) & 0xFF; in rmi_read_block()
240 data->writeReport[4] = len & 0xFF; in rmi_read_block()
241 data->writeReport[5] = (len >> 8) & 0xFF; in rmi_read_block()
243 set_bit(RMI_READ_REQUEST_PENDING, &data->flags); in rmi_read_block()
245 ret = rmi_write_report(hdev, data->writeReport, in rmi_read_block()
246 data->output_report_size); in rmi_read_block()
247 if (ret != data->output_report_size) { in rmi_read_block()
248 clear_bit(RMI_READ_REQUEST_PENDING, &data->flags); in rmi_read_block()
258 if (!wait_event_timeout(data->wait, in rmi_read_block()
259 test_bit(RMI_READ_DATA_PENDING, &data->flags), in rmi_read_block()
267 read_input_count = data->readReport[1]; in rmi_read_block()
268 memcpy(buf + bytes_read, &data->readReport[2], in rmi_read_block()
274 clear_bit(RMI_READ_DATA_PENDING, &data->flags); in rmi_read_block()
284 clear_bit(RMI_READ_REQUEST_PENDING, &data->flags); in rmi_read_block()
285 mutex_unlock(&data->page_mutex); in rmi_read_block()
297 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_write_block() local
300 mutex_lock(&data->page_mutex); in rmi_write_block()
302 if (RMI_PAGE(addr) != data->page) { in rmi_write_block()
308 data->writeReport[0] = RMI_WRITE_REPORT_ID; in rmi_write_block()
309 data->writeReport[1] = len; in rmi_write_block()
310 data->writeReport[2] = addr & 0xFF; in rmi_write_block()
311 data->writeReport[3] = (addr >> 8) & 0xFF; in rmi_write_block()
312 memcpy(&data->writeReport[4], buf, len); in rmi_write_block()
314 ret = rmi_write_report(hdev, data->writeReport, in rmi_write_block()
315 data->output_report_size); in rmi_write_block()
325 mutex_unlock(&data->page_mutex); in rmi_write_block()
368 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_reset_attn_mode() local
375 if (data->restore_interrupt_mask) { in rmi_reset_attn_mode()
376 ret = rmi_write(hdev, data->f01.control_base_addr + 1, in rmi_reset_attn_mode()
377 &data->interrupt_enable_mask); in rmi_reset_attn_mode()
402 static int rmi_f11_input_event(struct hid_device *hdev, u8 irq, u8 *data, in rmi_f11_input_event() argument
416 int finger_state = (data[fs_byte_position] >> fs_bit_position) & in rmi_f11_input_event()
430 rmi_f11_process_touch(hdata, i, finger_state, &data[position]); 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
455 value = (data[i / 8] >> (i & 0x07)) & BIT(0); in rmi_f30_input_event()
465 static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) in rmi_input_event() argument
477 if (data[1] & ~irq_mask) in rmi_input_event()
479 data[1] & ~irq_mask, __FILE__, __LINE__); 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
505 memcpy(hdata->readReport, data, size < hdata->input_report_size ? in rmi_read_data_event()
513 static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size) in rmi_check_sanity() argument
523 while ((data[valid_size - 1] == 0xff) && valid_size > 0) in rmi_check_sanity()
530 struct hid_report *report, u8 *data, int size) in rmi_raw_event() argument
532 size = rmi_check_sanity(hdev, data, size); in rmi_raw_event()
536 switch (data[0]) { 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()
551 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_event() local
553 if ((data->device_flags & RMI_DEVICE) && in rmi_event()
556 if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) { in rmi_event()
575 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_set_sleep_mode() local
579 f01_ctrl0 = (data->f01_ctrl0 & ~0x3) | sleep_mode; in rmi_set_sleep_mode()
581 ret = rmi_write(hdev, data->f01.control_base_addr, in rmi_set_sleep_mode()
593 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_suspend() local
597 ret = rmi_read_block(hdev, data->f11.control_base_addr, buf, in rmi_suspend()
602 memcpy(data->f11_ctrl_regs, buf, RMI_F11_CTRL_REG_COUNT); in rmi_suspend()
613 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_post_reset() local
622 if (data->read_f11_ctrl_regs) { in rmi_post_reset()
623 ret = rmi_write_block(hdev, data->f11.control_base_addr, in rmi_post_reset()
624 data->f11_ctrl_regs, RMI_F11_CTRL_REG_COUNT); in rmi_post_reset()
671 static void rmi_register_function(struct rmi_data *data, in rmi_register_function() argument
679 f = &data->f01; in rmi_register_function()
682 f = &data->f11; in rmi_register_function()
685 f = &data->f30; in rmi_register_function()
699 data->interrupt_enable_mask |= f->irq_mask; in rmi_register_function()
705 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_scan_pdt() local
739 rmi_register_function(data, &entry, page, interrupt); in rmi_scan_pdt()
758 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f01() local
768 u16 query_offset = data->f01.query_base_addr; in rmi_populate_f01()
833 data->firmware_id = info[1] << 8 | info[0]; in rmi_populate_f01()
834 data->firmware_id += info[2] * 65536; in rmi_populate_f01()
837 ret = rmi_read_block(hdev, data->f01.control_base_addr, info, in rmi_populate_f01()
845 data->f01_ctrl0 = info[0]; in rmi_populate_f01()
855 data->restore_interrupt_mask = true; in rmi_populate_f01()
857 ret = rmi_write(hdev, data->f01.control_base_addr + 1, in rmi_populate_f01()
858 &data->interrupt_enable_mask); in rmi_populate_f01()
871 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f11() local
890 if (!data->f11.query_base_addr) { in rmi_populate_f11()
896 ret = rmi_read(hdev, data->f11.query_base_addr, buf); in rmi_populate_f11()
908 ret = rmi_read(hdev, data->f11.query_base_addr + 1, buf); in rmi_populate_f11()
913 data->max_fingers = (buf[0] & 0x07) + 1; in rmi_populate_f11()
914 if (data->max_fingers > 5) in rmi_populate_f11()
915 data->max_fingers = 10; in rmi_populate_f11()
917 data->f11.report_size = data->max_fingers * 5 + in rmi_populate_f11()
918 DIV_ROUND_UP(data->max_fingers, 4); in rmi_populate_f11()
928 ret = rmi_read(hdev, data->f11.query_base_addr + 5, buf); in rmi_populate_f11()
949 data->f11.query_base_addr + query_offset + 1, buf); in rmi_populate_f11()
972 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
983 data->f11.query_base_addr in rmi_populate_f11()
994 data->x_size_mm = DIV_ROUND_CLOSEST(x_size, 10); in rmi_populate_f11()
995 data->y_size_mm = DIV_ROUND_CLOSEST(y_size, 10); in rmi_populate_f11()
998 __func__, data->x_size_mm, data->y_size_mm); in rmi_populate_f11()
1012 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
1024 ret = rmi_read(hdev, data->f11.query_base_addr in rmi_populate_f11()
1036 data->f11.report_size += data->max_fingers * 2; in rmi_populate_f11()
1038 ret = rmi_read_block(hdev, data->f11.control_base_addr, in rmi_populate_f11()
1039 data->f11_ctrl_regs, RMI_F11_CTRL_REG_COUNT); in rmi_populate_f11()
1046 data->read_f11_ctrl_regs = true; in rmi_populate_f11()
1048 data->max_x = data->f11_ctrl_regs[6] | (data->f11_ctrl_regs[7] << 8); in rmi_populate_f11()
1049 data->max_y = data->f11_ctrl_regs[8] | (data->f11_ctrl_regs[9] << 8); in rmi_populate_f11()
1052 data->f11_ctrl_regs[0] = data->f11_ctrl_regs[0] & ~BIT(6); in rmi_populate_f11()
1053 ret = rmi_write(hdev, data->f11.control_base_addr, in rmi_populate_f11()
1054 data->f11_ctrl_regs); in rmi_populate_f11()
1063 data->f11_ctrl_regs[11] = data->f11_ctrl_regs[11] & ~BIT(0); in rmi_populate_f11()
1064 ret = rmi_write(hdev, data->f11.control_base_addr + 11, in rmi_populate_f11()
1065 &data->f11_ctrl_regs[11]); in rmi_populate_f11()
1078 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate_f30() local
1088 if (!data->f30.query_base_addr) { in rmi_populate_f30()
1093 ret = rmi_read_block(hdev, data->f30.query_base_addr, buf, 2); in rmi_populate_f30()
1101 data->gpio_led_count = buf[1] & 0x1f; in rmi_populate_f30()
1104 bytes_per_ctrl = (data->gpio_led_count + 7) / 8; in rmi_populate_f30()
1111 data->f30.report_size = bytes_per_ctrl; in rmi_populate_f30()
1113 ret = rmi_read_block(hdev, data->f30.control_base_addr + ctrl2_addr, in rmi_populate_f30()
1121 for (i = 0; i < data->gpio_led_count; i++) { in rmi_populate_f30()
1133 data->button_count++; in rmi_populate_f30()
1134 set_bit(i, &data->button_mask); in rmi_populate_f30()
1135 set_bit(i, &data->button_state_mask); in rmi_populate_f30()
1146 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_populate() local
1167 if (!(data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)) { in rmi_populate()
1178 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_configured() local
1183 data->input = input; in rmi_input_configured()
1190 if (!(data->device_flags & RMI_DEVICE)) in rmi_input_configured()
1212 hid_info(hdev, "firmware id: %ld\n", data->firmware_id); in rmi_input_configured()
1215 input_set_abs_params(input, ABS_MT_POSITION_X, 1, data->max_x, 0, 0); in rmi_input_configured()
1216 input_set_abs_params(input, ABS_MT_POSITION_Y, 1, data->max_y, 0, 0); in rmi_input_configured()
1218 if (data->x_size_mm && data->y_size_mm) { in rmi_input_configured()
1219 res_x = (data->max_x - 1) / data->x_size_mm; in rmi_input_configured()
1220 res_y = (data->max_y - 1) / data->y_size_mm; in rmi_input_configured()
1231 ret = input_mt_init_slots(input, data->max_fingers, INPUT_MT_POINTER); in rmi_input_configured()
1235 if (data->button_count) { in rmi_input_configured()
1237 for (i = 0; i < data->button_count; i++) in rmi_input_configured()
1240 if (data->button_count == 1) in rmi_input_configured()
1244 set_bit(RMI_STARTED, &data->flags); in rmi_input_configured()
1256 struct rmi_data *data = hid_get_drvdata(hdev); in rmi_input_mapping() local
1262 if (data->device_flags & RMI_DEVICE) { in rmi_input_mapping()
1263 if ((data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) && in rmi_input_mapping()
1292 struct rmi_data *data = NULL; in rmi_probe() local
1299 data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL); in rmi_probe()
1300 if (!data) in rmi_probe()
1303 INIT_WORK(&data->reset_work, rmi_reset_work); in rmi_probe()
1304 data->hdev = hdev; in rmi_probe()
1306 hid_set_drvdata(hdev, data); in rmi_probe()
1317 data->device_flags = id->driver_data; in rmi_probe()
1335 data->input_report_size = hid_report_len(input_report); in rmi_probe()
1344 data->output_report_size = hid_report_len(output_report); in rmi_probe()
1346 data->device_flags |= RMI_DEVICE; in rmi_probe()
1347 alloc_size = data->output_report_size + data->input_report_size; in rmi_probe()
1349 data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL); in rmi_probe()
1350 if (!data->writeReport) { in rmi_probe()
1355 data->readReport = data->writeReport + data->output_report_size; in rmi_probe()
1357 init_waitqueue_head(&data->wait); in rmi_probe()
1359 mutex_init(&data->page_mutex); in rmi_probe()
1368 if ((data->device_flags & RMI_DEVICE) && in rmi_probe()
1369 !test_bit(RMI_STARTED, &data->flags)) in rmi_probe()