int radeon_dynpm = -1;
 int radeon_audio = 1;
 int radeon_disp_priority = 0;
+int radeon_hw_i2c = 0;
 
 MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
 module_param_named(no_wb, radeon_no_wb, int, 0444);
 MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)");
 module_param_named(disp_priority, radeon_disp_priority, int, 0444);
 
+MODULE_PARM_DESC(hw_i2c, "hw i2c engine enable (0 = disable)");
+module_param_named(hw_i2c, radeon_hw_i2c, int, 0444);
+
 static int radeon_suspend(struct drm_device *dev, pm_message_t state)
 {
        drm_radeon_private_t *dev_priv = dev->dev_private;
 
        i2c->adapter.owner = THIS_MODULE;
        i2c->dev = dev;
        i2c_set_adapdata(&i2c->adapter, i2c);
-       if (rec->hw_capable &&
-           ((rdev->family <= CHIP_RS480) ||
-            ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580)))) {
+       if (rec->mm_i2c ||
+           (rec->hw_capable &&
+            radeon_hw_i2c &&
+            ((rdev->family <= CHIP_RS480) ||
+             ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580))))) {
                /* set the radeon hw i2c adapter */
                sprintf(i2c->adapter.name, "Radeon i2c hw bus %s", name);
                i2c->adapter.algo = &radeon_i2c_algo;