WIIMOD_NULL,
},
[WIIMOTE_DEV_UNKNOWN] = (const __u8[]){
+ WIIMOD_NO_MP,
WIIMOD_NULL,
},
[WIIMOTE_DEV_GENERIC] = (const __u8[]){
WIIMOD_LED4,
WIIMOD_ACCEL,
WIIMOD_IR,
+ WIIMOD_BUILTIN_MP,
WIIMOD_NULL,
},
[WIIMOTE_DEV_BALANCE_BOARD] = (const __u8[]) {
WIIMOD_BATTERY,
WIIMOD_LED1,
+ WIIMOD_NO_MP,
WIIMOD_NULL,
},
};
out_release:
wiimote_cmd_release(wdata);
wiimote_init_set_type(wdata, exttype);
+
/* schedule MP timer */
- mod_timer(&wdata->timer, jiffies + HZ * 4);
+ spin_lock_irq(&wdata->state.lock);
+ if (!(wdata->state.flags & WIIPROTO_FLAG_BUILTIN_MP) &&
+ !(wdata->state.flags & WIIPROTO_FLAG_NO_MP))
+ mod_timer(&wdata->timer, jiffies + HZ * 4);
+ spin_unlock_irq(&wdata->state.lock);
}
/*
wiimote_cmd_release(wdata);
/* only poll for MP if requested and if state didn't change */
- if (ret && poll_mp)
+ if (ret && poll_mp && !(flags & WIIPROTO_FLAG_BUILTIN_MP) &&
+ !(flags & WIIPROTO_FLAG_NO_MP))
wiimote_init_poll_mp(wdata);
return ret;
/* init extension and MP (deactivates current extension or MP) */
wiimote_cmd_init_ext(wdata);
- wiimote_cmd_init_mp(wdata);
- mp = wiimote_cmd_read_mp(wdata, mpdata);
+ if (flags & WIIPROTO_FLAG_NO_MP) {
+ mp = false;
+ } else {
+ wiimote_cmd_init_mp(wdata);
+ mp = wiimote_cmd_read_mp(wdata, mpdata);
+ }
exttype = wiimote_cmd_read_ext(wdata, extdata);
wiimote_cmd_release(wdata);
del_timer_sync(&wdata->timer);
} else {
/* reschedule MP hotplug timer */
- mod_timer(&wdata->timer, jiffies + HZ * 4);
+ if (!(flags & WIIPROTO_FLAG_BUILTIN_MP) &&
+ !(flags & WIIPROTO_FLAG_NO_MP))
+ mod_timer(&wdata->timer, jiffies + HZ * 4);
}
spin_lock_irq(&wdata->state.lock);