Lines Matching refs:fb_helper

14 static bool drm_fbdev_use_shadow_fb(struct drm_fb_helper *fb_helper)  in drm_fbdev_use_shadow_fb()  argument
16 struct drm_device *dev = fb_helper->dev; in drm_fbdev_use_shadow_fb()
17 struct drm_framebuffer *fb = fb_helper->fb; in drm_fbdev_use_shadow_fb()
27 struct drm_fb_helper *fb_helper = info->par; in drm_fbdev_fb_open() local
30 if (user && !try_module_get(fb_helper->dev->driver->fops->owner)) in drm_fbdev_fb_open()
38 struct drm_fb_helper *fb_helper = info->par; in drm_fbdev_fb_release() local
41 module_put(fb_helper->dev->driver->fops->owner); in drm_fbdev_fb_release()
48 struct drm_fb_helper *fb_helper = info->par; in drm_fbdev_fb_destroy() local
51 if (!fb_helper->dev) in drm_fbdev_fb_destroy()
56 if (drm_fbdev_use_shadow_fb(fb_helper)) in drm_fbdev_fb_destroy()
59 drm_fb_helper_fini(fb_helper); in drm_fbdev_fb_destroy()
63 else if (fb_helper->buffer) in drm_fbdev_fb_destroy()
64 drm_client_buffer_vunmap(fb_helper->buffer); in drm_fbdev_fb_destroy()
66 drm_client_framebuffer_delete(fb_helper->buffer); in drm_fbdev_fb_destroy()
67 drm_client_release(&fb_helper->client); in drm_fbdev_fb_destroy()
69 drm_fb_helper_unprepare(fb_helper); in drm_fbdev_fb_destroy()
70 kfree(fb_helper); in drm_fbdev_fb_destroy()
75 struct drm_fb_helper *fb_helper = info->par; in drm_fbdev_fb_mmap() local
77 if (drm_fbdev_use_shadow_fb(fb_helper)) in drm_fbdev_fb_mmap()
79 else if (fb_helper->dev->driver->gem_prime_mmap) in drm_fbdev_fb_mmap()
80 return fb_helper->dev->driver->gem_prime_mmap(fb_helper->buffer->gem, vma); in drm_fbdev_fb_mmap()
87 struct drm_fb_helper *fb_helper = info->par; in drm_fbdev_use_iomem() local
88 struct drm_client_buffer *buffer = fb_helper->buffer; in drm_fbdev_use_iomem()
90 return !drm_fbdev_use_shadow_fb(fb_helper) && buffer->map.is_iomem; in drm_fbdev_use_iomem()
163 static int drm_fbdev_fb_probe(struct drm_fb_helper *fb_helper, in drm_fbdev_fb_probe() argument
166 struct drm_client_dev *client = &fb_helper->client; in drm_fbdev_fb_probe()
167 struct drm_device *dev = fb_helper->dev; in drm_fbdev_fb_probe()
185 fb_helper->buffer = buffer; in drm_fbdev_fb_probe()
186 fb_helper->fb = buffer->fb; in drm_fbdev_fb_probe()
189 info = drm_fb_helper_alloc_info(fb_helper); in drm_fbdev_fb_probe()
198 drm_fb_helper_fill_info(info, fb_helper, sizes); in drm_fbdev_fb_probe()
200 if (drm_fbdev_use_shadow_fb(fb_helper)) { in drm_fbdev_fb_probe()
207 fb_helper->fbdefio.delay = HZ / 20; in drm_fbdev_fb_probe()
208 fb_helper->fbdefio.deferred_io = drm_fb_helper_deferred_io; in drm_fbdev_fb_probe()
210 info->fbdefio = &fb_helper->fbdefio; in drm_fbdev_fb_probe()
216 ret = drm_client_buffer_vmap(fb_helper->buffer, &map); in drm_fbdev_fb_probe()
232 if (fb_helper->hint_leak_smem_start && info->fix.smem_start == 0 && in drm_fbdev_fb_probe()
242 static void drm_fbdev_damage_blit_real(struct drm_fb_helper *fb_helper, in drm_fbdev_damage_blit_real() argument
246 struct drm_framebuffer *fb = fb_helper->fb; in drm_fbdev_damage_blit_real()
271 src = fb_helper->info->screen_buffer + offset; in drm_fbdev_damage_blit_real()
281 static int drm_fbdev_damage_blit(struct drm_fb_helper *fb_helper, in drm_fbdev_damage_blit() argument
284 struct drm_client_buffer *buffer = fb_helper->buffer; in drm_fbdev_damage_blit()
299 mutex_lock(&fb_helper->lock); in drm_fbdev_damage_blit()
306 drm_fbdev_damage_blit_real(fb_helper, clip, &dst); in drm_fbdev_damage_blit()
311 mutex_unlock(&fb_helper->lock); in drm_fbdev_damage_blit()
350 struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); in drm_fbdev_client_unregister() local
352 if (fb_helper->info) { in drm_fbdev_client_unregister()
353 drm_fb_helper_unregister_info(fb_helper); in drm_fbdev_client_unregister()
355 drm_client_release(&fb_helper->client); in drm_fbdev_client_unregister()
356 drm_fb_helper_unprepare(fb_helper); in drm_fbdev_client_unregister()
357 kfree(fb_helper); in drm_fbdev_client_unregister()
370 struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client); in drm_fbdev_client_hotplug() local
374 if (dev->fb_helper) in drm_fbdev_client_hotplug()
375 return drm_fb_helper_hotplug_event(dev->fb_helper); in drm_fbdev_client_hotplug()
377 ret = drm_fb_helper_init(dev, fb_helper); in drm_fbdev_client_hotplug()
384 ret = drm_fb_helper_initial_config(fb_helper); in drm_fbdev_client_hotplug()
391 drm_fb_helper_fini(fb_helper); in drm_fbdev_client_hotplug()
433 struct drm_fb_helper *fb_helper; in drm_fbdev_generic_setup() local
437 drm_WARN(dev, dev->fb_helper, "fb_helper is already set!\n"); in drm_fbdev_generic_setup()
439 fb_helper = kzalloc(sizeof(*fb_helper), GFP_KERNEL); in drm_fbdev_generic_setup()
440 if (!fb_helper) in drm_fbdev_generic_setup()
442 drm_fb_helper_prepare(dev, fb_helper, preferred_bpp, &drm_fb_helper_generic_funcs); in drm_fbdev_generic_setup()
444 ret = drm_client_init(dev, &fb_helper->client, "fbdev", &drm_fbdev_client_funcs); in drm_fbdev_generic_setup()
450 ret = drm_fbdev_client_hotplug(&fb_helper->client); in drm_fbdev_generic_setup()
454 drm_client_register(&fb_helper->client); in drm_fbdev_generic_setup()
459 drm_fb_helper_unprepare(fb_helper); in drm_fbdev_generic_setup()
460 kfree(fb_helper); in drm_fbdev_generic_setup()