diff --git a/drivers/char/broadcom/vc_sm/vmcs_sm.c b/drivers/char/broadcom/vc_sm/vmcs_sm.c index 0bfb42e40de781..b62a3b2f21b868 100644 --- a/drivers/char/broadcom/vc_sm/vmcs_sm.c +++ b/drivers/char/broadcom/vc_sm/vmcs_sm.c @@ -1368,8 +1368,8 @@ static int vc_sm_mmap(struct file *file, struct vm_area_struct *vma) return 0; error: - vmcs_sm_release_resource(resource, 0); resource->res_stats[MAP_FAIL]++; + vmcs_sm_release_resource(resource, 0); return ret; } diff --git a/drivers/media/platform/bcm2835/controls.c b/drivers/media/platform/bcm2835/controls.c index 3017b9497a4356..f9f903f9574d57 100644 --- a/drivers/media/platform/bcm2835/controls.c +++ b/drivers/media/platform/bcm2835/controls.c @@ -845,6 +845,8 @@ static int ctrl_set_scene_mode(struct bm2835_mmal_dev *dev, break; } } + if (!scene) + return -EINVAL; if (i >= ARRAY_SIZE(scene_configs)) return -EINVAL; diff --git a/drivers/media/platform/bcm2835/mmal-vchiq.c b/drivers/media/platform/bcm2835/mmal-vchiq.c index 76f249e247bd5d..781322542d5a82 100644 --- a/drivers/media/platform/bcm2835/mmal-vchiq.c +++ b/drivers/media/platform/bcm2835/mmal-vchiq.c @@ -851,7 +851,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance, sizeof(union mmal_es_specific_format)); m.u.port_info_set.format.extradata_size = port->format.extradata_size; - memcpy(rmsg->u.port_info_set.extradata, port->format.extradata, + memcpy(&m.u.port_info_set.extradata, port->format.extradata, port->format.extradata_size); ret = send_synchronous_mmal_msg(instance, &m, diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c index 05e79794761628..384acb8d2eae12 100644 --- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c @@ -46,6 +46,7 @@ int vchiu_queue_init(VCHIU_QUEUE_T *queue, int size) queue->size = size; queue->read = 0; queue->write = 0; + queue->initialized = 1; sema_init(&queue->pop, 0); sema_init(&queue->push, 0); @@ -76,6 +77,9 @@ int vchiu_queue_is_full(VCHIU_QUEUE_T *queue) void vchiu_queue_push(VCHIU_QUEUE_T *queue, VCHIQ_HEADER_T *header) { + if (!queue->initialized) + return; + while (queue->write == queue->read + queue->size) { if (down_interruptible(&queue->pop) != 0) { flush_signals(current); diff --git a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h index f4d0b66e038e78..4055d4bf9f740a 100644 --- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h @@ -60,6 +60,7 @@ typedef struct { int size; int read; int write; + int initialized; struct semaphore pop; struct semaphore push; diff --git a/drivers/video/fbdev/bcm2708_fb.c b/drivers/video/fbdev/bcm2708_fb.c index 06a96d16dc8fd0..0f62d7645d8e42 100644 --- a/drivers/video/fbdev/bcm2708_fb.c +++ b/drivers/video/fbdev/bcm2708_fb.c @@ -263,12 +263,6 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var, if (var->yoffset > var->yres_virtual - var->yres) var->yoffset = var->yres_virtual - var->yres - 1; - yres = var->yres; - if (var->vmode & FB_VMODE_DOUBLE) - yres *= 2; - else if (var->vmode & FB_VMODE_INTERLACED) - yres = (yres + 1) / 2; - return 0; } @@ -426,7 +420,7 @@ static int bcm2708_fb_blank(int blank_mode, struct fb_info *info) static int bcm2708_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) { - s32 result = -1; + s32 result; info->var.xoffset = var->xoffset; info->var.yoffset = var->yoffset; result = bcm2708_fb_set_par(info);