drm/amdgpu: rework i2c init and fini
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 19 Dec 2024 17:50:43 +0000 (12:50 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 13 Feb 2025 02:02:54 +0000 (21:02 -0500)
No functional change.  Rework the code to allow for
adding some additional i2c buses in conjunction with DC
in the future.

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c
drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.h

index d100bb7a137cdfe3f82f43a1d9fe26f73bea112d..4a9580fb062803a73b593b8f1ece48ba4f6ff5e5 100644 (file)
@@ -4465,8 +4465,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
                                goto failed;
                        }
                        /* init i2c buses */
-                       if (!amdgpu_device_has_dc_support(adev))
-                               amdgpu_atombios_i2c_init(adev);
+                       amdgpu_i2c_init(adev);
                }
        }
 
@@ -4735,8 +4734,7 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
        amdgpu_reset_fini(adev);
 
        /* free i2c buses */
-       if (!amdgpu_device_has_dc_support(adev))
-               amdgpu_i2c_fini(adev);
+       amdgpu_i2c_fini(adev);
 
        if (amdgpu_emu_mode != 1)
                amdgpu_atombios_fini(adev);
index f0765ccde6680fce8d62fc5ba216bca20acab7a7..72f73a186dd9495dc39400a0b8672bb9fa9e7811 100644 (file)
@@ -225,6 +225,14 @@ void amdgpu_i2c_destroy(struct amdgpu_i2c_chan *i2c)
        kfree(i2c);
 }
 
+void amdgpu_i2c_init(struct amdgpu_device *adev)
+{
+       if (!adev->is_atom_fw) {
+               if (!amdgpu_device_has_dc_support(adev))
+                       amdgpu_atombios_i2c_init(adev);
+       }
+}
+
 /* remove all the buses */
 void amdgpu_i2c_fini(struct amdgpu_device *adev)
 {
index 21e3d1dad0a1260baf3509c9bef6bf428cb174c5..1d3d3806e0ddb25473a019c7cb181378ecb20d2c 100644 (file)
@@ -28,6 +28,7 @@ struct amdgpu_i2c_chan *amdgpu_i2c_create(struct drm_device *dev,
                                          const struct amdgpu_i2c_bus_rec *rec,
                                          const char *name);
 void amdgpu_i2c_destroy(struct amdgpu_i2c_chan *i2c);
+void amdgpu_i2c_init(struct amdgpu_device *adev);
 void amdgpu_i2c_fini(struct amdgpu_device *adev);
 struct amdgpu_i2c_chan *
 amdgpu_i2c_lookup(struct amdgpu_device *adev,