return ret;
 }
 
+static const char * const ov2640_test_pattern_menu[] = {
+       "Disabled",
+       "Eight Vertical Colour Bars",
+};
+
 /*
  * functions
  */
        case V4L2_CID_HFLIP:
                val = ctrl->val ? REG04_HFLIP_IMG : 0x00;
                return ov2640_mask_set(client, REG04, REG04_HFLIP_IMG, val);
+       case V4L2_CID_TEST_PATTERN:
+               val = ctrl->val ? COM7_COLOR_BAR_TEST : 0x00;
+               return ov2640_mask_set(client, COM7, COM7_COLOR_BAR_TEST, val);
        }
 
        return -EINVAL;
        v4l2_i2c_subdev_init(&priv->subdev, client, &ov2640_subdev_ops);
        priv->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
        mutex_init(&priv->lock);
-       v4l2_ctrl_handler_init(&priv->hdl, 2);
+       v4l2_ctrl_handler_init(&priv->hdl, 3);
        priv->hdl.lock = &priv->lock;
        v4l2_ctrl_new_std(&priv->hdl, &ov2640_ctrl_ops,
                        V4L2_CID_VFLIP, 0, 1, 1, 0);
        v4l2_ctrl_new_std(&priv->hdl, &ov2640_ctrl_ops,
                        V4L2_CID_HFLIP, 0, 1, 1, 0);
+       v4l2_ctrl_new_std_menu_items(&priv->hdl, &ov2640_ctrl_ops,
+                       V4L2_CID_TEST_PATTERN,
+                       ARRAY_SIZE(ov2640_test_pattern_menu) - 1, 0, 0,
+                       ov2640_test_pattern_menu);
        priv->subdev.ctrl_handler = &priv->hdl;
        if (priv->hdl.error) {
                ret = priv->hdl.error;