rmi_f11.c (9095bf25ea08135a5b74875dd0e3eeaddc4218a0) | rmi_f11.c (24d28e4f1271cb2f91613dada8f2acccd00eff56) |
---|---|
1/* 2 * Copyright (c) 2011-2015 Synaptics Incorporated 3 * Copyright (c) 2011 Unixphere 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published by 7 * the Free Software Foundation. 8 */ --- 556 unchanged lines hidden (view full) --- 565 566static inline u8 rmi_f11_parse_finger_state(const u8 *f_state, u8 n_finger) 567{ 568 return (f_state[n_finger / 4] >> (2 * (n_finger % 4))) & 569 FINGER_STATE_MASK; 570} 571 572static void rmi_f11_finger_handler(struct f11_data *f11, | 1/* 2 * Copyright (c) 2011-2015 Synaptics Incorporated 3 * Copyright (c) 2011 Unixphere 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published by 7 * the Free Software Foundation. 8 */ --- 556 unchanged lines hidden (view full) --- 565 566static inline u8 rmi_f11_parse_finger_state(const u8 *f_state, u8 n_finger) 567{ 568 return (f_state[n_finger / 4] >> (2 * (n_finger % 4))) & 569 FINGER_STATE_MASK; 570} 571 572static void rmi_f11_finger_handler(struct f11_data *f11, |
573 struct rmi_2d_sensor *sensor, 574 unsigned long *irq_bits, int num_irq_regs, 575 int size) | 573 struct rmi_2d_sensor *sensor, int size) |
576{ 577 const u8 *f_state = f11->data.f_state; 578 u8 finger_state; 579 u8 i; 580 int abs_fingers; 581 int rel_fingers; 582 int abs_size = sensor->nbr_fingers * RMI_F11_ABS_BYTES; 583 | 574{ 575 const u8 *f_state = f11->data.f_state; 576 u8 finger_state; 577 u8 i; 578 int abs_fingers; 579 int rel_fingers; 580 int abs_size = sensor->nbr_fingers * RMI_F11_ABS_BYTES; 581 |
584 int abs_bits = bitmap_and(f11->result_bits, irq_bits, f11->abs_mask, 585 num_irq_regs * 8); 586 int rel_bits = bitmap_and(f11->result_bits, irq_bits, f11->rel_mask, 587 num_irq_regs * 8); 588 589 if (abs_bits) { | 582 if (sensor->report_abs) { |
590 if (abs_size > size) 591 abs_fingers = size / RMI_F11_ABS_BYTES; 592 else 593 abs_fingers = sensor->nbr_fingers; 594 595 for (i = 0; i < abs_fingers; i++) { 596 /* Possible of having 4 fingers per f_state register */ 597 finger_state = rmi_f11_parse_finger_state(f_state, i); 598 if (finger_state == F11_RESERVED) { 599 pr_err("Invalid finger state[%d]: 0x%02x", i, 600 finger_state); 601 continue; 602 } 603 604 rmi_f11_abs_pos_process(f11, sensor, &sensor->objs[i], 605 finger_state, i); 606 } | 583 if (abs_size > size) 584 abs_fingers = size / RMI_F11_ABS_BYTES; 585 else 586 abs_fingers = sensor->nbr_fingers; 587 588 for (i = 0; i < abs_fingers; i++) { 589 /* Possible of having 4 fingers per f_state register */ 590 finger_state = rmi_f11_parse_finger_state(f_state, i); 591 if (finger_state == F11_RESERVED) { 592 pr_err("Invalid finger state[%d]: 0x%02x", i, 593 finger_state); 594 continue; 595 } 596 597 rmi_f11_abs_pos_process(f11, sensor, &sensor->objs[i], 598 finger_state, i); 599 } |
607 } | |
608 | 600 |
609 if (rel_bits) { 610 if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size) 611 rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES; 612 else 613 rel_fingers = sensor->nbr_fingers; 614 615 for (i = 0; i < rel_fingers; i++) 616 rmi_f11_rel_pos_report(f11, i); 617 } 618 619 if (abs_bits) { | |
620 /* 621 * the absolute part is made in 2 parts to allow the kernel 622 * tracking to take place. 623 */ 624 if (sensor->kernel_tracking) 625 input_mt_assign_slots(sensor->input, 626 sensor->tracking_slots, 627 sensor->tracking_pos, --- 5 unchanged lines hidden (view full) --- 633 if (finger_state == F11_RESERVED) 634 /* no need to send twice the error */ 635 continue; 636 637 rmi_2d_sensor_abs_report(sensor, &sensor->objs[i], i); 638 } 639 640 input_mt_sync_frame(sensor->input); | 601 /* 602 * the absolute part is made in 2 parts to allow the kernel 603 * tracking to take place. 604 */ 605 if (sensor->kernel_tracking) 606 input_mt_assign_slots(sensor->input, 607 sensor->tracking_slots, 608 sensor->tracking_pos, --- 5 unchanged lines hidden (view full) --- 614 if (finger_state == F11_RESERVED) 615 /* no need to send twice the error */ 616 continue; 617 618 rmi_2d_sensor_abs_report(sensor, &sensor->objs[i], i); 619 } 620 621 input_mt_sync_frame(sensor->input); |
622 } else if (sensor->report_rel) { 623 if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size) 624 rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES; 625 else 626 rel_fingers = sensor->nbr_fingers; 627 628 for (i = 0; i < rel_fingers; i++) 629 rmi_f11_rel_pos_report(f11, i); |
|
641 } | 630 } |
631 |
|
642} 643 644static int f11_2d_construct_data(struct f11_data *f11) 645{ 646 struct rmi_2d_sensor *sensor = &f11->sensor; 647 struct f11_2d_sensor_queries *query = &f11->sens_query; 648 struct f11_2d_data *data = &f11->data; 649 int i; --- 620 unchanged lines hidden (view full) --- 1270 rc = f11_write_control_regs(fn, &f11->sens_query, 1271 &f11->dev_controls, fn->fd.query_base_addr); 1272 if (rc < 0) 1273 return rc; 1274 1275 return 0; 1276} 1277 | 632} 633 634static int f11_2d_construct_data(struct f11_data *f11) 635{ 636 struct rmi_2d_sensor *sensor = &f11->sensor; 637 struct f11_2d_sensor_queries *query = &f11->sens_query; 638 struct f11_2d_data *data = &f11->data; 639 int i; --- 620 unchanged lines hidden (view full) --- 1260 rc = f11_write_control_regs(fn, &f11->sens_query, 1261 &f11->dev_controls, fn->fd.query_base_addr); 1262 if (rc < 0) 1263 return rc; 1264 1265 return 0; 1266} 1267 |
1278static int rmi_f11_attention(struct rmi_function *fn, unsigned long *irq_bits) | 1268static irqreturn_t rmi_f11_attention(int irq, void *ctx) |
1279{ | 1269{ |
1270 struct rmi_function *fn = ctx; |
|
1280 struct rmi_device *rmi_dev = fn->rmi_dev; 1281 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); 1282 struct f11_data *f11 = dev_get_drvdata(&fn->dev); 1283 u16 data_base_addr = fn->fd.data_base_addr; 1284 int error; 1285 int valid_bytes = f11->sensor.pkt_size; 1286 1287 if (drvdata->attn_data.data) { --- 9 unchanged lines hidden (view full) --- 1297 valid_bytes); 1298 drvdata->attn_data.data += f11->sensor.attn_size; 1299 drvdata->attn_data.size -= f11->sensor.attn_size; 1300 } else { 1301 error = rmi_read_block(rmi_dev, 1302 data_base_addr, f11->sensor.data_pkt, 1303 f11->sensor.pkt_size); 1304 if (error < 0) | 1271 struct rmi_device *rmi_dev = fn->rmi_dev; 1272 struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); 1273 struct f11_data *f11 = dev_get_drvdata(&fn->dev); 1274 u16 data_base_addr = fn->fd.data_base_addr; 1275 int error; 1276 int valid_bytes = f11->sensor.pkt_size; 1277 1278 if (drvdata->attn_data.data) { --- 9 unchanged lines hidden (view full) --- 1288 valid_bytes); 1289 drvdata->attn_data.data += f11->sensor.attn_size; 1290 drvdata->attn_data.size -= f11->sensor.attn_size; 1291 } else { 1292 error = rmi_read_block(rmi_dev, 1293 data_base_addr, f11->sensor.data_pkt, 1294 f11->sensor.pkt_size); 1295 if (error < 0) |
1305 return error; | 1296 return IRQ_RETVAL(error); |
1306 } 1307 | 1297 } 1298 |
1308 rmi_f11_finger_handler(f11, &f11->sensor, irq_bits, 1309 drvdata->num_of_irq_regs, valid_bytes); | 1299 rmi_f11_finger_handler(f11, &f11->sensor, valid_bytes); |
1310 | 1300 |
1311 return 0; | 1301 return IRQ_HANDLED; |
1312} 1313 1314static int rmi_f11_resume(struct rmi_function *fn) 1315{ 1316 struct f11_data *f11 = dev_get_drvdata(&fn->dev); 1317 int error; 1318 1319 rmi_dbg(RMI_DEBUG_FN, &fn->dev, "Resuming...\n"); --- 44 unchanged lines hidden --- | 1302} 1303 1304static int rmi_f11_resume(struct rmi_function *fn) 1305{ 1306 struct f11_data *f11 = dev_get_drvdata(&fn->dev); 1307 int error; 1308 1309 rmi_dbg(RMI_DEBUG_FN, &fn->dev, "Resuming...\n"); --- 44 unchanged lines hidden --- |