From 23a9ac79910c5ec9f1d4a98dfef1574f1ac07cdc Mon Sep 17 00:00:00 2001 From: Bernie Thompson Date: Sun, 5 Sep 2010 16:35:31 -0700 Subject: [PATCH] --- yaml --- r: 219772 b: refs/heads/master c: 8ef8cc4fca4a92e77c0b5aa7a852a6c3d2fba844 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/staging/udlfb/udlfb.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 9718220421a2..589ddd3ed7e5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1572f91cffd7c0d64ab4e0cec71e1d2d1a3349e1 +refs/heads/master: 8ef8cc4fca4a92e77c0b5aa7a852a6c3d2fba844 diff --git a/trunk/drivers/staging/udlfb/udlfb.c b/trunk/drivers/staging/udlfb/udlfb.c index bcb4a1e9e713..b13869bbe09d 100644 --- a/trunk/drivers/staging/udlfb/udlfb.c +++ b/trunk/drivers/staging/udlfb/udlfb.c @@ -1306,6 +1306,29 @@ static ssize_t edid_show( return count; } +static ssize_t edid_store( + struct file *filp, + struct kobject *kobj, struct bin_attribute *a, + char *src, loff_t src_off, size_t src_size) { + struct device *fbdev = container_of(kobj, struct device, kobj); + struct fb_info *fb_info = dev_get_drvdata(fbdev); + 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)) + 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"); + dlfb_ops_set_par(fb_info); + return src_size; + } else + return 0; +} static ssize_t metrics_reset_store(struct device *fbdev, struct device_attribute *attr, @@ -1348,9 +1371,10 @@ static ssize_t use_defio_store(struct device *fbdev, static struct bin_attribute edid_attr = { .attr.name = "edid", - .attr.mode = 0444, - .size = 128, + .attr.mode = 0666, + .size = MAX_EDID_SIZE, .read = edid_show, + .write = edid_store }; static struct device_attribute fb_device_attrs[] = {