Lines Matching refs:fb_helper

230 __drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper,  in __drm_fb_helper_restore_fbdev_mode_unlocked()  argument
236 if (!drm_fbdev_emulation || !fb_helper) in __drm_fb_helper_restore_fbdev_mode_unlocked()
239 if (READ_ONCE(fb_helper->deferred_setup)) in __drm_fb_helper_restore_fbdev_mode_unlocked()
242 mutex_lock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
249 ret = drm_client_modeset_commit_locked(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
251 ret = drm_client_modeset_commit(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
254 do_delayed = fb_helper->delayed_hotplug; in __drm_fb_helper_restore_fbdev_mode_unlocked()
256 fb_helper->delayed_hotplug = false; in __drm_fb_helper_restore_fbdev_mode_unlocked()
257 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
260 drm_fb_helper_hotplug_event(fb_helper); in __drm_fb_helper_restore_fbdev_mode_unlocked()
276 int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper) in drm_fb_helper_restore_fbdev_mode_unlocked() argument
278 return __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, false); in drm_fb_helper_restore_fbdev_mode_unlocked()
320 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_dpms() local
322 mutex_lock(&fb_helper->lock); in drm_fb_helper_dpms()
323 drm_client_modeset_dpms(&fb_helper->client, dpms_mode); in drm_fb_helper_dpms()
324 mutex_unlock(&fb_helper->lock); in drm_fb_helper_dpms()
462 void drm_fb_helper_unprepare(struct drm_fb_helper *fb_helper) in drm_fb_helper_unprepare() argument
464 mutex_destroy(&fb_helper->lock); in drm_fb_helper_unprepare()
484 struct drm_fb_helper *fb_helper) in drm_fb_helper_init() argument
492 if (!fb_helper->client.funcs) { in drm_fb_helper_init()
493 ret = drm_client_init(dev, &fb_helper->client, "drm_fb_helper", NULL); in drm_fb_helper_init()
498 dev->fb_helper = fb_helper; in drm_fb_helper_init()
517 struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_alloc_info() argument
519 struct device *dev = fb_helper->dev->dev; in drm_fb_helper_alloc_info()
531 fb_helper->info = info; in drm_fb_helper_alloc_info()
550 void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_release_info() argument
552 struct fb_info *info = fb_helper->info; in drm_fb_helper_release_info()
557 fb_helper->info = NULL; in drm_fb_helper_release_info()
573 void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_unregister_info() argument
575 if (fb_helper && fb_helper->info) in drm_fb_helper_unregister_info()
576 unregister_framebuffer(fb_helper->info); in drm_fb_helper_unregister_info()
586 void drm_fb_helper_fini(struct drm_fb_helper *fb_helper) in drm_fb_helper_fini() argument
588 if (!fb_helper) in drm_fb_helper_fini()
591 fb_helper->dev->fb_helper = NULL; in drm_fb_helper_fini()
596 cancel_work_sync(&fb_helper->resume_work); in drm_fb_helper_fini()
597 cancel_work_sync(&fb_helper->damage_work); in drm_fb_helper_fini()
599 drm_fb_helper_release_info(fb_helper); in drm_fb_helper_fini()
602 if (!list_empty(&fb_helper->kernel_fb_list)) { in drm_fb_helper_fini()
603 list_del(&fb_helper->kernel_fb_list); in drm_fb_helper_fini()
609 if (!fb_helper->client.funcs) in drm_fb_helper_fini()
610 drm_client_release(&fb_helper->client); in drm_fb_helper_fini()
676 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_damage_range() local
680 drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1, in drm_fb_helper_damage_range()
689 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_damage_area() local
691 drm_fb_helper_damage(fb_helper, x, y, width, height); in drm_fb_helper_damage_area()
748 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend) in drm_fb_helper_set_suspend() argument
750 if (fb_helper && fb_helper->info) in drm_fb_helper_set_suspend()
751 fb_set_suspend(fb_helper->info, suspend); in drm_fb_helper_set_suspend()
771 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, in drm_fb_helper_set_suspend_unlocked() argument
774 if (!fb_helper || !fb_helper->info) in drm_fb_helper_set_suspend_unlocked()
778 flush_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
781 if (fb_helper->info->state != FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
787 if (fb_helper->info->state == FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
791 schedule_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
796 fb_set_suspend(fb_helper->info, suspend); in drm_fb_helper_set_suspend_unlocked()
835 struct drm_fb_helper *fb_helper = info->par; in setcmap_legacy() local
841 drm_modeset_lock_all(fb_helper->dev); in setcmap_legacy()
842 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_legacy()
868 drm_modeset_unlock_all(fb_helper->dev); in setcmap_legacy()
918 struct drm_fb_helper *fb_helper = info->par; in setcmap_atomic() local
919 struct drm_device *dev = fb_helper->dev; in setcmap_atomic()
940 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
974 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
1011 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_setcmap() local
1012 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_setcmap()
1018 mutex_lock(&fb_helper->lock); in drm_fb_helper_setcmap()
1025 mutex_lock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1028 else if (drm_drv_uses_atomic_modeset(fb_helper->dev)) in drm_fb_helper_setcmap()
1032 mutex_unlock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1036 mutex_unlock(&fb_helper->lock); in drm_fb_helper_setcmap()
1054 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_ioctl() local
1055 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_ioctl()
1059 mutex_lock(&fb_helper->lock); in drm_fb_helper_ioctl()
1083 crtc = fb_helper->client.modesets[0].crtc; in drm_fb_helper_ioctl()
1104 mutex_unlock(&fb_helper->lock); in drm_fb_helper_ioctl()
1221 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_check_var() local
1222 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_check_var()
1224 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_check_var()
1319 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_set_par() local
1344 __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, force); in drm_fb_helper_set_par()
1350 static void pan_set(struct drm_fb_helper *fb_helper, int x, int y) in pan_set() argument
1354 mutex_lock(&fb_helper->client.modeset_mutex); in pan_set()
1355 drm_client_for_each_modeset(mode_set, &fb_helper->client) { in pan_set()
1359 mutex_unlock(&fb_helper->client.modeset_mutex); in pan_set()
1365 struct drm_fb_helper *fb_helper = info->par; in pan_display_atomic() local
1368 pan_set(fb_helper, var->xoffset, var->yoffset); in pan_display_atomic()
1370 ret = drm_client_modeset_commit_locked(&fb_helper->client); in pan_display_atomic()
1375 pan_set(fb_helper, info->var.xoffset, info->var.yoffset); in pan_display_atomic()
1383 struct drm_fb_helper *fb_helper = info->par; in pan_display_legacy() local
1384 struct drm_client_dev *client = &fb_helper->client; in pan_display_legacy()
1389 drm_modeset_lock_all(fb_helper->dev); in pan_display_legacy()
1402 drm_modeset_unlock_all(fb_helper->dev); in pan_display_legacy()
1416 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_pan_display() local
1417 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_pan_display()
1423 mutex_lock(&fb_helper->lock); in drm_fb_helper_pan_display()
1436 mutex_unlock(&fb_helper->lock); in drm_fb_helper_pan_display()
1442 static uint32_t drm_fb_helper_find_format(struct drm_fb_helper *fb_helper, const uint32_t *formats, in drm_fb_helper_find_format() argument
1445 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_format()
1472 static uint32_t drm_fb_helper_find_color_mode_format(struct drm_fb_helper *fb_helper, in drm_fb_helper_find_color_mode_format() argument
1476 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_color_mode_format()
1501 return drm_fb_helper_find_format(fb_helper, formats, format_count, bpp, depth); in drm_fb_helper_find_color_mode_format()
1504 static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in __drm_fb_helper_find_sizes() argument
1507 struct drm_client_dev *client = &fb_helper->client; in __drm_fb_helper_find_sizes()
1508 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_find_sizes()
1526 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in __drm_fb_helper_find_sizes()
1533 surface_format = drm_fb_helper_find_color_mode_format(fb_helper, in __drm_fb_helper_find_sizes()
1546 surface_format = drm_fb_helper_find_color_mode_format(fb_helper, in __drm_fb_helper_find_sizes()
1549 fb_helper->preferred_bpp); in __drm_fb_helper_find_sizes()
1621 static int drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in drm_fb_helper_find_sizes() argument
1624 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_find_sizes()
1625 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_sizes()
1630 ret = __drm_fb_helper_find_sizes(fb_helper, sizes); in drm_fb_helper_find_sizes()
1652 static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper) in drm_fb_helper_single_fb_probe() argument
1654 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_single_fb_probe()
1655 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_single_fb_probe()
1659 ret = drm_fb_helper_find_sizes(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1662 if (!fb_helper->deferred_setup) in drm_fb_helper_single_fb_probe()
1668 ret = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1672 strcpy(fb_helper->fb->comm, "[fbcon]"); in drm_fb_helper_single_fb_probe()
1676 vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info); in drm_fb_helper_single_fb_probe()
1699 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_var() argument
1702 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_var()
1718 info->pseudo_palette = fb_helper->pseudo_palette; in drm_fb_helper_fill_var()
1744 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_info() argument
1747 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_info()
1751 drm_fb_helper_fill_var(info, fb_helper, in drm_fb_helper_fill_info()
1754 info->par = fb_helper; in drm_fb_helper_fill_info()
1762 fb_helper->dev->driver->name); in drm_fb_helper_fill_info()
1774 static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper) in drm_setup_crtcs_fb() argument
1776 struct drm_client_dev *client = &fb_helper->client; in drm_setup_crtcs_fb()
1778 struct fb_info *info = fb_helper->info; in drm_setup_crtcs_fb()
1788 modeset->fb = fb_helper->fb; in drm_setup_crtcs_fb()
1798 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in drm_setup_crtcs_fb()
1835 __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) in __drm_fb_helper_initial_config_and_unlock() argument
1837 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_initial_config_and_unlock()
1845 drm_client_modeset_probe(&fb_helper->client, width, height); in __drm_fb_helper_initial_config_and_unlock()
1846 ret = drm_fb_helper_single_fb_probe(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
1849 fb_helper->deferred_setup = true; in __drm_fb_helper_initial_config_and_unlock()
1852 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
1856 drm_setup_crtcs_fb(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
1858 fb_helper->deferred_setup = false; in __drm_fb_helper_initial_config_and_unlock()
1860 info = fb_helper->info; in __drm_fb_helper_initial_config_and_unlock()
1869 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
1882 list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list); in __drm_fb_helper_initial_config_and_unlock()
1928 int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper) in drm_fb_helper_initial_config() argument
1935 mutex_lock(&fb_helper->lock); in drm_fb_helper_initial_config()
1936 ret = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_initial_config()
1963 int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) in drm_fb_helper_hotplug_event() argument
1967 if (!drm_fbdev_emulation || !fb_helper) in drm_fb_helper_hotplug_event()
1970 mutex_lock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1971 if (fb_helper->deferred_setup) { in drm_fb_helper_hotplug_event()
1972 err = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_hotplug_event()
1976 if (!fb_helper->fb || !drm_master_internal_acquire(fb_helper->dev)) { in drm_fb_helper_hotplug_event()
1977 fb_helper->delayed_hotplug = true; in drm_fb_helper_hotplug_event()
1978 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1982 drm_master_internal_release(fb_helper->dev); in drm_fb_helper_hotplug_event()
1984 drm_dbg_kms(fb_helper->dev, "\n"); in drm_fb_helper_hotplug_event()
1986 drm_client_modeset_probe(&fb_helper->client, fb_helper->fb->width, fb_helper->fb->height); in drm_fb_helper_hotplug_event()
1987 drm_setup_crtcs_fb(fb_helper); in drm_fb_helper_hotplug_event()
1988 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1990 drm_fb_helper_set_par(fb_helper->info); in drm_fb_helper_hotplug_event()
2005 drm_fb_helper_restore_fbdev_mode_unlocked(dev->fb_helper); in drm_fb_helper_lastclose()
2020 drm_fb_helper_hotplug_event(dev->fb_helper); in drm_fb_helper_output_poll_changed()