return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
        case V4L2_CTRL_TYPE_INTEGER64:
                return ptr1.p_s64[idx] == ptr2.p_s64[idx];
+       case V4L2_CTRL_TYPE_U8:
+               return ptr1.p_u8[idx] == ptr2.p_u8[idx];
+       case V4L2_CTRL_TYPE_U16:
+               return ptr1.p_u16[idx] == ptr2.p_u16[idx];
        default:
                if (ctrl->is_int)
                        return ptr1.p_s32[idx] == ptr2.p_s32[idx];
        case V4L2_CTRL_TYPE_BOOLEAN:
                ptr.p_s32[idx] = ctrl->default_value;
                break;
+       case V4L2_CTRL_TYPE_U8:
+               ptr.p_u8[idx] = ctrl->default_value;
+               break;
+       case V4L2_CTRL_TYPE_U16:
+               ptr.p_u16[idx] = ctrl->default_value;
+               break;
        default:
                idx *= ctrl->elem_size;
                memset(ptr.p + idx, 0, ctrl->elem_size);
        case V4L2_CTRL_TYPE_STRING:
                pr_cont("%s", ptr.p_char);
                break;
+       case V4L2_CTRL_TYPE_U8:
+               pr_cont("%u", (unsigned)*ptr.p_u8);
+               break;
+       case V4L2_CTRL_TYPE_U16:
+               pr_cont("%u", (unsigned)*ptr.p_u16);
+               break;
        default:
                pr_cont("unknown type %d", ctrl->type);
                break;
                return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
        case V4L2_CTRL_TYPE_INTEGER64:
                return ROUND_TO_RANGE(ptr.p_s64[idx], u64, ctrl);
+       case V4L2_CTRL_TYPE_U8:
+               return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
+       case V4L2_CTRL_TYPE_U16:
+               return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
 
        case V4L2_CTRL_TYPE_BOOLEAN:
                ptr.p_s32[idx] = !!ptr.p_s32[idx];
                if (step != 1 || max > 1 || min < 0)
                        return -ERANGE;
                /* fall through */
+       case V4L2_CTRL_TYPE_U8:
+       case V4L2_CTRL_TYPE_U16:
        case V4L2_CTRL_TYPE_INTEGER:
        case V4L2_CTRL_TYPE_INTEGER64:
                if (step == 0 || min > max || def < min || def > max)
        }
        is_array = nr_of_dims > 0;
 
-       if (type == V4L2_CTRL_TYPE_INTEGER64)
+       /* Prefill elem_size for all types handled by std_type_ops */
+       switch (type) {
+       case V4L2_CTRL_TYPE_INTEGER64:
                elem_size = sizeof(s64);
-       else if (type == V4L2_CTRL_TYPE_STRING)
+               break;
+       case V4L2_CTRL_TYPE_STRING:
                elem_size = max + 1;
-       else if (type < V4L2_CTRL_COMPOUND_TYPES)
-               elem_size = sizeof(s32);
+               break;
+       case V4L2_CTRL_TYPE_U8:
+               elem_size = sizeof(u8);
+               break;
+       case V4L2_CTRL_TYPE_U16:
+               elem_size = sizeof(u16);
+               break;
+       default:
+               if (type < V4L2_CTRL_COMPOUND_TYPES)
+                       elem_size = sizeof(s32);
+               break;
+       }
        tot_ctrl_size = elem_size * elems;
 
        /* Sanity checks */
        case V4L2_CTRL_TYPE_MENU:
        case V4L2_CTRL_TYPE_INTEGER_MENU:
        case V4L2_CTRL_TYPE_BITMASK:
+       case V4L2_CTRL_TYPE_U8:
+       case V4L2_CTRL_TYPE_U16:
                if (ctrl->is_array)
                        return -EINVAL;
                ret = check_range(ctrl->type, min, max, step, def);