aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/udlfb.c231
1 files changed, 117 insertions, 114 deletions
diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
index f0118c10b4ab..452a4207ac1b 100644
--- a/drivers/video/fbdev/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
@@ -16,8 +16,6 @@
16 * from Florian Echtler, Henrik Bjerregaard Pedersen, and others. 16 * from Florian Echtler, Henrik Bjerregaard Pedersen, and others.
17 */ 17 */
18 18
19#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20
21#include <linux/module.h> 19#include <linux/module.h>
22#include <linux/kernel.h> 20#include <linux/kernel.h>
23#include <linux/init.h> 21#include <linux/init.h>
@@ -333,8 +331,8 @@ static int dlfb_ops_mmap(struct fb_info *info, struct vm_area_struct *vma)
333 331
334 pos = (unsigned long)info->fix.smem_start + offset; 332 pos = (unsigned long)info->fix.smem_start + offset;
335 333
336 pr_notice("mmap() framebuffer addr:%lu size:%lu\n", 334 dev_dbg(info->dev, "mmap() framebuffer addr:%lu size:%lu\n",
337 pos, size); 335 pos, size);
338 336
339 while (size > 0) { 337 while (size > 0) {
340 page = vmalloc_to_pfn((void *)pos); 338 page = vmalloc_to_pfn((void *)pos);
@@ -757,8 +755,7 @@ error:
757 755
758static int dlfb_get_edid(struct dlfb_data *dlfb, char *edid, int len) 756static int dlfb_get_edid(struct dlfb_data *dlfb, char *edid, int len)
759{ 757{
760 int i; 758 int i, ret;
761 int ret;
762 char *rbuf; 759 char *rbuf;
763 760
764 rbuf = kmalloc(2, GFP_KERNEL); 761 rbuf = kmalloc(2, GFP_KERNEL);
@@ -771,7 +768,8 @@ static int dlfb_get_edid(struct dlfb_data *dlfb, char *edid, int len)
771 (0x80 | (0x02 << 5)), i << 8, 0xA1, 768 (0x80 | (0x02 << 5)), i << 8, 0xA1,
772 rbuf, 2, USB_CTRL_GET_TIMEOUT); 769 rbuf, 2, USB_CTRL_GET_TIMEOUT);
773 if (ret < 2) { 770 if (ret < 2) {
774 pr_err("Read EDID byte %d failed: %d\n", i, ret); 771 dev_err(&dlfb->udev->dev,
772 "Read EDID byte %d failed: %d\n", i, ret);
775 i--; 773 i--;
776 break; 774 break;
777 } 775 }
@@ -905,8 +903,8 @@ static int dlfb_ops_open(struct fb_info *info, int user)
905 fb_deferred_io_init(info); 903 fb_deferred_io_init(info);
906 } 904 }
907 905
908 pr_notice("open /dev/fb%d user=%d fb_info=%p count=%d\n", 906 dev_dbg(info->dev, "open, user=%d fb_info=%p count=%d\n",
909 info->node, user, info, dlfb->fb_count); 907 user, info, dlfb->fb_count);
910 908
911 return 0; 909 return 0;
912} 910}
@@ -984,8 +982,7 @@ static int dlfb_ops_release(struct fb_info *info, int user)
984 info->fbops->fb_mmap = dlfb_ops_mmap; 982 info->fbops->fb_mmap = dlfb_ops_mmap;
985 } 983 }
986 984
987 pr_warn("released /dev/fb%d user=%d count=%d\n", 985 dev_dbg(info->dev, "release, user=%d count=%d\n", user, dlfb->fb_count);
988 info->node, user, dlfb->fb_count);
989 986
990 kref_put(&dlfb->kref, dlfb_free); 987 kref_put(&dlfb->kref, dlfb_free);
991 988
@@ -996,19 +993,10 @@ static int dlfb_ops_release(struct fb_info *info, int user)
996 * Check whether a video mode is supported by the DisplayLink chip 993 * Check whether a video mode is supported by the DisplayLink chip
997 * We start from monitor's modes, so don't need to filter that here 994 * We start from monitor's modes, so don't need to filter that here
998 */ 995 */
999static int dlfb_is_valid_mode(struct fb_videomode *mode, 996static int dlfb_is_valid_mode(struct fb_videomode *mode, struct dlfb_data *dlfb)
1000 struct fb_info *info)
1001{ 997{
1002 struct dlfb_data *dlfb = info->par; 998 if (mode->xres * mode->yres > dlfb->sku_pixel_limit)
1003
1004 if (mode->xres * mode->yres > dlfb->sku_pixel_limit) {
1005 pr_warn("%dx%d beyond chip capabilities\n",
1006 mode->xres, mode->yres);
1007 return 0; 999 return 0;
1008 }
1009
1010 pr_info("%dx%d @ %d Hz valid mode\n", mode->xres, mode->yres,
1011 mode->refresh);
1012 1000
1013 return 1; 1001 return 1;
1014} 1002}
@@ -1029,6 +1017,7 @@ static int dlfb_ops_check_var(struct fb_var_screeninfo *var,
1029 struct fb_info *info) 1017 struct fb_info *info)
1030{ 1018{
1031 struct fb_videomode mode; 1019 struct fb_videomode mode;
1020 struct dlfb_data *dlfb = info->par;
1032 1021
1033 /* TODO: support dynamically changing framebuffer size */ 1022 /* TODO: support dynamically changing framebuffer size */
1034 if ((var->xres * var->yres * 2) > info->fix.smem_len) 1023 if ((var->xres * var->yres * 2) > info->fix.smem_len)
@@ -1039,7 +1028,7 @@ static int dlfb_ops_check_var(struct fb_var_screeninfo *var,
1039 1028
1040 fb_var_to_videomode(&mode, var); 1029 fb_var_to_videomode(&mode, var);
1041 1030
1042 if (!dlfb_is_valid_mode(&mode, info)) 1031 if (!dlfb_is_valid_mode(&mode, dlfb))
1043 return -EINVAL; 1032 return -EINVAL;
1044 1033
1045 return 0; 1034 return 0;
@@ -1093,8 +1082,8 @@ static int dlfb_ops_blank(int blank_mode, struct fb_info *info)
1093 char *bufptr; 1082 char *bufptr;
1094 struct urb *urb; 1083 struct urb *urb;
1095 1084
1096 pr_debug("/dev/fb%d FB_BLANK mode %d --> %d\n", 1085 dev_dbg(info->dev, "blank, mode %d --> %d\n",
1097 info->node, dlfb->blank_mode, blank_mode); 1086 dlfb->blank_mode, blank_mode);
1098 1087
1099 if ((dlfb->blank_mode == FB_BLANK_POWERDOWN) && 1088 if ((dlfb->blank_mode == FB_BLANK_POWERDOWN) &&
1100 (blank_mode != FB_BLANK_POWERDOWN)) { 1089 (blank_mode != FB_BLANK_POWERDOWN)) {
@@ -1162,7 +1151,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info
1162 */ 1151 */
1163 new_fb = vmalloc(new_len); 1152 new_fb = vmalloc(new_len);
1164 if (!new_fb) { 1153 if (!new_fb) {
1165 pr_err("Virtual framebuffer alloc failed\n"); 1154 dev_err(info->dev, "Virtual framebuffer alloc failed\n");
1166 goto error; 1155 goto error;
1167 } 1156 }
1168 1157
@@ -1185,7 +1174,8 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info
1185 if (shadow) 1174 if (shadow)
1186 new_back = vzalloc(new_len); 1175 new_back = vzalloc(new_len);
1187 if (!new_back) 1176 if (!new_back)
1188 pr_info("No shadow/backing buffer allocated\n"); 1177 dev_info(info->dev,
1178 "No shadow/backing buffer allocated\n");
1189 else { 1179 else {
1190 vfree(dlfb->backing_buffer); 1180 vfree(dlfb->backing_buffer);
1191 dlfb->backing_buffer = new_back; 1181 dlfb->backing_buffer = new_back;
@@ -1216,14 +1206,18 @@ static int dlfb_setup_modes(struct dlfb_data *dlfb,
1216 struct fb_info *info, 1206 struct fb_info *info,
1217 char *default_edid, size_t default_edid_size) 1207 char *default_edid, size_t default_edid_size)
1218{ 1208{
1219 int i;
1220 const struct fb_videomode *default_vmode = NULL;
1221 int result = 0;
1222 char *edid; 1209 char *edid;
1223 int tries = 3; 1210 int i, result = 0, tries = 3;
1211 struct device *dev = info->device;
1212 struct fb_videomode *mode;
1213 const struct fb_videomode *default_vmode = NULL;
1224 1214
1225 if (info->dev) /* only use mutex if info has been registered */ 1215 if (info->dev) {
1216 /* only use mutex if info has been registered */
1226 mutex_lock(&info->lock); 1217 mutex_lock(&info->lock);
1218 /* parent device is used otherwise */
1219 dev = info->dev;
1220 }
1227 1221
1228 edid = kmalloc(EDID_LENGTH, GFP_KERNEL); 1222 edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
1229 if (!edid) { 1223 if (!edid) {
@@ -1255,13 +1249,12 @@ static int dlfb_setup_modes(struct dlfb_data *dlfb,
1255 1249
1256 /* If that fails, use a previously returned EDID if available */ 1250 /* If that fails, use a previously returned EDID if available */
1257 if (info->monspecs.modedb_len == 0) { 1251 if (info->monspecs.modedb_len == 0) {
1258 1252 dev_err(dev, "Unable to get valid EDID from device/display\n");
1259 pr_err("Unable to get valid EDID from device/display\n");
1260 1253
1261 if (dlfb->edid) { 1254 if (dlfb->edid) {
1262 fb_edid_to_monspecs(dlfb->edid, &info->monspecs); 1255 fb_edid_to_monspecs(dlfb->edid, &info->monspecs);
1263 if (info->monspecs.modedb_len > 0) 1256 if (info->monspecs.modedb_len > 0)
1264 pr_err("Using previously queried EDID\n"); 1257 dev_err(dev, "Using previously queried EDID\n");
1265 } 1258 }
1266 } 1259 }
1267 1260
@@ -1273,7 +1266,7 @@ static int dlfb_setup_modes(struct dlfb_data *dlfb,
1273 memcpy(edid, default_edid, default_edid_size); 1266 memcpy(edid, default_edid, default_edid_size);
1274 dlfb->edid = edid; 1267 dlfb->edid = edid;
1275 dlfb->edid_size = default_edid_size; 1268 dlfb->edid_size = default_edid_size;
1276 pr_err("Using default/backup EDID\n"); 1269 dev_err(dev, "Using default/backup EDID\n");
1277 } 1270 }
1278 } 1271 }
1279 } 1272 }
@@ -1282,10 +1275,12 @@ static int dlfb_setup_modes(struct dlfb_data *dlfb,
1282 if (info->monspecs.modedb_len > 0) { 1275 if (info->monspecs.modedb_len > 0) {
1283 1276
1284 for (i = 0; i < info->monspecs.modedb_len; i++) { 1277 for (i = 0; i < info->monspecs.modedb_len; i++) {
1285 if (dlfb_is_valid_mode(&info->monspecs.modedb[i], info)) 1278 mode = &info->monspecs.modedb[i];
1286 fb_add_videomode(&info->monspecs.modedb[i], 1279 if (dlfb_is_valid_mode(mode, dlfb)) {
1287 &info->modelist); 1280 fb_add_videomode(mode, &info->modelist);
1288 else { 1281 } else {
1282 dev_dbg(dev, "Specified mode %dx%d too big\n",
1283 mode->xres, mode->yres);
1289 if (i == 0) 1284 if (i == 0)
1290 /* if we've removed top/best mode */ 1285 /* if we've removed top/best mode */
1291 info->monspecs.misc 1286 info->monspecs.misc
@@ -1309,10 +1304,12 @@ static int dlfb_setup_modes(struct dlfb_data *dlfb,
1309 * But at least the user has a chance to choose 1304 * But at least the user has a chance to choose
1310 */ 1305 */
1311 for (i = 0; i < VESA_MODEDB_SIZE; i++) { 1306 for (i = 0; i < VESA_MODEDB_SIZE; i++) {
1312 if (dlfb_is_valid_mode((struct fb_videomode *) 1307 mode = (struct fb_videomode *)&vesa_modes[i];
1313 &vesa_modes[i], info)) 1308 if (dlfb_is_valid_mode(mode, dlfb))
1314 fb_add_videomode(&vesa_modes[i], 1309 fb_add_videomode(mode, &info->modelist);
1315 &info->modelist); 1310 else
1311 dev_dbg(dev, "VESA mode %dx%d too big\n",
1312 mode->xres, mode->yres);
1316 } 1313 }
1317 1314
1318 /* 1315 /*
@@ -1492,7 +1489,7 @@ static int dlfb_select_std_channel(struct dlfb_data *dlfb)
1492} 1489}
1493 1490
1494static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb, 1491static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
1495 struct usb_interface *interface) 1492 struct usb_interface *intf)
1496{ 1493{
1497 char *desc; 1494 char *desc;
1498 char *buf; 1495 char *buf;
@@ -1504,20 +1501,21 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
1504 return false; 1501 return false;
1505 desc = buf; 1502 desc = buf;
1506 1503
1507 total_len = usb_get_descriptor(interface_to_usbdev(interface), 1504 total_len = usb_get_descriptor(interface_to_usbdev(intf),
1508 0x5f, /* vendor specific */ 1505 0x5f, /* vendor specific */
1509 0, desc, MAX_VENDOR_DESCRIPTOR_SIZE); 1506 0, desc, MAX_VENDOR_DESCRIPTOR_SIZE);
1510 1507
1511 /* if not found, look in configuration descriptor */ 1508 /* if not found, look in configuration descriptor */
1512 if (total_len < 0) { 1509 if (total_len < 0) {
1513 if (0 == usb_get_extra_descriptor(interface->cur_altsetting, 1510 if (0 == usb_get_extra_descriptor(intf->cur_altsetting,
1514 0x5f, &desc)) 1511 0x5f, &desc))
1515 total_len = (int) desc[0]; 1512 total_len = (int) desc[0];
1516 } 1513 }
1517 1514
1518 if (total_len > 5) { 1515 if (total_len > 5) {
1519 pr_info("vendor descriptor length:%x data:%11ph\n", total_len, 1516 dev_info(&intf->dev,
1520 desc); 1517 "vendor descriptor length: %d data: %11ph\n",
1518 total_len, desc);
1521 1519
1522 if ((desc[0] != total_len) || /* descriptor length */ 1520 if ((desc[0] != total_len) || /* descriptor length */
1523 (desc[1] != 0x5f) || /* vendor descriptor type */ 1521 (desc[1] != 0x5f) || /* vendor descriptor type */
@@ -1542,8 +1540,9 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
1542 case 0x0200: { /* max_area */ 1540 case 0x0200: { /* max_area */
1543 u32 max_area; 1541 u32 max_area;
1544 max_area = le32_to_cpu(*((u32 *)desc)); 1542 max_area = le32_to_cpu(*((u32 *)desc));
1545 pr_warn("DL chip limited to %d pixel modes\n", 1543 dev_warn(&intf->dev,
1546 max_area); 1544 "DL chip limited to %d pixel modes\n",
1545 max_area);
1547 dlfb->sku_pixel_limit = max_area; 1546 dlfb->sku_pixel_limit = max_area;
1548 break; 1547 break;
1549 } 1548 }
@@ -1553,14 +1552,15 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
1553 desc += length; 1552 desc += length;
1554 } 1553 }
1555 } else { 1554 } else {
1556 pr_info("vendor descriptor not available (%d)\n", total_len); 1555 dev_info(&intf->dev, "vendor descriptor not available (%d)\n",
1556 total_len);
1557 } 1557 }
1558 1558
1559 goto success; 1559 goto success;
1560 1560
1561unrecognized: 1561unrecognized:
1562 /* allow udlfb to load for now even if firmware unrecognized */ 1562 /* allow udlfb to load for now even if firmware unrecognized */
1563 pr_err("Unrecognized vendor firmware descriptor\n"); 1563 dev_err(&intf->dev, "Unrecognized vendor firmware descriptor\n");
1564 1564
1565success: 1565success:
1566 kfree(buf); 1566 kfree(buf);
@@ -1569,56 +1569,48 @@ success:
1569 1569
1570static void dlfb_init_framebuffer_work(struct work_struct *work); 1570static void dlfb_init_framebuffer_work(struct work_struct *work);
1571 1571
1572static int dlfb_usb_probe(struct usb_interface *interface, 1572static int dlfb_usb_probe(struct usb_interface *intf,
1573 const struct usb_device_id *id) 1573 const struct usb_device_id *id)
1574{ 1574{
1575 struct usb_device *usbdev;
1576 struct dlfb_data *dlfb; 1575 struct dlfb_data *dlfb;
1577 int retval = -ENOMEM; 1576 int retval = -ENOMEM;
1577 struct usb_device *usbdev = interface_to_usbdev(intf);
1578 1578
1579 /* usb initialization */ 1579 /* usb initialization */
1580
1581 usbdev = interface_to_usbdev(interface);
1582
1583 dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL); 1580 dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
1584 if (dlfb == NULL) { 1581 if (!dlfb) {
1585 dev_err(&interface->dev, "dlfb_usb_probe: failed alloc of dev struct\n"); 1582 dev_err(&intf->dev, "%s: failed to allocate dlfb\n", __func__);
1586 goto error; 1583 goto error;
1587 } 1584 }
1588 1585
1589 kref_init(&dlfb->kref); /* matching kref_put in usb .disconnect fn */ 1586 kref_init(&dlfb->kref); /* matching kref_put in usb .disconnect fn */
1590 1587
1591 dlfb->udev = usbdev; 1588 dlfb->udev = usbdev;
1592 usb_set_intfdata(interface, dlfb); 1589 usb_set_intfdata(intf, dlfb);
1593 1590
1594 pr_info("%s %s - serial #%s\n", 1591 dev_dbg(&intf->dev, "console enable=%d\n", console);
1595 usbdev->manufacturer, usbdev->product, usbdev->serial); 1592 dev_dbg(&intf->dev, "fb_defio enable=%d\n", fb_defio);
1596 pr_info("vid_%04x&pid_%04x&rev_%04x driver's dlfb_data struct at %p\n", 1593 dev_dbg(&intf->dev, "shadow enable=%d\n", shadow);
1597 le16_to_cpu(usbdev->descriptor.idVendor),
1598 le16_to_cpu(usbdev->descriptor.idProduct),
1599 le16_to_cpu(usbdev->descriptor.bcdDevice), dlfb);
1600 pr_info("console enable=%d\n", console);
1601 pr_info("fb_defio enable=%d\n", fb_defio);
1602 pr_info("shadow enable=%d\n", shadow);
1603 1594
1604 dlfb->sku_pixel_limit = 2048 * 1152; /* default to maximum */ 1595 dlfb->sku_pixel_limit = 2048 * 1152; /* default to maximum */
1605 1596
1606 if (!dlfb_parse_vendor_descriptor(dlfb, interface)) { 1597 if (!dlfb_parse_vendor_descriptor(dlfb, intf)) {
1607 pr_err("firmware not recognized. Assume incompatible device\n"); 1598 dev_err(&intf->dev,
1599 "firmware not recognized, incompatible device?\n");
1608 goto error; 1600 goto error;
1609 } 1601 }
1610 1602
1611 if (pixel_limit) { 1603 if (pixel_limit) {
1612 pr_warn("DL chip limit of %d overridden" 1604 dev_warn(&intf->dev,
1613 " by module param to %d\n", 1605 "DL chip limit of %d overridden to %d\n",
1614 dlfb->sku_pixel_limit, pixel_limit); 1606 dlfb->sku_pixel_limit, pixel_limit);
1615 dlfb->sku_pixel_limit = pixel_limit; 1607 dlfb->sku_pixel_limit = pixel_limit;
1616 } 1608 }
1617 1609
1618 1610
1619 if (!dlfb_alloc_urb_list(dlfb, WRITES_IN_FLIGHT, MAX_TRANSFER)) { 1611 if (!dlfb_alloc_urb_list(dlfb, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
1620 retval = -ENOMEM; 1612 retval = -ENOMEM;
1621 pr_err("dlfb_alloc_urb_list failed\n"); 1613 dev_err(&intf->dev, "unable to allocate urb list\n");
1622 goto error; 1614 goto error;
1623 } 1615 }
1624 1616
@@ -1646,16 +1638,16 @@ error:
1646 1638
1647static void dlfb_init_framebuffer_work(struct work_struct *work) 1639static void dlfb_init_framebuffer_work(struct work_struct *work)
1648{ 1640{
1641 int i, retval;
1642 struct fb_info *info;
1643 const struct device_attribute *attr;
1649 struct dlfb_data *dlfb = container_of(work, struct dlfb_data, 1644 struct dlfb_data *dlfb = container_of(work, struct dlfb_data,
1650 init_framebuffer_work.work); 1645 init_framebuffer_work.work);
1651 struct fb_info *info;
1652 int retval;
1653 int i;
1654 1646
1655 /* allocates framebuffer driver structure, not framebuffer memory */ 1647 /* allocates framebuffer driver structure, not framebuffer memory */
1656 info = framebuffer_alloc(0, &dlfb->udev->dev); 1648 info = framebuffer_alloc(0, &dlfb->udev->dev);
1657 if (!info) { 1649 if (!info) {
1658 pr_err("framebuffer_alloc failed\n"); 1650 dev_err(&dlfb->udev->dev, "framebuffer_alloc failed\n");
1659 goto error; 1651 goto error;
1660 } 1652 }
1661 1653
@@ -1666,7 +1658,7 @@ static void dlfb_init_framebuffer_work(struct work_struct *work)
1666 1658
1667 retval = fb_alloc_cmap(&info->cmap, 256, 0); 1659 retval = fb_alloc_cmap(&info->cmap, 256, 0);
1668 if (retval < 0) { 1660 if (retval < 0) {
1669 pr_err("fb_alloc_cmap failed %x\n", retval); 1661 dev_err(info->device, "cmap allocation failed: %d\n", retval);
1670 goto error; 1662 goto error;
1671 } 1663 }
1672 1664
@@ -1677,7 +1669,8 @@ static void dlfb_init_framebuffer_work(struct work_struct *work)
1677 1669
1678 retval = dlfb_setup_modes(dlfb, info, NULL, 0); 1670 retval = dlfb_setup_modes(dlfb, info, NULL, 0);
1679 if (retval != 0) { 1671 if (retval != 0) {
1680 pr_err("unable to find common mode for display and adapter\n"); 1672 dev_err(info->device,
1673 "unable to find common mode for display and adapter\n");
1681 goto error; 1674 goto error;
1682 } 1675 }
1683 1676
@@ -1691,43 +1684,46 @@ static void dlfb_init_framebuffer_work(struct work_struct *work)
1691 1684
1692 retval = register_framebuffer(info); 1685 retval = register_framebuffer(info);
1693 if (retval < 0) { 1686 if (retval < 0) {
1694 pr_err("register_framebuffer failed %d\n", retval); 1687 dev_err(info->device, "unable to register framebuffer: %d\n",
1688 retval);
1695 goto error; 1689 goto error;
1696 } 1690 }
1697 1691
1698 for (i = 0; i < ARRAY_SIZE(fb_device_attrs); i++) { 1692 for (i = 0; i < ARRAY_SIZE(fb_device_attrs); i++) {
1699 retval = device_create_file(info->dev, &fb_device_attrs[i]); 1693 attr = &fb_device_attrs[i];
1700 if (retval) { 1694 retval = device_create_file(info->dev, attr);
1701 pr_warn("device_create_file failed %d\n", retval); 1695 if (retval)
1702 } 1696 dev_warn(info->device,
1697 "failed to create '%s' attribute: %d\n",
1698 attr->attr.name, retval);
1703 } 1699 }
1704 1700
1705 retval = device_create_bin_file(info->dev, &edid_attr); 1701 retval = device_create_bin_file(info->dev, &edid_attr);
1706 if (retval) { 1702 if (retval)
1707 pr_warn("device_create_bin_file failed %d\n", retval); 1703 dev_warn(info->device, "failed to create '%s' attribute: %d\n",
1708 } 1704 edid_attr.attr.name, retval);
1709 1705
1710 pr_info("DisplayLink USB device /dev/fb%d attached. %dx%d resolution." 1706 dev_info(info->device,
1711 " Using %dK framebuffer memory\n", info->node, 1707 "%s is DisplayLink USB device (%dx%d, %dK framebuffer memory)\n",
1712 info->var.xres, info->var.yres, 1708 dev_name(info->dev), info->var.xres, info->var.yres,
1713 ((dlfb->backing_buffer) ? 1709 ((dlfb->backing_buffer) ?
1714 info->fix.smem_len * 2 : info->fix.smem_len) >> 10); 1710 info->fix.smem_len * 2 : info->fix.smem_len) >> 10);
1715 return; 1711 return;
1716 1712
1717error: 1713error:
1718 dlfb_free_framebuffer(dlfb); 1714 dlfb_free_framebuffer(dlfb);
1719} 1715}
1720 1716
1721static void dlfb_usb_disconnect(struct usb_interface *interface) 1717static void dlfb_usb_disconnect(struct usb_interface *intf)
1722{ 1718{
1723 struct dlfb_data *dlfb; 1719 struct dlfb_data *dlfb;
1724 struct fb_info *info; 1720 struct fb_info *info;
1725 int i; 1721 int i;
1726 1722
1727 dlfb = usb_get_intfdata(interface); 1723 dlfb = usb_get_intfdata(intf);
1728 info = dlfb->info; 1724 info = dlfb->info;
1729 1725
1730 pr_info("USB disconnect starting\n"); 1726 dev_dbg(&intf->dev, "USB disconnect starting\n");
1731 1727
1732 /* we virtualize until all fb clients release. Then we free */ 1728 /* we virtualize until all fb clients release. Then we free */
1733 dlfb->virtualized = true; 1729 dlfb->virtualized = true;
@@ -1746,7 +1742,7 @@ static void dlfb_usb_disconnect(struct usb_interface *interface)
1746 unlink_framebuffer(info); 1742 unlink_framebuffer(info);
1747 } 1743 }
1748 1744
1749 usb_set_intfdata(interface, NULL); 1745 usb_set_intfdata(intf, NULL);
1750 dlfb->udev = NULL; 1746 dlfb->udev = NULL;
1751 1747
1752 /* if clients still have us open, will be freed on last close */ 1748 /* if clients still have us open, will be freed on last close */
@@ -1774,15 +1770,21 @@ static void dlfb_urb_completion(struct urb *urb)
1774 struct dlfb_data *dlfb = unode->dlfb; 1770 struct dlfb_data *dlfb = unode->dlfb;
1775 unsigned long flags; 1771 unsigned long flags;
1776 1772
1777 /* sync/async unlink faults aren't errors */ 1773 switch (urb->status) {
1778 if (urb->status) { 1774 case 0:
1779 if (!(urb->status == -ENOENT || 1775 /* success */
1780 urb->status == -ECONNRESET || 1776 break;
1781 urb->status == -ESHUTDOWN)) { 1777 case -ECONNRESET:
1782 pr_err("%s - nonzero write bulk status received: %d\n", 1778 case -ENOENT:
1783 __func__, urb->status); 1779 case -ESHUTDOWN:
1784 atomic_set(&dlfb->lost_pixels, 1); 1780 /* sync/async unlink faults aren't errors */
1785 } 1781 break;
1782 default:
1783 dev_err(&dlfb->udev->dev,
1784 "%s - nonzero write bulk status received: %d\n",
1785 __func__, urb->status);
1786 atomic_set(&dlfb->lost_pixels, 1);
1787 break;
1786 } 1788 }
1787 1789
1788 urb->transfer_buffer_length = dlfb->urbs.size; /* reset to actual */ 1790 urb->transfer_buffer_length = dlfb->urbs.size; /* reset to actual */
@@ -1903,8 +1905,9 @@ static struct urb *dlfb_get_urb(struct dlfb_data *dlfb)
1903 ret = down_timeout(&dlfb->urbs.limit_sem, GET_URB_TIMEOUT); 1905 ret = down_timeout(&dlfb->urbs.limit_sem, GET_URB_TIMEOUT);
1904 if (ret) { 1906 if (ret) {
1905 atomic_set(&dlfb->lost_pixels, 1); 1907 atomic_set(&dlfb->lost_pixels, 1);
1906 pr_warn("wait for urb interrupted: %x available: %d\n", 1908 dev_warn(&dlfb->udev->dev,
1907 ret, dlfb->urbs.available); 1909 "wait for urb interrupted: %d available: %d\n",
1910 ret, dlfb->urbs.available);
1908 return NULL; 1911 return NULL;
1909 } 1912 }
1910 1913
@@ -1932,7 +1935,7 @@ static int dlfb_submit_urb(struct dlfb_data *dlfb, struct urb *urb, size_t len)
1932 if (ret) { 1935 if (ret) {
1933 dlfb_urb_completion(urb); /* because no one else will */ 1936 dlfb_urb_completion(urb); /* because no one else will */
1934 atomic_set(&dlfb->lost_pixels, 1); 1937 atomic_set(&dlfb->lost_pixels, 1);
1935 pr_err("usb_submit_urb error %x\n", ret); 1938 dev_err(&dlfb->udev->dev, "submit urb error: %d\n", ret);
1936 } 1939 }
1937 return ret; 1940 return ret;
1938} 1941}