|
@@ -899,9 +899,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
int r;
|
|
int r;
|
|
|
|
|
|
- r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
- if (r < 0)
|
|
|
|
- return connector_status_disconnected;
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return connector_status_disconnected;
|
|
|
|
+ }
|
|
|
|
|
|
if (encoder) {
|
|
if (encoder) {
|
|
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
|
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
|
@@ -924,8 +926,12 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
|
|
/* check acpi lid status ??? */
|
|
/* check acpi lid status ??? */
|
|
|
|
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
- pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
- pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
|
|
+
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
+ pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
+ }
|
|
|
|
+
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1039,9 +1045,11 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
int r;
|
|
int r;
|
|
|
|
|
|
- r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
- if (r < 0)
|
|
|
|
- return connector_status_disconnected;
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return connector_status_disconnected;
|
|
|
|
+ }
|
|
|
|
|
|
encoder = radeon_best_single_encoder(connector);
|
|
encoder = radeon_best_single_encoder(connector);
|
|
if (!encoder)
|
|
if (!encoder)
|
|
@@ -1108,8 +1116,10 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
|
|
|
|
out:
|
|
out:
|
|
- pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
- pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
+ pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -1173,9 +1183,11 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
|
|
if (!radeon_connector->dac_load_detect)
|
|
if (!radeon_connector->dac_load_detect)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
- r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
- if (r < 0)
|
|
|
|
- return connector_status_disconnected;
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return connector_status_disconnected;
|
|
|
|
+ }
|
|
|
|
|
|
encoder = radeon_best_single_encoder(connector);
|
|
encoder = radeon_best_single_encoder(connector);
|
|
if (!encoder)
|
|
if (!encoder)
|
|
@@ -1187,8 +1199,12 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
|
|
if (ret == connector_status_connected)
|
|
if (ret == connector_status_connected)
|
|
ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
|
|
ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
- pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
- pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
|
|
+
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
+ pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
+ }
|
|
|
|
+
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1251,9 +1267,11 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
bool dret = false, broken_edid = false;
|
|
bool dret = false, broken_edid = false;
|
|
|
|
|
|
- r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
- if (r < 0)
|
|
|
|
- return connector_status_disconnected;
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return connector_status_disconnected;
|
|
|
|
+ }
|
|
|
|
|
|
if (radeon_connector->detected_hpd_without_ddc) {
|
|
if (radeon_connector->detected_hpd_without_ddc) {
|
|
force = true;
|
|
force = true;
|
|
@@ -1436,8 +1454,10 @@ out:
|
|
}
|
|
}
|
|
|
|
|
|
exit:
|
|
exit:
|
|
- pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
- pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
+ pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -1688,9 +1708,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
if (radeon_dig_connector->is_mst)
|
|
if (radeon_dig_connector->is_mst)
|
|
return connector_status_disconnected;
|
|
return connector_status_disconnected;
|
|
|
|
|
|
- r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
- if (r < 0)
|
|
|
|
- return connector_status_disconnected;
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ r = pm_runtime_get_sync(connector->dev->dev);
|
|
|
|
+ if (r < 0)
|
|
|
|
+ return connector_status_disconnected;
|
|
|
|
+ }
|
|
|
|
|
|
if (!force && radeon_check_hpd_status_unchanged(connector)) {
|
|
if (!force && radeon_check_hpd_status_unchanged(connector)) {
|
|
ret = connector->status;
|
|
ret = connector->status;
|
|
@@ -1777,8 +1799,10 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
}
|
|
}
|
|
|
|
|
|
out:
|
|
out:
|
|
- pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
- pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
|
|
+ if (!drm_kms_helper_is_poll_worker()) {
|
|
|
|
+ pm_runtime_mark_last_busy(connector->dev->dev);
|
|
|
|
+ pm_runtime_put_autosuspend(connector->dev->dev);
|
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|