try changing
/* digital pad */
input_report_abs(dev, ABS_HAT0X, !!(data[2] & 0x08) - !!(data[2] & 0x04));
input_report_abs(dev, ABS_HAT0Y, !!(data[2] & 0x02) - !!(data[2] & 0x01));
to
/* digital pad */
input_report_key(dev, BTN_THUMBL, (data[2] & 0x08) >> 3);
input_report_key(dev, BTN_THUMBR ...