diff --git a/drivers/video/udlfb.c b/drivers/video/udlfb.c
index 530f159..74a679ef 100644
--- a/drivers/video/udlfb.c
+++ b/drivers/video/udlfb.c
@@ -16,6 +16,8 @@
  * from Florian Echtler, Henrik Bjerregaard Pedersen, and others.
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -291,7 +293,7 @@
 
 	pos = (unsigned long)info->fix.smem_start + offset;
 
-	dl_notice("mmap() framebuffer addr:%lu size:%lu\n",
+	pr_notice("mmap() framebuffer addr:%lu size:%lu\n",
 		  pos, size);
 
 	while (size > 0) {
@@ -732,7 +734,7 @@
 				    (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
 				    HZ);
 		if (ret < 1) {
-			dl_err("Read EDID byte %d failed err %x\n", i, ret);
+			pr_err("Read EDID byte %d failed err %x\n", i, ret);
 			i--;
 			break;
 		}
@@ -864,7 +866,7 @@
 		fb_deferred_io_init(info);
 	}
 
-	dl_notice("open /dev/fb%d user=%d fb_info=%p count=%d\n",
+	pr_notice("open /dev/fb%d user=%d fb_info=%p count=%d\n",
 	    info->node, user, info, dev->fb_count);
 
 	return 0;
@@ -888,7 +890,7 @@
 
 	kfree(dev->edid);
 
-	dl_warn("freeing dlfb_data %p\n", dev);
+	pr_warn("freeing dlfb_data %p\n", dev);
 
 	kfree(dev);
 }
@@ -924,7 +926,7 @@
 	/* Assume info structure is freed after this point */
 	framebuffer_release(info);
 
-	dl_warn("fb_info for /dev/fb%d has been freed\n", node);
+	pr_warn("fb_info for /dev/fb%d has been freed\n", node);
 
 	/* ref taken in probe() as part of registering framebfufer */
 	kref_put(&dev->kref, dlfb_free);
@@ -950,7 +952,7 @@
 		info->fbops->fb_mmap = dlfb_ops_mmap;
 	}
 
-	dl_warn("released /dev/fb%d user=%d count=%d\n",
+	pr_warn("released /dev/fb%d user=%d count=%d\n",
 		  info->node, user, dev->fb_count);
 
 	kref_put(&dev->kref, dlfb_free);
@@ -968,12 +970,12 @@
 	struct dlfb_data *dev = info->par;
 
 	if (mode->xres * mode->yres > dev->sku_pixel_limit) {
-		dl_warn("%dx%d beyond chip capabilities\n",
+		pr_warn("%dx%d beyond chip capabilities\n",
 		       mode->xres, mode->yres);
 		return 0;
 	}
 
-	dl_info("%dx%d valid mode\n", mode->xres, mode->yres);
+	pr_info("%dx%d valid mode\n", mode->xres, mode->yres);
 
 	return 1;
 }
@@ -1017,7 +1019,7 @@
 	u16 *pix_framebuffer;
 	int i;
 
-	dl_notice("set_par mode %dx%d\n", info->var.xres, info->var.yres);
+	pr_notice("set_par mode %dx%d\n", info->var.xres, info->var.yres);
 
 	result = dlfb_set_video_mode(dev, &info->var);
 
@@ -1096,7 +1098,7 @@
 	unsigned char *new_fb;
 	unsigned char *new_back;
 
-	dl_warn("Reallocating framebuffer. Addresses will change!\n");
+	pr_warn("Reallocating framebuffer. Addresses will change!\n");
 
 	new_len = info->fix.line_length * info->var.yres;
 
@@ -1106,7 +1108,7 @@
 		 */
 		new_fb = vmalloc(new_len);
 		if (!new_fb) {
-			dl_err("Virtual framebuffer alloc failed\n");
+			pr_err("Virtual framebuffer alloc failed\n");
 			goto error;
 		}
 
@@ -1128,7 +1130,7 @@
 		 */
 		new_back = vmalloc(new_len);
 		if (!new_back)
-			dl_info("No shadow/backing buffer allcoated\n");
+			pr_info("No shadow/backing buffer allcoated\n");
 		else {
 			if (dev->backing_buffer)
 				vfree(dev->backing_buffer);
@@ -1201,12 +1203,12 @@
 	/* If that fails, use a previously returned EDID if available */
 	if (info->monspecs.modedb_len == 0) {
 
-		dl_err("Unable to get valid EDID from device/display\n");
+		pr_err("Unable to get valid EDID from device/display\n");
 
 		if (dev->edid) {
 			fb_edid_to_monspecs(dev->edid, &info->monspecs);
 			if (info->monspecs.modedb_len > 0)
-				dl_err("Using previously queried EDID\n");
+				pr_err("Using previously queried EDID\n");
 		}
 	}
 
@@ -1218,7 +1220,7 @@
 				memcpy(edid, default_edid, default_edid_size);
 				dev->edid = edid;
 				dev->edid_size = default_edid_size;
-				dl_err("Using default/backup EDID\n");
+				pr_err("Using default/backup EDID\n");
 			}
 		}
 	}
@@ -1344,7 +1346,7 @@
 	if (off + count > dev->edid_size)
 		count = dev->edid_size - off;
 
-	dl_info("sysfs edid copy %p to %p, %d bytes\n",
+	pr_info("sysfs edid copy %p to %p, %d bytes\n",
 		dev->edid, buf, (int) count);
 
 	memcpy(buf, dev->edid, count);
@@ -1367,7 +1369,7 @@
 	dlfb_setup_modes(dev, fb_info, src, src_size);
 
 	if (dev->edid && (memcmp(src, dev->edid, src_size) == 0)) {
-		dl_info("sysfs written EDID is new default\n");
+		pr_info("sysfs written EDID is new default\n");
 		dlfb_ops_set_par(fb_info);
 		return src_size;
 	} else
@@ -1440,7 +1442,7 @@
 	total_len = usb_get_descriptor(usbdev, 0x5f, /* vendor specific */
 				    0, desc, MAX_VENDOR_DESCRIPTOR_SIZE);
 	if (total_len > 5) {
-		dl_info("vendor descriptor length:%x data:%02x %02x %02x %02x" \
+		pr_info("vendor descriptor length:%x data:%02x %02x %02x %02x" \
 			"%02x %02x %02x %02x %02x %02x %02x\n",
 			total_len, desc[0],
 			desc[1], desc[2], desc[3], desc[4], desc[5], desc[6],
@@ -1469,7 +1471,7 @@
 			case 0x0200: { /* max_area */
 				u32 max_area;
 				max_area = le32_to_cpu(*((u32 *)desc));
-				dl_warn("DL chip limited to %d pixel modes\n",
+				pr_warn("DL chip limited to %d pixel modes\n",
 					max_area);
 				dev->sku_pixel_limit = max_area;
 				break;
@@ -1485,7 +1487,7 @@
 
 unrecognized:
 	/* allow udlfb to load for now even if firmware unrecognized */
-	dl_err("Unrecognized vendor firmware descriptor\n");
+	pr_err("Unrecognized vendor firmware descriptor\n");
 
 success:
 	kfree(buf);
@@ -1518,24 +1520,24 @@
 	dev->gdev = &usbdev->dev; /* our generic struct device * */
 	usb_set_intfdata(interface, dev);
 
-	dl_info("%s %s - serial #%s\n",
+	pr_info("%s %s - serial #%s\n",
 		usbdev->manufacturer, usbdev->product, usbdev->serial);
-	dl_info("vid_%04x&pid_%04x&rev_%04x driver's dlfb_data struct at %p\n",
+	pr_info("vid_%04x&pid_%04x&rev_%04x driver's dlfb_data struct at %p\n",
 		usbdev->descriptor.idVendor, usbdev->descriptor.idProduct,
 		usbdev->descriptor.bcdDevice, dev);
-	dl_info("console enable=%d\n", console);
-	dl_info("fb_defio enable=%d\n", fb_defio);
+	pr_info("console enable=%d\n", console);
+	pr_info("fb_defio enable=%d\n", fb_defio);
 
 	dev->sku_pixel_limit = 2048 * 1152; /* default to maximum */
 
 	if (!dlfb_parse_vendor_descriptor(dev, usbdev)) {
-		dl_err("firmware not recognized. Assume incompatible device\n");
+		pr_err("firmware not recognized. Assume incompatible device\n");
 		goto error;
 	}
 
 	if (!dlfb_alloc_urb_list(dev, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
 		retval = -ENOMEM;
-		dl_err("dlfb_alloc_urb_list failed\n");
+		pr_err("dlfb_alloc_urb_list failed\n");
 		goto error;
 	}
 
@@ -1545,7 +1547,7 @@
 	info = framebuffer_alloc(0, &usbdev->dev);
 	if (!info) {
 		retval = -ENOMEM;
-		dl_err("framebuffer_alloc failed\n");
+		pr_err("framebuffer_alloc failed\n");
 		goto error;
 	}
 
@@ -1556,7 +1558,7 @@
 
 	retval = fb_alloc_cmap(&info->cmap, 256, 0);
 	if (retval < 0) {
-		dl_err("fb_alloc_cmap failed %x\n", retval);
+		pr_err("fb_alloc_cmap failed %x\n", retval);
 		goto error;
 	}
 
@@ -1567,7 +1569,7 @@
 
 	retval = dlfb_setup_modes(dev, info, NULL, 0);
 	if (retval != 0) {
-		dl_err("unable to find common mode for display and adapter\n");
+		pr_err("unable to find common mode for display and adapter\n");
 		goto error;
 	}
 
@@ -1581,7 +1583,7 @@
 
 	retval = register_framebuffer(info);
 	if (retval < 0) {
-		dl_err("register_framebuffer failed %d\n", retval);
+		pr_err("register_framebuffer failed %d\n", retval);
 		goto error;
 	}
 
@@ -1590,7 +1592,7 @@
 
 	device_create_bin_file(info->dev, &edid_attr);
 
-	dl_info("DisplayLink USB device /dev/fb%d attached. %dx%d resolution."
+	pr_info("DisplayLink USB device /dev/fb%d attached. %dx%d resolution."
 			" Using %dK framebuffer memory\n", info->node,
 			info->var.xres, info->var.yres,
 			((dev->backing_buffer) ?
@@ -1634,7 +1636,7 @@
 	dev = usb_get_intfdata(interface);
 	info = dev->info;
 
-	dl_info("USB disconnect starting\n");
+	pr_info("USB disconnect starting\n");
 
 	/* we virtualize until all fb clients release. Then we free */
 	dev->virtualized = true;
@@ -1698,7 +1700,7 @@
 		if (!(urb->status == -ENOENT ||
 		    urb->status == -ECONNRESET ||
 		    urb->status == -ESHUTDOWN)) {
-			dl_err("%s - nonzero write bulk status received: %d\n",
+			pr_err("%s - nonzero write bulk status received: %d\n",
 				__func__, urb->status);
 			atomic_set(&dev->lost_pixels, 1);
 		}
@@ -1730,7 +1732,7 @@
 	int ret;
 	unsigned long flags;
 
-	dl_notice("Waiting for completes and freeing all render urbs\n");
+	pr_notice("Waiting for completes and freeing all render urbs\n");
 
 	/* keep waiting and freeing, until we've got 'em all */
 	while (count--) {
@@ -1809,7 +1811,7 @@
 	dev->urbs.count = i;
 	dev->urbs.available = i;
 
-	dl_notice("allocated %d %d byte urbs\n", i, (int) size);
+	pr_notice("allocated %d %d byte urbs\n", i, (int) size);
 
 	return i;
 }
@@ -1826,7 +1828,7 @@
 	ret = down_timeout(&dev->urbs.limit_sem, GET_URB_TIMEOUT);
 	if (ret) {
 		atomic_set(&dev->lost_pixels, 1);
-		dl_warn("wait for urb interrupted: %x available: %d\n",
+		pr_warn("wait for urb interrupted: %x available: %d\n",
 		       ret, dev->urbs.available);
 		goto error;
 	}
@@ -1858,7 +1860,7 @@
 	if (ret) {
 		dlfb_urb_completion(urb); /* because no one else will */
 		atomic_set(&dev->lost_pixels, 1);
-		dl_err("usb_submit_urb error %x\n", ret);
+		pr_err("usb_submit_urb error %x\n", ret);
 	}
 	return ret;
 }
