Device allocation and registration are essential, but they are not the main goal of an input device driver, which is designed to report even to the input core. Depending on the type of event your device can support, the kernel provides appropriate APIs to report them to the core.
Given an EV_XXX capable device, the corresponding report function would be input_report_xxx(). The following table shows a mapping between the most important event types and their report functions:
Event type |
Report function |
Code example |
EV_KEY |
input_report_key() |
input_report_key(poll_dev->input, BTN_0, gpiod_get_value(ms-> reset_btn_desc) & 1); |
EV_REL |
input_report_rel() |
input_report_rel(nunchuk->input, REL_X, (nunchuk->report.joy_x - 128)/10); |
EV_ABS |
input_report_abs() |
input_report_abs(bma150->input, ABS_X, x_value... |