Commit 261e7676 authored by Dan Carpenter's avatar Dan Carpenter Committed by Florian Tobias Schandinat

smscufx: change edid data to u8 instead of char

Having "edid" as char caused a problem in ufx_read_edid() where we
compared "edid[i] != 0xFF".  Because of the type difference, the
condition was never true and the error checking failed.

Also I added a __user notation to silence a sparse complaint.
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent 2b7a905d
...@@ -103,7 +103,7 @@ struct ufx_data { ...@@ -103,7 +103,7 @@ struct ufx_data {
struct delayed_work free_framebuffer_work; struct delayed_work free_framebuffer_work;
atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */ atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */
atomic_t lost_pixels; /* 1 = a render op failed. Need screen refresh */ 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 */ u8 *edid; /* null until we read edid from hw or get from sysfs */
size_t edid_size; size_t edid_size;
u32 pseudo_palette[256]; u32 pseudo_palette[256];
}; };
...@@ -993,7 +993,7 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd, ...@@ -993,7 +993,7 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,
/* TODO: Update X server to get this from sysfs instead */ /* TODO: Update X server to get this from sysfs instead */
if (cmd == UFX_IOCTL_RETURN_EDID) { if (cmd == UFX_IOCTL_RETURN_EDID) {
char *edid = (char *)arg; u8 __user *edid = (u8 __user *)arg;
if (copy_to_user(edid, dev->edid, dev->edid_size)) if (copy_to_user(edid, dev->edid, dev->edid_size))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -1428,7 +1428,7 @@ static int ufx_i2c_wait_busy(struct ufx_data *dev) ...@@ -1428,7 +1428,7 @@ static int ufx_i2c_wait_busy(struct ufx_data *dev)
} }
/* reads a 128-byte EDID block from the currently selected port and TAR */ /* reads a 128-byte EDID block from the currently selected port and TAR */
static int ufx_read_edid(struct ufx_data *dev, char *edid, int edid_len) static int ufx_read_edid(struct ufx_data *dev, u8 *edid, int edid_len)
{ {
int i, j, status; int i, j, status;
u32 *edid_u32 = (u32 *)edid; u32 *edid_u32 = (u32 *)edid;
...@@ -1491,7 +1491,7 @@ static int ufx_setup_modes(struct ufx_data *dev, struct fb_info *info, ...@@ -1491,7 +1491,7 @@ static int ufx_setup_modes(struct ufx_data *dev, struct fb_info *info,
char *default_edid, size_t default_edid_size) char *default_edid, size_t default_edid_size)
{ {
const struct fb_videomode *default_vmode = NULL; const struct fb_videomode *default_vmode = NULL;
char *edid; u8 *edid;
int i, result = 0, tries = 3; int i, result = 0, tries = 3;
if (info->dev) /* only use mutex if info has been registered */ if (info->dev) /* only use mutex if info has been registered */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment