* [PATCH] 16bpp bugfix for CL-GD7548 Cirrus frame buffer
@ 2002-12-08 8:12 Clifford T. Matthews
2004-01-06 18:36 ` James Simmons
0 siblings, 1 reply; 3+ messages in thread
From: Clifford T. Matthews @ 2002-12-08 8:12 UTC (permalink / raw)
To: Jeff Garzik; +Cc: linux-fbdev-devel, linux-kernel
I have a Micron Millennium Transport laptop with Cirrus CL-GD7548
based video. It works fine in 16bpp using the Cirrus XFree86 4.2.0
driver. /dev/fb works fine at 8bpp, but didn't work at 16bpp. I
looked at the two drivers and made clgenfb.c do a few things the
XFree86 driver was doing and now 16bpp appears to work fine on that
laptop.
I don't subscribe to linux-fbdev-devel, but do read lkml via a
leisurely Usenet feed.
--Cliff Matthews After some people managed to scale the wall,
ctm@ardi.com there was a ban on the sale of rope and twine.
diff -Naur linux-2.4.20/drivers/video/clgenfb.c linux-2.4.20-clpatch/drivers/video/clgenfb.c
--- linux-2.4.20/drivers/video/clgenfb.c 2002-11-28 16:53:15.000000000 -0700
+++ linux-2.4.20-clpatch/drivers/video/clgenfb.c 2002-12-07 23:34:54.000000000 -0700
@@ -15,6 +15,9 @@
* Lars Hecking:
* Amiga updates and testing.
*
+ * Cliff Matthews <ctm@ardi.com>:
+ * 16bpp fix for CL-GD7548 (uses info from XFree86 4.2.0 source)
+ *
* Original clgenfb author: Frank Neumann
*
* Based on retz3fb.c and clgen.c:
@@ -403,6 +406,9 @@
#ifdef CONFIG_PCI
struct pci_dev *pdev;
+#define IS_7548(x) ((x)->pdev->device == PCI_DEVICE_ID_CIRRUS_7548)
+#else
+#define IS_7548(x) (FALSE)
#endif
};
@@ -970,7 +976,10 @@
DPRINTK ("desired pixclock: %ld kHz\n", freq);
- maxclock = clgen_board_info[fb_info->btype].maxclock;
+ if (IS_7548(fb_info))
+ maxclock = 80100;
+ else
+ maxclock = clgen_board_info[fb_info->btype].maxclock;
_par->multiplexing = 0;
/* If the frequency is greater than we can support, we might be able
@@ -1478,10 +1487,17 @@
case BT_ALPINE:
DPRINTK (" (for GD543x)\n");
- if (_par->HorizRes >= 1024)
- vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
- else
- vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
+ if (IS_7548(fb_info)) {
+ vga_wseq (fb_info->regs, CL_SEQR7,
+ (vga_rseq (fb_info->regs, CL_SEQR7) & 0xE0)
+ | 0x17);
+ WHDR (fb_info, 0xC1);
+ } else {
+ if (_par->HorizRes >= 1024)
+ vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
+ else
+ vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
+ }
clgen_set_mclk (fb_info, _par->mclk, _par->divMCLK);
break;
@@ -1594,6 +1610,11 @@
_par->var.bits_per_pixel);
}
+ if (IS_7548(fb_info)) {
+ vga_wseq (fb_info->regs, CL_SEQR2D,
+ vga_rseq (fb_info->regs, CL_SEQR2D) | 0xC0);
+ }
+
vga_wcrt (fb_info->regs, VGA_CRTC_OFFSET, offset & 0xff);
tmp = 0x22;
if (offset & 0x100)
diff -Naur linux-2.4.20/drivers/video/clgenfb.h linux-2.4.20-clpatch/drivers/video/clgenfb.h
--- linux-2.4.20/drivers/video/clgenfb.h 2000-01-06 11:23:46.000000000 -0700
+++ linux-2.4.20-clpatch/drivers/video/clgenfb.h 2002-12-07 20:50:43.000000000 -0700
@@ -60,6 +60,7 @@
#define CL_SEQR1D 0x1d /* VCLK2 Denominator and Post-Scalar Value */
#define CL_SEQR1E 0x1e /* VCLK3 Denominator and Post-Scalar Value */
#define CL_SEQR1F 0x1f /* BIOS ROM write enable and MCLK Select */
+#define CL_SEQR2D 0x2d /* unknown, snagged from XFree86 4.2.0 */
/*** CRT Controller Registers ***/
#define CL_CRT22 0x22 /* Graphics Data Latches ReadBack */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Linux-fbdev-devel] [PATCH] 16bpp bugfix for CL-GD7548 Cirrus frame buffer
2002-12-08 8:12 [PATCH] 16bpp bugfix for CL-GD7548 Cirrus frame buffer Clifford T. Matthews
@ 2004-01-06 18:36 ` James Simmons
0 siblings, 0 replies; 3+ messages in thread
From: James Simmons @ 2004-01-06 18:36 UTC (permalink / raw)
To: Clifford T. Matthews
Cc: Linux Fbdev development list, Linux Kernel Mailing List
Adapted to 2.6.0 and applied. AT present I'm going threw my patch queue
to clean it out.
> I have a Micron Millennium Transport laptop with Cirrus CL-GD7548
> based video. It works fine in 16bpp using the Cirrus XFree86 4.2.0
> driver. /dev/fb works fine at 8bpp, but didn't work at 16bpp. I
> looked at the two drivers and made clgenfb.c do a few things the
> XFree86 driver was doing and now 16bpp appears to work fine on that
> laptop.
>
> I don't subscribe to linux-fbdev-devel, but do read lkml via a
> leisurely Usenet feed.
>
> --Cliff Matthews After some people managed to scale the wall,
> ctm@ardi.com there was a ban on the sale of rope and twine.
>
> diff -Naur linux-2.4.20/drivers/video/clgenfb.c linux-2.4.20-clpatch/drivers/video/clgenfb.c
> --- linux-2.4.20/drivers/video/clgenfb.c 2002-11-28 16:53:15.000000000 -0700
> +++ linux-2.4.20-clpatch/drivers/video/clgenfb.c 2002-12-07 23:34:54.000000000 -0700
> @@ -15,6 +15,9 @@
> * Lars Hecking:
> * Amiga updates and testing.
> *
> + * Cliff Matthews <ctm@ardi.com>:
> + * 16bpp fix for CL-GD7548 (uses info from XFree86 4.2.0 source)
> + *
> * Original clgenfb author: Frank Neumann
> *
> * Based on retz3fb.c and clgen.c:
> @@ -403,6 +406,9 @@
>
> #ifdef CONFIG_PCI
> struct pci_dev *pdev;
> +#define IS_7548(x) ((x)->pdev->device == PCI_DEVICE_ID_CIRRUS_7548)
> +#else
> +#define IS_7548(x) (FALSE)
> #endif
> };
>
> @@ -970,7 +976,10 @@
>
> DPRINTK ("desired pixclock: %ld kHz\n", freq);
>
> - maxclock = clgen_board_info[fb_info->btype].maxclock;
> + if (IS_7548(fb_info))
> + maxclock = 80100;
> + else
> + maxclock = clgen_board_info[fb_info->btype].maxclock;
> _par->multiplexing = 0;
>
> /* If the frequency is greater than we can support, we might be able
> @@ -1478,10 +1487,17 @@
>
> case BT_ALPINE:
> DPRINTK (" (for GD543x)\n");
> - if (_par->HorizRes >= 1024)
> - vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
> - else
> - vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
> + if (IS_7548(fb_info)) {
> + vga_wseq (fb_info->regs, CL_SEQR7,
> + (vga_rseq (fb_info->regs, CL_SEQR7) & 0xE0)
> + | 0x17);
> + WHDR (fb_info, 0xC1);
> + } else {
> + if (_par->HorizRes >= 1024)
> + vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
> + else
> + vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
> + }
> clgen_set_mclk (fb_info, _par->mclk, _par->divMCLK);
> break;
>
> @@ -1594,6 +1610,11 @@
> _par->var.bits_per_pixel);
> }
>
> + if (IS_7548(fb_info)) {
> + vga_wseq (fb_info->regs, CL_SEQR2D,
> + vga_rseq (fb_info->regs, CL_SEQR2D) | 0xC0);
> + }
> +
> vga_wcrt (fb_info->regs, VGA_CRTC_OFFSET, offset & 0xff);
> tmp = 0x22;
> if (offset & 0x100)
> diff -Naur linux-2.4.20/drivers/video/clgenfb.h linux-2.4.20-clpatch/drivers/video/clgenfb.h
> --- linux-2.4.20/drivers/video/clgenfb.h 2000-01-06 11:23:46.000000000 -0700
> +++ linux-2.4.20-clpatch/drivers/video/clgenfb.h 2002-12-07 20:50:43.000000000 -0700
> @@ -60,6 +60,7 @@
> #define CL_SEQR1D 0x1d /* VCLK2 Denominator and Post-Scalar Value */
> #define CL_SEQR1E 0x1e /* VCLK3 Denominator and Post-Scalar Value */
> #define CL_SEQR1F 0x1f /* BIOS ROM write enable and MCLK Select */
> +#define CL_SEQR2D 0x2d /* unknown, snagged from XFree86 4.2.0 */
>
> /*** CRT Controller Registers ***/
> #define CL_CRT22 0x22 /* Graphics Data Latches ReadBack */
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Linux-fbdev-devel mailing list
> Linux-fbdev-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] 16bpp bugfix for CL-GD7548 Cirrus frame buffer
@ 2004-01-06 18:36 ` James Simmons
0 siblings, 0 replies; 3+ messages in thread
From: James Simmons @ 2004-01-06 18:36 UTC (permalink / raw)
To: Clifford T. Matthews
Cc: Linux Fbdev development list, Linux Kernel Mailing List
Adapted to 2.6.0 and applied. AT present I'm going threw my patch queue
to clean it out.
> I have a Micron Millennium Transport laptop with Cirrus CL-GD7548
> based video. It works fine in 16bpp using the Cirrus XFree86 4.2.0
> driver. /dev/fb works fine at 8bpp, but didn't work at 16bpp. I
> looked at the two drivers and made clgenfb.c do a few things the
> XFree86 driver was doing and now 16bpp appears to work fine on that
> laptop.
>
> I don't subscribe to linux-fbdev-devel, but do read lkml via a
> leisurely Usenet feed.
>
> --Cliff Matthews After some people managed to scale the wall,
> ctm@ardi.com there was a ban on the sale of rope and twine.
>
> diff -Naur linux-2.4.20/drivers/video/clgenfb.c linux-2.4.20-clpatch/drivers/video/clgenfb.c
> --- linux-2.4.20/drivers/video/clgenfb.c 2002-11-28 16:53:15.000000000 -0700
> +++ linux-2.4.20-clpatch/drivers/video/clgenfb.c 2002-12-07 23:34:54.000000000 -0700
> @@ -15,6 +15,9 @@
> * Lars Hecking:
> * Amiga updates and testing.
> *
> + * Cliff Matthews <ctm@ardi.com>:
> + * 16bpp fix for CL-GD7548 (uses info from XFree86 4.2.0 source)
> + *
> * Original clgenfb author: Frank Neumann
> *
> * Based on retz3fb.c and clgen.c:
> @@ -403,6 +406,9 @@
>
> #ifdef CONFIG_PCI
> struct pci_dev *pdev;
> +#define IS_7548(x) ((x)->pdev->device == PCI_DEVICE_ID_CIRRUS_7548)
> +#else
> +#define IS_7548(x) (FALSE)
> #endif
> };
>
> @@ -970,7 +976,10 @@
>
> DPRINTK ("desired pixclock: %ld kHz\n", freq);
>
> - maxclock = clgen_board_info[fb_info->btype].maxclock;
> + if (IS_7548(fb_info))
> + maxclock = 80100;
> + else
> + maxclock = clgen_board_info[fb_info->btype].maxclock;
> _par->multiplexing = 0;
>
> /* If the frequency is greater than we can support, we might be able
> @@ -1478,10 +1487,17 @@
>
> case BT_ALPINE:
> DPRINTK (" (for GD543x)\n");
> - if (_par->HorizRes >= 1024)
> - vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
> - else
> - vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
> + if (IS_7548(fb_info)) {
> + vga_wseq (fb_info->regs, CL_SEQR7,
> + (vga_rseq (fb_info->regs, CL_SEQR7) & 0xE0)
> + | 0x17);
> + WHDR (fb_info, 0xC1);
> + } else {
> + if (_par->HorizRes >= 1024)
> + vga_wseq (fb_info->regs, CL_SEQR7, 0xa7);
> + else
> + vga_wseq (fb_info->regs, CL_SEQR7, 0xa3);
> + }
> clgen_set_mclk (fb_info, _par->mclk, _par->divMCLK);
> break;
>
> @@ -1594,6 +1610,11 @@
> _par->var.bits_per_pixel);
> }
>
> + if (IS_7548(fb_info)) {
> + vga_wseq (fb_info->regs, CL_SEQR2D,
> + vga_rseq (fb_info->regs, CL_SEQR2D) | 0xC0);
> + }
> +
> vga_wcrt (fb_info->regs, VGA_CRTC_OFFSET, offset & 0xff);
> tmp = 0x22;
> if (offset & 0x100)
> diff -Naur linux-2.4.20/drivers/video/clgenfb.h linux-2.4.20-clpatch/drivers/video/clgenfb.h
> --- linux-2.4.20/drivers/video/clgenfb.h 2000-01-06 11:23:46.000000000 -0700
> +++ linux-2.4.20-clpatch/drivers/video/clgenfb.h 2002-12-07 20:50:43.000000000 -0700
> @@ -60,6 +60,7 @@
> #define CL_SEQR1D 0x1d /* VCLK2 Denominator and Post-Scalar Value */
> #define CL_SEQR1E 0x1e /* VCLK3 Denominator and Post-Scalar Value */
> #define CL_SEQR1F 0x1f /* BIOS ROM write enable and MCLK Select */
> +#define CL_SEQR2D 0x2d /* unknown, snagged from XFree86 4.2.0 */
>
> /*** CRT Controller Registers ***/
> #define CL_CRT22 0x22 /* Graphics Data Latches ReadBack */
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Linux-fbdev-devel mailing list
> Linux-fbdev-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
>
-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-01-06 18:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-08 8:12 [PATCH] 16bpp bugfix for CL-GD7548 Cirrus frame buffer Clifford T. Matthews
2004-01-06 18:36 ` [Linux-fbdev-devel] " James Simmons
2004-01-06 18:36 ` James Simmons
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.