drivers/gpu/drm/openchrome/crtc_hw.h | 94 ++++++++++++++++++++++++++++ drivers/gpu/drm/openchrome/via_drv.h | 4 - drivers/gpu/drm/openchrome/via_fp.c | 116 +++++++++++++++++++++++++++++++---- 3 files changed, 200 insertions(+), 14 deletions(-)
New commits: commit ea60dfd59f2fd45a85cfd9f792bd86258c7c3e66 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 22:40:28 2017 -0700 Version bumped to 3.0.51 Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_drv.h b/drivers/gpu/drm/openchrome/via_drv.h index 028fa163adc4..977bffbbc9fb 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 "20171022" +#define DRIVER_DATE "20171026" #define DRIVER_MAJOR 3 #define DRIVER_MINOR 0 -#define DRIVER_PATCHLEVEL 50 +#define DRIVER_PATCHLEVEL 51 #include <linux/module.h> commit 045bbcc98a032eb9acbe3bdc2d76e086d268cf52 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 22:32:34 2017 -0700 Improve CX700 / VX800 / VX855 / VX900 mode setting Actively set output format and dithering when mode setting Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index 43a198f04440..017ade4a5d62 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -819,7 +819,7 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, /* PCI Device ID */ u16 chipset = encoder->dev->pdev->device; - DRM_DEBUG_KMS("Entered via_fp_mode_set.\n"); + DRM_DEBUG_KMS("Entered %s.\n", __func__); if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC) syncreg |= BIT(6); @@ -864,9 +864,27 @@ via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, break; } + switch (chipset) { + case PCI_DEVICE_ID_VIA_VT3157: + case PCI_DEVICE_ID_VIA_VT1122: + case PCI_DEVICE_ID_VIA_VX875: + case PCI_DEVICE_ID_VIA_VX900_VGA: + /* OPENLDI Mode */ + via_fp_format(dev_priv, enc->di_port, 0x01); + + /* Sequential Mode */ + via_fp_output_format(dev_priv, enc->di_port, 0x01); + + /* Turn on dithering. */ + via_fp_dithering(dev_priv, enc->di_port, true); + break; + default: + break; + } + via_fp_display_source(dev_priv, enc->di_port, iga->index); - DRM_DEBUG_KMS("Exiting via_fp_mode_set.\n"); + DRM_DEBUG_KMS("Exiting %s.\n", __func__); } static void via_fp_disable(struct drm_encoder *encoder) commit ec9528cad95581900fd5677132aae59ac390e87c Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 20:15:39 2017 -0700 Add via_fp_dithering Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index b0c57bc1a886..43a198f04440 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -601,6 +601,30 @@ static void via_fp_output_format(struct via_device *dev_priv, DRM_DEBUG_KMS("Exiting %s.\n", __func__); } +static void via_fp_dithering(struct via_device *dev_priv, + u32 di_port, bool dithering) +{ + DRM_DEBUG_KMS("Entered %s.\n", __func__); + + switch(di_port) { + case VIA_DI_PORT_LVDS1: + via_lvds1_set_dithering(VGABASE, dithering); + break; + case VIA_DI_PORT_LVDS2: + via_lvds2_set_dithering(VGABASE, dithering); + break; + case (VIA_DI_PORT_LVDS1 | + VIA_DI_PORT_LVDS2): + via_lvds1_set_dithering(VGABASE, dithering); + via_lvds2_set_dithering(VGABASE, dithering); + break; + default: + break; + } + + DRM_DEBUG_KMS("Exiting %s.\n", __func__); +} + /* * Sets flat panel display source. */ commit 70a2bda5b5dd35af221c009b1aa436d9d9c2be28 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 20:05:56 2017 -0700 Add via_lvds2_set_dithering This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index 059adaaf87b5..b172846a2e24 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -907,6 +907,23 @@ via_lvds2_set_output_format(void __iomem *regs, u8 output_format) } /* + * Sets LVDS2 output color dithering (18-bit color display vs. + * 24-bit color display). + */ +static inline void +via_lvds2_set_dithering(void __iomem *regs, bool dithering) +{ + /* 3X5.D4[6] - LVDS Channel 2 Output Bits + * 0: 24 bits (dithering off) + * 1: 18 bits (dithering on) */ + svga_wcrt_mask(regs, 0xd4, + dithering ? BIT(6) : 0x00, BIT(6)); + DRM_DEBUG_KMS("LVDS2 Color Dithering: %s\n", + dithering ? + "On (18 bit color)" : "Off (24 bit color)"); +} + +/* * Sets LVDS2 display source. */ static inline void commit cbd96601c4db3baaf9b36f23a892fba7be49d2a8 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 20:02:14 2017 -0700 Add via_lvds1_set_dithering This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index 7a6175fd45b3..059adaaf87b5 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -808,6 +808,23 @@ via_lvds1_set_output_format(void __iomem *regs, u8 output_format) } /* + * Sets LVDS1 output color dithering (18-bit color display vs. + * 24-bit color display). + */ +static inline void +via_lvds1_set_dithering(void __iomem *regs, bool dithering) +{ + /* 3X5.88[0] - LVDS Channel 1 Output Bits + * 0: 24 bits (dithering off) + * 1: 18 bits (dithering on) */ + svga_wcrt_mask(regs, 0x88, + dithering ? BIT(0) : 0x00, BIT(0)); + DRM_DEBUG_KMS("LVDS1 Color Dithering: %s\n", + dithering ? + "On (18 bit color)" : "Off (24 bit color)"); +} + +/* * Sets LVDS1 display source. */ static inline void commit 0e8f0d96c9a5716217d2d640a67e5615534cb627 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 16:31:03 2017 -0700 Add via_fp_output_format Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index 7373e1f0c44f..b0c57bc1a886 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -575,6 +575,32 @@ static void via_fp_format(struct via_device *dev_priv, DRM_DEBUG_KMS("Exiting %s.\n", __func__); } +static void via_fp_output_format(struct via_device *dev_priv, + u32 di_port, u8 output_format) +{ + u8 temp = output_format & 0x01; + + DRM_DEBUG_KMS("Entered %s.\n", __func__); + + switch(di_port) { + case VIA_DI_PORT_LVDS1: + via_lvds1_set_output_format(VGABASE, temp); + break; + case VIA_DI_PORT_LVDS2: + via_lvds2_set_output_format(VGABASE, temp); + break; + case (VIA_DI_PORT_LVDS1 | + VIA_DI_PORT_LVDS2): + via_lvds1_set_output_format(VGABASE, temp); + via_lvds2_set_output_format(VGABASE, temp); + break; + default: + break; + } + + DRM_DEBUG_KMS("Exiting %s.\n", __func__); +} + /* * Sets flat panel display source. */ commit 2c21a076460b07e960a76359c2167aecd8d4c70d Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 16:28:58 2017 -0700 Add via_fp_format Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index 5b0a323cf601..7373e1f0c44f 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -549,6 +549,31 @@ static void via_fp_io_pad_setting(struct via_device *dev_priv, u32 di_port, bool DRM_DEBUG_KMS("Exiting %s.\n", __func__); } +static void via_fp_format(struct via_device *dev_priv, + u32 di_port, u8 format) +{ + u8 temp = format & 0x01; + + DRM_DEBUG_KMS("Entered %s.\n", __func__); + + switch(di_port) { + case VIA_DI_PORT_LVDS1: + via_lvds1_set_format(VGABASE, temp); + break; + case VIA_DI_PORT_LVDS2: + via_lvds2_set_format(VGABASE, temp); + break; + case (VIA_DI_PORT_LVDS1 | + VIA_DI_PORT_LVDS2): + via_lvds1_set_format(VGABASE, temp); + via_lvds2_set_format(VGABASE, temp); + break; + default: + break; + } + + DRM_DEBUG_KMS("Exiting %s.\n", __func__); +} /* * Sets flat panel display source. commit 318a8e9e8daa6d66ae5ce82b4309e141b549af09 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 16:07:47 2017 -0700 Add via_lvds2_set_output_format This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index ca1f1965d79f..7a6175fd45b3 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -875,6 +875,21 @@ via_lvds2_set_format(void __iomem *regs, u8 format) } /* + * Sets LVDS2 output format (rotation or sequential mode). + */ +static inline void +via_lvds2_set_output_format(void __iomem *regs, u8 output_format) +{ + /* 3X5.D4[7] - LVDS Channel 2 Output Format + * 0: Rotation + * 1: Sequential */ + svga_wcrt_mask(regs, 0xd4, output_format << 7, BIT(7)); + DRM_DEBUG_KMS("LVDS2 Output Format: %s\n", + (output_format & BIT(0)) ? + "Sequential" : "Rotation"); +} + +/* * Sets LVDS2 display source. */ static inline void commit 641f95f2710c1448c6340ead223c5eae026880cc Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 16:06:14 2017 -0700 Add via_lvds2_set_format This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index bf02aa9a3955..ca1f1965d79f 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -861,6 +861,20 @@ via_lvds2_set_io_pad_setting(void __iomem *regs, u8 io_pad_state) } /* + * Sets LVDS2 format. + */ +static inline void +via_lvds2_set_format(void __iomem *regs, u8 format) +{ + /* 3X5.D2[0] - LVDS Channel 2 Format Selection + * 0: SPWG Mode + * 1: OPENLDI Mode */ + svga_wcrt_mask(regs, 0xd2, format, BIT(0)); + DRM_DEBUG_KMS("LVDS2 Format: %s\n", + (format & BIT(0)) ? "OPENLDI" : "SPWG"); +} + +/* * Sets LVDS2 display source. */ static inline void commit 87307d795f12c387e3b02eeba0641d006957969c Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Oct 26 15:52:24 2017 -0700 Add via_lvds1_set_output_format This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index 9dd92dde51bc..bf02aa9a3955 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -792,6 +792,22 @@ via_lvds1_set_format(void __iomem *regs, u8 format) } /* + * Sets LVDS1 output format (rotation or sequential mode). + */ +static inline void +via_lvds1_set_output_format(void __iomem *regs, u8 output_format) +{ + /* 3X5.88[6] - LVDS Channel 1 Output Format + * 0: Rotation + * 1: Sequential */ + svga_wcrt_mask(regs, 0x88, + output_format << 6, BIT(6)); + DRM_DEBUG_KMS("LVDS1 Output Format: %s\n", + (output_format & BIT(0)) ? + "Sequential" : "Rotation"); +} + +/* * Sets LVDS1 display source. */ static inline void commit c51a81d98ec73ccfda2f9555a1648dcd276c7257 Author: Kevin Brace <kevinbr...@gmx.com> Date: Wed Oct 25 19:43:05 2017 -0700 Add via_lvds1_set_format This is an inline function. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/crtc_hw.h b/drivers/gpu/drm/openchrome/crtc_hw.h index 130cdc133098..9dd92dde51bc 100644 --- a/drivers/gpu/drm/openchrome/crtc_hw.h +++ b/drivers/gpu/drm/openchrome/crtc_hw.h @@ -777,6 +777,21 @@ via_lvds1_set_io_pad_setting(void __iomem *regs, u8 io_pad_state) } /* + * Sets LVDS1 format. + */ +static inline void +via_lvds1_set_format(void __iomem *regs, u8 format) +{ + /* 3X5.D2[1] - LVDS Channel 1 Format Selection + * 0: SPWG Mode + * 1: OPENLDI Mode */ + svga_wcrt_mask(regs, 0xd2, + format << 1, BIT(1)); + DRM_DEBUG_KMS("LVDS1 Format: %s\n", + (format & BIT(0)) ? "OPENLDI" : "SPWG"); +} + +/* * Sets LVDS1 display source. */ static inline void commit a1bdc6a1fe393c2f19fda8bada45be6b62d96a18 Author: Kevin Brace <kevinbr...@gmx.com> Date: Sun Oct 22 21:39:06 2017 -0500 Tweaks to via_fp_dpms Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index 7736fba5b14b..5b0a323cf601 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -618,8 +618,8 @@ static void via_fp_dpms(struct drm_encoder *encoder, int mode) via_fp_power(dev_priv, chipset, enc->di_port, true); via_fp_io_pad_setting(dev_priv, enc->di_port, true); break; - case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: + case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_OFF: via_fp_power(dev_priv, chipset, enc->di_port, false); via_fp_io_pad_setting(dev_priv, enc->di_port, false); commit 64a3cf92c9e7f84cdb02711266735128defbb7a0 Author: Kevin Brace <kevinbr...@gmx.com> Date: Sun Oct 22 21:25:29 2017 -0500 Rename via_fp_io_pad_state to via_fp_io_pad_setting Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c index 7d91f06b2dc6..7736fba5b14b 100644 --- a/drivers/gpu/drm/openchrome/via_fp.c +++ b/drivers/gpu/drm/openchrome/via_fp.c @@ -507,10 +507,9 @@ via_fp_power(struct via_device *dev_priv, unsigned short device, /* * Sets flat panel I/O pad state. */ -static void -via_fp_io_pad_state(struct via_device *dev_priv, u32 di_port, bool io_pad_on) +static void via_fp_io_pad_setting(struct via_device *dev_priv, u32 di_port, bool io_pad_on) { - DRM_DEBUG_KMS("Entered via_fp_io_pad_state.\n"); + DRM_DEBUG_KMS("Entered %s.\n", __func__); switch(di_port) { case VIA_DI_PORT_DVP0: @@ -547,7 +546,7 @@ via_fp_io_pad_state(struct via_device *dev_priv, u32 di_port, bool io_pad_on) DRM_DEBUG_KMS("FP I/O Pad: %s\n", io_pad_on ? "On": "Off"); - DRM_DEBUG_KMS("Exiting via_fp_io_pad_state.\n"); + DRM_DEBUG_KMS("Exiting %s.\n", __func__); } @@ -617,13 +616,13 @@ static void via_fp_dpms(struct drm_encoder *encoder, int mode) switch (mode) { case DRM_MODE_DPMS_ON: via_fp_power(dev_priv, chipset, enc->di_port, true); - via_fp_io_pad_state(dev_priv, enc->di_port, true); + via_fp_io_pad_setting(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, chipset, enc->di_port, false); - via_fp_io_pad_state(dev_priv, enc->di_port, false); + via_fp_io_pad_setting(dev_priv, enc->di_port, false); break; default: break; @@ -710,7 +709,7 @@ static void via_fp_prepare(struct drm_encoder *encoder) 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); + via_fp_io_pad_setting(dev_priv, enc->di_port, false); DRM_DEBUG_KMS("Exiting %s.\n", __func__); } @@ -728,7 +727,7 @@ static void via_fp_commit(struct drm_encoder *encoder) 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); + via_fp_io_pad_setting(dev_priv, enc->di_port, true); DRM_DEBUG_KMS("Exiting %s.\n", __func__); } @@ -808,7 +807,7 @@ static void via_fp_disable(struct drm_encoder *encoder) 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); + via_fp_io_pad_setting(dev_priv, enc->di_port, false); DRM_DEBUG_KMS("Exiting %s.\n", __func__); } _______________________________________________ Openchrome-devel mailing list Openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel