aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Lauss <mano@roarinelk.homelinux.net>2006-02-01 06:06:54 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-01 11:53:27 -0500
commit00d340b94f6df17d5dc478521e4ee1cfb30c53ac (patch)
treef4949002dc468931efdc01bd70492251a8524d32
parent06c6f90032e39d33d02ab20f32e3f3cd87f58d28 (diff)
[PATCH] i810fb: Do not probe the third i2c bus by default
Some time before 2.6.15, a third DDC channel was added to i810fb. On systems where these ddc pins are not connected, the probe takes about 10 seconds. Add a boot/module option for i810fb to explicitly probe for the 3rd ddc bus if needed. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/video/i810/i810-i2c.c6
-rw-r--r--drivers/video/i810/i810.h1
-rw-r--r--drivers/video/i810/i810_main.c13
3 files changed, 14 insertions, 6 deletions
diff --git a/drivers/video/i810/i810-i2c.c b/drivers/video/i810/i810-i2c.c
index bd410e06db73..e3c8b5f1ca76 100644
--- a/drivers/video/i810/i810-i2c.c
+++ b/drivers/video/i810/i810-i2c.c
@@ -191,11 +191,11 @@ int i810_probe_i2c_connector(struct fb_info *info, u8 **out_edid, int conn)
191 u8 *edid = NULL; 191 u8 *edid = NULL;
192 int i; 192 int i;
193 193
194 DPRINTK("i810-i2c: Probe DDC%i Bus\n", conn); 194 DPRINTK("i810-i2c: Probe DDC%i Bus\n", conn+1);
195 if (conn < 4) { 195 if (conn < par->ddc_num) {
196 for (i = 0; i < 3; i++) { 196 for (i = 0; i < 3; i++) {
197 /* Do the real work */ 197 /* Do the real work */
198 edid = i810_do_probe_i2c_edid(&par->chan[conn-1]); 198 edid = i810_do_probe_i2c_edid(&par->chan[conn]);
199 if (edid) 199 if (edid)
200 break; 200 break;
201 } 201 }
diff --git a/drivers/video/i810/i810.h b/drivers/video/i810/i810.h
index 6c187d5fe951..579195c2bea3 100644
--- a/drivers/video/i810/i810.h
+++ b/drivers/video/i810/i810.h
@@ -280,6 +280,7 @@ struct i810fb_par {
280 u32 blit_bpp; 280 u32 blit_bpp;
281 u32 ovract; 281 u32 ovract;
282 u32 cur_state; 282 u32 cur_state;
283 u32 ddc_num;
283 int mtrr_reg; 284 int mtrr_reg;
284 u16 bltcntl; 285 u16 bltcntl;
285 u8 interlace; 286 u8 interlace;
diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c
index 266d0ab92663..d8467c03b49f 100644
--- a/drivers/video/i810/i810_main.c
+++ b/drivers/video/i810/i810_main.c
@@ -149,6 +149,7 @@ static int vyres __devinitdata;
149static int sync __devinitdata; 149static int sync __devinitdata;
150static int extvga __devinitdata; 150static int extvga __devinitdata;
151static int dcolor __devinitdata; 151static int dcolor __devinitdata;
152static int ddc3 __devinitdata = 2;
152 153
153/*------------------------------------------------------------*/ 154/*------------------------------------------------------------*/
154 155
@@ -1763,6 +1764,8 @@ static void __devinit i810_init_defaults(struct i810fb_par *par,
1763 if (sync) 1764 if (sync)
1764 par->dev_flags |= ALWAYS_SYNC; 1765 par->dev_flags |= ALWAYS_SYNC;
1765 1766
1767 par->ddc_num = ddc3;
1768
1766 if (bpp < 8) 1769 if (bpp < 8)
1767 bpp = 8; 1770 bpp = 8;
1768 1771
@@ -1885,7 +1888,7 @@ static void __devinit i810fb_find_init_mode(struct fb_info *info)
1885 int found = 0; 1888 int found = 0;
1886#ifdef CONFIG_FB_I810_I2C 1889#ifdef CONFIG_FB_I810_I2C
1887 int i; 1890 int i;
1888 int err; 1891 int err = 1;
1889 struct i810fb_par *par = info->par; 1892 struct i810fb_par *par = info->par;
1890#endif 1893#endif
1891 1894
@@ -1895,8 +1898,8 @@ static void __devinit i810fb_find_init_mode(struct fb_info *info)
1895#ifdef CONFIG_FB_I810_I2C 1898#ifdef CONFIG_FB_I810_I2C
1896 i810_create_i2c_busses(par); 1899 i810_create_i2c_busses(par);
1897 1900
1898 for (i = 0; i < 4; i++) { 1901 for (i = 0; i < par->ddc_num + 1; i++) {
1899 err = i810_probe_i2c_connector(info, &par->edid, i+1); 1902 err = i810_probe_i2c_connector(info, &par->edid, i);
1900 if (!err) 1903 if (!err)
1901 break; 1904 break;
1902 } 1905 }
@@ -1983,6 +1986,8 @@ static int __devinit i810fb_setup(char *options)
1983 vsync2 = simple_strtoul(this_opt+7, NULL, 0); 1986 vsync2 = simple_strtoul(this_opt+7, NULL, 0);
1984 else if (!strncmp(this_opt, "dcolor", 6)) 1987 else if (!strncmp(this_opt, "dcolor", 6))
1985 dcolor = 1; 1988 dcolor = 1;
1989 else if (!strncmp(this_opt, "ddc3", 4))
1990 ddc3 = 3;
1986 else 1991 else
1987 mode_option = this_opt; 1992 mode_option = this_opt;
1988 } 1993 }
@@ -2190,6 +2195,8 @@ MODULE_PARM_DESC(sync, "wait for accel engine to finish drawing"
2190module_param(dcolor, bool, 0); 2195module_param(dcolor, bool, 0);
2191MODULE_PARM_DESC(dcolor, "use DirectColor visuals" 2196MODULE_PARM_DESC(dcolor, "use DirectColor visuals"
2192 " (default = 0 = TrueColor)"); 2197 " (default = 0 = TrueColor)");
2198module_param(ddc3, bool, 0);
2199MODULE_PARM_DESC(ddc3, "Probe DDC bus 3 (default = 0 = no)");
2193module_param(mode_option, charp, 0); 2200module_param(mode_option, charp, 0);
2194MODULE_PARM_DESC(mode_option, "Specify initial video mode"); 2201MODULE_PARM_DESC(mode_option, "Specify initial video mode");
2195 2202