|
@@ -572,6 +572,36 @@ exit:
|
|
|
return NOTIFY_OK;
|
|
|
}
|
|
|
|
|
|
+static int
|
|
|
+intel_lvds_connector_register(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct intel_lvds_connector *lvds = to_lvds_connector(connector);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = intel_connector_register(connector);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ lvds->lid_notifier.notifier_call = intel_lid_notify;
|
|
|
+ if (acpi_lid_notifier_register(&lvds->lid_notifier)) {
|
|
|
+ DRM_DEBUG_KMS("lid notifier registration failed\n");
|
|
|
+ lvds->lid_notifier.notifier_call = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void
|
|
|
+intel_lvds_connector_unregister(struct drm_connector *connector)
|
|
|
+{
|
|
|
+ struct intel_lvds_connector *lvds = to_lvds_connector(connector);
|
|
|
+
|
|
|
+ if (lvds->lid_notifier.notifier_call)
|
|
|
+ acpi_lid_notifier_unregister(&lvds->lid_notifier);
|
|
|
+
|
|
|
+ intel_connector_unregister(connector);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* intel_lvds_destroy - unregister and free LVDS structures
|
|
|
* @connector: connector to free
|
|
@@ -584,9 +614,6 @@ static void intel_lvds_destroy(struct drm_connector *connector)
|
|
|
struct intel_lvds_connector *lvds_connector =
|
|
|
to_lvds_connector(connector);
|
|
|
|
|
|
- if (lvds_connector->lid_notifier.notifier_call)
|
|
|
- acpi_lid_notifier_unregister(&lvds_connector->lid_notifier);
|
|
|
-
|
|
|
if (!IS_ERR_OR_NULL(lvds_connector->base.edid))
|
|
|
kfree(lvds_connector->base.edid);
|
|
|
|
|
@@ -607,8 +634,8 @@ static const struct drm_connector_funcs intel_lvds_connector_funcs = {
|
|
|
.fill_modes = drm_helper_probe_single_connector_modes,
|
|
|
.atomic_get_property = intel_digital_connector_atomic_get_property,
|
|
|
.atomic_set_property = intel_digital_connector_atomic_set_property,
|
|
|
- .late_register = intel_connector_register,
|
|
|
- .early_unregister = intel_connector_unregister,
|
|
|
+ .late_register = intel_lvds_connector_register,
|
|
|
+ .early_unregister = intel_lvds_connector_unregister,
|
|
|
.destroy = intel_lvds_destroy,
|
|
|
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
|
|
.atomic_duplicate_state = intel_digital_connector_duplicate_state,
|
|
@@ -1160,12 +1187,6 @@ out:
|
|
|
|
|
|
lvds_encoder->a3_power = lvds & LVDS_A3_POWER_MASK;
|
|
|
|
|
|
- lvds_connector->lid_notifier.notifier_call = intel_lid_notify;
|
|
|
- if (acpi_lid_notifier_register(&lvds_connector->lid_notifier)) {
|
|
|
- DRM_DEBUG_KMS("lid notifier registration failed\n");
|
|
|
- lvds_connector->lid_notifier.notifier_call = NULL;
|
|
|
- }
|
|
|
-
|
|
|
return;
|
|
|
|
|
|
failed:
|