[Openchrome-devel] drm-openchrome: Branch 'drm-next-4.13' - 11 commits - drivers/gpu/drm

Kevin Brace kevinbrace at kemper.freedesktop.org
Sun Oct 8 04:48:34 UTC 2017


 drivers/gpu/drm/openchrome/crtc_hw.h    |   28 +++++
 drivers/gpu/drm/openchrome/via_analog.c |    2 
 drivers/gpu/drm/openchrome/via_drv.c    |   80 ++++++++++++----
 drivers/gpu/drm/openchrome/via_drv.h    |   12 ++
 drivers/gpu/drm/openchrome/via_fp.c     |  153 ++++++++++++++++++++++----------
 5 files changed, 208 insertions(+), 67 deletions(-)

New commits:
commit 4a22696b1c8bff5638780c74faca557574b1a887
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Sat Oct 7 21:47:50 2017 -0700

    Version bumped to 3.0.48
    
    This version is an important version. For the first time, standby resume
    (resume from ACPI S3 State) is working at least on VN896 chipset.
    There are still issues with the code, but they will be addressed soon.
    This hugely advances OpenChrome DRM towards mainlining.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_drv.h b/drivers/gpu/drm/openchrome/via_drv.h
index 50a720811057..59251d599de6 100644
--- a/drivers/gpu/drm/openchrome/via_drv.h
+++ b/drivers/gpu/drm/openchrome/via_drv.h
@@ -30,11 +30,11 @@
 #define DRIVER_AUTHOR       "OpenChrome Project"
 #define DRIVER_NAME         "openchrome"
 #define DRIVER_DESC         "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE         "20171003"
+#define DRIVER_DATE         "20171007"
 
 #define DRIVER_MAJOR		3
 #define DRIVER_MINOR		0
-#define DRIVER_PATCHLEVEL	47
+#define DRIVER_PATCHLEVEL	48
 
 #include <linux/module.h>
 
commit 2407a30fd5dd37e2c60147d3f96f8b334ccb68d1
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Sat Oct 7 21:32:41 2017 -0700

    Swap the available display controller for analog (VGA) and FP
    
    This is a temporary solution until a bug that causes IGA2’s (display
    controller 2) display cursor to disappear after standby resume is
    fixed.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_analog.c b/drivers/gpu/drm/openchrome/via_analog.c
index 7f4d838774f4..efb9f0cedd2d 100644
--- a/drivers/gpu/drm/openchrome/via_analog.c
+++ b/drivers/gpu/drm/openchrome/via_analog.c
@@ -274,7 +274,7 @@ via_analog_init(struct drm_device *dev)
 						DRM_MODE_ENCODER_DAC, NULL);
 	drm_encoder_helper_add(&enc->base, &via_dac_enc_helper_funcs);
 
-	enc->base.possible_crtcs = BIT(0);
+	enc->base.possible_crtcs = BIT(1);
 	enc->base.possible_clones = 0;
 	enc->di_port = VIA_DI_PORT_NONE;
 
diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index e46a47582c9d..ecc4cd99b84a 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -1367,7 +1367,7 @@ via_lvds_init(struct drm_device *dev)
 						DRM_MODE_ENCODER_LVDS, NULL);
 	drm_encoder_helper_add(&enc->base, &via_lvds_helper_funcs);
 
-	enc->base.possible_crtcs = BIT(1);
+	enc->base.possible_crtcs = BIT(0);
 
 	if (dev_priv->int_fp1_presence) {
 		enc->di_port = dev_priv->int_fp1_di_port;
commit 4b22b9c8846b481c9ba47ae10152d7295b23de67
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Sat Oct 7 20:14:42 2017 -0700

    Initial code for supporting standby resume
    
    After struggling for more than a year trying to figure out how to fix
    standby resume (ACPI S3 State resume), finally figured it out what was
    wrong and how to implement it correctly. Obviously, more fixes have to
    be put in for standby resume to be reliable, but at least for now, it
    is working on Xubuntu 16.04.3 LTS with HP 2133 mini-note (VN896 chipset)
    as long as lid close event is avoided.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_drv.c b/drivers/gpu/drm/openchrome/via_drv.c
index 77defa5e0244..144abd9010cd 100644
--- a/drivers/gpu/drm/openchrome/via_drv.c
+++ b/drivers/gpu/drm/openchrome/via_drv.c
@@ -22,6 +22,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 #include <linux/module.h>
+#include <linux/console.h>
 
 #include <drm/drmP.h>
 #include <drm/via_drm.h>
@@ -455,6 +456,66 @@ static void via_reclaim_buffers_locked(struct drm_device *dev,
 	return;
 }
 
+static int via_pm_ops_suspend(struct device *dev)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+	struct drm_device *drm_dev = pci_get_drvdata(pdev);
+	struct via_device *dev_priv = drm_dev->dev_private;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
+
+	console_lock();
+	drm_fb_helper_set_suspend(&dev_priv->via_fbdev->helper, true);
+
+	/* 3X5.3B through 3X5.3F are scratch pad registers.
+	 * They are important for FP detection.
+	 * Their values need to be saved because they get lost
+	 * when resuming from standby. */
+	dev_priv->saved_cr3b = vga_rcrt(VGABASE, 0x3b);
+	dev_priv->saved_cr3c = vga_rcrt(VGABASE, 0x3c);
+	dev_priv->saved_cr3d = vga_rcrt(VGABASE, 0x3d);
+	dev_priv->saved_cr3e = vga_rcrt(VGABASE, 0x3e);
+	dev_priv->saved_cr3f = vga_rcrt(VGABASE, 0x3f);
+
+	console_unlock();
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return 0;
+}
+
+static int via_pm_ops_resume(struct device *dev)
+{
+	struct pci_dev *pdev = to_pci_dev(dev);
+	struct drm_device *drm_dev = pci_get_drvdata(pdev);
+	struct via_device *dev_priv = drm_dev->dev_private;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
+
+	console_lock();
+
+	/* 3X5.3B through 3X5.3F are scratch pad registers.
+	 * They are important for FP detection.
+	 * Their values need to be restored because they are undefined
+	 * after resuming from standby. */
+	vga_wcrt(VGABASE, 0x3b, dev_priv->saved_cr3b);
+	vga_wcrt(VGABASE, 0x3c, dev_priv->saved_cr3c);
+	vga_wcrt(VGABASE, 0x3d, dev_priv->saved_cr3d);
+	vga_wcrt(VGABASE, 0x3e, dev_priv->saved_cr3e);
+	vga_wcrt(VGABASE, 0x3f, dev_priv->saved_cr3f);
+
+	drm_helper_resume_force_mode(drm_dev);
+	drm_fb_helper_set_suspend(&dev_priv->via_fbdev->helper, false);
+	console_unlock();
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return 0;
+}
+
+static const struct dev_pm_ops via_dev_pm_ops = {
+	.suspend = via_pm_ops_suspend,
+	.resume = via_pm_ops_resume,
+};
+
 static const struct file_operations via_driver_fops = {
 	.owner		= THIS_MODULE,
 	.open		= drm_open,
@@ -507,23 +568,10 @@ via_pci_remove(struct pci_dev *pdev)
 	drm_put_dev(dev);
 }
 
-#ifdef CONFIG_PM
-static int
-via_pci_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-	return 0;
-}
-
-static int
-via_pci_resume(struct pci_dev *pdev)
-{
-	return 0;
-}
-#endif /* CONFIG_PM */
-
 static struct pci_driver via_pci_driver = {
 	.name		= DRIVER_NAME,
 	.id_table	= via_pci_table,
+	.driver.pm	= &via_dev_pm_ops,
 };
 
 static int __init via_init(void)
@@ -533,10 +581,6 @@ static int __init via_init(void)
 	if (via_modeset) {
 		via_pci_driver.probe	= via_pci_probe;
 		via_pci_driver.remove	= via_pci_remove;
-#ifdef CONFIG_PM
-		via_pci_driver.suspend	= via_pci_suspend;
-		via_pci_driver.resume	= via_pci_resume;
-#endif
 		via_driver.driver_features |= DRIVER_MODESET;
 	}
 	return pci_register_driver(&via_pci_driver);
diff --git a/drivers/gpu/drm/openchrome/via_drv.h b/drivers/gpu/drm/openchrome/via_drv.h
index 494620d77780..50a720811057 100644
--- a/drivers/gpu/drm/openchrome/via_drv.h
+++ b/drivers/gpu/drm/openchrome/via_drv.h
@@ -191,6 +191,14 @@ struct via_device {
 	struct via_crtc iga[2];
 	bool spread_spectrum;
 
+	/* 3X5.3B through 3X5.3F are scratch pad registers.
+	 * They are important for FP detection. */
+	uint8_t saved_cr3b;
+	uint8_t saved_cr3c;
+	uint8_t saved_cr3d;
+	uint8_t saved_cr3e;
+	uint8_t saved_cr3f;
+
 	/* Due to the way VIA NanoBook reference design implemented
 	 * the pin strapping settings, DRM needs to ignore them for
 	 * FP and DVI to be properly detected. */
commit aef691b0a9fb4caab682e21d5b1a4caef1f46251
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Sat Oct 7 11:33:54 2017 -0700

    Temporary implementation in setting FP adjustment value
    
    This is really a temporary solution in setting P4M900 chipset
    family’s (P4M900, VN896, and CN896) FP adjustment value.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index 540723c25b2f..e46a47582c9d 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -737,6 +737,9 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 	struct via_device *dev_priv = encoder->dev->dev_private;
 	u8 syncreg = 0;
 
+	/* PCI Device ID */
+	u16 chipset = encoder->dev->pdev->device;
+
 	DRM_DEBUG_KMS("Entered via_fp_mode_set.\n");
 
 	if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
@@ -773,6 +776,15 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 		break;
 	}
 
+	/* Temporary implementation.*/
+	switch (chipset) {
+	case PCI_DEVICE_ID_VIA_P4M900:
+		via_fpdp_low_set_adjustment(VGABASE, 0x08);
+		break;
+	default:
+		break;
+	}
+
 	via_fp_display_source(dev_priv, enc->di_port, iga->index);
 
 	DRM_DEBUG_KMS("Exiting via_fp_mode_set.\n");
commit f1f226ddc9bda5d611aeeb65438c8906a6cfc6c7
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Sat Oct 7 01:27:34 2017 -0700

    Add via_fpdp_high_set_adjustment
    
    This is an inline function.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h
index 0d0692469415..fe57d1476851 100644
--- a/drivers/gpu/drm/openchrome/crtc_hw.h
+++ b/drivers/gpu/drm/openchrome/crtc_hw.h
@@ -647,6 +647,20 @@ via_fpdp_high_set_io_pad_state(void __iomem *regs, u8 io_pad_state)
 }
 
 /*
+ * Sets FPDP (Flat Panel Display Port) High adjustment register.
+ */
+static inline void
+via_fpdp_high_set_adjustment(void __iomem *regs, u8 adjustment)
+{
+	/* 3X5.97[3:0] - FPDP High Adjustment */
+	svga_wcrt_mask(regs, 0x97,
+			adjustment, BIT(3) | BIT(2) | BIT(1) | BIT(0));
+	DRM_DEBUG_KMS("FPDP High Adjustment: %lu\n",
+			(adjustment & (BIT(3) | BIT(2) |
+					BIT(1) | BIT(0))));
+}
+
+/*
  * Sets FPDP (Flat Panel Display Port) High interface display source.
  */
 static inline void
commit 46fcdbb9b41eeec7e1ed0a800c9ab4dec9e6e820
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Fri Oct 6 20:59:18 2017 -0700

    Add via_fpdp_low_set_adjustment
    
    This is an inline function.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h
index 54860250f597..0d0692469415 100644
--- a/drivers/gpu/drm/openchrome/crtc_hw.h
+++ b/drivers/gpu/drm/openchrome/crtc_hw.h
@@ -595,6 +595,20 @@ via_fpdp_low_set_io_pad_state(void __iomem *regs, u8 io_pad_state)
 }
 
 /*
+ * Sets FPDP (Flat Panel Display Port) Low adjustment register.
+ */
+static inline void
+via_fpdp_low_set_adjustment(void __iomem *regs, u8 adjustment)
+{
+	/* 3X5.99[3:0] - FPDP Low Adjustment */
+	svga_wcrt_mask(regs, 0x99,
+			adjustment, BIT(3) | BIT(2) | BIT(1) | BIT(0));
+	DRM_DEBUG_KMS("FPDP Low Adjustment: %lu\n",
+			(adjustment & (BIT(3) | BIT(2) |
+					BIT(1) | BIT(0))));
+}
+
+/*
  * Sets FPDP (Flat Panel Display Port) Low interface display source.
  */
 static inline void
commit a0bd5ca28e6da0513f2956b5ffef1e346113a0b9
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Oct 4 23:16:45 2017 -0700

    Renaming via_lcd_set_property to via_fp_set_property
    
    Added error messages to the function.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index 8d5270c2b1f4..540723c25b2f 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -837,43 +837,52 @@ via_lcd_detect(struct drm_connector *connector,  bool force)
 	return ret;
 }
 
-static int
-via_lcd_set_property(struct drm_connector *connector,
-			struct drm_property *property, uint64_t value)
+static int via_fp_set_property(struct drm_connector *connector,
+				struct drm_property *property,
+				uint64_t val)
 {
 	struct drm_device *dev = connector->dev;
 	uint64_t orig;
 	int ret;
 
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
 	ret = drm_object_property_get_value(&connector->base, property, &orig);
-	if (!ret && (orig != value)) {
+	if (ret) {
+		DRM_ERROR("FP Property not found!\n");
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	if (orig != val) {
 		if (property == dev->mode_config.scaling_mode_property) {
-			switch (value) {
+			switch (val) {
 			case DRM_MODE_SCALE_NONE:
 				break;
-
 			case DRM_MODE_SCALE_CENTER:
 				break;
-
 			case DRM_MODE_SCALE_ASPECT:
 				break;
-
 			case DRM_MODE_SCALE_FULLSCREEN:
 				break;
-
 			default:
-				return -EINVAL;
+				DRM_ERROR("Invalid FP property!\n");
+				ret = -EINVAL;
+				break;
 			}
 		}
 	}
-	return 0;
+
+exit:
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return ret;
 }
 
 struct drm_connector_funcs via_lcd_connector_funcs = {
 	.dpms = drm_helper_connector_dpms,
 	.detect = via_lcd_detect,
 	.fill_modes = drm_helper_probe_single_connector_modes,
-	.set_property = via_lcd_set_property,
+	.set_property = via_fp_set_property,
 	.destroy = via_connector_destroy,
 };
 
commit d5eb532765428d437853c468422c8df3257e464f
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Oct 4 21:19:03 2017 -0700

    Add via_fp_disable
    
    A callback function for FP mode setting.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index 85866dd5e40e..8d5270c2b1f4 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -778,13 +778,31 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 	DRM_DEBUG_KMS("Exiting via_fp_mode_set.\n");
 }
 
+static void via_fp_disable(struct drm_encoder *encoder)
+{
+	struct via_encoder *enc = container_of(encoder,
+					struct via_encoder, base);
+	struct drm_device *dev = encoder->dev;
+	struct via_device *dev_priv = encoder->dev->dev_private;
+
+	/* PCI Device ID */
+	u16 chipset = dev->pdev->device;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
+
+	via_fp_power(dev_priv, chipset, enc->di_port, false);
+	via_fp_io_pad_state(dev_priv, enc->di_port, false);
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
 const struct drm_encoder_helper_funcs via_lvds_helper_funcs = {
 	.dpms = via_fp_dpms,
 	.mode_fixup = via_lvds_mode_fixup,
 	.prepare = via_fp_prepare,
 	.commit = via_fp_commit,
 	.mode_set = via_fp_mode_set,
-	.disable = via_encoder_disable,
+	.disable = via_fp_disable,
 };
 
 const struct drm_encoder_funcs via_lvds_enc_funcs = {
commit 2c78337eb7220e84732ce85d661f044403f0031f
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Oct 4 20:59:45 2017 -0700

    Add via_fp_commit
    
    A callback function for FP mode setting.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index a1cbc566f65c..85866dd5e40e 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -710,6 +710,24 @@ static void via_fp_prepare(struct drm_encoder *encoder)
 	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
 
+static void via_fp_commit(struct drm_encoder *encoder)
+{
+	struct via_encoder *enc = container_of(encoder,
+					struct via_encoder, base);
+	struct drm_device *dev = encoder->dev;
+	struct via_device *dev_priv = encoder->dev->dev_private;
+
+	/* PCI Device ID */
+	u16 chipset = dev->pdev->device;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
+
+	via_fp_power(dev_priv, chipset, enc->di_port, true);
+	via_fp_io_pad_state(dev_priv, enc->di_port, true);
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
 static void
 via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 		struct drm_display_mode *adjusted_mode)
@@ -764,7 +782,7 @@ const struct drm_encoder_helper_funcs via_lvds_helper_funcs = {
 	.dpms = via_fp_dpms,
 	.mode_fixup = via_lvds_mode_fixup,
 	.prepare = via_fp_prepare,
-	.commit = via_encoder_commit,
+	.commit = via_fp_commit,
 	.mode_set = via_fp_mode_set,
 	.disable = via_encoder_disable,
 };
commit 297f7386612dd1de92ba9b089989c84a2bd49c32
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Oct 4 20:08:39 2017 -0700

    Add via_fp_prepare
    
    A callback function for FP mode setting.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index f880803cb01d..a1cbc566f65c 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -692,6 +692,24 @@ via_lvds_mode_fixup(struct drm_encoder *encoder,
 	return true;
 }
 
+static void via_fp_prepare(struct drm_encoder *encoder)
+{
+	struct via_encoder *enc = container_of(encoder,
+					struct via_encoder, base);
+	struct drm_device *dev = encoder->dev;
+	struct via_device *dev_priv = encoder->dev->dev_private;
+
+	/* PCI Device ID */
+	u16 chipset = dev->pdev->device;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
+
+	via_fp_power(dev_priv, chipset, enc->di_port, false);
+	via_fp_io_pad_state(dev_priv, enc->di_port, false);
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
 static void
 via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 		struct drm_display_mode *adjusted_mode)
@@ -745,9 +763,9 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
 const struct drm_encoder_helper_funcs via_lvds_helper_funcs = {
 	.dpms = via_fp_dpms,
 	.mode_fixup = via_lvds_mode_fixup,
-	.mode_set = via_fp_mode_set,
-	.prepare = via_encoder_prepare,
+	.prepare = via_fp_prepare,
 	.commit = via_encoder_commit,
+	.mode_set = via_fp_mode_set,
 	.disable = via_encoder_disable,
 };
 
commit e483589c0861f8d771d1d7ff24f1fa58ec0fcdca
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Wed Oct 4 17:54:36 2017 -0700

    Cleaning up via_fp_dpms
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index c1cd804f24ea..f880803cb01d 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -597,48 +597,34 @@ via_fp_display_source(struct via_device *dev_priv, u32 di_port, int index)
 	DRM_DEBUG_KMS("Exiting via_fp_display_source.\n");
 }
 
-static void
-via_fp_dpms(struct drm_encoder *encoder, int mode)
+static void via_fp_dpms(struct drm_encoder *encoder, int mode)
 {
-	struct via_encoder *enc = container_of(encoder, struct via_encoder, base);
-	struct via_device *dev_priv = encoder->dev->dev_private;
+	struct via_encoder *enc = container_of(encoder,
+					struct via_encoder, base);
 	struct drm_device *dev = encoder->dev;
+	struct via_device *dev_priv = encoder->dev->dev_private;
+
+	/* PCI Device ID */
+	u16 chipset = dev->pdev->device;
+
+	DRM_DEBUG_KMS("Entered %s.", __func__);
 
 	switch (mode) {
 	case DRM_MODE_DPMS_ON:
-		if (encoder->crtc == NULL)
-			return;
-
-		/* when using the EPIA-EX board, if we do not set this bit,
-		 * light LCD will failed in nonRandR structure,
-		 * So, when light LCD this bit is always setted */
-		svga_wcrt_mask(VGABASE, 0x6A, BIT(3), BIT(3));
-
-		if (dev_priv->spread_spectrum) {
-			if ((dev->pdev->device == PCI_DEVICE_ID_VIA_VT1122) ||
-			    (dev->pdev->device == PCI_DEVICE_ID_VIA_VX875) ||
-			    (dev->pdev->device == PCI_DEVICE_ID_VIA_VX900_VGA)) {
-				/* GPIO-4/5 are used for spread spectrum,
-				 * we must clear SR3D[7:6] to disable
-				 * GPIO-4/5 output */
-				svga_wseq_mask(VGABASE, 0x3D, BIT(0), 0xC1);
-			} else {
-				svga_wseq_mask(VGABASE, 0x2C, BIT(0), BIT(0));
-			}
-			svga_wseq_mask(VGABASE, 0x1E, BIT(3), BIT(3));
-		}
-
-		via_fp_power(dev_priv, dev->pdev->device, enc->di_port, true);
-	        via_fp_io_pad_state(dev_priv, enc->di_port, true);
+		via_fp_power(dev_priv, chipset, enc->di_port, true);
+		via_fp_io_pad_state(dev_priv, enc->di_port, true);
 		break;
-
 	case DRM_MODE_DPMS_STANDBY:
 	case DRM_MODE_DPMS_SUSPEND:
 	case DRM_MODE_DPMS_OFF:
-		via_fp_power(dev_priv, dev->pdev->device, enc->di_port, false);
+		via_fp_power(dev_priv, chipset, enc->di_port, false);
 		via_fp_io_pad_state(dev_priv, enc->di_port, false);
 		break;
+	default:
+		break;
 	}
+
+	DRM_DEBUG_KMS("Exiting %s.", __func__);
 }
 
 static bool


More information about the Openchrome-devel mailing list