f12
fst.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0
fld.d $f12, \tmp, THREAD_FPR12 - THREAD_FPR0
#define ft4 $f12
s.d $f12, THREAD_FPR12(\thread)
l.d $f12, THREAD_FPR12(\thread)
ldc1 $f12, THREAD_FPR12(\thread)
sdc1 $f12, THREAD_FPR12(\thread)
#define fa0 $f12 /* argument registers */
#define fa0 $f12 /* argument registers */
v10, f11, v11, f12, v12, f13, v13, f14, v14)\
FN(reg, f12), v12, \
v10, f11, v11, f12, v12, f13, v13, f14, v14, f15, v15, f16, v16, f17, v17, f18, v18, f19, v19)\
FN(reg, f12), v12, \
v10, f11, v11, f12, v12, f13, v13, f14, v14, f15, v15, f16, v16, f17, v17, f18, v18, f19, v19, f20, v20)\
FN(reg, f12), v12, \
item = rmi_get_register_desc_item(&f12->control_reg_desc, 8);
offset = rmi_register_desc_calc_reg_offset(&f12->control_reg_desc, 8);
if (rmi_get_register_desc_item(&f12->query_reg_desc,
offset = rmi_register_desc_calc_reg_offset(&f12->query_reg_desc,
static void rmi_f12_process_objects(struct f12_data *f12, u8 *data1, u32 size)
struct rmi_2d_sensor *sensor = &f12->sensor;
u32 objects = min(f12->data1->num_subpackets, size / F12_DATA1_BYTES_PER_OBJ);
struct f12_data *f12 = dev_get_drvdata(&fn->dev);
struct rmi_2d_sensor *sensor = &f12->sensor;
retval = rmi_read_block(rmi_dev, f12->data_addr,
if (f12->data1)
rmi_f12_process_objects(f12, &sensor->data_pkt[f12->data1_offset],
static int rmi_f12_update_dribble(struct rmi_function *fn, struct f12_data *f12)
item = rmi_get_register_desc_item(&f12->control_reg_desc, 20);
control_offset = rmi_register_desc_calc_reg_offset(&f12->control_reg_desc, 20);
switch (f12->sensor.dribble) {
struct f12_data *f12 = dev_get_drvdata(&fn->dev);
if (f12->has_dribble && f12->sensor.dribble != RMI_REG_STATE_DEFAULT)
return rmi_f12_update_dribble(fn, f12);
struct f12_data *f12 = dev_get_drvdata(&fn->dev);
unsigned long *abs_mask = f12->irq_mask;
unsigned long *rel_mask = f12->irq_mask + irq_mask_size;
sensor = &f12->sensor;
struct f12_data *f12;
f12 = devm_kzalloc(&fn->dev, struct_size(f12, irq_mask, irq_mask_size * 2),
if (!f12)
set_bit(fn->irq_pos, f12->irq_mask);
set_bit(fn->irq_pos + 1, f12->irq_mask + irq_mask_size);
f12->has_dribble = !!(buf & BIT(3));
ret = rmi_2d_sensor_of_probe(&fn->dev, &f12->sensor_pdata);
f12->sensor_pdata = pdata->sensor_pdata;
ret = rmi_f12_read_register_descs(fn, f12, query_addr);
sensor = &f12->sensor;
f12->data_addr = fn->fd.data_base_addr;
pkt_size = rmi_register_desc_calc_size(&f12->data_reg_desc);
sensor->axis_align = f12->sensor_pdata.axis_align;
sensor->x_mm = f12->sensor_pdata.x_mm;
sensor->y_mm = f12->sensor_pdata.y_mm;
sensor->dribble = f12->sensor_pdata.dribble;
sensor->sensor_type = f12->sensor_pdata.sensor_type;
dev_set_drvdata(&fn->dev, f12);
ret = rmi_f12_read_sensor_tuning(f12);
item = rmi_get_register_desc_item(&f12->data_reg_desc, i);
f12->data1 = item;
f12->data1_offset = data_offset;
f12->data5 = item;
f12->data5_offset = data_offset;
f12->data6 = item;
f12->data6_offset = data_offset;
f12->data9 = item;
f12->data9_offset = data_offset;
f12->data15 = item;
f12->data15_offset = data_offset;
struct f12_data *f12, u16 query_addr)
{ &f12->query_reg_desc, "Query" },
{ &f12->control_reg_desc, "Control" },
{ &f12->data_reg_desc, "Data" },
static int rmi_f12_read_sensor_tuning(struct f12_data *f12)
struct rmi_2d_sensor *sensor = &f12->sensor;
#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) \
qca_mux_##f12, \
REG_DWARFNUM_NAME(f12, 26),
arr_typedef___diff f12;
func_proto_typedef f12;
return f12(skb);