Lines Matching refs:fb_helper

229 __drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper,  in __drm_fb_helper_restore_fbdev_mode_unlocked()  argument
235 if (!drm_fbdev_emulation || !fb_helper) in __drm_fb_helper_restore_fbdev_mode_unlocked()
238 if (READ_ONCE(fb_helper->deferred_setup)) in __drm_fb_helper_restore_fbdev_mode_unlocked()
241 mutex_lock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
248 ret = drm_client_modeset_commit_locked(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
250 ret = drm_client_modeset_commit(&fb_helper->client); in __drm_fb_helper_restore_fbdev_mode_unlocked()
253 do_delayed = fb_helper->delayed_hotplug; in __drm_fb_helper_restore_fbdev_mode_unlocked()
255 fb_helper->delayed_hotplug = false; in __drm_fb_helper_restore_fbdev_mode_unlocked()
256 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_restore_fbdev_mode_unlocked()
259 drm_fb_helper_hotplug_event(fb_helper); in __drm_fb_helper_restore_fbdev_mode_unlocked()
275 int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper) in drm_fb_helper_restore_fbdev_mode_unlocked() argument
277 return __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, false); in drm_fb_helper_restore_fbdev_mode_unlocked()
319 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_dpms() local
321 mutex_lock(&fb_helper->lock); in drm_fb_helper_dpms()
322 drm_client_modeset_dpms(&fb_helper->client, dpms_mode); in drm_fb_helper_dpms()
323 mutex_unlock(&fb_helper->lock); in drm_fb_helper_dpms()
461 void drm_fb_helper_unprepare(struct drm_fb_helper *fb_helper) in drm_fb_helper_unprepare() argument
463 mutex_destroy(&fb_helper->lock); in drm_fb_helper_unprepare()
483 struct drm_fb_helper *fb_helper) in drm_fb_helper_init() argument
491 if (!fb_helper->client.funcs) { in drm_fb_helper_init()
492 ret = drm_client_init(dev, &fb_helper->client, "drm_fb_helper", NULL); in drm_fb_helper_init()
497 dev->fb_helper = fb_helper; in drm_fb_helper_init()
516 struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_alloc_info() argument
518 struct device *dev = fb_helper->dev->dev; in drm_fb_helper_alloc_info()
530 fb_helper->info = info; in drm_fb_helper_alloc_info()
549 void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper) in drm_fb_helper_unregister_info() argument
551 if (fb_helper && fb_helper->info) in drm_fb_helper_unregister_info()
552 unregister_framebuffer(fb_helper->info); in drm_fb_helper_unregister_info()
562 void drm_fb_helper_fini(struct drm_fb_helper *fb_helper) in drm_fb_helper_fini() argument
566 if (!fb_helper) in drm_fb_helper_fini()
569 fb_helper->dev->fb_helper = NULL; in drm_fb_helper_fini()
574 cancel_work_sync(&fb_helper->resume_work); in drm_fb_helper_fini()
575 cancel_work_sync(&fb_helper->damage_work); in drm_fb_helper_fini()
577 info = fb_helper->info; in drm_fb_helper_fini()
583 fb_helper->info = NULL; in drm_fb_helper_fini()
586 if (!list_empty(&fb_helper->kernel_fb_list)) { in drm_fb_helper_fini()
587 list_del(&fb_helper->kernel_fb_list); in drm_fb_helper_fini()
593 if (!fb_helper->client.funcs) in drm_fb_helper_fini()
594 drm_client_release(&fb_helper->client); in drm_fb_helper_fini()
1078 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend) in drm_fb_helper_set_suspend() argument
1080 if (fb_helper && fb_helper->info) in drm_fb_helper_set_suspend()
1081 fb_set_suspend(fb_helper->info, suspend); in drm_fb_helper_set_suspend()
1101 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, in drm_fb_helper_set_suspend_unlocked() argument
1104 if (!fb_helper || !fb_helper->info) in drm_fb_helper_set_suspend_unlocked()
1108 flush_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
1111 if (fb_helper->info->state != FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
1117 if (fb_helper->info->state == FBINFO_STATE_RUNNING) in drm_fb_helper_set_suspend_unlocked()
1121 schedule_work(&fb_helper->resume_work); in drm_fb_helper_set_suspend_unlocked()
1126 fb_set_suspend(fb_helper->info, suspend); in drm_fb_helper_set_suspend_unlocked()
1165 struct drm_fb_helper *fb_helper = info->par; in setcmap_legacy() local
1171 drm_modeset_lock_all(fb_helper->dev); in setcmap_legacy()
1172 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_legacy()
1198 drm_modeset_unlock_all(fb_helper->dev); in setcmap_legacy()
1248 struct drm_fb_helper *fb_helper = info->par; in setcmap_atomic() local
1249 struct drm_device *dev = fb_helper->dev; in setcmap_atomic()
1270 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
1304 drm_client_for_each_modeset(modeset, &fb_helper->client) { in setcmap_atomic()
1341 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_setcmap() local
1342 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_setcmap()
1348 mutex_lock(&fb_helper->lock); in drm_fb_helper_setcmap()
1355 mutex_lock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1358 else if (drm_drv_uses_atomic_modeset(fb_helper->dev)) in drm_fb_helper_setcmap()
1362 mutex_unlock(&fb_helper->client.modeset_mutex); in drm_fb_helper_setcmap()
1366 mutex_unlock(&fb_helper->lock); in drm_fb_helper_setcmap()
1384 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_ioctl() local
1385 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_ioctl()
1389 mutex_lock(&fb_helper->lock); in drm_fb_helper_ioctl()
1413 crtc = fb_helper->client.modesets[0].crtc; in drm_fb_helper_ioctl()
1434 mutex_unlock(&fb_helper->lock); in drm_fb_helper_ioctl()
1528 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_check_var() local
1529 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_check_var()
1531 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_check_var()
1614 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_set_par() local
1622 drm_err(fb_helper->dev, "PIXEL CLOCK SET\n"); in drm_fb_helper_set_par()
1644 __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, force); in drm_fb_helper_set_par()
1650 static void pan_set(struct drm_fb_helper *fb_helper, int x, int y) in pan_set() argument
1654 mutex_lock(&fb_helper->client.modeset_mutex); in pan_set()
1655 drm_client_for_each_modeset(mode_set, &fb_helper->client) { in pan_set()
1659 mutex_unlock(&fb_helper->client.modeset_mutex); in pan_set()
1665 struct drm_fb_helper *fb_helper = info->par; in pan_display_atomic() local
1668 pan_set(fb_helper, var->xoffset, var->yoffset); in pan_display_atomic()
1670 ret = drm_client_modeset_commit_locked(&fb_helper->client); in pan_display_atomic()
1675 pan_set(fb_helper, info->var.xoffset, info->var.yoffset); in pan_display_atomic()
1683 struct drm_fb_helper *fb_helper = info->par; in pan_display_legacy() local
1684 struct drm_client_dev *client = &fb_helper->client; in pan_display_legacy()
1689 drm_modeset_lock_all(fb_helper->dev); in pan_display_legacy()
1702 drm_modeset_unlock_all(fb_helper->dev); in pan_display_legacy()
1716 struct drm_fb_helper *fb_helper = info->par; in drm_fb_helper_pan_display() local
1717 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_pan_display()
1723 mutex_lock(&fb_helper->lock); in drm_fb_helper_pan_display()
1736 mutex_unlock(&fb_helper->lock); in drm_fb_helper_pan_display()
1742 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
1745 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_format()
1772 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
1776 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_color_mode_format()
1801 return drm_fb_helper_find_format(fb_helper, formats, format_count, bpp, depth); in drm_fb_helper_find_color_mode_format()
1804 static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in __drm_fb_helper_find_sizes() argument
1807 struct drm_client_dev *client = &fb_helper->client; in __drm_fb_helper_find_sizes()
1808 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_find_sizes()
1826 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in __drm_fb_helper_find_sizes()
1833 surface_format = drm_fb_helper_find_color_mode_format(fb_helper, in __drm_fb_helper_find_sizes()
1846 surface_format = drm_fb_helper_find_color_mode_format(fb_helper, in __drm_fb_helper_find_sizes()
1849 fb_helper->preferred_bpp); in __drm_fb_helper_find_sizes()
1921 static int drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper, in drm_fb_helper_find_sizes() argument
1924 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_find_sizes()
1925 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_find_sizes()
1930 ret = __drm_fb_helper_find_sizes(fb_helper, sizes); in drm_fb_helper_find_sizes()
1952 static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper) in drm_fb_helper_single_fb_probe() argument
1954 struct drm_client_dev *client = &fb_helper->client; in drm_fb_helper_single_fb_probe()
1955 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_single_fb_probe()
1959 ret = drm_fb_helper_find_sizes(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1962 if (!fb_helper->deferred_setup) in drm_fb_helper_single_fb_probe()
1968 fb_helper->hint_leak_smem_start = drm_leak_fbdev_smem; in drm_fb_helper_single_fb_probe()
1972 ret = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
1976 strcpy(fb_helper->fb->comm, "[fbcon]"); in drm_fb_helper_single_fb_probe()
1980 vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info); in drm_fb_helper_single_fb_probe()
2003 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_var() argument
2006 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_var()
2022 info->pseudo_palette = fb_helper->pseudo_palette; in drm_fb_helper_fill_var()
2051 struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_info() argument
2054 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_info()
2058 drm_fb_helper_fill_var(info, fb_helper, in drm_fb_helper_fill_info()
2061 info->par = fb_helper; in drm_fb_helper_fill_info()
2069 fb_helper->dev->driver->name); in drm_fb_helper_fill_info()
2081 static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper) in drm_setup_crtcs_fb() argument
2083 struct drm_client_dev *client = &fb_helper->client; in drm_setup_crtcs_fb()
2085 struct fb_info *info = fb_helper->info; in drm_setup_crtcs_fb()
2095 modeset->fb = fb_helper->fb; in drm_setup_crtcs_fb()
2105 drm_connector_list_iter_begin(fb_helper->dev, &conn_iter); in drm_setup_crtcs_fb()
2142 __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) in __drm_fb_helper_initial_config_and_unlock() argument
2144 struct drm_device *dev = fb_helper->dev; in __drm_fb_helper_initial_config_and_unlock()
2152 drm_client_modeset_probe(&fb_helper->client, width, height); in __drm_fb_helper_initial_config_and_unlock()
2153 ret = drm_fb_helper_single_fb_probe(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
2156 fb_helper->deferred_setup = true; in __drm_fb_helper_initial_config_and_unlock()
2159 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
2163 drm_setup_crtcs_fb(fb_helper); in __drm_fb_helper_initial_config_and_unlock()
2165 fb_helper->deferred_setup = false; in __drm_fb_helper_initial_config_and_unlock()
2167 info = fb_helper->info; in __drm_fb_helper_initial_config_and_unlock()
2171 if (!fb_helper->hint_leak_smem_start) in __drm_fb_helper_initial_config_and_unlock()
2179 mutex_unlock(&fb_helper->lock); in __drm_fb_helper_initial_config_and_unlock()
2192 list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list); in __drm_fb_helper_initial_config_and_unlock()
2238 int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper) in drm_fb_helper_initial_config() argument
2245 mutex_lock(&fb_helper->lock); in drm_fb_helper_initial_config()
2246 ret = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_initial_config()
2273 int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) in drm_fb_helper_hotplug_event() argument
2277 if (!drm_fbdev_emulation || !fb_helper) in drm_fb_helper_hotplug_event()
2280 mutex_lock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
2281 if (fb_helper->deferred_setup) { in drm_fb_helper_hotplug_event()
2282 err = __drm_fb_helper_initial_config_and_unlock(fb_helper); in drm_fb_helper_hotplug_event()
2286 if (!fb_helper->fb || !drm_master_internal_acquire(fb_helper->dev)) { in drm_fb_helper_hotplug_event()
2287 fb_helper->delayed_hotplug = true; in drm_fb_helper_hotplug_event()
2288 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
2292 drm_master_internal_release(fb_helper->dev); in drm_fb_helper_hotplug_event()
2294 drm_dbg_kms(fb_helper->dev, "\n"); in drm_fb_helper_hotplug_event()
2296 drm_client_modeset_probe(&fb_helper->client, fb_helper->fb->width, fb_helper->fb->height); in drm_fb_helper_hotplug_event()
2297 drm_setup_crtcs_fb(fb_helper); in drm_fb_helper_hotplug_event()
2298 mutex_unlock(&fb_helper->lock); in drm_fb_helper_hotplug_event()
2300 drm_fb_helper_set_par(fb_helper->info); in drm_fb_helper_hotplug_event()
2315 drm_fb_helper_restore_fbdev_mode_unlocked(dev->fb_helper); in drm_fb_helper_lastclose()
2330 drm_fb_helper_hotplug_event(dev->fb_helper); in drm_fb_helper_output_poll_changed()