Skip to content

Commit

Permalink
matroxfb: make CONFIG_FB_MATROX_MULTIHEAD=y mandatory
Browse files Browse the repository at this point in the history
I would like to get rid of option CONFIG_FB_MATROX_MULTIHEAD and just
always enable it.  There are many reasons for doing this:

* CONFIG_FB_MATROX_MULTIHEAD=y is what all x86 distributions do, so it
  definitely works or we would know by now.

* Building the matroxfb driver with CONFIG_FB_MATROX_MULTIHEAD not set
  results in the following build warning:

drivers/video/matrox/matroxfb_crtc2.c: In function 'matroxfb_dh_open':
drivers/video/matrox/matroxfb_crtc2.c:265: warning: the address of 'matroxfb_global_mxinfo' will always evaluate as 'true'
drivers/video/matrox/matroxfb_crtc2.c: In function 'matroxfb_dh_release':
drivers/video/matrox/matroxfb_crtc2.c:285: warning: the address of 'matroxfb_global_mxinfo' will always evaluate as 'true'

This is nothing to be worried about, the driver will work fine, but build
warnings are still annoying.

* The trick to get multihead support without CONFIG_FB_MATROX_MULTIHEAD,
  which is described in the config help text, no longer works: you can't
  load the same kernel module more than once.

* I fail to see how CONFIG_FB_MATROX_MULTIHEAD=y would make the code
  significantly slower, contrary to what the help text says.  A few extra
  parameters on the stack here and there can't really slow things down in
  comaprison to the rest of the code, and register access.

* The driver built without CONFIG_FB_MATROX_MULTIHEAD is larger than the
  driver build with CONFIG_FB_MATROX_MULTIHEAD=y by 8%.

* One less configuration option makes things simpler.  We add options
  all the time, being able to remove one for once is nice.  It improves
  testing coverage.  And I don't think the Matrox adapters are still
  popular enough to warrant overdetailed configuration settings.

* We should be able to unobfuscate the driver code quite a bit after
  this change (patches follow.)

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>
  • Loading branch information
Jean Delvare authored and torvalds committed Sep 23, 2009
1 parent 0fcf6ad commit 0728bac
Show file tree
Hide file tree
Showing 5 changed files with 1 addition and 70 deletions.
4 changes: 1 addition & 3 deletions Documentation/fb/matroxfb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,7 @@ noinverse - show true colors on screen. It is default.
dev:X - bind driver to device X. Driver numbers device from 0 up to N,
where device 0 is first `known' device found, 1 second and so on.
lspci lists devices in this order.
Default is `every' known device for driver with multihead support
and first working device (usually dev:0) for driver without
multihead support.
Default is `every' known device.
nohwcursor - disables hardware cursor (use software cursor instead).
hwcursor - enables hardware cursor. It is default. If you are using
non-accelerated mode (`noaccel' or `fbset -accel false'), software
Expand Down
20 changes: 0 additions & 20 deletions drivers/video/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1275,26 +1275,6 @@ config FB_MATROX_MAVEN
painting procedures (the secondary head does not use acceleration
engine).

config FB_MATROX_MULTIHEAD
bool "Multihead support"
depends on FB_MATROX
---help---
Say Y here if you have more than one (supported) Matrox device in
your computer and you want to use all of them for different monitors
("multihead"). If you have only one device, you should say N because
the driver compiled with Y is larger and a bit slower, especially on
ia32 (ix86).

If you said M to "Matrox unified accelerated driver" and N here, you
will still be able to use several Matrox devices simultaneously:
insert several instances of the module matroxfb into the kernel
with insmod, supplying the parameter "dev=N" where N is 0, 1, etc.
for the different Matrox devices. This method is slightly faster but
uses 40 KB of kernel memory per Matrox card.

There is no need for enabling 'Matrox multihead support' if you have
only one Matrox card in the box.

config FB_RADEON
tristate "ATI Radeon display support"
depends on FB && PCI
Expand Down
23 changes: 0 additions & 23 deletions drivers/video/matrox/matroxfb_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,7 @@ static void matroxfb_remove(WPMINFO int dummy) {
mga_iounmap(ACCESS_FBINFO(video.vbase));
release_mem_region(ACCESS_FBINFO(video.base), ACCESS_FBINFO(video.len_maximum));
release_mem_region(ACCESS_FBINFO(mmio.base), 16384);
#ifdef CONFIG_FB_MATROX_MULTIHEAD
kfree(minfo);
#endif
}

/*
Expand Down Expand Up @@ -644,9 +642,7 @@ static int matroxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
unsigned blue, unsigned transp,
struct fb_info *fb_info)
{
#ifdef CONFIG_FB_MATROX_MULTIHEAD
struct matrox_fb_info* minfo = container_of(fb_info, struct matrox_fb_info, fbcon);
#endif

DBG(__func__)

Expand Down Expand Up @@ -2011,9 +2007,6 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm
struct matrox_fb_info* minfo;
int err;
u_int32_t cmd;
#ifndef CONFIG_FB_MATROX_MULTIHEAD
static int registered = 0;
#endif
DBG(__func__)

svid = pdev->subsystem_vendor;
Expand All @@ -2037,15 +2030,9 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm
return -1;
}

#ifdef CONFIG_FB_MATROX_MULTIHEAD
minfo = kmalloc(sizeof(*minfo), GFP_KERNEL);
if (!minfo)
return -1;
#else
if (registered) /* singlehead driver... */
return -1;
minfo = &matroxfb_global_mxinfo;
#endif
memset(MINFO, 0, sizeof(*MINFO));

ACCESS_FBINFO(pcidev) = pdev;
Expand Down Expand Up @@ -2090,15 +2077,10 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm

err = initMatrox2(PMINFO b);
if (!err) {
#ifndef CONFIG_FB_MATROX_MULTIHEAD
registered = 1;
#endif
matroxfb_register_device(MINFO);
return 0;
}
#ifdef CONFIG_FB_MATROX_MULTIHEAD
kfree(minfo);
#endif
return -1;
}

Expand Down Expand Up @@ -2510,13 +2492,8 @@ module_param(inv24, int, 0);
MODULE_PARM_DESC(inv24, "Inverts clock polarity for 24bpp and loop frequency > 100MHz (default=do not invert polarity)");
module_param(inverse, int, 0);
MODULE_PARM_DESC(inverse, "Inverse (0 or 1) (default=0)");
#ifdef CONFIG_FB_MATROX_MULTIHEAD
module_param(dev, int, 0);
MODULE_PARM_DESC(dev, "Multihead support, attach to device ID (0..N) (default=all working)");
#else
module_param(dev, int, 0);
MODULE_PARM_DESC(dev, "Multihead support, attach to device ID (0..N) (default=first working)");
#endif
module_param(vesa, int, 0);
MODULE_PARM_DESC(vesa, "Startup videomode (0x000-0x1FF) (default=0x101)");
module_param(xres, int, 0);
Expand Down
20 changes: 0 additions & 20 deletions drivers/video/matrox/matroxfb_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,6 @@ struct matrox_fb_info {

#define info2minfo(info) container_of(info, struct matrox_fb_info, fbcon)

#ifdef CONFIG_FB_MATROX_MULTIHEAD
#define ACCESS_FBINFO2(info, x) (info->x)
#define ACCESS_FBINFO(x) ACCESS_FBINFO2(minfo,x)

Expand All @@ -538,25 +537,6 @@ struct matrox_fb_info {
#define PMINFO PMINFO2 ,

#define MINFO_FROM(x) struct matrox_fb_info* minfo = x
#else

extern struct matrox_fb_info matroxfb_global_mxinfo;

#define ACCESS_FBINFO(x) (matroxfb_global_mxinfo.x)
#define ACCESS_FBINFO2(info, x) (matroxfb_global_mxinfo.x)

#define MINFO (&matroxfb_global_mxinfo)

#define WPMINFO2 void
#define WPMINFO
#define CPMINFO2 void
#define CPMINFO
#define PMINFO2
#define PMINFO

#define MINFO_FROM(x)

#endif

#define MINFO_FROM_INFO(x) MINFO_FROM(info2minfo(x))

Expand Down
4 changes: 0 additions & 4 deletions drivers/video/matrox/matroxfb_misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -784,10 +784,6 @@ EXPORT_SYMBOL(matroxfb_DAC_in);
EXPORT_SYMBOL(matroxfb_DAC_out);
EXPORT_SYMBOL(matroxfb_var2my);
EXPORT_SYMBOL(matroxfb_PLL_calcclock);
#ifndef CONFIG_FB_MATROX_MULTIHEAD
struct matrox_fb_info matroxfb_global_mxinfo;
EXPORT_SYMBOL(matroxfb_global_mxinfo);
#endif
EXPORT_SYMBOL(matroxfb_vgaHWinit); /* DAC1064, Ti3026 */
EXPORT_SYMBOL(matroxfb_vgaHWrestore); /* DAC1064, Ti3026 */
EXPORT_SYMBOL(matroxfb_read_pins);
Expand Down

0 comments on commit 0728bac

Please sign in to comment.