Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: - the main change is a fix for my brain-dead patch to PS/2 button reporting for some protocols that made it in 4.17 - there is a new driver for Spreadtum vibrator that I intended to send during merge window but ended up not sending the 2nd pull request. Given that this is a brand new driver we should not see regressions here - a fixup to Elantech PS/2 driver to avoid decoding errors on Thinkpad P52 - addition of few more ACPI IDs for Silead and Elan drivers - RMI4 is switched to using IRQ domain code instead of rolling its own implementation * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: psmouse - fix button reporting for basic protocols Input: xpad - fix GPD Win 2 controller name Input: elan_i2c_smbus - fix more potential stack buffer overflows Input: elan_i2c - add ELAN0618 (Lenovo v330 15IKB) ACPI ID Input: elantech - fix V4 report decoding for module with middle key Input: elantech - enable middle button of touchpads on ThinkPad P52 Input: do not assign new tracking ID when changing tool type Input: make input_report_slot_state() return boolean Input: synaptics-rmi4 - fix axis-swap behavior Input: synaptics-rmi4 - fix the error return code in rmi_probe_interrupts() Input: synaptics-rmi4 - convert irq distribution to irq_domain Input: silead - add MSSL0002 ACPI HID Input: goldfish_events - fix checkpatch warnings Input: add Spreadtrum vibrator driver
This commit is contained in:
@@ -570,9 +570,7 @@ static inline u8 rmi_f11_parse_finger_state(const u8 *f_state, u8 n_finger)
|
||||
}
|
||||
|
||||
static void rmi_f11_finger_handler(struct f11_data *f11,
|
||||
struct rmi_2d_sensor *sensor,
|
||||
unsigned long *irq_bits, int num_irq_regs,
|
||||
int size)
|
||||
struct rmi_2d_sensor *sensor, int size)
|
||||
{
|
||||
const u8 *f_state = f11->data.f_state;
|
||||
u8 finger_state;
|
||||
@@ -581,12 +579,7 @@ static void rmi_f11_finger_handler(struct f11_data *f11,
|
||||
int rel_fingers;
|
||||
int abs_size = sensor->nbr_fingers * RMI_F11_ABS_BYTES;
|
||||
|
||||
int abs_bits = bitmap_and(f11->result_bits, irq_bits, f11->abs_mask,
|
||||
num_irq_regs * 8);
|
||||
int rel_bits = bitmap_and(f11->result_bits, irq_bits, f11->rel_mask,
|
||||
num_irq_regs * 8);
|
||||
|
||||
if (abs_bits) {
|
||||
if (sensor->report_abs) {
|
||||
if (abs_size > size)
|
||||
abs_fingers = size / RMI_F11_ABS_BYTES;
|
||||
else
|
||||
@@ -604,19 +597,7 @@ static void rmi_f11_finger_handler(struct f11_data *f11,
|
||||
rmi_f11_abs_pos_process(f11, sensor, &sensor->objs[i],
|
||||
finger_state, i);
|
||||
}
|
||||
}
|
||||
|
||||
if (rel_bits) {
|
||||
if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size)
|
||||
rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES;
|
||||
else
|
||||
rel_fingers = sensor->nbr_fingers;
|
||||
|
||||
for (i = 0; i < rel_fingers; i++)
|
||||
rmi_f11_rel_pos_report(f11, i);
|
||||
}
|
||||
|
||||
if (abs_bits) {
|
||||
/*
|
||||
* the absolute part is made in 2 parts to allow the kernel
|
||||
* tracking to take place.
|
||||
@@ -638,7 +619,16 @@ static void rmi_f11_finger_handler(struct f11_data *f11,
|
||||
}
|
||||
|
||||
input_mt_sync_frame(sensor->input);
|
||||
} else if (sensor->report_rel) {
|
||||
if ((abs_size + sensor->nbr_fingers * RMI_F11_REL_BYTES) > size)
|
||||
rel_fingers = (size - abs_size) / RMI_F11_REL_BYTES;
|
||||
else
|
||||
rel_fingers = sensor->nbr_fingers;
|
||||
|
||||
for (i = 0; i < rel_fingers; i++)
|
||||
rmi_f11_rel_pos_report(f11, i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int f11_2d_construct_data(struct f11_data *f11)
|
||||
@@ -1276,8 +1266,9 @@ static int rmi_f11_config(struct rmi_function *fn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rmi_f11_attention(struct rmi_function *fn, unsigned long *irq_bits)
|
||||
static irqreturn_t rmi_f11_attention(int irq, void *ctx)
|
||||
{
|
||||
struct rmi_function *fn = ctx;
|
||||
struct rmi_device *rmi_dev = fn->rmi_dev;
|
||||
struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
|
||||
struct f11_data *f11 = dev_get_drvdata(&fn->dev);
|
||||
@@ -1303,13 +1294,12 @@ static int rmi_f11_attention(struct rmi_function *fn, unsigned long *irq_bits)
|
||||
data_base_addr, f11->sensor.data_pkt,
|
||||
f11->sensor.pkt_size);
|
||||
if (error < 0)
|
||||
return error;
|
||||
return IRQ_RETVAL(error);
|
||||
}
|
||||
|
||||
rmi_f11_finger_handler(f11, &f11->sensor, irq_bits,
|
||||
drvdata->num_of_irq_regs, valid_bytes);
|
||||
rmi_f11_finger_handler(f11, &f11->sensor, valid_bytes);
|
||||
|
||||
return 0;
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int rmi_f11_resume(struct rmi_function *fn)
|
||||
|
Reference in New Issue
Block a user