@@ -683,7 +683,7 @@ static bool assert_hdmi_port_valid(struct drm_i915_private *i915, enum port port
683
683
"Platform does not support HDMI %c\n" , port_name (port ));
684
684
}
685
685
686
- void g4x_hdmi_init (struct drm_i915_private * dev_priv ,
686
+ bool g4x_hdmi_init (struct drm_i915_private * dev_priv ,
687
687
i915_reg_t hdmi_reg , enum port port )
688
688
{
689
689
struct intel_display * display = & dev_priv -> display ;
@@ -693,10 +693,10 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
693
693
struct intel_connector * intel_connector ;
694
694
695
695
if (!assert_port_valid (dev_priv , port ))
696
- return ;
696
+ return false ;
697
697
698
698
if (!assert_hdmi_port_valid (dev_priv , port ))
699
- return ;
699
+ return false ;
700
700
701
701
devdata = intel_bios_encoder_data_lookup (display , port );
702
702
@@ -707,25 +707,24 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
707
707
708
708
dig_port = kzalloc (sizeof (* dig_port ), GFP_KERNEL );
709
709
if (!dig_port )
710
- return ;
710
+ return false ;
711
711
712
712
dig_port -> aux_ch = AUX_CH_NONE ;
713
713
714
714
intel_connector = intel_connector_alloc ();
715
- if (!intel_connector ) {
716
- kfree (dig_port );
717
- return ;
718
- }
715
+ if (!intel_connector )
716
+ goto err_connector_alloc ;
719
717
720
718
intel_encoder = & dig_port -> base ;
721
719
722
720
intel_encoder -> devdata = devdata ;
723
721
724
722
mutex_init (& dig_port -> hdcp_mutex );
725
723
726
- drm_encoder_init (& dev_priv -> drm , & intel_encoder -> base ,
727
- & intel_hdmi_enc_funcs , DRM_MODE_ENCODER_TMDS ,
728
- "HDMI %c" , port_name (port ));
724
+ if (drm_encoder_init (& dev_priv -> drm , & intel_encoder -> base ,
725
+ & intel_hdmi_enc_funcs , DRM_MODE_ENCODER_TMDS ,
726
+ "HDMI %c" , port_name (port )))
727
+ goto err_encoder_init ;
729
728
730
729
intel_encoder -> hotplug = intel_hdmi_hotplug ;
731
730
intel_encoder -> compute_config = g4x_hdmi_compute_config ;
@@ -788,5 +787,17 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
788
787
789
788
intel_infoframe_init (dig_port );
790
789
791
- intel_hdmi_init_connector (dig_port , intel_connector );
790
+ if (!intel_hdmi_init_connector (dig_port , intel_connector ))
791
+ goto err_init_connector ;
792
+
793
+ return true;
794
+
795
+ err_init_connector :
796
+ drm_encoder_cleanup (& intel_encoder -> base );
797
+ err_encoder_init :
798
+ kfree (intel_connector );
799
+ err_connector_alloc :
800
+ kfree (dig_port );
801
+
802
+ return false;
792
803
}
0 commit comments