|
@@ -900,9 +900,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
|
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
|
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) {
|
|
|
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
|
@@ -925,8 +927,12 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
|
|
|
/* check acpi lid status ??? */
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
|
|
@@ -1040,9 +1046,11 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
|
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
|
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);
|
|
|
if (!encoder)
|
|
@@ -1109,8 +1117,10 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
|
|
|
radeon_connector_update_scratch_regs(connector, ret);
|
|
|
|
|
|
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;
|
|
|
}
|
|
@@ -1174,9 +1184,11 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
|
|
|
if (!radeon_connector->dac_load_detect)
|
|
|
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);
|
|
|
if (!encoder)
|
|
@@ -1188,8 +1200,12 @@ radeon_tv_detect(struct drm_connector *connector, bool force)
|
|
|
if (ret == connector_status_connected)
|
|
|
ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
|
|
|
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;
|
|
|
}
|
|
|
|
|
@@ -1252,9 +1268,11 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
|
|
|
enum drm_connector_status ret = connector_status_disconnected;
|
|
|
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) {
|
|
|
force = true;
|
|
@@ -1437,8 +1455,10 @@ out:
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
}
|
|
@@ -1689,9 +1709,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
|
if (radeon_dig_connector->is_mst)
|
|
|
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)) {
|
|
|
ret = connector->status;
|
|
@@ -1778,8 +1800,10 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
}
|