drm/amdgpu: Iterate through DRM connectors correctly
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / dce_v8_0.c
index a16c5e9..e5f5088 100644 (file)
@@ -275,9 +275,11 @@ static void dce_v8_0_hpd_init(struct amdgpu_device *adev)
 {
        struct drm_device *dev = adev->ddev;
        struct drm_connector *connector;
+       struct drm_connector_list_iter iter;
        u32 tmp;
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+       drm_connector_list_iter_begin(dev, &iter);
+       drm_for_each_connector_iter(connector, &iter) {
                struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
 
                if (amdgpu_connector->hpd.hpd >= adev->mode_info.num_hpd)
@@ -303,6 +305,7 @@ static void dce_v8_0_hpd_init(struct amdgpu_device *adev)
                dce_v8_0_hpd_set_polarity(adev, amdgpu_connector->hpd.hpd);
                amdgpu_irq_get(adev, &adev->hpd_irq, amdgpu_connector->hpd.hpd);
        }
+       drm_connector_list_iter_end(&iter);
 }
 
 /**
@@ -317,9 +320,11 @@ static void dce_v8_0_hpd_fini(struct amdgpu_device *adev)
 {
        struct drm_device *dev = adev->ddev;
        struct drm_connector *connector;
+       struct drm_connector_list_iter iter;
        u32 tmp;
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+       drm_connector_list_iter_begin(dev, &iter);
+       drm_for_each_connector_iter(connector, &iter) {
                struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
 
                if (amdgpu_connector->hpd.hpd >= adev->mode_info.num_hpd)
@@ -331,6 +336,7 @@ static void dce_v8_0_hpd_fini(struct amdgpu_device *adev)
 
                amdgpu_irq_put(adev, &adev->hpd_irq, amdgpu_connector->hpd.hpd);
        }
+       drm_connector_list_iter_end(&iter);
 }
 
 static u32 dce_v8_0_hpd_get_gpio_reg(struct amdgpu_device *adev)
@@ -1157,10 +1163,12 @@ static void dce_v8_0_afmt_audio_select_pin(struct drm_encoder *encoder)
 static void dce_v8_0_audio_write_latency_fields(struct drm_encoder *encoder,
                                                struct drm_display_mode *mode)
 {
-       struct amdgpu_device *adev = encoder->dev->dev_private;
+       struct drm_device *dev = encoder->dev;
+       struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
        struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv;
        struct drm_connector *connector;
+       struct drm_connector_list_iter iter;
        struct amdgpu_connector *amdgpu_connector = NULL;
        u32 tmp = 0, offset;
 
@@ -1169,12 +1177,14 @@ static void dce_v8_0_audio_write_latency_fields(struct drm_encoder *encoder,
 
        offset = dig->afmt->pin->offset;
 
-       list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
+       drm_connector_list_iter_begin(dev, &iter);
+       drm_for_each_connector_iter(connector, &iter) {
                if (connector->encoder == encoder) {
                        amdgpu_connector = to_amdgpu_connector(connector);
                        break;
                }
        }
+       drm_connector_list_iter_end(&iter);
 
        if (!amdgpu_connector) {
                DRM_ERROR("Couldn't find encoder's connector\n");
@@ -1214,10 +1224,12 @@ static void dce_v8_0_audio_write_latency_fields(struct drm_encoder *encoder,
 
 static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
 {
-       struct amdgpu_device *adev = encoder->dev->dev_private;
+       struct drm_device *dev = encoder->dev;
+       struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
        struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv;
        struct drm_connector *connector;
+       struct drm_connector_list_iter iter;
        struct amdgpu_connector *amdgpu_connector = NULL;
        u32 offset, tmp;
        u8 *sadb = NULL;
@@ -1228,12 +1240,14 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
 
        offset = dig->afmt->pin->offset;
 
-       list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
+       drm_connector_list_iter_begin(dev, &iter);
+       drm_for_each_connector_iter(connector, &iter) {
                if (connector->encoder == encoder) {
                        amdgpu_connector = to_amdgpu_connector(connector);
                        break;
                }
        }
+       drm_connector_list_iter_end(&iter);
 
        if (!amdgpu_connector) {
                DRM_ERROR("Couldn't find encoder's connector\n");
@@ -1263,11 +1277,13 @@ static void dce_v8_0_audio_write_speaker_allocation(struct drm_encoder *encoder)
 
 static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
 {
-       struct amdgpu_device *adev = encoder->dev->dev_private;
+       struct drm_device *dev = encoder->dev;
+       struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
        struct amdgpu_encoder_atom_dig *dig = amdgpu_encoder->enc_priv;
        u32 offset;
        struct drm_connector *connector;
+       struct drm_connector_list_iter iter;
        struct amdgpu_connector *amdgpu_connector = NULL;
        struct cea_sad *sads;
        int i, sad_count;
@@ -1292,12 +1308,14 @@ static void dce_v8_0_audio_write_sad_regs(struct drm_encoder *encoder)
 
        offset = dig->afmt->pin->offset;
 
-       list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
+       drm_connector_list_iter_begin(dev, &iter);
+       drm_for_each_connector_iter(connector, &iter) {
                if (connector->encoder == encoder) {
                        amdgpu_connector = to_amdgpu_connector(connector);
                        break;
                }
        }
+       drm_connector_list_iter_end(&iter);
 
        if (!amdgpu_connector) {
                DRM_ERROR("Couldn't find encoder's connector\n");