Lines Matching defs:f30

85 						struct f30_data *f30)
90 f30->ctrl_regs, f30->ctrl_regs_size);
102 struct f30_data *f30, unsigned int button)
106 u16 key_code = f30->gpioled_key_map[button];
107 bool key_down = !(f30->data_regs[reg_num] & BIT(bit_num));
109 if (f30->trackstick_buttons &&
112 rmi_f03_overwrite_button(f30->f03, key_code, key_down);
118 input_report_key(f30->input, key_code, key_down);
125 struct f30_data *f30 = dev_get_drvdata(&fn->dev);
132 if (drvdata->attn_data.size < f30->register_count) {
137 memcpy(f30->data_regs, drvdata->attn_data.data,
138 f30->register_count);
139 drvdata->attn_data.data += f30->register_count;
140 drvdata->attn_data.size -= f30->register_count;
143 f30->data_regs, f30->register_count);
152 if (f30->has_gpio) {
153 for (i = 0; i < f30->gpioled_count; i++)
154 if (f30->gpioled_key_map[i] != KEY_RESERVED)
155 rmi_f30_report_button(fn, f30, i);
156 if (f30->trackstick_buttons)
157 rmi_f03_commit_buttons(f30->f03);
165 struct f30_data *f30 = dev_get_drvdata(&fn->dev);
172 if (!f30)
177 f30->f03 = rmi_find_function(fn->rmi_dev, 0x03);
178 f30->trackstick_buttons = f30->f03 != NULL;
186 f30->ctrl_regs, f30->ctrl_regs_size);
224 struct f30_data *f30)
228 struct input_dev *input = f30->input;
233 int button_count = min_t(u8, f30->gpioled_count, TRACKSTICK_RANGE_END);
235 f30->gpioled_key_map = devm_kcalloc(&fn->dev,
237 sizeof(f30->gpioled_key_map[0]),
239 if (!f30->gpioled_key_map) {
245 if (!rmi_f30_is_valid_button(i, f30->ctrl))
250 f30->gpioled_key_map[i] = trackstick_button++;
252 f30->gpioled_key_map[i] = button;
258 input->keycode = f30->gpioled_key_map;
259 input->keycodesize = sizeof(f30->gpioled_key_map[0]);
260 input->keycodemax = f30->gpioled_count;
263 * Buttonpad could be also inferred from f30->has_mech_mouse_btns,
273 static int rmi_f30_initialize(struct rmi_function *fn, struct f30_data *f30)
275 u8 *ctrl_reg = f30->ctrl_regs;
287 f30->has_extended_pattern = buf[0] & RMI_F30_EXTENDED_PATTERNS;
288 f30->has_mappable_buttons = buf[0] & RMI_F30_HAS_MAPPABLE_BUTTONS;
289 f30->has_led = buf[0] & RMI_F30_HAS_LED;
290 f30->has_gpio = buf[0] & RMI_F30_HAS_GPIO;
291 f30->has_haptic = buf[0] & RMI_F30_HAS_HAPTIC;
292 f30->has_gpio_driver_control = buf[0] & RMI_F30_HAS_GPIO_DRV_CTL;
293 f30->has_mech_mouse_btns = buf[0] & RMI_F30_HAS_MECH_MOUSE_BTNS;
294 f30->gpioled_count = buf[1] & RMI_F30_GPIO_LED_COUNT;
296 f30->register_count = DIV_ROUND_UP(f30->gpioled_count, 8);
298 if (f30->has_gpio && f30->has_led)
299 rmi_f30_set_ctrl_data(&f30->ctrl[0], &control_address,
300 f30->register_count, &ctrl_reg);
302 rmi_f30_set_ctrl_data(&f30->ctrl[1], &control_address,
305 if (f30->has_gpio) {
306 rmi_f30_set_ctrl_data(&f30->ctrl[2], &control_address,
307 f30->register_count, &ctrl_reg);
309 rmi_f30_set_ctrl_data(&f30->ctrl[3], &control_address,
310 f30->register_count, &ctrl_reg);
313 if (f30->has_led) {
314 rmi_f30_set_ctrl_data(&f30->ctrl[4], &control_address,
315 f30->register_count, &ctrl_reg);
317 rmi_f30_set_ctrl_data(&f30->ctrl[5], &control_address,
318 f30->has_extended_pattern ? 6 : 2,
322 if (f30->has_led || f30->has_gpio_driver_control) {
324 rmi_f30_set_ctrl_data(&f30->ctrl[6], &control_address,
325 f30->gpioled_count, &ctrl_reg);
328 if (f30->has_mappable_buttons) {
330 rmi_f30_set_ctrl_data(&f30->ctrl[7], &control_address,
331 f30->gpioled_count, &ctrl_reg);
334 if (f30->has_haptic) {
335 rmi_f30_set_ctrl_data(&f30->ctrl[8], &control_address,
336 f30->register_count, &ctrl_reg);
338 rmi_f30_set_ctrl_data(&f30->ctrl[9], &control_address,
342 if (f30->has_mech_mouse_btns)
343 rmi_f30_set_ctrl_data(&f30->ctrl[10], &control_address,
346 f30->ctrl_regs_size = ctrl_reg -
347 f30->ctrl_regs ?: RMI_F30_CTRL_REGS_MAX_SIZE;
349 error = rmi_f30_read_control_parameters(fn, f30);
357 if (f30->has_gpio) {
358 error = rmi_f30_map_gpios(fn, f30);
372 struct f30_data *f30;
383 f30 = devm_kzalloc(&fn->dev, sizeof(*f30), GFP_KERNEL);
384 if (!f30)
387 f30->input = drv_data->input;
389 error = rmi_f30_initialize(fn, f30);
393 dev_set_drvdata(&fn->dev, f30);