Skip to content

Commit 7603ba8

Browse files
committed
drm/i915/hdmi: add error handling in g4x_hdmi_init()
Handle encoder and connector init failures in g4x_hdmi_init(). This is similar to g4x_dp_init(). Cc: Sergey Senozhatsky <[email protected]> Cc: Ville Syrjala <[email protected]> Reported-and-tested-by: Sergey Senozhatsky <[email protected]> Closes: https://lore.kernel.org/r/[email protected] Reviewed-by: Sergey Senozhatsky <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/cafae7bf1f9ffb8f6a1d7a508cd2ce7dcf06fef7.1735568047.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <[email protected]>
1 parent 7fb5653 commit 7603ba8

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

drivers/gpu/drm/i915/display/g4x_hdmi.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ static bool assert_hdmi_port_valid(struct drm_i915_private *i915, enum port port
683683
"Platform does not support HDMI %c\n", port_name(port));
684684
}
685685

686-
void g4x_hdmi_init(struct drm_i915_private *dev_priv,
686+
bool g4x_hdmi_init(struct drm_i915_private *dev_priv,
687687
i915_reg_t hdmi_reg, enum port port)
688688
{
689689
struct intel_display *display = &dev_priv->display;
@@ -693,10 +693,10 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
693693
struct intel_connector *intel_connector;
694694

695695
if (!assert_port_valid(dev_priv, port))
696-
return;
696+
return false;
697697

698698
if (!assert_hdmi_port_valid(dev_priv, port))
699-
return;
699+
return false;
700700

701701
devdata = intel_bios_encoder_data_lookup(display, port);
702702

@@ -707,25 +707,24 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
707707

708708
dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
709709
if (!dig_port)
710-
return;
710+
return false;
711711

712712
dig_port->aux_ch = AUX_CH_NONE;
713713

714714
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;
719717

720718
intel_encoder = &dig_port->base;
721719

722720
intel_encoder->devdata = devdata;
723721

724722
mutex_init(&dig_port->hdcp_mutex);
725723

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;
729728

730729
intel_encoder->hotplug = intel_hdmi_hotplug;
731730
intel_encoder->compute_config = g4x_hdmi_compute_config;
@@ -788,5 +787,17 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,
788787

789788
intel_infoframe_init(dig_port);
790789

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;
792803
}

drivers/gpu/drm/i915/display/g4x_hdmi.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ struct drm_connector;
1616
struct drm_i915_private;
1717

1818
#ifdef I915
19-
void g4x_hdmi_init(struct drm_i915_private *dev_priv,
19+
bool g4x_hdmi_init(struct drm_i915_private *dev_priv,
2020
i915_reg_t hdmi_reg, enum port port);
2121
int g4x_hdmi_connector_atomic_check(struct drm_connector *connector,
2222
struct drm_atomic_state *state);
2323
#else
24-
static inline void g4x_hdmi_init(struct drm_i915_private *dev_priv,
24+
static inline bool g4x_hdmi_init(struct drm_i915_private *dev_priv,
2525
i915_reg_t hdmi_reg, int port)
2626
{
27+
return false;
2728
}
2829
static inline int g4x_hdmi_connector_atomic_check(struct drm_connector *connector,
2930
struct drm_atomic_state *state)

0 commit comments

Comments
 (0)