mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
Input: synaptics-rmi4 - convert irq distribution to irq_domain
Convert the RMI driver to use the standard mechanism for distributing IRQs to the various functions. Tested on: * S7300 (F11, F34, F54) * S7817 (F12, F34, F54) Signed-off-by: Nick Dyer <nick@shmanahar.org> Acked-by: Christopher Heiny <cheiny@synaptics.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
8f6a652a8c
commit
24d28e4f12
12 changed files with 119 additions and 85 deletions
|
@ -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)
|
||||
|
@ -1275,8 +1265,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);
|
||||
|
@ -1302,13 +1293,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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue