adi_get_bits
if (adi->ret < adi->length || adi->id != (adi_get_bits(adi, 4) | (adi_get_bits(adi, 4) << 4)))
input_report_abs(dev, *abs++, adi_get_bits(adi, 10));
input_report_abs(dev, *abs++, adi_get_bits(adi, 8));
t = adi_get_bits(adi, 4);
input_report_key(dev, *key++, adi_get_bits(adi, 1));
if ((t = adi_get_bits(adi, 4)) > 8) t = 0;
input_report_key(dev, *key++, adi_get_bits(adi, 1));
if (adi->ret < (t = adi_get_bits(adi, 10))) {
adi->id = adi_get_bits(adi, 4) | (adi_get_bits(adi, 4) << 4);
if ((t = adi_get_bits(adi, 4)) & ADI_FLAG_HAT) adi->hats++;
adi->length = adi_get_bits(adi, 10);
adi->axes8 = adi_get_bits(adi, 4);
adi->buttons = adi_get_bits(adi, 6);
if (adi_get_bits(adi, 6) != 8 && adi->hats) {
adi->buttons += adi_get_bits(adi, 6);
adi->hats += adi_get_bits(adi, 4);
i = adi_get_bits(adi, 4);
t = adi_get_bits(adi, 4);
adi->cname[i] = adi_get_bits(adi, 8);
adi_move_bits(port, adi_get_bits(port->adi, 10));