If we write a DRM mode via debugfs, we shouldn't allow normal operations
to overwrite this DRM mode. This is important if we want to debug
3rd-party devices and we want to see what data is sent on each mode.
If we write NULL/0 as DRM, the lock is removed again so the best matching
DRM is chosen by wiimote core.
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
 {
        __u8 cmd[3];
 
-       if (drm == WIIPROTO_REQ_NULL)
+       if (wdata->state.flags & WIIPROTO_FLAG_DRM_LOCKED)
+               drm = wdata->state.drm;
+       else if (drm == WIIPROTO_REQ_NULL)
                drm = select_drm(wdata);
 
        cmd[0] = WIIPROTO_REQ_DRM;
 
                i = simple_strtoul(buf, NULL, 10);
 
        spin_lock_irqsave(&dbg->wdata->state.lock, flags);
+       dbg->wdata->state.flags &= ~WIIPROTO_FLAG_DRM_LOCKED;
        wiiproto_req_drm(dbg->wdata, (__u8) i);
+       if (i != WIIPROTO_REQ_NULL)
+               dbg->wdata->state.flags |= WIIPROTO_FLAG_DRM_LOCKED;
        spin_unlock_irqrestore(&dbg->wdata->state.lock, flags);
 
        return len;
 
 #define WIIPROTO_FLAG_MP_USED          0x1000
 #define WIIPROTO_FLAG_MP_ACTIVE                0x2000
 #define WIIPROTO_FLAG_EXITING          0x4000
+#define WIIPROTO_FLAG_DRM_LOCKED       0x8000
 
 #define WIIPROTO_FLAGS_LEDS (WIIPROTO_FLAG_LED1 | WIIPROTO_FLAG_LED2 | \
                                        WIIPROTO_FLAG_LED3 | WIIPROTO_FLAG_LED4)