* Re: Re: [PATCH 2/2] tdfxfb: make use of DDC information about connected monitor
@ 2009-03-25 6:36 krzysztof.h1-IjDXvh/HVVUAvxtiuMwx3w
[not found] ` <20090325063616.16A371D789D-PzGfQPfZplqOitzWlErfBcT2TbGLZofU@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: krzysztof.h1-IjDXvh/HVVUAvxtiuMwx3w @ 2009-03-25 6:36 UTC (permalink / raw)
To: Jean Delvare, Krzysztof Helt, Linux-fbdev-devel,
linux-i2c-u79uwXL29TY76Z2rM5mHXA, Andrew Morton <akp>
Jean Delvare napisa³(a):
> Hi Krzysztof,
>
> On Mon, 23 Mar 2009 19:26:46 +0100, Krzysztof Helt wrote:
> > From: Krzysztof Helt >krzysztof.h1-5tc4TXWwyLM@public.gmane.org>
> >
> > Read DDC information from a connected monitor
> > and use it to select initial mode (if the mode
> > is not specified).
> > Also, use the information to protect against
> > modes outside the monitor specs.
> >
> > Signed-off-by: Krzysztof Helt >krzysztof.h1-5tc4TXWwyLM@public.gmane.org>
> > ---
> > drivers/video/tdfxfb.c | 67
> +++++++++++++++++++++++++++++++++++++++++++++---
> > 1 files changed, 63 insertions(+), 4 deletions(-)
>
> Patch tested successfully. Without the patch:
>
> fb: 3Dfx Voodoo3 memory = 16384K
> Console: switching to colour frame buffer device 80x30
>
> With the patch:
>
> fb: 3Dfx Voodoo3 memory = 16384K
> Console: switching to colour frame buffer device 128x48
>
> Much better! :) This is on a Voodoo3. If you want me to test something
> in particular, just let me know.
>
I have tested it on Voodoo3 3000 AGP and Voodoo5 AGP with LCD panel
and CRT monitor. It is reallycool on CRT monitor - it returns
a resolution with high refresh rate and quite useful
(on my 15" CRT it is 800x600 at 85Hz).
If you can test the BT869 driver for a Voodoo3 card (mentioned
in the i2c-voodoo3 doc) it would be great.
Thank you for testing,
Krzysztof
----------------------------------------------------------------------
Opony letnie do 30% taniej i z darmow± dostaw±!
Sprawd¼ >>> http://link.interia.pl/f20b7
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 2/2] tdfxfb: make use of DDC information about connected monitor
@ 2009-03-23 18:26 Krzysztof Helt
[not found] ` <20090323192646.da98a636.krzysztof.h1-IjDXvh/HVVUAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: Krzysztof Helt @ 2009-03-23 18:26 UTC (permalink / raw)
To: Jean Delvare, Linux-fbdev-devel, linux-i2c-u79uwXL29TY76Z2rM5mHXA
Cc: Andrew Morton
From: Krzysztof Helt <krzysztof.h1-5tc4TXWwyLM@public.gmane.org>
Read DDC information from a connected monitor
and use it to select initial mode (if the mode
is not specified).
Also, use the information to protect against
modes outside the monitor specs.
Signed-off-by: Krzysztof Helt <krzysztof.h1-5tc4TXWwyLM@public.gmane.org>
---
drivers/video/tdfxfb.c | 67 +++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
index be40506..d48bcab 100644
--- a/drivers/video/tdfxfb.c
+++ b/drivers/video/tdfxfb.c
@@ -487,6 +487,12 @@ static int tdfxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
return -EINVAL;
}
+ if (info->monspecs.hfmax && info->monspecs.vfmax &&
+ info->monspecs.dclkmax && fb_validate_mode(var, info) < 0) {
+ DPRINTK("mode outside monitor's specs\n");
+ return -EINVAL;
+ }
+
var->xres = (var->xres + 15) & ~15; /* could sometimes be 8 */
lpitch = var->xres * ((var->bits_per_pixel + 7) >> 3);
@@ -1355,6 +1361,23 @@ static void tdfxfb_delete_i2c_busses(struct tdfx_par *par)
i2c_del_adapter(&par->chan[1].adapter);
par->chan[1].par = NULL;
}
+
+static int tdfxfb_probe_i2c_connector(struct tdfx_par *par,
+ struct fb_monspecs *specs)
+{
+ u8 *edid = NULL;
+
+ DPRINTK("Probe DDC Bus\n");
+ if (par->chan[0].par)
+ edid = fb_ddc_read(&par->chan[0].adapter);
+
+ if (edid) {
+ fb_edid_to_monspecs(edid, specs);
+ kfree(edid);
+ return 0;
+ }
+ return 1;
+}
#endif /* CONFIG_FB_3DFX_I2C */
/**
@@ -1372,6 +1395,8 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
struct tdfx_par *default_par;
struct fb_info *info;
int err, lpitch;
+ struct fb_monspecs *specs;
+ bool found;
err = pci_enable_device(pdev);
if (err) {
@@ -1474,15 +1499,49 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
if (hwcursor)
info->fix.smem_len = (info->fix.smem_len - 1024) &
(PAGE_MASK << 1);
+ specs = &info->monspecs;
+ found = false;
+ info->var.bits_per_pixel = 8;
#ifdef CONFIG_FB_3DFX_I2C
tdfxfb_create_i2c_busses(info);
+ err = tdfxfb_probe_i2c_connector(default_par, specs);
+
+ if (!err) {
+ if (specs->modedb == NULL)
+ DPRINTK("Unable to get Mode Database\n");
+ else {
+ const struct fb_videomode *m;
+
+ fb_videomode_to_modelist(specs->modedb,
+ specs->modedb_len,
+ &info->modelist);
+ m = fb_find_best_display(specs, &info->modelist);
+ if (m) {
+ fb_videomode_to_var(&info->var, m);
+ /* fill all other info->var's fields */
+ if (tdfxfb_check_var(&info->var, info) < 0)
+ info->var = tdfx_var;
+ else
+ found = true;
+ }
+ }
+ }
#endif
- if (!mode_option)
+ if (!mode_option && !found)
mode_option = "640x480@60";
- err = fb_find_mode(&info->var, info, mode_option, NULL, 0, NULL, 8);
- if (!err || err == 4)
- info->var = tdfx_var;
+ if (mode_option) {
+ err = fb_find_mode(&info->var, info, mode_option,
+ specs->modedb, specs->modedb_len,
+ NULL, info->var.bits_per_pixel);
+ if (!err || err == 4)
+ info->var = tdfx_var;
+ }
+
+ if (found) {
+ fb_destroy_modedb(specs->modedb);
+ specs->modedb = NULL;
+ }
/* maximize virtual vertical length */
lpitch = info->var.xres_virtual * ((info->var.bits_per_pixel + 7) >> 3);
--
1.5.2.2
----------------------------------------------------------------------
10% zysku na lokacie bankowej z gwarancja BFG. Sprawdz!
http://clk.tradedoubler.com/click?p=74281&a=1586724&g=17879004
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-03-25 19:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-25 6:36 Re: [PATCH 2/2] tdfxfb: make use of DDC information about connected monitor krzysztof.h1-IjDXvh/HVVUAvxtiuMwx3w
[not found] ` <20090325063616.16A371D789D-PzGfQPfZplqOitzWlErfBcT2TbGLZofU@public.gmane.org>
2009-03-25 8:06 ` Jean Delvare
[not found] ` <20090325090655.19fe3af2-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2009-03-25 19:25 ` Krzysztof Helt
-- strict thread matches above, loose matches on Subject: below --
2009-03-23 18:26 Krzysztof Helt
[not found] ` <20090323192646.da98a636.krzysztof.h1-IjDXvh/HVVUAvxtiuMwx3w@public.gmane.org>
2009-03-24 21:35 ` Jean Delvare
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).