diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/Kconfig | 2 | ||||
-rw-r--r-- | drivers/staging/Makefile | 1 | ||||
-rw-r--r-- | drivers/staging/udlfb/Kconfig | 14 | ||||
-rw-r--r-- | drivers/staging/udlfb/Makefile | 1 | ||||
-rw-r--r-- | drivers/staging/udlfb/udlfb.h | 117 | ||||
-rw-r--r-- | drivers/staging/udlfb/udlfb.txt | 144 | ||||
-rw-r--r-- | drivers/video/Kconfig | 14 | ||||
-rw-r--r-- | drivers/video/Makefile | 1 | ||||
-rw-r--r-- | drivers/video/udlfb.c (renamed from drivers/staging/udlfb/udlfb.c) | 135 |
9 files changed, 64 insertions, 365 deletions
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 5eafdf43555..df31a722807 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -111,8 +111,6 @@ source "drivers/staging/vt6655/Kconfig" source "drivers/staging/vt6656/Kconfig" -source "drivers/staging/udlfb/Kconfig" - source "drivers/staging/hv/Kconfig" source "drivers/staging/vme/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index a97a955c094..7a15c0c82b6 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -38,7 +38,6 @@ obj-$(CONFIG_USB_SERIAL_QUATECH_USB2) += quatech_usb2/ obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ obj-$(CONFIG_VT6655) += vt6655/ obj-$(CONFIG_VT6656) += vt6656/ -obj-$(CONFIG_FB_UDL) += udlfb/ obj-$(CONFIG_HYPERV) += hv/ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_MRST_RAR_HANDLER) += memrar/ diff --git a/drivers/staging/udlfb/Kconfig b/drivers/staging/udlfb/Kconfig deleted file mode 100644 index 65bd5db4ca5..00000000000 --- a/drivers/staging/udlfb/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -config FB_UDL - tristate "Displaylink USB Framebuffer support" - depends on FB && USB - select FB_MODE_HELPERS - select FB_SYS_FILLRECT - select FB_SYS_COPYAREA - select FB_SYS_IMAGEBLIT - select FB_SYS_FOPS - select FB_DEFERRED_IO - ---help--- - This is a kernel framebuffer driver for DisplayLink USB devices. - Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and - mplayer -vo fbdev. Supports all USB 2.0 era DisplayLink devices. - To compile as a module, choose M here: the module name is udlfb. diff --git a/drivers/staging/udlfb/Makefile b/drivers/staging/udlfb/Makefile deleted file mode 100644 index 30d9e675b10..00000000000 --- a/drivers/staging/udlfb/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_FB_UDL) += udlfb.o diff --git a/drivers/staging/udlfb/udlfb.h b/drivers/staging/udlfb/udlfb.h deleted file mode 100644 index 6f9785e9d62..00000000000 --- a/drivers/staging/udlfb/udlfb.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef UDLFB_H -#define UDLFB_H - -/* - * TODO: Propose standard fb.h ioctl for reporting damage, - * using _IOWR() and one of the existing area structs from fb.h - * Consider these ioctls deprecated, but they're still used by the - * DisplayLink X server as yet - need both to be modified in tandem - * when new ioctl(s) are ready. - */ -#define DLFB_IOCTL_RETURN_EDID 0xAD -#define DLFB_IOCTL_REPORT_DAMAGE 0xAA -struct dloarea { - int x, y; - int w, h; - int x2, y2; -}; - -struct urb_node { - struct list_head entry; - struct dlfb_data *dev; - struct delayed_work release_urb_work; - struct urb *urb; -}; - -struct urb_list { - struct list_head list; - spinlock_t lock; - struct semaphore limit_sem; - int available; - int count; - size_t size; -}; - -struct dlfb_data { - struct usb_device *udev; - struct device *gdev; /* &udev->dev */ - struct fb_info *info; - struct urb_list urbs; - struct kref kref; - char *backing_buffer; - int fb_count; - bool virtualized; /* true when physical usb device not present */ - struct delayed_work free_framebuffer_work; - atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */ - atomic_t lost_pixels; /* 1 = a render op failed. Need screen refresh */ - char *edid; /* null until we read edid from hw or get from sysfs */ - size_t edid_size; - int sku_pixel_limit; - int base16; - int base8; - u32 pseudo_palette[256]; - /* blit-only rendering path metrics, exposed through sysfs */ - atomic_t bytes_rendered; /* raw pixel-bytes driver asked to render */ - atomic_t bytes_identical; /* saved effort with backbuffer comparison */ - atomic_t bytes_sent; /* to usb, after compression including overhead */ - atomic_t cpu_kcycles_used; /* transpired during pixel processing */ -}; - -#define NR_USB_REQUEST_I2C_SUB_IO 0x02 -#define NR_USB_REQUEST_CHANNEL 0x12 - -/* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */ -#define BULK_SIZE 512 -#define MAX_TRANSFER (PAGE_SIZE*16 - BULK_SIZE) -#define WRITES_IN_FLIGHT (4) - -#define MIN_EDID_SIZE 128 -#define MAX_EDID_SIZE 128 - -#define MAX_VENDOR_DESCRIPTOR_SIZE 256 - -#define GET_URB_TIMEOUT HZ -#define FREE_URB_TIMEOUT (HZ*2) - -#define BPP 2 -#define MAX_CMD_PIXELS 255 - -#define RLX_HEADER_BYTES 7 -#define MIN_RLX_PIX_BYTES 4 -#define MIN_RLX_CMD_BYTES (RLX_HEADER_BYTES + MIN_RLX_PIX_BYTES) - -#define RLE_HEADER_BYTES 6 -#define MIN_RLE_PIX_BYTES 3 -#define MIN_RLE_CMD_BYTES (RLE_HEADER_BYTES + MIN_RLE_PIX_BYTES) - -#define RAW_HEADER_BYTES 6 -#define MIN_RAW_PIX_BYTES 2 -#define MIN_RAW_CMD_BYTES (RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES) - -#define DL_DEFIO_WRITE_DELAY 5 /* fb_deferred_io.delay in jiffies */ -#define DL_DEFIO_WRITE_DISABLE (HZ*60) /* "disable" with long delay */ - -/* remove these once align.h patch is taken into kernel */ -#define DL_ALIGN_UP(x, a) ALIGN(x, a) -#define DL_ALIGN_DOWN(x, a) ALIGN(x-(a-1), a) - -/* remove once this gets added to sysfs.h */ -#define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store) - -/* - * udlfb is both a usb device, and a framebuffer device. - * They may exist at the same time, but during various stages - * inactivity, teardown, or "virtual" operation, only one or the - * other will exist (one will outlive the other). So we can't - * call the dev_*() macros, because we don't have a stable dev object. - */ -#define dl_err(format, arg...) \ - pr_err("udlfb: " format, ## arg) -#define dl_warn(format, arg...) \ - pr_warning("udlfb: " format, ## arg) -#define dl_notice(format, arg...) \ - pr_notice("udlfb: " format, ## arg) -#define dl_info(format, arg...) \ - pr_info("udlfb: " format, ## arg) - -#endif diff --git a/drivers/staging/udlfb/udlfb.txt b/drivers/staging/udlfb/udlfb.txt deleted file mode 100644 index 7fdde2a02a2..00000000000 --- a/drivers/staging/udlfb/udlfb.txt +++ /dev/null @@ -1,144 +0,0 @@ - -What is udlfb? -=============== - -This is a driver for DisplayLink USB 2.0 era graphics chips. - -DisplayLink chips provide simple hline/blit operations with some compression, -pairing that with a hardware framebuffer (16MB) on the other end of the -USB wire. That hardware framebuffer is able to drive the VGA, DVI, or HDMI -monitor with no CPU involvement until a pixel has to change. - -The CPU or other local resource does all the rendering; optinally compares the -result with a local shadow of the remote hardware framebuffer to identify -the minimal set of pixels that have changed; and compresses and sends those -pixels line-by-line via USB bulk transfers. - -Because of the efficiency of bulk transfers and a protocol on top that -does not require any acks - the effect is very low latency that -can support surprisingly high resolutions with good performance for -non-gaming and non-video applications. - -Mode setting, EDID read, etc are other bulk or control transfers. Mode -setting is very flexible - able to set nearly arbitrary modes from any timing. - -Advantages of USB graphics in general: - - * Ability to add a nearly arbitrary number of displays to any USB 2.0 - capable system. On Linux, number of displays is limited by fbdev interface - (FB_MAX is currently 32). Of course, all USB devices on the same - host controller share the same 480Mbs USB 2.0 interface. - -Advantages of supporting DisplayLink chips with kernel framebuffer interface: - - * The actual hardware functionality of DisplayLink chips matches nearly - one-to-one with the fbdev interface, making the driver quite small and - tight relative to the functionality it provides. - * X servers and other applications can use the standard fbdev interface - from user mode to talk to the device, without needing to know anything - about USB or DisplayLink's protocol at all. A "displaylink" X driver - and a slightly modified "fbdev" X driver are among those that already do. - -Disadvantages: - - * Fbdev's mmap interface assumes a real hardware framebuffer is mapped. - In the case of USB graphics, it is just an allocated (virtual) buffer. - Writes need to be detected and encoded into USB bulk transfers by the CPU. - Accurate damage/changed area notifications work around this problem. - In the future, hopefully fbdev will be enhanced with an small standard - interface to allow mmap clients to report damage, for the benefit - of virtual or remote framebuffers. - * Fbdev does not arbitrate client ownership of the framebuffer well. - * Fbcon assumes the first framebuffer it finds should be consumed for console. - * It's not clear what the future of fbdev is, given the rise of KMS/DRM. - -How to use it? -============== - -Udlfb, when loaded as a module, will match against all USB 2.0 generation -DisplayLink chips (Alex and Ollie family). It will then attempt to read the EDID -of the monitor, and set the best common mode between the DisplayLink device -and the monitor's capabilities. - -If the DisplayLink device is successful, it will paint a "green screen" which -means that from a hardware and fbdev software perspective, everything is good. - -At that point, a /dev/fb? interface will be present for user-mode applications -to open and begin writing to the framebuffer of the DisplayLink device using -standard fbdev calls. Note that if mmap() is used, by default the user mode -application must send down damage notifcations to trigger repaints of the -changed regions. Alternatively, udlfb can be recompiled with experimental -defio support enabled, to support a page-fault based detection mechanism -that can work without explicit notifcation. - -The most common client of udlfb is xf86-video-displaylink or a modified -xf86-video-fbdev X server. These servers have no real DisplayLink specific -code. They write to the standard framebuffer interface and rely on udlfb -to do its thing. The one extra feature they have is the ability to report -rectangles from the X DAMAGE protocol extension down to udlfb via udlfb's -damage interface (which will hopefully be standardized for all virtual -framebuffers that need damage info). These damage notifications allow -udlfb to efficiently process the changed pixels. - -Module Options -============== - -Special configuration for udlfb is usually unnecessary. There are a few -options, however. - -From the command line, pass options to modprobe -modprobe udlfb defio=1 console=1 - -Or for permanent option, create file like /etc/modprobe.d/options with text -options udlfb defio=1 console=1 - -Accepted options: - -fb_defio Make use of the fb_defio (CONFIG_FB_DEFERRED_IO) kernel - module to track changed areas of the framebuffer by page faults. - Standard fbdev applications that use mmap but that do not - report damage, may be able to work with this enabled. - Disabled by default because of overhead and other issues. - -console Allow fbcon to attach to udlfb provided framebuffers. This - is disabled by default because fbcon will aggressively consume - the first framebuffer it finds, which isn't usually what the - user wants in the case of USB displays. - -Sysfs Attributes -================ - -Udlfb creates several files in /sys/class/graphics/fb? -Where ? is the sequential framebuffer id of the particular DisplayLink device - -edid If a valid EDID blob is written to this file (typically - by a udev rule), then udlfb will use this EDID as a - backup in case reading the actual EDID of the monitor - attached to the DisplayLink device fails. This is - especially useful for fixed panels, etc. that cannot - communicate their capabilities via EDID. Reading - this file returns the current EDID of the attached - monitor (or last backup value written). This is - useful to get the EDID of the attached monitor, - which can be passed to utilities like parse-edid. - -metrics_bytes_rendered 32-bit count of pixel bytes rendered - -metrics_bytes_identical 32-bit count of how many of those bytes were found to be - unchanged, based on a shadow framebuffer check - -metrics_bytes_sent 32-bit count of how many bytes were transferred over - USB to communicate the resulting changed pixels to the - hardware. Includes compression and protocol overhead - -metrics_cpu_kcycles_used 32-bit count of CPU cycles used in processing the - above pixels (in thousands of cycles). - -metrics_reset Write-only. Any write to this file resets all metrics - above to zero. Note that the 32-bit counters above - roll over very quickly. To get reliable results, design - performance tests to start and finish in a very short - period of time (one minute or less is safe). - --- -Bernie Thompson <bernie@plugable.com> diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index fdddf58bdaf..9f36a29b10b 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -2116,6 +2116,20 @@ config FB_SM501 If unsure, say N. +config FB_UDL + tristate "Displaylink USB Framebuffer support" + depends on FB && USB + select FB_MODE_HELPERS + select FB_SYS_FILLRECT + select FB_SYS_COPYAREA + select FB_SYS_IMAGEBLIT + select FB_SYS_FOPS + select FB_DEFERRED_IO + ---help--- + This is a kernel framebuffer driver for DisplayLink USB devices. + Supports fbdev clients like xf86-video-fbdev, kdrive, fbi, and + mplayer -vo fbdev. Supports all USB 2.0 era DisplayLink devices. + To compile as a module, choose M here: the module name is udlfb. config FB_PNX4008_DUM tristate "Display Update Module support on Philips PNX4008 board" diff --git a/drivers/video/Makefile b/drivers/video/Makefile index bdf62641943..f9de51c39ad 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -125,6 +125,7 @@ obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/ obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o obj-$(CONFIG_FB_PS3) += ps3fb.o obj-$(CONFIG_FB_SM501) += sm501fb.o +obj-$(CONFIG_FB_UDL) += udlfb.o obj-$(CONFIG_FB_XILINX) += xilinxfb.o obj-$(CONFIG_SH_MIPI_DSI) += sh_mipi_dsi.o obj-$(CONFIG_FB_SH_MOBILE_HDMI) += sh_mobile_hdmi.o diff --git a/drivers/staging/udlfb/udlfb.c b/drivers/video/udlfb.c index b7ac1600526..020589a6bf0 100644 --- a/drivers/staging/udlfb/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> @@ -26,8 +28,8 @@ #include <linux/vmalloc.h> #include <linux/slab.h> #include <linux/delay.h> - -#include "udlfb.h" +#include <video/udlfb.h> +#include "edid.h" static struct fb_fix_screeninfo dlfb_fix = { .id = "udlfb", @@ -40,9 +42,7 @@ static struct fb_fix_screeninfo dlfb_fix = { }; static const u32 udlfb_info_flags = FBINFO_DEFAULT | FBINFO_READS_FAST | -#ifdef FBINFO_VIRTFB FBINFO_VIRTFB | -#endif FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA | FBINFO_MISC_ALWAYS_SETPAR; @@ -293,7 +293,7 @@ static int dlfb_ops_mmap(struct fb_info *info, struct vm_area_struct *vma) 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) { @@ -595,18 +595,6 @@ error: return 0; } -static ssize_t dlfb_ops_read(struct fb_info *info, char __user *buf, - size_t count, loff_t *ppos) -{ - ssize_t result = -ENOSYS; - -#if defined CONFIG_FB_SYS_FOPS || defined CONFIG_FB_SYS_FOPS_MODULE - result = fb_sys_read(info, buf, count, ppos); -#endif - - return result; -} - /* * Path triggered by usermode clients who write to filesystem * e.g. cat filename > /dev/fb1 @@ -616,12 +604,10 @@ static ssize_t dlfb_ops_read(struct fb_info *info, char __user *buf, static ssize_t dlfb_ops_write(struct fb_info *info, const char __user *buf, size_t count, loff_t *ppos) { - ssize_t result = -ENOSYS; + ssize_t result; struct dlfb_data *dev = info->par; u32 offset = (u32) *ppos; -#if defined CONFIG_FB_SYS_FOPS || defined CONFIG_FB_SYS_FOPS_MODULE - result = fb_sys_write(info, buf, count, ppos); if (result > 0) { @@ -632,7 +618,6 @@ static ssize_t dlfb_ops_write(struct fb_info *info, const char __user *buf, dlfb_handle_damage(dev, 0, start, info->var.xres, lines, info->screen_base); } -#endif return result; } @@ -644,14 +629,10 @@ static void dlfb_ops_copyarea(struct fb_info *info, struct dlfb_data *dev = info->par; -#if defined CONFIG_FB_SYS_COPYAREA || defined CONFIG_FB_SYS_COPYAREA_MODULE - sys_copyarea(info, area); dlfb_handle_damage(dev, area->dx, area->dy, area->width, area->height, info->screen_base); -#endif - } static void dlfb_ops_imageblit(struct fb_info *info, @@ -659,15 +640,10 @@ static void dlfb_ops_imageblit(struct fb_info *info, { struct dlfb_data *dev = info->par; -#if defined CONFIG_FB_SYS_IMAGEBLIT || defined CONFIG_FB_SYS_IMAGEBLIT_MODULE - sys_imageblit(info, image); dlfb_handle_damage(dev, image->dx, image->dy, image->width, image->height, info->screen_base); - -#endif - } static void dlfb_ops_fillrect(struct fb_info *info, @@ -675,17 +651,12 @@ static void dlfb_ops_fillrect(struct fb_info *info, { struct dlfb_data *dev = info->par; -#if defined CONFIG_FB_SYS_FILLRECT || defined CONFIG_FB_SYS_FILLRECT_MODULE - sys_fillrect(info, rect); dlfb_handle_damage(dev, rect->dx, rect->dy, rect->width, rect->height, info->screen_base); -#endif - } -#ifdef CONFIG_FB_DEFERRED_IO /* * NOTE: fb_defio.c is holding info->fbdefio.mutex * Touching ANY framebuffer memory that triggers a page fault @@ -747,8 +718,6 @@ error: &dev->cpu_kcycles_used); } -#endif - static int dlfb_get_edid(struct dlfb_data *dev, char *edid, int len) { int i; @@ -765,7 +734,7 @@ static int dlfb_get_edid(struct dlfb_data *dev, char *edid, int len) (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; } @@ -881,7 +850,6 @@ static int dlfb_ops_open(struct fb_info *info, int user) kref_get(&dev->kref); -#ifdef CONFIG_FB_DEFERRED_IO if (fb_defio && (info->fbdefio == NULL)) { /* enable defio at last moment if not disabled by client */ @@ -897,9 +865,8 @@ static int dlfb_ops_open(struct fb_info *info, int user) info->fbdefio = fbdefio; fb_deferred_io_init(info); } -#endif - 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; @@ -923,7 +890,7 @@ static void dlfb_free(struct kref *kref) kfree(dev->edid); - dl_warn("freeing dlfb_data %p\n", dev); + pr_warn("freeing dlfb_data %p\n", dev); kfree(dev); } @@ -959,7 +926,7 @@ static void dlfb_free_framebuffer_work(struct work_struct *work) /* 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); @@ -978,16 +945,14 @@ static int dlfb_ops_release(struct fb_info *info, int user) if (dev->virtualized && (dev->fb_count == 0)) schedule_delayed_work(&dev->free_framebuffer_work, HZ); -#ifdef CONFIG_FB_DEFERRED_IO if ((dev->fb_count == 0) && (info->fbdefio)) { fb_deferred_io_cleanup(info); kfree(info->fbdefio); info->fbdefio = NULL; info->fbops->fb_mmap = dlfb_ops_mmap; } -#endif - 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); @@ -1005,12 +970,12 @@ static int dlfb_is_valid_mode(struct fb_videomode *mode, 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; } @@ -1054,7 +1019,7 @@ static int dlfb_ops_set_par(struct fb_info *info) 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); @@ -1104,7 +1069,7 @@ static int dlfb_ops_blank(int blank_mode, struct fb_info *info) static struct fb_ops dlfb_ops = { .owner = THIS_MODULE, - .fb_read = dlfb_ops_read, + .fb_read = fb_sys_read, .fb_write = dlfb_ops_write, .fb_setcolreg = dlfb_ops_setcolreg, .fb_fillrect = dlfb_ops_fillrect, @@ -1133,7 +1098,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dev, struct fb_info *info) 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; @@ -1143,7 +1108,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dev, struct fb_info *info) */ new_fb = vmalloc(new_len); if (!new_fb) { - dl_err("Virtual framebuffer alloc failed\n"); + pr_err("Virtual framebuffer alloc failed\n"); goto error; } @@ -1165,7 +1130,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dev, struct fb_info *info) */ 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); @@ -1207,7 +1172,7 @@ static int dlfb_setup_modes(struct dlfb_data *dev, if (info->dev) /* only use mutex if info has been registered */ mutex_lock(&info->lock); - edid = kmalloc(MAX_EDID_SIZE, GFP_KERNEL); + edid = kmalloc(EDID_LENGTH, GFP_KERNEL); if (!edid) { result = -ENOMEM; goto error; @@ -1223,9 +1188,9 @@ static int dlfb_setup_modes(struct dlfb_data *dev, */ while (tries--) { - i = dlfb_get_edid(dev, edid, MAX_EDID_SIZE); + i = dlfb_get_edid(dev, edid, EDID_LENGTH); - if (i >= MIN_EDID_SIZE) + if (i >= EDID_LENGTH) fb_edid_to_monspecs(edid, &info->monspecs); if (info->monspecs.modedb_len > 0) { @@ -1238,24 +1203,24 @@ static int dlfb_setup_modes(struct dlfb_data *dev, /* 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"); } } /* If that fails, use the default EDID we were handed */ if (info->monspecs.modedb_len == 0) { - if (default_edid_size >= MIN_EDID_SIZE) { + if (default_edid_size >= EDID_LENGTH) { fb_edid_to_monspecs(default_edid, &info->monspecs); if (info->monspecs.modedb_len > 0) { 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"); } } } @@ -1381,7 +1346,7 @@ static ssize_t edid_show( 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); @@ -1398,15 +1363,13 @@ static ssize_t edid_store( struct dlfb_data *dev = fb_info->par; /* We only support write of entire EDID at once, no offset*/ - if ((src_size < MIN_EDID_SIZE) || - (src_size > MAX_EDID_SIZE) || - (src_off != 0)) + if ((src_size != EDID_LENGTH) || (src_off != 0)) return 0; 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 @@ -1431,7 +1394,7 @@ static ssize_t metrics_reset_store(struct device *fbdev, static struct bin_attribute edid_attr = { .attr.name = "edid", .attr.mode = 0666, - .size = MAX_EDID_SIZE, + .size = EDID_LENGTH, .read = edid_show, .write = edid_store }; @@ -1479,7 +1442,7 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dev, 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], @@ -1508,7 +1471,7 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dev, 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; @@ -1524,7 +1487,7 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dev, 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); @@ -1557,24 +1520,24 @@ static int dlfb_usb_probe(struct usb_interface *interface, 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; } @@ -1584,7 +1547,7 @@ static int dlfb_usb_probe(struct usb_interface *interface, info = framebuffer_alloc(0, &usbdev->dev); if (!info) { retval = -ENOMEM; - dl_err("framebuffer_alloc failed\n"); + pr_err("framebuffer_alloc failed\n"); goto error; } @@ -1595,7 +1558,7 @@ static int dlfb_usb_probe(struct usb_interface *interface, 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; } @@ -1606,7 +1569,7 @@ static int dlfb_usb_probe(struct usb_interface *interface, 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; } @@ -1620,7 +1583,7 @@ static int dlfb_usb_probe(struct usb_interface *interface, 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; } @@ -1629,7 +1592,7 @@ static int dlfb_usb_probe(struct usb_interface *interface, 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) ? @@ -1673,7 +1636,7 @@ static void dlfb_usb_disconnect(struct usb_interface *interface) 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; @@ -1737,7 +1700,7 @@ static void dlfb_urb_completion(struct urb *urb) 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); } @@ -1769,7 +1732,7 @@ static void dlfb_free_urb_list(struct dlfb_data *dev) 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--) { @@ -1848,7 +1811,7 @@ static int dlfb_alloc_urb_list(struct dlfb_data *dev, int count, size_t size) 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; } @@ -1865,7 +1828,7 @@ static struct urb *dlfb_get_urb(struct dlfb_data *dev) 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; } @@ -1897,7 +1860,7 @@ static int dlfb_submit_urb(struct dlfb_data *dev, struct urb *urb, size_t len) 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; } |