@@ -458,58 +458,6 @@ static void intel_fbdev_suspend_worker(struct work_struct *work)
458458 true);
459459}
460460
461- int intel_fbdev_init (struct drm_device * dev )
462- {
463- struct drm_i915_private * dev_priv = to_i915 (dev );
464- struct intel_fbdev * ifbdev ;
465- int ret ;
466-
467- if (drm_WARN_ON (dev , !HAS_DISPLAY (dev_priv )))
468- return - ENODEV ;
469-
470- ifbdev = kzalloc (sizeof (struct intel_fbdev ), GFP_KERNEL );
471- if (ifbdev == NULL )
472- return - ENOMEM ;
473-
474- mutex_init (& ifbdev -> hpd_lock );
475- drm_fb_helper_prepare (dev , & ifbdev -> helper , 32 , & intel_fb_helper_funcs );
476-
477- if (intel_fbdev_init_bios (dev , ifbdev ))
478- ifbdev -> helper .preferred_bpp = ifbdev -> preferred_bpp ;
479- else
480- ifbdev -> preferred_bpp = ifbdev -> helper .preferred_bpp ;
481-
482- ret = drm_fb_helper_init (dev , & ifbdev -> helper );
483- if (ret ) {
484- kfree (ifbdev );
485- return ret ;
486- }
487-
488- dev_priv -> display .fbdev .fbdev = ifbdev ;
489- INIT_WORK (& dev_priv -> display .fbdev .suspend_work , intel_fbdev_suspend_worker );
490-
491- return 0 ;
492- }
493-
494- static void intel_fbdev_initial_config (void * data , async_cookie_t cookie )
495- {
496- struct intel_fbdev * ifbdev = data ;
497-
498- /* Due to peculiar init order wrt to hpd handling this is separate. */
499- if (drm_fb_helper_initial_config (& ifbdev -> helper ))
500- intel_fbdev_unregister (to_i915 (ifbdev -> helper .dev ));
501- }
502-
503- void intel_fbdev_initial_config_async (struct drm_i915_private * dev_priv )
504- {
505- struct intel_fbdev * ifbdev = dev_priv -> display .fbdev .fbdev ;
506-
507- if (!ifbdev )
508- return ;
509-
510- ifbdev -> cookie = async_schedule (intel_fbdev_initial_config , ifbdev );
511- }
512-
513461static void intel_fbdev_sync (struct intel_fbdev * ifbdev )
514462{
515463 if (!ifbdev -> cookie )
@@ -520,31 +468,6 @@ static void intel_fbdev_sync(struct intel_fbdev *ifbdev)
520468 ifbdev -> cookie = 0 ;
521469}
522470
523- void intel_fbdev_unregister (struct drm_i915_private * dev_priv )
524- {
525- struct intel_fbdev * ifbdev = dev_priv -> display .fbdev .fbdev ;
526-
527- if (!ifbdev )
528- return ;
529-
530- intel_fbdev_set_suspend (& dev_priv -> drm , FBINFO_STATE_SUSPENDED , true);
531-
532- if (!current_is_async ())
533- intel_fbdev_sync (ifbdev );
534-
535- drm_fb_helper_unregister_info (& ifbdev -> helper );
536- }
537-
538- void intel_fbdev_fini (struct drm_i915_private * dev_priv )
539- {
540- struct intel_fbdev * ifbdev = fetch_and_zero (& dev_priv -> display .fbdev .fbdev );
541-
542- if (!ifbdev )
543- return ;
544-
545- intel_fbdev_destroy (ifbdev );
546- }
547-
548471/* Suspends/resumes fbdev processing of incoming HPD events. When resuming HPD
549472 * processing, fbdev will perform a full connector reprobe if a hotplug event
550473 * was received while HPD was suspended.
@@ -661,6 +584,83 @@ void intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
661584 intel_fbdev_invalidate (ifbdev );
662585}
663586
587+ int intel_fbdev_init (struct drm_device * dev )
588+ {
589+ struct drm_i915_private * dev_priv = to_i915 (dev );
590+ struct intel_fbdev * ifbdev ;
591+ int ret ;
592+
593+ if (drm_WARN_ON (dev , !HAS_DISPLAY (dev_priv )))
594+ return - ENODEV ;
595+
596+ ifbdev = kzalloc (sizeof (* ifbdev ), GFP_KERNEL );
597+ if (!ifbdev )
598+ return - ENOMEM ;
599+
600+ mutex_init (& ifbdev -> hpd_lock );
601+ drm_fb_helper_prepare (dev , & ifbdev -> helper , 32 , & intel_fb_helper_funcs );
602+
603+ if (intel_fbdev_init_bios (dev , ifbdev ))
604+ ifbdev -> helper .preferred_bpp = ifbdev -> preferred_bpp ;
605+ else
606+ ifbdev -> preferred_bpp = ifbdev -> helper .preferred_bpp ;
607+
608+ ret = drm_fb_helper_init (dev , & ifbdev -> helper );
609+ if (ret ) {
610+ kfree (ifbdev );
611+ return ret ;
612+ }
613+
614+ dev_priv -> display .fbdev .fbdev = ifbdev ;
615+ INIT_WORK (& dev_priv -> display .fbdev .suspend_work , intel_fbdev_suspend_worker );
616+
617+ return 0 ;
618+ }
619+
620+ static void intel_fbdev_initial_config (void * data , async_cookie_t cookie )
621+ {
622+ struct intel_fbdev * ifbdev = data ;
623+
624+ /* Due to peculiar init order wrt to hpd handling this is separate. */
625+ if (drm_fb_helper_initial_config (& ifbdev -> helper ))
626+ intel_fbdev_unregister (to_i915 (ifbdev -> helper .dev ));
627+ }
628+
629+ void intel_fbdev_initial_config_async (struct drm_i915_private * dev_priv )
630+ {
631+ struct intel_fbdev * ifbdev = dev_priv -> display .fbdev .fbdev ;
632+
633+ if (!ifbdev )
634+ return ;
635+
636+ ifbdev -> cookie = async_schedule (intel_fbdev_initial_config , ifbdev );
637+ }
638+
639+ void intel_fbdev_unregister (struct drm_i915_private * dev_priv )
640+ {
641+ struct intel_fbdev * ifbdev = dev_priv -> display .fbdev .fbdev ;
642+
643+ if (!ifbdev )
644+ return ;
645+
646+ intel_fbdev_set_suspend (& dev_priv -> drm , FBINFO_STATE_SUSPENDED , true);
647+
648+ if (!current_is_async ())
649+ intel_fbdev_sync (ifbdev );
650+
651+ drm_fb_helper_unregister_info (& ifbdev -> helper );
652+ }
653+
654+ void intel_fbdev_fini (struct drm_i915_private * dev_priv )
655+ {
656+ struct intel_fbdev * ifbdev = fetch_and_zero (& dev_priv -> display .fbdev .fbdev );
657+
658+ if (!ifbdev )
659+ return ;
660+
661+ intel_fbdev_destroy (ifbdev );
662+ }
663+
664664struct intel_framebuffer * intel_fbdev_framebuffer (struct intel_fbdev * fbdev )
665665{
666666 if (!fbdev || !fbdev -> helper .fb )
0 commit comments