Lines Matching defs:fb_helper

52 	struct drm_fb_helper	*fb_helper;
60 struct drm_fb_helper *fb_helper;
64 fb_helper = sc->fb_helper;
65 sx_xlock(&fb_helper->dev->mode_config.mutex);
66 drm_fb_helper_restore_fbdev_mode(fb_helper);
67 sx_xunlock(&fb_helper->dev->mode_config.mutex);
80 drm_fb_helper_restore_fbdev_mode(sc->fb_helper);
150 int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
152 struct drm_device *dev = fb_helper->dev;
165 fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector;
169 for (i = 0; i < fb_helper->connector_count; i++) {
170 free(fb_helper->connector_info[i], DRM_MEM_KMS);
171 fb_helper->connector_info[i] = NULL;
173 fb_helper->connector_count = 0;
178 static int drm_fb_helper_parse_command_line(struct drm_fb_helper *fb_helper)
183 for (i = 0; i < fb_helper->connector_count; i++) {
188 fb_helper_conn = fb_helper->connector_info[i];
338 bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper)
342 for (i = 0; i < fb_helper->crtc_count; i++) {
343 struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set;
432 struct drm_fb_helper *fb_helper = info->par;
433 struct drm_device *dev = fb_helper->dev;
442 for (i = 0; i < fb_helper->crtc_count; i++) {
443 crtc = fb_helper->crtc_info[i].mode_set.crtc;
449 for (j = 0; j < fb_helper->connector_count; j++) {
450 connector = fb_helper->connector_info[j]->connector;
504 struct drm_fb_helper *fb_helper,
510 fb_helper->dev = dev;
512 INIT_LIST_HEAD(&fb_helper->kernel_fb_list);
514 fb_helper->crtc_info = malloc(crtc_count * sizeof(struct drm_fb_helper_crtc),
516 if (!fb_helper->crtc_info)
519 fb_helper->crtc_count = crtc_count;
520 fb_helper->connector_info = malloc(dev->mode_config.num_connector * sizeof(struct drm_fb_helper_connector *),
522 if (!fb_helper->connector_info) {
523 free(fb_helper->crtc_info, DRM_MEM_KMS);
526 fb_helper->connector_count = 0;
529 fb_helper->crtc_info[i].mode_set.connectors =
534 if (!fb_helper->crtc_info[i].mode_set.connectors)
536 fb_helper->crtc_info[i].mode_set.num_connectors = 0;
541 fb_helper->crtc_info[i].mode_set.crtc = crtc;
547 drm_fb_helper_crtc_free(fb_helper);
552 void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
554 if (!list_empty(&fb_helper->kernel_fb_list)) {
555 list_del(&fb_helper->kernel_fb_list);
566 drm_fb_helper_crtc_free(fb_helper);
575 struct drm_fb_helper *fb_helper = info->par;
576 struct drm_framebuffer *fb = fb_helper->fb;
616 fb_helper->funcs->gamma_set(crtc, red,
620 fb_helper->funcs->gamma_get(crtc, &r,
625 fb_helper->funcs->gamma_set(crtc, r,
632 fb_helper->funcs->gamma_set(crtc, red, green, blue, pindex);
638 struct drm_fb_helper *fb_helper = info->par;
645 for (i = 0; i < fb_helper->crtc_count; i++) {
646 crtc = fb_helper->crtc_info[i].mode_set.crtc;
678 struct drm_fb_helper *fb_helper = info->par;
679 struct drm_framebuffer *fb = fb_helper->fb;
770 struct drm_fb_helper *fb_helper = info->par;
771 struct drm_device *dev = fb_helper->dev;
783 for (i = 0; i < fb_helper->crtc_count; i++) {
784 crtc = fb_helper->crtc_info[i].mode_set.crtc;
785 ret = crtc->funcs->set_config(&fb_helper->crtc_info[i].mode_set);
793 if (fb_helper->delayed_hotplug) {
794 fb_helper->delayed_hotplug = false;
795 drm_fb_helper_hotplug_event(fb_helper);
804 struct drm_fb_helper *fb_helper = info->par;
805 struct drm_device *dev = fb_helper->dev;
812 for (i = 0; i < fb_helper->crtc_count; i++) {
813 crtc = fb_helper->crtc_info[i].mode_set.crtc;
815 modeset = &fb_helper->crtc_info[i].mode_set;
834 int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
859 for (i = 0; i < fb_helper->connector_count; i++) {
860 struct drm_fb_helper_connector *fb_helper_conn = fb_helper->connector_info[i];
890 for (i = 0; i < fb_helper->crtc_count; i++) {
892 desired_mode = fb_helper->crtc_info[i].desired_mode;
896 gamma_size = fb_helper->crtc_info[i].mode_set.crtc->gamma_size;
918 new_fb = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes);
922 info = fb_helper->fbdev;
925 for (i = 0; i < fb_helper->crtc_count; i++)
926 fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;
933 kdev = fb_helper->dev->dev;
950 dev_info(fb_helper->dev->dev, "fb%d: %s frame buffer device\n",
962 dev_info(fb_helper->dev->dev, "registered panic notifier\n");
969 list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list);
984 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
987 struct drm_framebuffer *fb = fb_helper->fb;
990 info->fb_name = device_get_nameunit(fb_helper->dev->dev);
996 sc->fb_helper = fb_helper;
1000 static int drm_fb_helper_probe_connector_modes(struct drm_fb_helper *fb_helper,
1008 for (i = 0; i < fb_helper->connector_count; i++) {
1009 connector = fb_helper->connector_info[i]->connector;
1090 static void drm_enable_connectors(struct drm_fb_helper *fb_helper,
1097 for (i = 0; i < fb_helper->connector_count; i++) {
1098 connector = fb_helper->connector_info[i]->connector;
1108 for (i = 0; i < fb_helper->connector_count; i++) {
1109 connector = fb_helper->connector_info[i]->connector;
1114 static bool drm_target_cloned(struct drm_fb_helper *fb_helper,
1124 if (fb_helper->crtc_count > 1)
1128 for (i = 0; i < fb_helper->connector_count; i++) {
1139 for (i = 0; i < fb_helper->connector_count; i++) {
1142 fb_helper_conn = fb_helper->connector_info[i];
1163 dmt_mode = drm_mode_find_dmt(fb_helper->dev, 1024, 768, 60, false);
1165 for (i = 0; i < fb_helper->connector_count; i++) {
1170 fb_helper_conn = fb_helper->connector_info[i];
1187 static bool drm_target_preferred(struct drm_fb_helper *fb_helper,
1194 for (i = 0; i < fb_helper->connector_count; i++) {
1195 fb_helper_conn = fb_helper->connector_info[i];
1221 static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
1227 struct drm_device *dev = fb_helper->dev;
1236 if (n == fb_helper->connector_count)
1239 fb_helper_conn = fb_helper->connector_info[n];
1244 best_score = drm_pick_crtcs(fb_helper, best_crtcs, modes, n+1, width, height);
1268 for (c = 0; c < fb_helper->crtc_count; c++) {
1269 crtc = &fb_helper->crtc_info[c];
1280 if (fb_helper->crtc_count > 1)
1289 score = my_score + drm_pick_crtcs(fb_helper, crtcs, modes, n + 1,
1304 static void drm_setup_crtcs(struct drm_fb_helper *fb_helper)
1306 struct drm_device *dev = fb_helper->dev;
1331 drm_enable_connectors(fb_helper, enabled);
1333 ret = drm_target_cloned(fb_helper, modes, enabled, width, height);
1335 ret = drm_target_preferred(fb_helper, modes, enabled, width, height);
1342 drm_pick_crtcs(fb_helper, crtcs, modes, 0, width, height);
1346 for (i = 0; i < fb_helper->crtc_count; i++) {
1347 modeset = &fb_helper->crtc_info[i].mode_set;
1351 for (i = 0; i < fb_helper->connector_count; i++) {
1364 modeset->connectors[modeset->num_connectors++] = fb_helper->connector_info[i]->connector;
1376 * @fb_helper: fb_helper device struct
1380 * Called at init time by the driver to set up the @fb_helper initial
1390 bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
1392 struct drm_device *dev = fb_helper->dev;
1396 drm_helper_disable_unused_functions(fb_helper->dev);
1398 drm_fb_helper_parse_command_line(fb_helper);
1400 count = drm_fb_helper_probe_connector_modes(fb_helper,
1407 dev_info(fb_helper->dev->dev, "No connectors reported connected with modes\n");
1409 drm_setup_crtcs(fb_helper);
1411 return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
1418 * @fb_helper: the drm_fb_helper
1423 * Scan the connectors attached to the fb_helper and try to put together a
1429 int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
1431 struct drm_device *dev = fb_helper->dev;
1437 if (!fb_helper->fb)
1444 if (crtc->fb == fb_helper->fb)
1449 fb_helper->delayed_hotplug = true;
1455 max_width = fb_helper->fb->width;
1456 max_height = fb_helper->fb->height;
1457 bpp_sel = fb_helper->fb->bits_per_pixel;
1459 count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
1461 drm_setup_crtcs(fb_helper);
1464 return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);