Lines Matching refs:fb_helper
217 __drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper, in __drm_fb_helper_restore_fbdev_mode_unlocked() argument
223 if (!drm_fbdev_emulation || !fb_helper) in __drm_fb_helper_restore_fbdev_mode_unlocked()
226 if (READ_ONCE(fb_helper->deferred_setup)) in __drm_fb_helper_restore_fbdev_mode_unlocked()
229 mutex_lock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
236 ret = drm_client_modeset_commit_locked(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
238 ret = drm_client_modeset_commit(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
241 do_delayed = fb_helper->delayed_hotplug; in __drm_fb_helper_restore_fbdev_mode_unlocked()
243 fb_helper->delayed_hotplug = false; in __drm_fb_helper_restore_fbdev_mode_unlocked()
244 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
247 drm_fb_helper_hotplug_event(fb_helper); in __drm_fb_helper_restore_fbdev_mode_unlocked()
249 if (fb_helper->funcs->fb_restore) in __drm_fb_helper_restore_fbdev_mode_unlocked()
250 fb_helper->funcs->fb_restore(fb_helper); in __drm_fb_helper_restore_fbdev_mode_unlocked()
266 int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper) in drm_fb_helper_restore_fbdev_mode_unlocked() argument
268 return __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, false); in drm_fb_helper_restore_fbdev_mode_unlocked()
310 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_dpms() local
312 mutex_lock(&fb_helper->lock); in drm_fb_helper_dpms()
313 drm_client_modeset_dpms(&fb_helper->client, dpms_mode); in drm_fb_helper_dpms()
314 mutex_unlock(&fb_helper->lock); in drm_fb_helper_dpms()
452 void drm_fb_helper_unprepare(struct drm_fb_helper *fb_helper) in drm_fb_helper_unprepare() argument
454 mutex_destroy(&fb_helper->lock); in drm_fb_helper_unprepare()
474 struct drm_fb_helper *fb_helper) in drm_fb_helper_init() argument
482 if (!fb_helper->client.funcs) { in drm_fb_helper_init()
483 ret = drm_client_init(dev, &fb_helper->client, "drm_fb_helper", NULL); in drm_fb_helper_init()
488 dev->fb_helper = fb_helper; in drm_fb_helper_init()
507 struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_alloc_info() argument
509 struct device *dev = fb_helper->dev->dev; in drm_fb_helper_alloc_info()
524 fb_helper->info = info; in drm_fb_helper_alloc_info()
527 info->skip_panic = drm_panic_is_enabled(fb_helper->dev); in drm_fb_helper_alloc_info()
544 void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_release_info() argument
546 struct fb_info *info = fb_helper->info; in drm_fb_helper_release_info()
551 fb_helper->info = NULL; in drm_fb_helper_release_info()
567 void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_unregister_info() argument
569 struct fb_info *info = fb_helper->info; in drm_fb_helper_unregister_info()
574 unregister_framebuffer(fb_helper->info); in drm_fb_helper_unregister_info()
584 void drm_fb_helper_fini(struct drm_fb_helper *fb_helper) in drm_fb_helper_fini() argument
586 if (!fb_helper) in drm_fb_helper_fini()
589 fb_helper->dev->fb_helper = NULL; in drm_fb_helper_fini()
594 cancel_work_sync(&fb_helper->resume_work); in drm_fb_helper_fini()
595 cancel_work_sync(&fb_helper->damage_work); in drm_fb_helper_fini()
597 drm_fb_helper_release_info(fb_helper); in drm_fb_helper_fini()
600 if (!list_empty(&fb_helper->kernel_fb_list)) { in drm_fb_helper_fini()
601 list_del(&fb_helper->kernel_fb_list); in drm_fb_helper_fini()
607 if (!fb_helper->client.funcs) in drm_fb_helper_fini()
608 drm_client_release(&fb_helper->client); in drm_fb_helper_fini()
685 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_damage_range() local
689 drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1, in drm_fb_helper_damage_range()
698 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_damage_area() local
700 drm_fb_helper_damage(fb_helper, x, y, width, height); in drm_fb_helper_damage_area()
759 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend) in drm_fb_helper_set_suspend() argument
761 if (!fb_helper || !fb_helper->info) in drm_fb_helper_set_suspend()
764 if (fb_helper->funcs->fb_set_suspend) in drm_fb_helper_set_suspend()
765 fb_helper->funcs->fb_set_suspend(fb_helper, suspend); in drm_fb_helper_set_suspend()
767 fb_set_suspend(fb_helper->info, suspend); in drm_fb_helper_set_suspend()
787 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, in drm_fb_helper_set_suspend_unlocked() argument
790 if (!fb_helper || !fb_helper->info) in drm_fb_helper_set_suspend_unlocked()
794 flush_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
797 if (fb_helper->info->state != FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
803 if (fb_helper->info->state == FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
807 schedule_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
812 drm_fb_helper_set_suspend(fb_helper, suspend); in drm_fb_helper_set_suspend_unlocked()
851 struct drm_fb_helper *fb_helper = info->par; in setcmap_legacy() local
857 drm_modeset_lock_all(fb_helper->dev); in setcmap_legacy()
858 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_legacy()
884 drm_modeset_unlock_all(fb_helper->dev); in setcmap_legacy()
934 struct drm_fb_helper *fb_helper = info->par; in setcmap_atomic() local
935 struct drm_device *dev = fb_helper->dev; in setcmap_atomic()
956 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
990 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
1027 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_setcmap() local
1028 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_setcmap()
1034 mutex_lock(&fb_helper->lock); in drm_fb_helper_setcmap()
1041 mutex_lock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1044 else if (drm_drv_uses_atomic_modeset(fb_helper->dev)) in drm_fb_helper_setcmap()
1048 mutex_unlock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1052 mutex_unlock(&fb_helper->lock); in drm_fb_helper_setcmap()
1070 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_ioctl() local
1071 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_ioctl()
1075 mutex_lock(&fb_helper->lock); in drm_fb_helper_ioctl()
1099 crtc = fb_helper->client.modesets[0].crtc; in drm_fb_helper_ioctl()
1120 mutex_unlock(&fb_helper->lock); in drm_fb_helper_ioctl()
1237 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_check_var() local
1238 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_check_var()
1240 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_check_var()
1335 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_set_par() local
1360 __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, force); in drm_fb_helper_set_par()
1366 static void pan_set(struct drm_fb_helper *fb_helper, int dx, int dy) in pan_set() argument
1370 mutex_lock(&fb_helper->client.modeset_mutex); in pan_set()
1371 drm_client_for_each_modeset(mode_set, &fb_helper->client) { in pan_set()
1375 mutex_unlock(&fb_helper->client.modeset_mutex); in pan_set()
1381 struct drm_fb_helper *fb_helper = info->par; in pan_display_atomic() local
1386 pan_set(fb_helper, dx, dy); in pan_display_atomic()
1388 ret = drm_client_modeset_commit_locked(&fb_helper->client); in pan_display_atomic()
1393 pan_set(fb_helper, -dx, -dy); in pan_display_atomic()
1401 struct drm_fb_helper *fb_helper = info->par; in pan_display_legacy() local
1402 struct drm_client_dev *client = &fb_helper->client; in pan_display_legacy()
1407 drm_modeset_lock_all(fb_helper->dev); in pan_display_legacy()
1420 drm_modeset_unlock_all(fb_helper->dev); in pan_display_legacy()
1434 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_pan_display() local
1435 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_pan_display()
1441 mutex_lock(&fb_helper->lock); in drm_fb_helper_pan_display()
1454 mutex_unlock(&fb_helper->lock); in drm_fb_helper_pan_display()
1460 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
1463 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_format()
1482 static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in __drm_fb_helper_find_sizes() argument
1485 struct drm_client_dev *client = &fb_helper->client; in __drm_fb_helper_find_sizes()
1486 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_find_sizes()
1504 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in __drm_fb_helper_find_sizes()
1511 surface_format = drm_fb_helper_find_format(fb_helper, in __drm_fb_helper_find_sizes()
1524 surface_format = drm_fb_helper_find_format(fb_helper, in __drm_fb_helper_find_sizes()
1527 fb_helper->preferred_bpp); in __drm_fb_helper_find_sizes()
1599 static int drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in drm_fb_helper_find_sizes() argument
1602 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_find_sizes()
1603 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_sizes()
1608 ret = __drm_fb_helper_find_sizes(fb_helper, sizes); in drm_fb_helper_find_sizes()
1630 static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper) in drm_fb_helper_single_fb_probe() argument
1632 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_single_fb_probe()
1633 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_single_fb_probe()
1641 ret = drm_fb_helper_find_sizes(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1644 if (!fb_helper->deferred_setup) in drm_fb_helper_single_fb_probe()
1650 ret = dev->driver->fbdev_probe(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1654 strcpy(fb_helper->fb->comm, "[fbcon]"); in drm_fb_helper_single_fb_probe()
1656 info = fb_helper->info; in drm_fb_helper_single_fb_probe()
1683 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_var() argument
1686 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_var()
1702 info->pseudo_palette = fb_helper->pseudo_palette; in drm_fb_helper_fill_var()
1728 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_info() argument
1731 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_info()
1735 drm_fb_helper_fill_var(info, fb_helper, in drm_fb_helper_fill_info()
1738 info->par = fb_helper; in drm_fb_helper_fill_info()
1746 fb_helper->dev->driver->name); in drm_fb_helper_fill_info()
1758 static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper) in drm_setup_crtcs_fb() argument
1760 struct drm_client_dev *client = &fb_helper->client; in drm_setup_crtcs_fb()
1762 struct fb_info *info = fb_helper->info; in drm_setup_crtcs_fb()
1772 modeset->fb = fb_helper->fb; in drm_setup_crtcs_fb()
1782 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in drm_setup_crtcs_fb()
1819 __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) in __drm_fb_helper_initial_config_and_unlock() argument
1821 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_initial_config_and_unlock()
1829 drm_client_modeset_probe(&fb_helper->client, width, height); in __drm_fb_helper_initial_config_and_unlock()
1830 ret = drm_fb_helper_single_fb_probe(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
1833 fb_helper->deferred_setup = true; in __drm_fb_helper_initial_config_and_unlock()
1836 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
1840 drm_setup_crtcs_fb(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
1842 fb_helper->deferred_setup = false; in __drm_fb_helper_initial_config_and_unlock()
1844 info = fb_helper->info; in __drm_fb_helper_initial_config_and_unlock()
1850 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
1863 list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list); in __drm_fb_helper_initial_config_and_unlock()
1909 int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper) in drm_fb_helper_initial_config() argument
1916 mutex_lock(&fb_helper->lock); in drm_fb_helper_initial_config()
1917 ret = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_initial_config()
1944 int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) in drm_fb_helper_hotplug_event() argument
1948 if (!drm_fbdev_emulation || !fb_helper) in drm_fb_helper_hotplug_event()
1951 mutex_lock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1952 if (fb_helper->deferred_setup) { in drm_fb_helper_hotplug_event()
1953 err = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_hotplug_event()
1957 if (!fb_helper->fb || !drm_master_internal_acquire(fb_helper->dev)) { in drm_fb_helper_hotplug_event()
1958 fb_helper->delayed_hotplug = true; in drm_fb_helper_hotplug_event()
1959 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1963 drm_master_internal_release(fb_helper->dev); in drm_fb_helper_hotplug_event()
1965 drm_dbg_kms(fb_helper->dev, "\n"); in drm_fb_helper_hotplug_event()
1967 drm_client_modeset_probe(&fb_helper->client, fb_helper->fb->width, fb_helper->fb->height); in drm_fb_helper_hotplug_event()
1968 drm_setup_crtcs_fb(fb_helper); in drm_fb_helper_hotplug_event()
1969 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
1971 drm_fb_helper_set_par(fb_helper->info); in drm_fb_helper_hotplug_event()
1986 drm_fb_helper_restore_fbdev_mode_unlocked(dev->fb_helper); in drm_fb_helper_lastclose()