@@ -458,58 +458,6 @@ static void intel_fbdev_suspend_worker(struct work_struct *work)
458
458
true);
459
459
}
460
460
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
-
513
461
static void intel_fbdev_sync (struct intel_fbdev * ifbdev )
514
462
{
515
463
if (!ifbdev -> cookie )
@@ -520,31 +468,6 @@ static void intel_fbdev_sync(struct intel_fbdev *ifbdev)
520
468
ifbdev -> cookie = 0 ;
521
469
}
522
470
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
-
548
471
/* Suspends/resumes fbdev processing of incoming HPD events. When resuming HPD
549
472
* processing, fbdev will perform a full connector reprobe if a hotplug event
550
473
* was received while HPD was suspended.
@@ -661,6 +584,83 @@ void intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
661
584
intel_fbdev_invalidate (ifbdev );
662
585
}
663
586
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
+
664
664
struct intel_framebuffer * intel_fbdev_framebuffer (struct intel_fbdev * fbdev )
665
665
{
666
666
if (!fbdev || !fbdev -> helper .fb )
0 commit comments