[PATCH] savagefb: Use generic DDC reading
authorAntonino A. Daplas <adaplas@gmail.com>
Tue, 3 Oct 2006 08:14:45 +0000 (01:14 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 3 Oct 2006 15:04:10 +0000 (08:04 -0700)
Update driver to use generic DDC reading

[khali@linux-fr.org: fix oops in i2c handling]
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Jurriaan <thunder7@xs4all.nl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/video/Kconfig
drivers/video/savage/savagefb-i2c.c

index 9091100..0e371e0 100644 (file)
@@ -1148,6 +1148,7 @@ config FB_SAVAGE
        depends on FB && PCI && EXPERIMENTAL
        select I2C_ALGOBIT if FB_SAVAGE_I2C
        select I2C if FB_SAVAGE_I2C
+       select FB_DDC if FB_SAVAGE_I2C
        select FB_MODE_HELPERS
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
index d7d810d..3f94223 100644 (file)
@@ -213,52 +213,15 @@ void savagefb_delete_i2c_busses(struct fb_info *info)
        par->chan.par = NULL;
 }
 
-static u8 *savage_do_probe_i2c_edid(struct savagefb_i2c_chan *chan)
-{
-       u8 start = 0x0;
-       struct i2c_msg msgs[] = {
-               {
-                       .addr   = SAVAGE_DDC,
-                       .len    = 1,
-                       .buf    = &start,
-               }, {
-                       .addr   = SAVAGE_DDC,
-                       .flags  = I2C_M_RD,
-                       .len    = EDID_LENGTH,
-               },
-       };
-       u8 *buf = NULL;
-
-       if (chan->par) {
-               buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
-
-               if (buf) {
-                       msgs[1].buf = buf;
-
-                       if (i2c_transfer(&chan->adapter, msgs, 2) != 2) {
-                               dev_dbg(&chan->par->pcidev->dev,
-                                       "Unable to read EDID block.\n");
-                               kfree(buf);
-                               buf = NULL;
-                       }
-               }
-       }
-
-       return buf;
-}
-
 int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid)
 {
        struct savagefb_par *par = info->par;
-       u8 *edid = NULL;
-       int i;
-
-       for (i = 0; i < 3; i++) {
-               /* Do the real work */
-               edid = savage_do_probe_i2c_edid(&par->chan);
-               if (edid)
-                       break;
-       }
+       u8 *edid;
+
+       if (par->chan.par)
+               edid = fb_ddc_read(&par->chan.adapter);
+       else
+               edid = NULL;
 
        if (!edid) {
                /* try to get from firmware */