struct em28xx      *dev = fh->dev;
        int                rc;
 
+       if (dev->board.is_webcam)
+               return -ENOTTY;
        rc = check_dev(dev);
        if (rc < 0)
                return rc;
        struct em28xx      *dev = fh->dev;
        int                rc;
 
+       if (dev->board.is_webcam)
+               return -ENOTTY;
        rc = check_dev(dev);
        if (rc < 0)
                return rc;
        struct v4l2_format f;
        int                rc;
 
+       if (dev->board.is_webcam)
+               return -ENOTTY;
+       if (*norm == dev->norm)
+               return 0;
        rc = check_dev(dev);
        if (rc < 0)
                return rc;
 
+       if (videobuf_queue_is_busy(&fh->vb_vidq)) {
+               em28xx_errdev("%s queue busy\n", __func__);
+               return -EBUSY;
+       }
+
        dev->norm = *norm;
 
        /* Adjusts width/height, if needed */
-       f.fmt.pix.width = dev->width;
-       f.fmt.pix.height = dev->height;
+       f.fmt.pix.width = 720;
+       f.fmt.pix.height = (*norm & V4L2_STD_525_60) ? 480 : 576;
        vidioc_try_fmt_vid_cap(file, priv, &f);
 
        /* set new image size */
                i->type = V4L2_INPUT_TYPE_TUNER;
 
        i->std = dev->vdev->tvnorms;
+       /* webcams do not have the STD API */
+       if (dev->board.is_webcam)
+               i->capabilities = 0;
 
        return 0;
 }
        .ioctl_ops                  = &video_ioctl_ops,
 
        .tvnorms                    = V4L2_STD_ALL,
-       .current_norm               = V4L2_STD_PAL,
 };
 
 static const struct v4l2_file_operations radio_fops = {
        vfd->debug      = video_debug;
        vfd->lock       = &dev->lock;
        set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
+       if (dev->board.is_webcam)
+               vfd->tvnorms = 0;
 
        snprintf(vfd->name, sizeof(vfd->name), "%s %s",
                 dev->name, type_name);
                dev->name, EM28XX_VERSION);
 
        /* set default norm */
-       dev->norm = em28xx_video_template.current_norm;
+       dev->norm = V4L2_STD_PAL;
        v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
        dev->interlaced = EM28XX_INTERLACED_DEFAULT;