drm/radeon/kms: add hw_i2c module option
authorAlex Deucher <alexdeucher@gmail.com>
Wed, 17 Mar 2010 06:07:37 +0000 (02:07 -0400)
committerDave Airlie <airlied@redhat.com>
Wed, 31 Mar 2010 04:55:52 +0000 (14:55 +1000)
Turn off hw i2c by default except for mm i2c which
is hw only until we sort out the remaining prescale
issues on older chips.  hw i2c can be enabled with
hw_i2c=1.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_drv.c
drivers/gpu/drm/radeon/radeon_i2c.c

index 1710b9e3ef7d38053eca9bee3d5d28d3eae8af61..034218c3dbbbb11d8248606074debc81fe42df8b 100644 (file)
@@ -92,6 +92,7 @@ extern int radeon_new_pll;
 extern int radeon_dynpm;
 extern int radeon_audio;
 extern int radeon_disp_priority;
+extern int radeon_hw_i2c;
 
 /*
  * Copy from radeon_drv.h so we don't have to include both and have conflicting
index 6fd511eec96c47f91e47ed24eef48291dab4ba1a..055a51732dcb7b76a100d79ee2b642de9cc9eefe 100644 (file)
@@ -93,6 +93,7 @@ int radeon_new_pll = -1;
 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);
@@ -139,6 +140,9 @@ module_param_named(audio, radeon_audio, 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;
index 352110fd68f623983b0e0392c960f303255d81a0..5def6f5dff38c1f7dfb0357aa5f9f8cc2583576a 100644 (file)
@@ -879,9 +879,11 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
        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;