On Sun, Dec 2, 2018 at 2:47 PM Gabriel Francisco Mandaji <gfmandaji@xxxxxxxxx> wrote: > @@ -667,10 +653,28 @@ static void vivid_overlay(struct vivid_dev *dev, struct vivid_buffer *buf) > } > } > > +static void vivid_cap_update_frame_period(struct vivid_dev *dev) > +{ > + u64 f_period; > + > + f_period = (u64)dev->timeperframe_vid_cap.numerator * 1000000000; > + do_div(f_period, dev->timeperframe_vid_cap.denominator); > + if (dev->field_cap == V4L2_FIELD_ALTERNATE) > + do_div(f_period, 2); > + /* > + * If "End of Frame", then offset the exposure time by 0.9 > + * of the frame period. > + */ > + dev->cap_frame_eof_offset = f_period * 9; > + do_div(dev->cap_frame_eof_offset, 10); > + dev->cap_frame_period = f_period; > +} Doing two or three do_div() operations is going to make this rather expensive on 32-bit architectures, and it looks like this happens for each frame? Since each one is a multiplication followed by a division, could this be changed to using a different factor followed by a bit shift? Arnd