Hi! > Thanks for the update. > > On Wed, Dec 14, 2016 at 01:24:51PM +0100, Pavel Machek wrote: > ... > > +static int et8ek8_set_ctrl(struct v4l2_ctrl *ctrl) > > +{ > > + struct et8ek8_sensor *sensor = > > + container_of(ctrl->handler, struct et8ek8_sensor, ctrl_handler); > > + > > + switch (ctrl->id) { > > + case V4L2_CID_GAIN: > > + return et8ek8_set_gain(sensor, ctrl->val); > > + > > + case V4L2_CID_EXPOSURE: > > + { > > + int rows; > > + struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); > > + rows = ctrl->val; > > + return et8ek8_i2c_write_reg(client, ET8EK8_REG_16BIT, 0x1243, > > + swab16(rows)); > > Why swab16()? Doesn't the et8ek8_i2c_write_reg() already do the right thing? > > 16-bit writes aren't used elsewhere... and the register address and value > seem to have different endianness there, it looks like a bug to me in that > function. I'm pretty sure I did not invent that swab16(). I checked, and exposure seems to work properly. I tried swapping the bytes, but then exposure did not seem to work. So this one seems to be correct. Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html