[<prev] [next>] [day] [month] [year] [list]
Message-Id: <60F6BCE2-4810-4F6D-92EF-482790BF0199@ubuntu.com>
Date: Thu, 16 Feb 2012 17:00:54 -0500
From: Ben Collins <bcollins@...ntu.com>
To: linux-kernel@...r.kernel.org
Cc: libdlo <libdlo@...ts.freedesktop.org>,
Bernie Thompson <bernie@...gable.com>
Subject: UDLFB: Add module_param to allow forcing pixel_limit
Some devices may have bad vendor descriptors. This allows the user to set
a pixel limit that matches their specific device. The default was the
maximum (DL-195) which allowed bad modes to be set for lower level
devices (DL-115, etc).
Optionally, I considered setting the default pixel_limit to 700000
(DL-115), but figured this was OK instead.
Signed-off-by: Ben Collins <bcollins@...ntu.com>
diff --git a/drivers/video/udlfb.c b/drivers/video/udlfb.c
index 0319593..debb029 100644
--- a/drivers/video/udlfb.c
+++ b/drivers/video/udlfb.c
@@ -72,6 +72,7 @@ MODULE_DEVICE_TABLE(usb, id_table);
static bool console = 1; /* Allow fbcon to open framebuffer */
static bool fb_defio = 1; /* Detect mmap writes using page faults */
static bool shadow = 1; /* Optionally disable shadow framebuffer */
+static int pixel_limit; /* Optionally force a pixel limit (for bad vendor descriptors) */
/* dlfb keeps a list of urbs for efficient bulk transfers */
static void dlfb_urb_completion(struct urb *urb);
@@ -1546,9 +1547,15 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dev,
case 0x0200: { /* max_area */
u32 max_area;
max_area = le32_to_cpu(*((u32 *)desc));
- pr_warn("DL chip limited to %d pixel modes\n",
- max_area);
- dev->sku_pixel_limit = max_area;
+ if (!pixel_limit) {
+ pr_warn("DL chip limited to %d pixel"
+ " modes\n", max_area);
+ dev->sku_pixel_limit = max_area;
+ } else {
+ pr_warn("DL chip limit of %d overriden"
+ " by module param to %d\n",
+ max_area, pixel_limit);
+ }
break;
}
default:
@@ -1605,8 +1612,12 @@ static int dlfb_usb_probe(struct usb_interface *interface,
pr_info("console enable=%d\n", console);
pr_info("fb_defio enable=%d\n", fb_defio);
pr_info("shadow enable=%d\n", shadow);
+ pr_info("pixel_limit=%d\n", pixel_limit);
- dev->sku_pixel_limit = 2048 * 1152; /* default to maximum */
+ if (pixel_limit)
+ dev->sku_pixel_limit = pixel_limit;
+ else
+ dev->sku_pixel_limit = 2048 * 1152; /* default to maximum */
if (!dlfb_parse_vendor_descriptor(dev, interface)) {
pr_err("firmware not recognized. Assume incompatible device\n");
@@ -1948,6 +1959,9 @@ MODULE_PARM_DESC(fb_defio, "Page fault detection of mmap writes");
module_param(shadow, bool, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP);
MODULE_PARM_DESC(shadow, "Shadow vid mem. Disable to save mem but lose perf");
+module_param(pixel_limit, int, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP);
+MODULE_PARM_DESC(pixel_limit, "Pixel limit (700000 minimum for DL-115, 2360000 maximum for DL-195)");
+
MODULE_AUTHOR("Roberto De Ioris <roberto@...it.it>, "
"Jaya Kumar <jayakumar.lkml@...il.com>, "
"Bernie Thompson <bernie@...gable.com>");
--
Bluecherry: http://www.bluecherrydvr.com/
SwissDisk : http://www.swissdisk.com/
Ubuntu : http://www.ubuntu.com/
My Blog : http://ben-collins.blogspot.com/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists