Commit c393454d authored by Imre Deak's avatar Imre Deak Committed by Daniel Vetter

drm/i915: sdvo: fix error path in sdvo_connector_init

Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarAntti Koskipää <antti.koskipaa@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 80f65de3
...@@ -2381,16 +2381,22 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo) ...@@ -2381,16 +2381,22 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo)
return 0x72; return 0x72;
} }
static void static int
intel_sdvo_connector_init(struct intel_sdvo_connector *connector, intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
struct intel_sdvo *encoder) struct intel_sdvo *encoder)
{ {
drm_connector_init(encoder->base.base.dev, struct drm_connector *drm_connector;
&connector->base.base, int ret;
drm_connector = &connector->base.base;
ret = drm_connector_init(encoder->base.base.dev,
drm_connector,
&intel_sdvo_connector_funcs, &intel_sdvo_connector_funcs,
connector->base.base.connector_type); connector->base.base.connector_type);
if (ret < 0)
return ret;
drm_connector_helper_add(&connector->base.base, drm_connector_helper_add(drm_connector,
&intel_sdvo_connector_helper_funcs); &intel_sdvo_connector_helper_funcs);
connector->base.base.interlace_allowed = 1; connector->base.base.interlace_allowed = 1;
...@@ -2400,7 +2406,16 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector, ...@@ -2400,7 +2406,16 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
connector->base.unregister = intel_connector_unregister; connector->base.unregister = intel_connector_unregister;
intel_connector_attach_encoder(&connector->base, &encoder->base); intel_connector_attach_encoder(&connector->base, &encoder->base);
drm_sysfs_connector_add(&connector->base.base); ret = drm_sysfs_connector_add(drm_connector);
if (ret < 0)
goto err1;
return 0;
err1:
drm_connector_cleanup(drm_connector);
return ret;
} }
static void static void
...@@ -2460,7 +2475,11 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device) ...@@ -2460,7 +2475,11 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
intel_sdvo->is_hdmi = true; intel_sdvo->is_hdmi = true;
} }
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
kfree(intel_sdvo_connector);
return false;
}
if (intel_sdvo->is_hdmi) if (intel_sdvo->is_hdmi)
intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector); intel_sdvo_add_hdmi_properties(intel_sdvo, intel_sdvo_connector);
...@@ -2491,7 +2510,10 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) ...@@ -2491,7 +2510,10 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
intel_sdvo->is_tv = true; intel_sdvo->is_tv = true;
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
kfree(intel_sdvo_connector);
return false;
}
if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type)) if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type))
goto err; goto err;
...@@ -2535,8 +2557,11 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) ...@@ -2535,8 +2557,11 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
} }
intel_sdvo_connector_init(intel_sdvo_connector, if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
intel_sdvo); kfree(intel_sdvo_connector);
return false;
}
return true; return true;
} }
...@@ -2567,7 +2592,11 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) ...@@ -2567,7 +2592,11 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
} }
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) {
kfree(intel_sdvo_connector);
return false;
}
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
goto err; goto err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment