diff --git a/src/xrt/drivers/rift_s/rift_s.c b/src/xrt/drivers/rift_s/rift_s.c index aa034bfe0..84dcabc72 100644 --- a/src/xrt/drivers/rift_s/rift_s.c +++ b/src/xrt/drivers/rift_s/rift_s.c @@ -246,6 +246,7 @@ rift_s_system_create(struct xrt_prober *xp, RIFT_S_ERROR("Failed to enable Rift S"); goto cleanup; } + rift_s_send_keepalive(sys->handles[HMD_HID]); // Bench sessions must power the panel even if no new proximity packet arrives. if (debug_get_bool_option_steamvr_bench()) { @@ -860,6 +861,7 @@ open_transport(struct rift_s_system *sys) rift_s_hmd_enable(handles[HMD_HID], true) < 0 || rift_s_set_screen_enable(handles[HMD_HID], true) < 0) goto fail; + rift_s_send_keepalive(handles[HMD_HID]); // Power the panel during enumeration even off-head. Proximity packets restore // ordinary standby after the DP link and camera input have returned. os_nanosleep(2ULL * U_TIME_1S_IN_NS); diff --git a/src/xrt/drivers/rift_s/rift_s_camera.c b/src/xrt/drivers/rift_s/rift_s_camera.c index 4aef5dd83..f2b8f4411 100644 --- a/src/xrt/drivers/rift_s/rift_s_camera.c +++ b/src/xrt/drivers/rift_s/rift_s_camera.c @@ -151,6 +151,8 @@ rift_s_camera_create(struct xrt_prober *xp, /* Re-probe devices. The v4l2 camera device should have appeared by now */ int retry_count = 5; do { + // Display/camera enumeration can outlast the firmware's three-second lease. + rift_s_send_keepalive(hid); xrt_result_t xret = xrt_prober_probe(xp); if (xret != XRT_SUCCESS) {