s_register was assigning the return code to (unsigned)reg->val, rather than
errCode, which it what it would return.  Except reg->val can't be < 0, so it
would never actually return an error.
g_register never actually put the value it read into reg->val.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
                    __FUNCTION__, errCode);
                return errCode;
        }
+       reg->val = errCode;
        return 0;
 }
 
        if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
                return -EINVAL;
        /* NT100x has a 8-bit register space */
-       reg->val = (u8)usbvision_write_reg(usbvision, reg->reg&0xff, reg->val);
-       if (reg->val < 0) {
+       errCode = usbvision_write_reg(usbvision, reg->reg&0xff, reg->val);
+       if (errCode < 0) {
                err("%s: VIDIOC_DBG_S_REGISTER failed: error %d",
                    __FUNCTION__, errCode);
                return errCode;