Lines Matching defs:f3a

39 				  struct f3a_data *f3a, unsigned int button)
41 u16 key_code = f3a->gpio_key_map[button];
42 bool key_down = !(f3a->data_regs[0] & BIT(button));
44 if (f3a->trackstick_buttons &&
47 rmi_f03_overwrite_button(f3a->f03, key_code, key_down);
52 input_report_key(f3a->input, key_code, key_down);
59 struct f3a_data *f3a = dev_get_drvdata(&fn->dev);
65 if (drvdata->attn_data.size < f3a->register_count) {
70 memcpy(f3a->data_regs, drvdata->attn_data.data,
71 f3a->register_count);
72 drvdata->attn_data.data += f3a->register_count;
73 drvdata->attn_data.size -= f3a->register_count;
76 f3a->data_regs, f3a->register_count);
85 for (i = 0; i < f3a->gpio_count; i++)
86 if (f3a->gpio_key_map[i] != KEY_RESERVED)
87 rmi_f3a_report_button(fn, f3a, i);
88 if (f3a->trackstick_buttons)
89 rmi_f03_commit_buttons(f3a->f03);
96 struct f3a_data *f3a = dev_get_drvdata(&fn->dev);
101 if (!f3a)
106 f3a->f03 = rmi_find_function(fn->rmi_dev, 0x03);
107 f3a->trackstick_buttons = f3a->f03 != NULL;
115 static bool rmi_f3a_is_valid_button(int button, struct f3a_data *f3a,
122 static int rmi_f3a_map_gpios(struct rmi_function *fn, struct f3a_data *f3a,
127 struct input_dev *input = f3a->input;
132 int button_count = min_t(u8, f3a->gpio_count, TRACKSTICK_RANGE_END);
134 f3a->gpio_key_map = devm_kcalloc(&fn->dev,
136 sizeof(f3a->gpio_key_map[0]),
138 if (!f3a->gpio_key_map) {
144 if (!rmi_f3a_is_valid_button(i, f3a, query1_regs, ctrl1_regs))
150 f3a->gpio_key_map[i] = trackstick_button++;
152 f3a->gpio_key_map[i] = button;
157 input->keycode = f3a->gpio_key_map;
158 input->keycodesize = sizeof(f3a->gpio_key_map[0]);
159 input->keycodemax = f3a->gpio_count;
167 static int rmi_f3a_initialize(struct rmi_function *fn, struct f3a_data *f3a)
181 f3a->gpio_count = buf & RMI_F3A_GPIO_COUNT;
182 f3a->register_count = DIV_ROUND_UP(f3a->gpio_count, 8);
186 query1, f3a->register_count);
194 ctrl1, f3a->register_count);
200 error = rmi_f3a_map_gpios(fn, f3a, query1, ctrl1);
211 struct f3a_data *f3a;
219 f3a = devm_kzalloc(&fn->dev, sizeof(*f3a), GFP_KERNEL);
220 if (!f3a)
223 f3a->input = drv_data->input;
225 error = rmi_f3a_initialize(fn, f3a);
229 dev_set_drvdata(&fn->dev, f3a);