static int register_input_device(struct usf_type *usf_info, struct us_input_info_type *input_info) { int rc = 0; bool ret = true; uint16_t ind = 0; if ((usf_info == NULL) || (input_info == NULL) || !(input_info->event_types & USF_ALL_EVENTS)) { pr_err("%s: wrong input parameter(s)\n", __func__); return -EINVAL; } for (ind = 0; ind < USF_MAX_EVENT_IND; ++ind) { if (usf_info->input_ifs[ind] != NULL) { pr_err("%s: input_if[%d] is already allocated\n", __func__, ind); return -EFAULT; } if ((input_info->event_types & s_usf_input_devs[ind].event_type) && s_usf_input_devs[ind].prepare_dev) { rc = (*s_usf_input_devs[ind].prepare_dev)( ind, usf_info, input_info, s_usf_input_devs[ind].input_dev_name); if (rc) return rc; rc = input_register_device(usf_info->input_ifs[ind]); if (rc) { pr_err("%s: input_reg_dev() failed; rc=%d\n", __func__, rc); input_free_device(usf_info->input_ifs[ind]); usf_info->input_ifs[ind] = NULL; } else { usf_info->event_types |= s_usf_input_devs[ind].event_type; pr_debug("%s: input device[%s] was registered\n", __func__, s_usf_input_devs[ind].input_dev_name); } } /* supported event */ } /* event types loop */ ret = usf_register_conflicting_events( input_info->conflicting_event_types); if (ret) usf_info->conflicting_event_types = input_info->conflicting_event_types; return 0; }
static int register_input_device(struct usf_type *usf_info, struct us_input_info_type *input_info) { int rc = 0; #ifndef SKY_ULTRASOUNDPEN_FEATURE bool ret = true; #endif uint16_t ind = 0; if ((usf_info == NULL) || (input_info == NULL) || !(input_info->event_types & USF_ALL_EVENTS)) { pr_err("%s: wrong input parameter(s)\n", __func__); return -EINVAL; } if (input_info->event_src < ARRAY_SIZE(s_event_src_map)) usf_info->event_src = s_event_src_map[input_info->event_src]; else usf_info->event_src = 0; for (ind = 0; ind < USF_MAX_EVENT_IND; ++ind) { if (usf_info->input_ifs[ind] != NULL) { pr_err("%s: input_if[%d] is already allocated\n", __func__, ind); return -EFAULT; } if ((input_info->event_types & s_usf_input_devs[ind].event_type) && s_usf_input_devs[ind].prepare_dev) { rc = (*s_usf_input_devs[ind].prepare_dev)( ind, usf_info, input_info, s_usf_input_devs[ind].input_dev_name); if (rc) return rc; if (usf_info->event_src) input_set_capability(usf_info->input_ifs[ind], EV_KEY, usf_info->event_src); rc = input_register_device(usf_info->input_ifs[ind]); if (rc) { pr_err("%s: input_reg_dev() failed; rc=%d\n", __func__, rc); input_free_device(usf_info->input_ifs[ind]); usf_info->input_ifs[ind] = NULL; } else { usf_info->event_types |= s_usf_input_devs[ind].event_type; pr_debug("%s: input device[%s] was registered\n", __func__, s_usf_input_devs[ind].input_dev_name); } } /* supported event */ } /* event types loop */ #ifndef SKY_ULTRASOUNDPEN_FEATURE ret = usf_register_conflicting_events( input_info->conflicting_event_types); if (ret) usf_info->conflicting_event_types = input_info->conflicting_event_types; #endif return 0; }