summaryrefslogtreecommitdiff
path: root/linux-core/intel_crt.c
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@hobbes.virtuousgeek.org>2007-04-12 08:57:58 -0700
committerJesse Barnes <jbarnes@hobbes.virtuousgeek.org>2007-04-12 08:57:58 -0700
commitc2fce380c26d72f2d7971a4d08076da33c41f5ae (patch)
treef7f3bc9a0f7ccc9f7c172571014a7b405d942234 /linux-core/intel_crt.c
parent258e1cf70345198209e6d49a428efc3de8ce8238 (diff)
Move i2c init back to where it belongs and add i2c unregistration in *_destroy.
Diffstat (limited to 'linux-core/intel_crt.c')
-rw-r--r--linux-core/intel_crt.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/linux-core/intel_crt.c b/linux-core/intel_crt.c
index ca7ae7b3..fe846eb8 100644
--- a/linux-core/intel_crt.c
+++ b/linux-core/intel_crt.c
@@ -189,26 +189,19 @@ static enum drm_output_status intel_crt_detect(struct drm_output *output)
return output_status_disconnected;
}
- /* Set up the DDC bus. */
- intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A");
- if (!intel_output->ddc_bus) {
- dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "
- "failed.\n");
- return 0;
- }
-
- if (intel_crt_detect_ddc(output)) {
- intel_i2c_destroy(intel_output->ddc_bus);
+ if (intel_crt_detect_ddc(output))
return output_status_connected;
- }
- intel_i2c_destroy(intel_output->ddc_bus);
/* TODO use load detect */
return output_status_unknown;
}
static void intel_crt_destroy(struct drm_output *output)
{
+ struct intel_output *intel_output = output->driver_private;
+
+ intel_i2c_destroy(intel_output->ddc_bus);
+
if (output->driver_private)
kfree(output->driver_private);
}
@@ -219,17 +212,7 @@ static int intel_crt_get_modes(struct drm_output *output)
struct intel_output *intel_output = output->driver_private;
int ret;
- /* Set up the DDC bus. */
- intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A");
- if (!intel_output->ddc_bus) {
- dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "
- "failed.\n");
- return 0;
- }
-
- ret = intel_ddc_get_modes(output);
- intel_i2c_destroy(intel_output->ddc_bus);
- return ret;
+ return intel_ddc_get_modes(output);
}
/*
@@ -261,6 +244,13 @@ void intel_crt_init(drm_device_t *dev)
drm_output_destroy(output);
return;
}
+ /* Set up the DDC bus. */
+ intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A");
+ if (!intel_output->ddc_bus) {
+ dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "
+ "failed.\n");
+ return;
+ }
intel_output->type = INTEL_OUTPUT_ANALOG;
output->driver_private = intel_output;