summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/checksums.ini4
-rw-r--r--recipes/libdlo/kernel-module-udlfb.bb2
-rw-r--r--recipes/libdlo/kernel-module-udlfb/udlfb.c38
-rw-r--r--recipes/libdlo/kernel-module-udlfb/udlfb.h18
-rw-r--r--recipes/xorg-driver/xf86-video-displaylink_0.3.bb (renamed from recipes/xorg-driver/xf86-video-displaylink_0.2.bb)2
5 files changed, 49 insertions, 15 deletions
diff --git a/conf/checksums.ini b/conf/checksums.ini
index 974b076c1d..631f1fb528 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -23618,6 +23618,10 @@ sha256=001be4a8963c48e7debc82c6078562d087a2979da63e558a5e3613c03725c377
md5=2d7e548820d2ded5e183933cb701defb
sha256=da0ca1e821e3fa7cfbe73ddb1480b921002ee992f5e5fbc611422c103b907443
+[http://projects.unbit.it/downloads/udlfb-0.2.3_and_xf86-video-displaylink-0.3.tar.gz]
+md5=c2aedc8130c2e4d52e334b6804ab70da
+sha256=487a1d7bf4b896d9a4b9e7dd1bd293adcadde5684fe9fe32aa209761c3191b3e
+
[http://downloads.sourceforge.net/ufraw/ufraw-0.12.tar.gz]
md5=b2c104938c1c3eb47e7605432bbd3157
sha256=c750c8180057385eaa0844f1148d6f0223b986da322773195eab44b33b97c19f
diff --git a/recipes/libdlo/kernel-module-udlfb.bb b/recipes/libdlo/kernel-module-udlfb.bb
index 55262d22c9..10e83c4caa 100644
--- a/recipes/libdlo/kernel-module-udlfb.bb
+++ b/recipes/libdlo/kernel-module-udlfb.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Framebuffer console driver for displaylink based usb devices"
LICENSE = "GPLv2"
-PV = "0.2.2"
+PV = "0.2.3"
SRC_URI = "file://udlfb.c \
file://udlfb.h \
diff --git a/recipes/libdlo/kernel-module-udlfb/udlfb.c b/recipes/libdlo/kernel-module-udlfb/udlfb.c
index 96fdb3e7d5..abeca9bd12 100644
--- a/recipes/libdlo/kernel-module-udlfb/udlfb.c
+++ b/recipes/libdlo/kernel-module-udlfb/udlfb.c
@@ -7,6 +7,7 @@
* Based on the amazing work of Florian Echtler and libdlo 0.1 *
* *
* *
+ * 10.06.09 release 0.2.3 (edid ioctl, fallback for unsupported modes) *
* 05.06.09 release 0.2.2 (real screen blanking, rle compression, double buffer) *
* 31.05.09 release 0.2 *
* 22.05.09 First public (ugly) release *
@@ -600,10 +601,21 @@ static int dlfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
{
struct dlfb_data *dev_info = info->par;
- struct dloarea *area = (struct dloarea *)arg;
+ struct dloarea *area = NULL;
+
+ if (cmd == 0xAD) {
+ char *edid = (char *)arg;
+ dlfb_edid(dev_info);
+ if (copy_to_user(edid, dev_info->edid, 128)) {
+ return -EFAULT;
+ }
+ return 0;
+ }
- if (cmd == 0xAA || cmd == 0xAB) {
+ if (cmd == 0xAA || cmd == 0xAB || cmd == 0xAC) {
+
+ area = (struct dloarea *)arg;
if (area->x < 0)
@@ -714,7 +726,6 @@ dlfb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
struct dlfb_data *dev_info;
struct fb_info *info;
- int i;
int ret;
char rbuf[4];
@@ -755,15 +766,7 @@ dlfb_probe(struct usb_interface *interface, const struct usb_device_id *id)
printk("ret control msg 0: %d %x%x%x%x\n", ret, rbuf[0], rbuf[1],
rbuf[2], rbuf[3]);
- for (i = 0; i < 128; i++) {
- ret =
- usb_control_msg(dev_info->udev,
- usb_rcvctrlpipe(dev_info->udev, 0), (0x02),
- (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
- 0);
- /* printk("ret control msg edid %d: %d [%d]\n",i, ret, rbuf[1]); */
- dev_info->edid[i] = rbuf[1];
- }
+ dlfb_edid(dev_info);
info = framebuffer_alloc(sizeof(u32) * 256, &dev_info->udev->dev);
@@ -775,6 +778,10 @@ dlfb_probe(struct usb_interface *interface, const struct usb_device_id *id)
fb_parse_edid(dev_info->edid, &info->var);
printk("EDID XRES %d YRES %d\n", info->var.xres, info->var.yres);
+ if (info->var.xres == 0 || info->var.yres == 0) {
+ info->var.xres = 800;
+ info->var.yres = 480;
+ }
if (dlfb_set_video_mode(dev_info, info->var.xres, info->var.yres) != 0)
goto out;
@@ -828,7 +835,12 @@ dlfb_probe(struct usb_interface *interface, const struct usb_device_id *id)
info->fix.smem_start = (unsigned long)info->screen_base;
info->fix.smem_len = PAGE_ALIGN(dev_info->screen_size);
- memcpy(info->fix.id, "DisplayLink FB", 14);
+ if (strlen(dev_info->udev->product) > 15) {
+ memcpy(info->fix.id, dev_info->udev->product, 15);
+ }
+ else {
+ memcpy(info->fix.id, dev_info->udev->product, strlen(dev_info->udev->product));
+ }
info->fix.type = FB_TYPE_PACKED_PIXELS;
info->fix.visual = FB_VISUAL_TRUECOLOR;
info->fix.accel = info->flags;
diff --git a/recipes/libdlo/kernel-module-udlfb/udlfb.h b/recipes/libdlo/kernel-module-udlfb/udlfb.h
index f0508628f0..d587088913 100644
--- a/recipes/libdlo/kernel-module-udlfb/udlfb.h
+++ b/recipes/libdlo/kernel-module-udlfb/udlfb.h
@@ -50,6 +50,24 @@ static void dlfb_bulk_callback(struct urb *urb)
}
+static void dlfb_edid(struct dlfb_data *dev_info)
+{
+ int i;
+ int ret;
+ char rbuf[2];
+
+ for (i = 0; i < 128; i++) {
+ ret =
+ usb_control_msg(dev_info->udev,
+ usb_rcvctrlpipe(dev_info->udev, 0), (0x02),
+ (0x80 | (0x02 << 5)), i << 8, 0xA1, rbuf, 2,
+ 0);
+ /*printk("ret control msg edid %d: %d [%d]\n",i, ret, rbuf[1]);*/
+ dev_info->edid[i] = rbuf[1];
+ }
+
+}
+
static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len)
{
diff --git a/recipes/xorg-driver/xf86-video-displaylink_0.2.bb b/recipes/xorg-driver/xf86-video-displaylink_0.3.bb
index 980439ce3b..5df8e9503d 100644
--- a/recipes/xorg-driver/xf86-video-displaylink_0.2.bb
+++ b/recipes/xorg-driver/xf86-video-displaylink_0.3.bb
@@ -4,6 +4,6 @@ DESCRIPTION = "X.Org X server -- displaylink driver"
RRECOMMENDS_${PN} = "kernel-module-udlfb"
-SRC_URI = "http://projects.unbit.it/downloads/xf86-video-displaylink_and_udlfb.tar.gz"
+SRC_URI = "http://projects.unbit.it/downloads/udlfb-0.2.3_and_xf86-video-displaylink-${PV}.tar.gz"
S = "${WORKDIR}/${PN}"