dev->em28xx_sensor = EM28XX_MT9V011;
                dev->sensor_xres = 640;
                dev->sensor_yres = 480;
+               dev->sensor_xtal = 6300000;
                break;
        default:
                printk("Unknown Micron Sensor 0x%04x\n", be16_to_cpu(version));
                v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
                        "tvp5150", "tvp5150", tvp5150_addrs);
 
-       if (dev->em28xx_sensor == EM28XX_MT9V011)
-               v4l2_i2c_new_probed_subdev(&dev->v4l2_dev, &dev->i2c_adap,
-                       "mt9v011", "mt9v011", mt9v011_addrs);
+       if (dev->em28xx_sensor == EM28XX_MT9V011) {
+               struct v4l2_subdev *sd;
+
+               sd = v4l2_i2c_new_probed_subdev(&dev->v4l2_dev,
+                        &dev->i2c_adap, "mt9v011", "mt9v011", mt9v011_addrs);
+               v4l2_subdev_call(sd, core, s_config, 0, &dev->sensor_xtal);
+       }
 
        if (dev->board.adecoder == EM28XX_TVAUDIO)
                v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap,
 
        struct v4l2_device v4l2_dev;
        struct em28xx_board board;
 
+       /* Webcam specific fields */
        enum em28xx_sensor em28xx_sensor;
        int sensor_xres, sensor_yres;
+       int sensor_xtal;
 
        unsigned int stream_on:1;       /* Locks streams */
        unsigned int has_audio_class:1;