Lines Matching refs:fb_helper
50 struct drm_fb_helper *fb_helper; member
58 struct drm_fb_helper *fb_helper; in vt_restore_fbdev_mode() local
62 fb_helper = sc->fb_helper; in vt_restore_fbdev_mode()
63 sx_xlock(&fb_helper->dev->mode_config.mutex); in vt_restore_fbdev_mode()
64 drm_fb_helper_restore_fbdev_mode(fb_helper); in vt_restore_fbdev_mode()
65 sx_xunlock(&fb_helper->dev->mode_config.mutex); in vt_restore_fbdev_mode()
78 drm_fb_helper_restore_fbdev_mode(sc->fb_helper); in vt_kms_postswitch()
148 int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper) in drm_fb_helper_single_add_all_connectors() argument
150 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_single_add_all_connectors()
163 fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector; in drm_fb_helper_single_add_all_connectors()
167 for (i = 0; i < fb_helper->connector_count; i++) { in drm_fb_helper_single_add_all_connectors()
168 free(fb_helper->connector_info[i], DRM_MEM_KMS); in drm_fb_helper_single_add_all_connectors()
169 fb_helper->connector_info[i] = NULL; in drm_fb_helper_single_add_all_connectors()
171 fb_helper->connector_count = 0; in drm_fb_helper_single_add_all_connectors()
176 static int drm_fb_helper_parse_command_line(struct drm_fb_helper *fb_helper) in drm_fb_helper_parse_command_line() argument
181 for (i = 0; i < fb_helper->connector_count; i++) { in drm_fb_helper_parse_command_line()
186 fb_helper_conn = fb_helper->connector_info[i]; in drm_fb_helper_parse_command_line()
336 bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper) in drm_fb_helper_restore_fbdev_mode() argument
341 for (i = 0; i < fb_helper->crtc_count; i++) { in drm_fb_helper_restore_fbdev_mode()
342 struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set; in drm_fb_helper_restore_fbdev_mode()
431 struct drm_fb_helper *fb_helper = info->par;
432 struct drm_device *dev = fb_helper->dev;
441 for (i = 0; i < fb_helper->crtc_count; i++) {
442 crtc = fb_helper->crtc_info[i].mode_set.crtc;
448 for (j = 0; j < fb_helper->connector_count; j++) {
449 connector = fb_helper->connector_info[j]->connector;
503 struct drm_fb_helper *fb_helper, in drm_fb_helper_init() argument
509 fb_helper->dev = dev; in drm_fb_helper_init()
511 INIT_LIST_HEAD(&fb_helper->kernel_fb_list); in drm_fb_helper_init()
513 fb_helper->crtc_info = malloc(crtc_count * sizeof(struct drm_fb_helper_crtc), in drm_fb_helper_init()
515 if (!fb_helper->crtc_info) in drm_fb_helper_init()
518 fb_helper->crtc_count = crtc_count; in drm_fb_helper_init()
519 …fb_helper->connector_info = malloc(dev->mode_config.num_connector * sizeof(struct drm_fb_helper_co… in drm_fb_helper_init()
521 if (!fb_helper->connector_info) { in drm_fb_helper_init()
522 free(fb_helper->crtc_info, DRM_MEM_KMS); in drm_fb_helper_init()
525 fb_helper->connector_count = 0; in drm_fb_helper_init()
528 fb_helper->crtc_info[i].mode_set.connectors = in drm_fb_helper_init()
533 if (!fb_helper->crtc_info[i].mode_set.connectors) in drm_fb_helper_init()
535 fb_helper->crtc_info[i].mode_set.num_connectors = 0; in drm_fb_helper_init()
540 fb_helper->crtc_info[i].mode_set.crtc = crtc; in drm_fb_helper_init()
546 drm_fb_helper_crtc_free(fb_helper); in drm_fb_helper_init()
551 void drm_fb_helper_fini(struct drm_fb_helper *fb_helper) in drm_fb_helper_fini() argument
553 if (!list_empty(&fb_helper->kernel_fb_list)) { in drm_fb_helper_fini()
554 list_del(&fb_helper->kernel_fb_list); in drm_fb_helper_fini()
565 drm_fb_helper_crtc_free(fb_helper); in drm_fb_helper_fini()
574 struct drm_fb_helper *fb_helper = info->par;
575 struct drm_framebuffer *fb = fb_helper->fb;
615 fb_helper->funcs->gamma_set(crtc, red,
619 fb_helper->funcs->gamma_get(crtc, &r,
624 fb_helper->funcs->gamma_set(crtc, r,
631 fb_helper->funcs->gamma_set(crtc, red, green, blue, pindex);
637 struct drm_fb_helper *fb_helper = info->par;
644 for (i = 0; i < fb_helper->crtc_count; i++) {
645 crtc = fb_helper->crtc_info[i].mode_set.crtc;
677 struct drm_fb_helper *fb_helper = info->par;
678 struct drm_framebuffer *fb = fb_helper->fb;
769 struct drm_fb_helper *fb_helper = info->par;
770 struct drm_device *dev = fb_helper->dev;
782 for (i = 0; i < fb_helper->crtc_count; i++) {
783 crtc = fb_helper->crtc_info[i].mode_set.crtc;
784 ret = crtc->funcs->set_config(&fb_helper->crtc_info[i].mode_set);
792 if (fb_helper->delayed_hotplug) {
793 fb_helper->delayed_hotplug = false;
794 drm_fb_helper_hotplug_event(fb_helper);
803 struct drm_fb_helper *fb_helper = info->par;
804 struct drm_device *dev = fb_helper->dev;
811 for (i = 0; i < fb_helper->crtc_count; i++) {
812 crtc = fb_helper->crtc_info[i].mode_set.crtc;
814 modeset = &fb_helper->crtc_info[i].mode_set;
833 int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper, in drm_fb_helper_single_fb_probe() argument
861 for (i = 0; i < fb_helper->connector_count; i++) { in drm_fb_helper_single_fb_probe()
862 struct drm_fb_helper_connector *fb_helper_conn = fb_helper->connector_info[i]; in drm_fb_helper_single_fb_probe()
892 for (i = 0; i < fb_helper->crtc_count; i++) { in drm_fb_helper_single_fb_probe()
894 desired_mode = fb_helper->crtc_info[i].desired_mode; in drm_fb_helper_single_fb_probe()
898 gamma_size = fb_helper->crtc_info[i].mode_set.crtc->gamma_size; in drm_fb_helper_single_fb_probe()
920 new_fb = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes); in drm_fb_helper_single_fb_probe()
924 info = fb_helper->fbdev; in drm_fb_helper_single_fb_probe()
926 kdev = fb_helper->dev->dev; in drm_fb_helper_single_fb_probe()
930 for (i = 0; i < fb_helper->crtc_count; i++) in drm_fb_helper_single_fb_probe()
931 fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb; in drm_fb_helper_single_fb_probe()
949 dev = fb_helper->dev; in drm_fb_helper_single_fb_probe()
951 for (i = 0; i < fb_helper->crtc_count; i++) { in drm_fb_helper_single_fb_probe()
952 crtc = fb_helper->crtc_info[i].mode_set.crtc; in drm_fb_helper_single_fb_probe()
953 ret = crtc->funcs->set_config(&fb_helper->crtc_info[i].mode_set); in drm_fb_helper_single_fb_probe()
961 if (fb_helper->delayed_hotplug) { in drm_fb_helper_single_fb_probe()
962 fb_helper->delayed_hotplug = false; in drm_fb_helper_single_fb_probe()
963 drm_fb_helper_hotplug_event(fb_helper); in drm_fb_helper_single_fb_probe()
972 dev_info(fb_helper->dev->dev, "fb%d: %s frame buffer device\n", in drm_fb_helper_single_fb_probe()
984 dev_info(fb_helper->dev->dev, "registered panic notifier\n"); in drm_fb_helper_single_fb_probe()
991 list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list); in drm_fb_helper_single_fb_probe()
1006 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, in drm_fb_helper_fill_var() argument
1009 struct drm_framebuffer *fb = fb_helper->fb; in drm_fb_helper_fill_var()
1012 info->fb_name = device_get_nameunit(fb_helper->dev->dev); in drm_fb_helper_fill_var()
1018 sc->fb_helper = fb_helper; in drm_fb_helper_fill_var()
1022 static int drm_fb_helper_probe_connector_modes(struct drm_fb_helper *fb_helper, in drm_fb_helper_probe_connector_modes() argument
1030 for (i = 0; i < fb_helper->connector_count; i++) { in drm_fb_helper_probe_connector_modes()
1031 connector = fb_helper->connector_info[i]->connector; in drm_fb_helper_probe_connector_modes()
1112 static void drm_enable_connectors(struct drm_fb_helper *fb_helper, in drm_enable_connectors() argument
1119 for (i = 0; i < fb_helper->connector_count; i++) { in drm_enable_connectors()
1120 connector = fb_helper->connector_info[i]->connector; in drm_enable_connectors()
1130 for (i = 0; i < fb_helper->connector_count; i++) { in drm_enable_connectors()
1131 connector = fb_helper->connector_info[i]->connector; in drm_enable_connectors()
1136 static bool drm_target_cloned(struct drm_fb_helper *fb_helper, in drm_target_cloned() argument
1146 if (fb_helper->crtc_count > 1) in drm_target_cloned()
1150 for (i = 0; i < fb_helper->connector_count; i++) { in drm_target_cloned()
1161 for (i = 0; i < fb_helper->connector_count; i++) { in drm_target_cloned()
1164 fb_helper_conn = fb_helper->connector_info[i]; in drm_target_cloned()
1185 dmt_mode = drm_mode_find_dmt(fb_helper->dev, 1024, 768, 60, false); in drm_target_cloned()
1187 for (i = 0; i < fb_helper->connector_count; i++) { in drm_target_cloned()
1192 fb_helper_conn = fb_helper->connector_info[i]; in drm_target_cloned()
1209 static bool drm_target_preferred(struct drm_fb_helper *fb_helper, in drm_target_preferred() argument
1216 for (i = 0; i < fb_helper->connector_count; i++) { in drm_target_preferred()
1217 fb_helper_conn = fb_helper->connector_info[i]; in drm_target_preferred()
1243 static int drm_pick_crtcs(struct drm_fb_helper *fb_helper, in drm_pick_crtcs() argument
1249 struct drm_device *dev = fb_helper->dev; in drm_pick_crtcs()
1257 if (n == fb_helper->connector_count) in drm_pick_crtcs()
1260 fb_helper_conn = fb_helper->connector_info[n]; in drm_pick_crtcs()
1264 best_score = drm_pick_crtcs(fb_helper, best_crtcs, modes, n+1, width, height); in drm_pick_crtcs()
1288 for (c = 0; c < fb_helper->crtc_count; c++) { in drm_pick_crtcs()
1289 crtc = &fb_helper->crtc_info[c]; in drm_pick_crtcs()
1300 if (fb_helper->crtc_count > 1) in drm_pick_crtcs()
1309 score = my_score + drm_pick_crtcs(fb_helper, crtcs, modes, n + 1, in drm_pick_crtcs()
1323 static void drm_setup_crtcs(struct drm_fb_helper *fb_helper) in drm_setup_crtcs() argument
1325 struct drm_device *dev = fb_helper->dev; in drm_setup_crtcs()
1350 drm_enable_connectors(fb_helper, enabled); in drm_setup_crtcs()
1352 ret = drm_target_cloned(fb_helper, modes, enabled, width, height); in drm_setup_crtcs()
1354 ret = drm_target_preferred(fb_helper, modes, enabled, width, height); in drm_setup_crtcs()
1361 drm_pick_crtcs(fb_helper, crtcs, modes, 0, width, height); in drm_setup_crtcs()
1365 for (i = 0; i < fb_helper->crtc_count; i++) { in drm_setup_crtcs()
1366 modeset = &fb_helper->crtc_info[i].mode_set; in drm_setup_crtcs()
1370 for (i = 0; i < fb_helper->connector_count; i++) { in drm_setup_crtcs()
1383 modeset->connectors[modeset->num_connectors++] = fb_helper->connector_info[i]->connector; in drm_setup_crtcs()
1409 bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel) in drm_fb_helper_initial_config() argument
1411 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_initial_config()
1415 drm_helper_disable_unused_functions(fb_helper->dev); in drm_fb_helper_initial_config()
1417 drm_fb_helper_parse_command_line(fb_helper); in drm_fb_helper_initial_config()
1419 count = drm_fb_helper_probe_connector_modes(fb_helper, in drm_fb_helper_initial_config()
1426 dev_info(fb_helper->dev->dev, "No connectors reported connected with modes\n"); in drm_fb_helper_initial_config()
1428 drm_setup_crtcs(fb_helper); in drm_fb_helper_initial_config()
1430 return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel); in drm_fb_helper_initial_config()
1448 int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) in drm_fb_helper_hotplug_event() argument
1450 struct drm_device *dev = fb_helper->dev; in drm_fb_helper_hotplug_event()
1455 if (!fb_helper->fb) in drm_fb_helper_hotplug_event()
1462 if (crtc->fb == fb_helper->fb) in drm_fb_helper_hotplug_event()
1467 fb_helper->delayed_hotplug = true; in drm_fb_helper_hotplug_event()
1473 max_width = fb_helper->fb->width; in drm_fb_helper_hotplug_event()
1474 max_height = fb_helper->fb->height; in drm_fb_helper_hotplug_event()
1475 bpp_sel = fb_helper->fb->bits_per_pixel; in drm_fb_helper_hotplug_event()
1477 drm_fb_helper_probe_connector_modes(fb_helper, max_width, in drm_fb_helper_hotplug_event()
1479 drm_setup_crtcs(fb_helper); in drm_fb_helper_hotplug_event()
1482 return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel); in drm_fb_helper_hotplug_event()