Lines Matching refs:f30

88 						struct f30_data *f30)  in rmi_f30_read_control_parameters()  argument
93 f30->ctrl_regs, f30->ctrl_regs_size); in rmi_f30_read_control_parameters()
105 struct f30_data *f30, unsigned int button) in rmi_f30_report_button() argument
109 u16 key_code = f30->gpioled_key_map[button]; in rmi_f30_report_button()
110 bool key_down = !(f30->data_regs[reg_num] & BIT(bit_num)); in rmi_f30_report_button()
112 if (f30->trackstick_buttons && in rmi_f30_report_button()
115 rmi_f03_overwrite_button(f30->f03, key_code, key_down); in rmi_f30_report_button()
121 input_report_key(f30->input, key_code, key_down); in rmi_f30_report_button()
128 struct f30_data *f30 = dev_get_drvdata(&fn->dev); in rmi_f30_attention() local
135 if (drvdata->attn_data.size < f30->register_count) { in rmi_f30_attention()
140 memcpy(f30->data_regs, drvdata->attn_data.data, in rmi_f30_attention()
141 f30->register_count); in rmi_f30_attention()
142 drvdata->attn_data.data += f30->register_count; in rmi_f30_attention()
143 drvdata->attn_data.size -= f30->register_count; in rmi_f30_attention()
146 f30->data_regs, f30->register_count); in rmi_f30_attention()
155 if (f30->has_gpio) { in rmi_f30_attention()
156 for (i = 0; i < f30->gpioled_count; i++) in rmi_f30_attention()
157 if (f30->gpioled_key_map[i] != KEY_RESERVED) in rmi_f30_attention()
158 rmi_f30_report_button(fn, f30, i); in rmi_f30_attention()
159 if (f30->trackstick_buttons) in rmi_f30_attention()
160 rmi_f03_commit_buttons(f30->f03); in rmi_f30_attention()
168 struct f30_data *f30 = dev_get_drvdata(&fn->dev); in rmi_f30_config() local
175 if (!f30) in rmi_f30_config()
180 f30->f03 = rmi_find_function(fn->rmi_dev, 0x03); in rmi_f30_config()
181 f30->trackstick_buttons = f30->f03 != NULL; in rmi_f30_config()
189 f30->ctrl_regs, f30->ctrl_regs_size); in rmi_f30_config()
227 struct f30_data *f30) in rmi_f30_map_gpios() argument
231 struct input_dev *input = f30->input; in rmi_f30_map_gpios()
236 int button_count = min_t(u8, f30->gpioled_count, TRACKSTICK_RANGE_END); in rmi_f30_map_gpios()
238 f30->gpioled_key_map = devm_kcalloc(&fn->dev, in rmi_f30_map_gpios()
240 sizeof(f30->gpioled_key_map[0]), in rmi_f30_map_gpios()
242 if (!f30->gpioled_key_map) { in rmi_f30_map_gpios()
248 if (!rmi_f30_is_valid_button(i, f30->ctrl)) in rmi_f30_map_gpios()
253 f30->gpioled_key_map[i] = trackstick_button++; in rmi_f30_map_gpios()
255 f30->gpioled_key_map[i] = button; in rmi_f30_map_gpios()
261 input->keycode = f30->gpioled_key_map; in rmi_f30_map_gpios()
262 input->keycodesize = sizeof(f30->gpioled_key_map[0]); in rmi_f30_map_gpios()
263 input->keycodemax = f30->gpioled_count; in rmi_f30_map_gpios()
276 static int rmi_f30_initialize(struct rmi_function *fn, struct f30_data *f30) in rmi_f30_initialize() argument
278 u8 *ctrl_reg = f30->ctrl_regs; in rmi_f30_initialize()
290 f30->has_extended_pattern = buf[0] & RMI_F30_EXTENDED_PATTERNS; in rmi_f30_initialize()
291 f30->has_mappable_buttons = buf[0] & RMI_F30_HAS_MAPPABLE_BUTTONS; in rmi_f30_initialize()
292 f30->has_led = buf[0] & RMI_F30_HAS_LED; in rmi_f30_initialize()
293 f30->has_gpio = buf[0] & RMI_F30_HAS_GPIO; in rmi_f30_initialize()
294 f30->has_haptic = buf[0] & RMI_F30_HAS_HAPTIC; in rmi_f30_initialize()
295 f30->has_gpio_driver_control = buf[0] & RMI_F30_HAS_GPIO_DRV_CTL; in rmi_f30_initialize()
296 f30->has_mech_mouse_btns = buf[0] & RMI_F30_HAS_MECH_MOUSE_BTNS; in rmi_f30_initialize()
297 f30->gpioled_count = buf[1] & RMI_F30_GPIO_LED_COUNT; in rmi_f30_initialize()
299 f30->register_count = DIV_ROUND_UP(f30->gpioled_count, 8); in rmi_f30_initialize()
301 if (f30->has_gpio && f30->has_led) in rmi_f30_initialize()
302 rmi_f30_set_ctrl_data(&f30->ctrl[0], &control_address, in rmi_f30_initialize()
303 f30->register_count, &ctrl_reg); in rmi_f30_initialize()
305 rmi_f30_set_ctrl_data(&f30->ctrl[1], &control_address, in rmi_f30_initialize()
308 if (f30->has_gpio) { in rmi_f30_initialize()
309 rmi_f30_set_ctrl_data(&f30->ctrl[2], &control_address, in rmi_f30_initialize()
310 f30->register_count, &ctrl_reg); in rmi_f30_initialize()
312 rmi_f30_set_ctrl_data(&f30->ctrl[3], &control_address, in rmi_f30_initialize()
313 f30->register_count, &ctrl_reg); in rmi_f30_initialize()
316 if (f30->has_led) { in rmi_f30_initialize()
317 rmi_f30_set_ctrl_data(&f30->ctrl[4], &control_address, in rmi_f30_initialize()
318 f30->register_count, &ctrl_reg); in rmi_f30_initialize()
320 rmi_f30_set_ctrl_data(&f30->ctrl[5], &control_address, in rmi_f30_initialize()
321 f30->has_extended_pattern ? 6 : 2, in rmi_f30_initialize()
325 if (f30->has_led || f30->has_gpio_driver_control) { in rmi_f30_initialize()
327 rmi_f30_set_ctrl_data(&f30->ctrl[6], &control_address, in rmi_f30_initialize()
328 f30->gpioled_count, &ctrl_reg); in rmi_f30_initialize()
331 if (f30->has_mappable_buttons) { in rmi_f30_initialize()
333 rmi_f30_set_ctrl_data(&f30->ctrl[7], &control_address, in rmi_f30_initialize()
334 f30->gpioled_count, &ctrl_reg); in rmi_f30_initialize()
337 if (f30->has_haptic) { in rmi_f30_initialize()
338 rmi_f30_set_ctrl_data(&f30->ctrl[8], &control_address, in rmi_f30_initialize()
339 f30->register_count, &ctrl_reg); in rmi_f30_initialize()
341 rmi_f30_set_ctrl_data(&f30->ctrl[9], &control_address, in rmi_f30_initialize()
345 if (f30->has_mech_mouse_btns) in rmi_f30_initialize()
346 rmi_f30_set_ctrl_data(&f30->ctrl[10], &control_address, in rmi_f30_initialize()
349 f30->ctrl_regs_size = ctrl_reg - in rmi_f30_initialize()
350 f30->ctrl_regs ?: RMI_F30_CTRL_REGS_MAX_SIZE; in rmi_f30_initialize()
352 error = rmi_f30_read_control_parameters(fn, f30); in rmi_f30_initialize()
360 if (f30->has_gpio) { in rmi_f30_initialize()
361 error = rmi_f30_map_gpios(fn, f30); in rmi_f30_initialize()
375 struct f30_data *f30; in rmi_f30_probe() local
386 f30 = devm_kzalloc(&fn->dev, sizeof(*f30), GFP_KERNEL); in rmi_f30_probe()
387 if (!f30) in rmi_f30_probe()
390 f30->input = drv_data->input; in rmi_f30_probe()
392 error = rmi_f30_initialize(fn, f30); in rmi_f30_probe()
396 dev_set_drvdata(&fn->dev, f30); in rmi_f30_probe()