aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/matrox/matroxfb_crtc2.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2009-09-22 19:47:48 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:57 -0400
commitfc2d10ddfc8989e82f74d2a38c7d6bfa45bcaba9 (patch)
treebda524a0244bb7df1e0f315b1344989564f63765 /drivers/video/matrox/matroxfb_crtc2.c
parent0728bacbba3b0267fa8ca8be69aa43d81b57ab51 (diff)
matroxfb: get rid of unneeded macros ACCESS_FBINFO and MINFO
With multihead support always enabled, these macros are no longer needed and make the code harder to read. Signed-off-by: Jean Delvare <khali@linux-fr.org> Acked-by: Petr Vandrovec <vandrove@vc.cvut.cz> Cc: Krzysztof Helt <krzysztof.h1@poczta.fm> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/matrox/matroxfb_crtc2.c')
-rw-r--r--drivers/video/matrox/matroxfb_crtc2.c130
1 files changed, 65 insertions, 65 deletions
diff --git a/drivers/video/matrox/matroxfb_crtc2.c b/drivers/video/matrox/matroxfb_crtc2.c
index ebcb5c6b496..8249959cde2 100644
--- a/drivers/video/matrox/matroxfb_crtc2.c
+++ b/drivers/video/matrox/matroxfb_crtc2.c
@@ -81,11 +81,11 @@ static void matroxfb_dh_restore(struct matroxfb_dh_fb_info* m2info,
81 } 81 }
82 tmp |= 0x00000001; /* enable CRTC2 */ 82 tmp |= 0x00000001; /* enable CRTC2 */
83 datactl = 0; 83 datactl = 0;
84 if (ACCESS_FBINFO(outputs[1]).src == MATROXFB_SRC_CRTC2) { 84 if (minfo->outputs[1].src == MATROXFB_SRC_CRTC2) {
85 if (ACCESS_FBINFO(devflags.g450dac)) { 85 if (minfo->devflags.g450dac) {
86 tmp |= 0x00000006; /* source from secondary pixel PLL */ 86 tmp |= 0x00000006; /* source from secondary pixel PLL */
87 /* no vidrst when in monitor mode */ 87 /* no vidrst when in monitor mode */
88 if (ACCESS_FBINFO(outputs[1]).mode != MATROXFB_OUTPUT_MODE_MONITOR) { 88 if (minfo->outputs[1].mode != MATROXFB_OUTPUT_MODE_MONITOR) {
89 tmp |= 0xC0001000; /* Enable H/V vidrst */ 89 tmp |= 0xC0001000; /* Enable H/V vidrst */
90 } 90 }
91 } else { 91 } else {
@@ -93,11 +93,11 @@ static void matroxfb_dh_restore(struct matroxfb_dh_fb_info* m2info,
93 tmp |= 0xC0000000; /* enable vvidrst & hvidrst */ 93 tmp |= 0xC0000000; /* enable vvidrst & hvidrst */
94 /* MGA TVO is our clock source */ 94 /* MGA TVO is our clock source */
95 } 95 }
96 } else if (ACCESS_FBINFO(outputs[0]).src == MATROXFB_SRC_CRTC2) { 96 } else if (minfo->outputs[0].src == MATROXFB_SRC_CRTC2) {
97 tmp |= 0x00000004; /* source from pixclock */ 97 tmp |= 0x00000004; /* source from pixclock */
98 /* PIXPLL is our clock source */ 98 /* PIXPLL is our clock source */
99 } 99 }
100 if (ACCESS_FBINFO(outputs[0]).src == MATROXFB_SRC_CRTC2) { 100 if (minfo->outputs[0].src == MATROXFB_SRC_CRTC2) {
101 tmp |= 0x00100000; /* connect CRTC2 to DAC */ 101 tmp |= 0x00100000; /* connect CRTC2 to DAC */
102 } 102 }
103 if (mt->interlaced) { 103 if (mt->interlaced) {
@@ -146,7 +146,7 @@ static void matroxfb_dh_restore(struct matroxfb_dh_fb_info* m2info,
146 } 146 }
147 } 147 }
148 mga_outl(0x3C10, tmp); 148 mga_outl(0x3C10, tmp);
149 ACCESS_FBINFO(hw).crtc2.ctl = tmp; 149 minfo->hw.crtc2.ctl = tmp;
150 150
151 tmp = mt->VDisplay << 16; /* line compare */ 151 tmp = mt->VDisplay << 16; /* line compare */
152 if (mt->sync & FB_SYNC_HOR_HIGH_ACT) 152 if (mt->sync & FB_SYNC_HOR_HIGH_ACT)
@@ -160,7 +160,7 @@ static void matroxfb_dh_disable(struct matroxfb_dh_fb_info* m2info) {
160 MINFO_FROM(m2info->primary_dev); 160 MINFO_FROM(m2info->primary_dev);
161 161
162 mga_outl(0x3C10, 0x00000004); /* disable CRTC2, CRTC1->DAC1, PLL as clock source */ 162 mga_outl(0x3C10, 0x00000004); /* disable CRTC2, CRTC1->DAC1, PLL as clock source */
163 ACCESS_FBINFO(hw).crtc2.ctl = 0x00000004; 163 minfo->hw.crtc2.ctl = 0x00000004;
164} 164}
165 165
166static void matroxfb_dh_pan_var(struct matroxfb_dh_fb_info* m2info, 166static void matroxfb_dh_pan_var(struct matroxfb_dh_fb_info* m2info,
@@ -262,13 +262,13 @@ static int matroxfb_dh_open(struct fb_info* info, int user) {
262#define m2info (container_of(info, struct matroxfb_dh_fb_info, fbcon)) 262#define m2info (container_of(info, struct matroxfb_dh_fb_info, fbcon))
263 MINFO_FROM(m2info->primary_dev); 263 MINFO_FROM(m2info->primary_dev);
264 264
265 if (MINFO) { 265 if (minfo) {
266 int err; 266 int err;
267 267
268 if (ACCESS_FBINFO(dead)) { 268 if (minfo->dead) {
269 return -ENXIO; 269 return -ENXIO;
270 } 270 }
271 err = ACCESS_FBINFO(fbops).fb_open(&ACCESS_FBINFO(fbcon), user); 271 err = minfo->fbops.fb_open(&minfo->fbcon, user);
272 if (err) { 272 if (err) {
273 return err; 273 return err;
274 } 274 }
@@ -282,8 +282,8 @@ static int matroxfb_dh_release(struct fb_info* info, int user) {
282 int err = 0; 282 int err = 0;
283 MINFO_FROM(m2info->primary_dev); 283 MINFO_FROM(m2info->primary_dev);
284 284
285 if (MINFO) { 285 if (minfo) {
286 err = ACCESS_FBINFO(fbops).fb_release(&ACCESS_FBINFO(fbcon), user); 286 err = minfo->fbops.fb_release(&minfo->fbcon, user);
287 } 287 }
288 return err; 288 return err;
289#undef m2info 289#undef m2info
@@ -352,18 +352,18 @@ static int matroxfb_dh_set_par(struct fb_info* info) {
352 pos = (m2info->fbcon.var.yoffset * m2info->fbcon.var.xres_virtual + m2info->fbcon.var.xoffset) * m2info->fbcon.var.bits_per_pixel >> 3; 352 pos = (m2info->fbcon.var.yoffset * m2info->fbcon.var.xres_virtual + m2info->fbcon.var.xoffset) * m2info->fbcon.var.bits_per_pixel >> 3;
353 pos += m2info->video.offbase; 353 pos += m2info->video.offbase;
354 cnt = 0; 354 cnt = 0;
355 down_read(&ACCESS_FBINFO(altout).lock); 355 down_read(&minfo->altout.lock);
356 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 356 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
357 if (ACCESS_FBINFO(outputs[out]).src == MATROXFB_SRC_CRTC2) { 357 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC2) {
358 cnt++; 358 cnt++;
359 if (ACCESS_FBINFO(outputs[out]).output->compute) { 359 if (minfo->outputs[out].output->compute) {
360 ACCESS_FBINFO(outputs[out]).output->compute(ACCESS_FBINFO(outputs[out]).data, &mt); 360 minfo->outputs[out].output->compute(minfo->outputs[out].data, &mt);
361 } 361 }
362 } 362 }
363 } 363 }
364 ACCESS_FBINFO(crtc2).pixclock = mt.pixclock; 364 minfo->crtc2.pixclock = mt.pixclock;
365 ACCESS_FBINFO(crtc2).mnp = mt.mnp; 365 minfo->crtc2.mnp = mt.mnp;
366 up_read(&ACCESS_FBINFO(altout).lock); 366 up_read(&minfo->altout.lock);
367 if (cnt) { 367 if (cnt) {
368 matroxfb_dh_restore(m2info, &mt, mode, pos); 368 matroxfb_dh_restore(m2info, &mt, mode, pos);
369 } else { 369 } else {
@@ -371,20 +371,20 @@ static int matroxfb_dh_set_par(struct fb_info* info) {
371 } 371 }
372 DAC1064_global_init(PMINFO2); 372 DAC1064_global_init(PMINFO2);
373 DAC1064_global_restore(PMINFO2); 373 DAC1064_global_restore(PMINFO2);
374 down_read(&ACCESS_FBINFO(altout).lock); 374 down_read(&minfo->altout.lock);
375 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 375 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
376 if (ACCESS_FBINFO(outputs[out]).src == MATROXFB_SRC_CRTC2 && 376 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC2 &&
377 ACCESS_FBINFO(outputs[out]).output->program) { 377 minfo->outputs[out].output->program) {
378 ACCESS_FBINFO(outputs[out]).output->program(ACCESS_FBINFO(outputs[out]).data); 378 minfo->outputs[out].output->program(minfo->outputs[out].data);
379 } 379 }
380 } 380 }
381 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 381 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
382 if (ACCESS_FBINFO(outputs[out]).src == MATROXFB_SRC_CRTC2 && 382 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC2 &&
383 ACCESS_FBINFO(outputs[out]).output->start) { 383 minfo->outputs[out].output->start) {
384 ACCESS_FBINFO(outputs[out]).output->start(ACCESS_FBINFO(outputs[out]).data); 384 minfo->outputs[out].output->start(minfo->outputs[out].data);
385 } 385 }
386 } 386 }
387 up_read(&ACCESS_FBINFO(altout).lock); 387 up_read(&minfo->altout.lock);
388 } 388 }
389 m2info->initialized = 1; 389 m2info->initialized = 1;
390 return 0; 390 return 0;
@@ -409,11 +409,11 @@ static int matroxfb_dh_get_vblank(const struct matroxfb_dh_fb_info* m2info, stru
409 /* compatibility stuff */ 409 /* compatibility stuff */
410 if (vblank->vcount >= m2info->fbcon.var.yres) 410 if (vblank->vcount >= m2info->fbcon.var.yres)
411 vblank->flags |= FB_VBLANK_VBLANKING; 411 vblank->flags |= FB_VBLANK_VBLANKING;
412 if (test_bit(0, &ACCESS_FBINFO(irq_flags))) { 412 if (test_bit(0, &minfo->irq_flags)) {
413 vblank->flags |= FB_VBLANK_HAVE_COUNT; 413 vblank->flags |= FB_VBLANK_HAVE_COUNT;
414 /* Only one writer, aligned int value... 414 /* Only one writer, aligned int value...
415 it should work without lock and without atomic_t */ 415 it should work without lock and without atomic_t */
416 vblank->count = ACCESS_FBINFO(crtc2).vsync.cnt; 416 vblank->count = minfo->crtc2.vsync.cnt;
417 } 417 }
418 return 0; 418 return 0;
419} 419}
@@ -455,7 +455,7 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
455 case MATROXFB_GET_OUTPUT_MODE: 455 case MATROXFB_GET_OUTPUT_MODE:
456 case MATROXFB_GET_ALL_OUTPUTS: 456 case MATROXFB_GET_ALL_OUTPUTS:
457 { 457 {
458 return ACCESS_FBINFO(fbcon.fbops)->fb_ioctl(&ACCESS_FBINFO(fbcon), cmd, arg); 458 return minfo->fbcon.fbops->fb_ioctl(&minfo->fbcon, cmd, arg);
459 } 459 }
460 case MATROXFB_SET_OUTPUT_CONNECTION: 460 case MATROXFB_SET_OUTPUT_CONNECTION:
461 { 461 {
@@ -469,9 +469,9 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
469 if (tmp & (1 << out)) { 469 if (tmp & (1 << out)) {
470 if (out >= MATROXFB_MAX_OUTPUTS) 470 if (out >= MATROXFB_MAX_OUTPUTS)
471 return -ENXIO; 471 return -ENXIO;
472 if (!ACCESS_FBINFO(outputs[out]).output) 472 if (!minfo->outputs[out].output)
473 return -ENXIO; 473 return -ENXIO;
474 switch (ACCESS_FBINFO(outputs[out]).src) { 474 switch (minfo->outputs[out].src) {
475 case MATROXFB_SRC_NONE: 475 case MATROXFB_SRC_NONE:
476 case MATROXFB_SRC_CRTC2: 476 case MATROXFB_SRC_CRTC2:
477 break; 477 break;
@@ -480,22 +480,22 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
480 } 480 }
481 } 481 }
482 } 482 }
483 if (ACCESS_FBINFO(devflags.panellink)) { 483 if (minfo->devflags.panellink) {
484 if (tmp & MATROXFB_OUTPUT_CONN_DFP) 484 if (tmp & MATROXFB_OUTPUT_CONN_DFP)
485 return -EINVAL; 485 return -EINVAL;
486 if ((ACCESS_FBINFO(outputs[2]).src == MATROXFB_SRC_CRTC1) && tmp) 486 if ((minfo->outputs[2].src == MATROXFB_SRC_CRTC1) && tmp)
487 return -EBUSY; 487 return -EBUSY;
488 } 488 }
489 changes = 0; 489 changes = 0;
490 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 490 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
491 if (tmp & (1 << out)) { 491 if (tmp & (1 << out)) {
492 if (ACCESS_FBINFO(outputs[out]).src != MATROXFB_SRC_CRTC2) { 492 if (minfo->outputs[out].src != MATROXFB_SRC_CRTC2) {
493 changes = 1; 493 changes = 1;
494 ACCESS_FBINFO(outputs[out]).src = MATROXFB_SRC_CRTC2; 494 minfo->outputs[out].src = MATROXFB_SRC_CRTC2;
495 } 495 }
496 } else if (ACCESS_FBINFO(outputs[out]).src == MATROXFB_SRC_CRTC2) { 496 } else if (minfo->outputs[out].src == MATROXFB_SRC_CRTC2) {
497 changes = 1; 497 changes = 1;
498 ACCESS_FBINFO(outputs[out]).src = MATROXFB_SRC_NONE; 498 minfo->outputs[out].src = MATROXFB_SRC_NONE;
499 } 499 }
500 } 500 }
501 if (!changes) 501 if (!changes)
@@ -509,7 +509,7 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
509 int out; 509 int out;
510 510
511 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 511 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
512 if (ACCESS_FBINFO(outputs[out]).src == MATROXFB_SRC_CRTC2) { 512 if (minfo->outputs[out].src == MATROXFB_SRC_CRTC2) {
513 conn |= 1 << out; 513 conn |= 1 << out;
514 } 514 }
515 } 515 }
@@ -523,8 +523,8 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
523 int out; 523 int out;
524 524
525 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) { 525 for (out = 0; out < MATROXFB_MAX_OUTPUTS; out++) {
526 if (ACCESS_FBINFO(outputs[out]).output) { 526 if (minfo->outputs[out].output) {
527 switch (ACCESS_FBINFO(outputs[out]).src) { 527 switch (minfo->outputs[out].src) {
528 case MATROXFB_SRC_NONE: 528 case MATROXFB_SRC_NONE:
529 case MATROXFB_SRC_CRTC2: 529 case MATROXFB_SRC_CRTC2:
530 tmp |= 1 << out; 530 tmp |= 1 << out;
@@ -532,9 +532,9 @@ static int matroxfb_dh_ioctl(struct fb_info *info,
532 } 532 }
533 } 533 }
534 } 534 }
535 if (ACCESS_FBINFO(devflags.panellink)) { 535 if (minfo->devflags.panellink) {
536 tmp &= ~MATROXFB_OUTPUT_CONN_DFP; 536 tmp &= ~MATROXFB_OUTPUT_CONN_DFP;
537 if (ACCESS_FBINFO(outputs[2]).src == MATROXFB_SRC_CRTC1) { 537 if (minfo->outputs[2].src == MATROXFB_SRC_CRTC1) {
538 tmp = 0; 538 tmp = 0;
539 } 539 }
540 } 540 }
@@ -611,21 +611,21 @@ static int matroxfb_dh_regit(CPMINFO struct matroxfb_dh_fb_info* m2info) {
611 if (mem < 64*1024) 611 if (mem < 64*1024)
612 mem *= 1024; 612 mem *= 1024;
613 mem &= ~0x00000FFF; /* PAGE_MASK? */ 613 mem &= ~0x00000FFF; /* PAGE_MASK? */
614 if (ACCESS_FBINFO(video.len_usable) + mem <= ACCESS_FBINFO(video.len)) 614 if (minfo->video.len_usable + mem <= minfo->video.len)
615 m2info->video.offbase = ACCESS_FBINFO(video.len) - mem; 615 m2info->video.offbase = minfo->video.len - mem;
616 else if (ACCESS_FBINFO(video.len) < mem) { 616 else if (minfo->video.len < mem) {
617 return -ENOMEM; 617 return -ENOMEM;
618 } else { /* check yres on first head... */ 618 } else { /* check yres on first head... */
619 m2info->video.borrowed = mem; 619 m2info->video.borrowed = mem;
620 ACCESS_FBINFO(video.len_usable) -= mem; 620 minfo->video.len_usable -= mem;
621 m2info->video.offbase = ACCESS_FBINFO(video.len_usable); 621 m2info->video.offbase = minfo->video.len_usable;
622 } 622 }
623 m2info->video.base = ACCESS_FBINFO(video.base) + m2info->video.offbase; 623 m2info->video.base = minfo->video.base + m2info->video.offbase;
624 m2info->video.len = m2info->video.len_usable = m2info->video.len_maximum = mem; 624 m2info->video.len = m2info->video.len_usable = m2info->video.len_maximum = mem;
625 m2info->video.vbase.vaddr = vaddr_va(ACCESS_FBINFO(video.vbase)) + m2info->video.offbase; 625 m2info->video.vbase.vaddr = vaddr_va(minfo->video.vbase) + m2info->video.offbase;
626 m2info->mmio.base = ACCESS_FBINFO(mmio.base); 626 m2info->mmio.base = minfo->mmio.base;
627 m2info->mmio.vbase = ACCESS_FBINFO(mmio.vbase); 627 m2info->mmio.vbase = minfo->mmio.vbase;
628 m2info->mmio.len = ACCESS_FBINFO(mmio.len); 628 m2info->mmio.len = minfo->mmio.len;
629 629
630 matroxfb_dh_init_fix(m2info); 630 matroxfb_dh_init_fix(m2info);
631 if (register_framebuffer(&m2info->fbcon)) { 631 if (register_framebuffer(&m2info->fbcon)) {
@@ -633,10 +633,10 @@ static int matroxfb_dh_regit(CPMINFO struct matroxfb_dh_fb_info* m2info) {
633 } 633 }
634 if (!m2info->initialized) 634 if (!m2info->initialized)
635 fb_set_var(&m2info->fbcon, &matroxfb_dh_defined); 635 fb_set_var(&m2info->fbcon, &matroxfb_dh_defined);
636 down_write(&ACCESS_FBINFO(crtc2.lock)); 636 down_write(&minfo->crtc2.lock);
637 oldcrtc2 = ACCESS_FBINFO(crtc2.info); 637 oldcrtc2 = minfo->crtc2.info;
638 ACCESS_FBINFO(crtc2.info) = m2info; 638 minfo->crtc2.info = m2info;
639 up_write(&ACCESS_FBINFO(crtc2.lock)); 639 up_write(&minfo->crtc2.lock);
640 if (oldcrtc2) { 640 if (oldcrtc2) {
641 printk(KERN_ERR "matroxfb_crtc2: Internal consistency check failed: crtc2 already present: %p\n", 641 printk(KERN_ERR "matroxfb_crtc2: Internal consistency check failed: crtc2 already present: %p\n",
642 oldcrtc2); 642 oldcrtc2);
@@ -654,7 +654,7 @@ static int matroxfb_dh_registerfb(struct matroxfb_dh_fb_info* m2info) {
654 return -1; 654 return -1;
655 } 655 }
656 printk(KERN_INFO "matroxfb_crtc2: secondary head of fb%u was registered as fb%u\n", 656 printk(KERN_INFO "matroxfb_crtc2: secondary head of fb%u was registered as fb%u\n",
657 ACCESS_FBINFO(fbcon.node), m2info->fbcon.node); 657 minfo->fbcon.node, m2info->fbcon.node);
658 m2info->fbcon_registered = 1; 658 m2info->fbcon_registered = 1;
659 return 0; 659 return 0;
660#undef minfo 660#undef minfo
@@ -666,11 +666,11 @@ static void matroxfb_dh_deregisterfb(struct matroxfb_dh_fb_info* m2info) {
666 int id; 666 int id;
667 struct matroxfb_dh_fb_info* crtc2; 667 struct matroxfb_dh_fb_info* crtc2;
668 668
669 down_write(&ACCESS_FBINFO(crtc2.lock)); 669 down_write(&minfo->crtc2.lock);
670 crtc2 = ACCESS_FBINFO(crtc2.info); 670 crtc2 = minfo->crtc2.info;
671 if (crtc2 == m2info) 671 if (crtc2 == m2info)
672 ACCESS_FBINFO(crtc2.info) = NULL; 672 minfo->crtc2.info = NULL;
673 up_write(&ACCESS_FBINFO(crtc2.lock)); 673 up_write(&minfo->crtc2.lock);
674 if (crtc2 != m2info) { 674 if (crtc2 != m2info) {
675 printk(KERN_ERR "matroxfb_crtc2: Internal consistency check failed: crtc2 mismatch at unload: %p != %p\n", 675 printk(KERN_ERR "matroxfb_crtc2: Internal consistency check failed: crtc2 mismatch at unload: %p != %p\n",
676 crtc2, m2info); 676 crtc2, m2info);
@@ -680,7 +680,7 @@ static void matroxfb_dh_deregisterfb(struct matroxfb_dh_fb_info* m2info) {
680 id = m2info->fbcon.node; 680 id = m2info->fbcon.node;
681 unregister_framebuffer(&m2info->fbcon); 681 unregister_framebuffer(&m2info->fbcon);
682 /* return memory back to primary head */ 682 /* return memory back to primary head */
683 ACCESS_FBINFO(video.len_usable) += m2info->video.borrowed; 683 minfo->video.len_usable += m2info->video.borrowed;
684 printk(KERN_INFO "matroxfb_crtc2: fb%u unregistered\n", id); 684 printk(KERN_INFO "matroxfb_crtc2: fb%u unregistered\n", id);
685 m2info->fbcon_registered = 0; 685 m2info->fbcon_registered = 0;
686 } 686 }
@@ -691,14 +691,14 @@ static void* matroxfb_crtc2_probe(struct matrox_fb_info* minfo) {
691 struct matroxfb_dh_fb_info* m2info; 691 struct matroxfb_dh_fb_info* m2info;
692 692
693 /* hardware is CRTC2 incapable... */ 693 /* hardware is CRTC2 incapable... */
694 if (!ACCESS_FBINFO(devflags.crtc2)) 694 if (!minfo->devflags.crtc2)
695 return NULL; 695 return NULL;
696 m2info = kzalloc(sizeof(*m2info), GFP_KERNEL); 696 m2info = kzalloc(sizeof(*m2info), GFP_KERNEL);
697 if (!m2info) { 697 if (!m2info) {
698 printk(KERN_ERR "matroxfb_crtc2: Not enough memory for CRTC2 control structs\n"); 698 printk(KERN_ERR "matroxfb_crtc2: Not enough memory for CRTC2 control structs\n");
699 return NULL; 699 return NULL;
700 } 700 }
701 m2info->primary_dev = MINFO; 701 m2info->primary_dev = minfo;
702 if (matroxfb_dh_registerfb(m2info)) { 702 if (matroxfb_dh_registerfb(m2info)) {
703 kfree(m2info); 703 kfree(m2info);
704 printk(KERN_ERR "matroxfb_crtc2: CRTC2 framebuffer failed to register\n"); 704 printk(KERN_ERR "matroxfb_crtc2: CRTC2 framebuffer failed to register\n");