summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Sobrie <olivier@sobrie.be>2012-02-29 08:06:40 +0100
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2012-03-08 18:12:22 +0000
commite71ff6f265c80b6f04f1d16470b5afa58f0b4648 (patch)
tree5fc94eeeab06d4aee5f0982096b1dd9420d4f78b
parent33ad39121d5527048394003d16b8b38f1140ebf1 (diff)
udlfb: Fix invalid return codes in edid sysfs entry store function
Return a negative errno instead of zero in the write function of the sysfs entry in case of error. Also add a check on the return value of dlfb_setup_modes(). Signed-off-by: Olivier Sobrie <olivier@sobrie.be> Acked-by: Bernie Thompson <bernie@plugable.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
-rw-r--r--drivers/video/udlfb.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/video/udlfb.c b/drivers/video/udlfb.c
index 86c8b256e306..157df78e5bfc 100644
--- a/drivers/video/udlfb.c
+++ b/drivers/video/udlfb.c
@@ -1432,19 +1432,22 @@ static ssize_t edid_store(
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;
+ int ret;
/* We only support write of entire EDID at once, no offset*/
if ((src_size != EDID_LENGTH) || (src_off != 0))
- return 0;
+ return -EINVAL;
- dlfb_setup_modes(dev, fb_info, src, src_size);
+ ret = dlfb_setup_modes(dev, fb_info, src, src_size);
+ if (ret)
+ return ret;
- if (dev->edid && (memcmp(src, dev->edid, src_size) == 0)) {
- pr_info("sysfs written EDID is new default\n");
- dlfb_ops_set_par(fb_info);
- return src_size;
- } else
- return 0;
+ if (!dev->edid || memcmp(src, dev->edid, src_size))
+ return -EINVAL;
+
+ pr_info("sysfs written EDID is new default\n");
+ dlfb_ops_set_par(fb_info);
+ return src_size;
}
static ssize_t metrics_reset_store(struct device *fbdev,