diff options
author | Manuel Lauss <mano@roarinelk.homelinux.net> | 2006-02-01 06:06:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-01 11:53:27 -0500 |
commit | 00d340b94f6df17d5dc478521e4ee1cfb30c53ac (patch) | |
tree | f4949002dc468931efdc01bd70492251a8524d32 | |
parent | 06c6f90032e39d33d02ab20f32e3f3cd87f58d28 (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.c | 6 | ||||
-rw-r--r-- | drivers/video/i810/i810.h | 1 | ||||
-rw-r--r-- | drivers/video/i810/i810_main.c | 13 |
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; | |||
149 | static int sync __devinitdata; | 149 | static int sync __devinitdata; |
150 | static int extvga __devinitdata; | 150 | static int extvga __devinitdata; |
151 | static int dcolor __devinitdata; | 151 | static int dcolor __devinitdata; |
152 | static 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" | |||
2190 | module_param(dcolor, bool, 0); | 2195 | module_param(dcolor, bool, 0); |
2191 | MODULE_PARM_DESC(dcolor, "use DirectColor visuals" | 2196 | MODULE_PARM_DESC(dcolor, "use DirectColor visuals" |
2192 | " (default = 0 = TrueColor)"); | 2197 | " (default = 0 = TrueColor)"); |
2198 | module_param(ddc3, bool, 0); | ||
2199 | MODULE_PARM_DESC(ddc3, "Probe DDC bus 3 (default = 0 = no)"); | ||
2193 | module_param(mode_option, charp, 0); | 2200 | module_param(mode_option, charp, 0); |
2194 | MODULE_PARM_DESC(mode_option, "Specify initial video mode"); | 2201 | MODULE_PARM_DESC(mode_option, "Specify initial video mode"); |
2195 | 2202 | ||