diff --git a/arch/sim/src/sim/sim_framebuffer.c b/arch/sim/src/sim/sim_framebuffer.c index ce0b0a1be19..db7db7b7d07 100644 --- a/arch/sim/src/sim/sim_framebuffer.c +++ b/arch/sim/src/sim/sim_framebuffer.c @@ -426,7 +426,7 @@ void sim_x11loop(void) if (now - last >= MSEC2TICK(16)) { last = now; - fb_notify_vsync(&g_fbobject, FB_NO_OVERLAY); + fb_notify_vsync(&g_fbobject); if (fb_paninfo_count(&g_fbobject, FB_NO_OVERLAY) > 1) { fb_remove_paninfo(&g_fbobject, FB_NO_OVERLAY); diff --git a/drivers/video/fb.c b/drivers/video/fb.c index a61260492de..e7528a550b2 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -1223,14 +1223,17 @@ static int fb_get_planeinfo(FAR struct fb_chardev_s *fb, } /**************************************************************************** - * Name: fb_notify_paninfo + * Name: fb_do_pollnotify ****************************************************************************/ -static void fb_notify_paninfo(FAR struct fb_paninfo_s *paninfo, - pollevent_t events, int overlay) +static void fb_do_pollnotify(wdparm_t arg) { + FAR struct fb_paninfo_s *paninfo = (FAR struct fb_paninfo_s *)arg; FAR struct fb_priv_s * priv; irqstate_t flags; + int overlay; + + overlay = paninfo - paninfo->dev->paninfo - 1; flags = enter_critical_section(); for (priv = paninfo->dev->head; priv; priv = priv->flink) @@ -1242,26 +1245,12 @@ static void fb_notify_paninfo(FAR struct fb_paninfo_s *paninfo, /* Notify framebuffer is writable. */ - poll_notify(priv->fds, CONFIG_VIDEO_FB_NPOLLWAITERS, events); + poll_notify(priv->fds, CONFIG_VIDEO_FB_NPOLLWAITERS, POLLOUT); } leave_critical_section(flags); } -/**************************************************************************** - * Name: fb_do_pollnotify - ****************************************************************************/ - -static void fb_do_pollnotify(wdparm_t arg) -{ - FAR struct fb_paninfo_s *paninfo = (FAR struct fb_paninfo_s *)arg; - int overlay; - - overlay = paninfo - paninfo->dev->paninfo - 1; - - fb_notify_paninfo(paninfo, POLLOUT, overlay); -} - #ifdef CONFIG_FB_SYNC /**************************************************************************** * Name: fb_sem_wait @@ -1373,20 +1362,27 @@ static void fb_pollnotify(FAR struct fb_chardev_s *fb, int overlay) * * Input Parameters: * vtable - Pointer to framebuffer's virtual table. - * overlay - Overlay index. * ****************************************************************************/ -void fb_notify_vsync(FAR struct fb_vtable_s *vtable, int overlay) +void fb_notify_vsync(FAR struct fb_vtable_s *vtable) { FAR struct fb_chardev_s *fb; - FAR struct fb_paninfo_s *paninfo; + FAR struct fb_priv_s * priv; + irqstate_t flags; fb = vtable->priv; if (fb != NULL) { - paninfo = &fb->paninfo[overlay + 1]; - fb_notify_paninfo(paninfo, POLLPRI, overlay); + flags = enter_critical_section(); + for (priv = fb->head; priv; priv = priv->flink) + { + /* Notify that the vsync comes. */ + + poll_notify(priv->fds, CONFIG_VIDEO_FB_NPOLLWAITERS, POLLPRI); + } + + leave_critical_section(flags); } } diff --git a/drivers/video/goldfish_fb.c b/drivers/video/goldfish_fb.c index cc2dbb05eee..efb4a66d739 100644 --- a/drivers/video/goldfish_fb.c +++ b/drivers/video/goldfish_fb.c @@ -126,7 +126,7 @@ static void goldfish_fb_vsync_irq(FAR struct goldfish_fb_s *fb) } #endif - fb_notify_vsync(&fb->vtable, FB_NO_OVERLAY); + fb_notify_vsync(&fb->vtable); if (fb_peek_paninfo(&fb->vtable, &info, FB_NO_OVERLAY) == OK) { diff --git a/include/nuttx/video/fb.h b/include/nuttx/video/fb.h index 3c53b8c6a86..054d001d12a 100644 --- a/include/nuttx/video/fb.h +++ b/include/nuttx/video/fb.h @@ -1015,11 +1015,10 @@ void up_fbuninitialize(int display); * * Input Parameters: * vtable - Pointer to framebuffer's virtual table. - * overlay - Overlay index. * ****************************************************************************/ -void fb_notify_vsync(FAR struct fb_vtable_s *vtable, int overlay); +void fb_notify_vsync(FAR struct fb_vtable_s *vtable); /**************************************************************************** * Name: fb_peek_paninfo