}
 }
 
-static void peak_usb_add_us(struct timeval *tv, u32 delta_us)
-{
-       /* number of s. to add to final time */
-       u32 delta_s = delta_us / 1000000;
-
-       delta_us -= delta_s * 1000000;
-
-       tv->tv_usec += delta_us;
-       if (tv->tv_usec >= 1000000) {
-               tv->tv_usec -= 1000000;
-               delta_s++;
-       }
-       tv->tv_sec += delta_s;
-}
-
 /*
  * sometimes, another now may be  more recent than current one...
  */
        time_ref->ts_dev_2 = ts_now;
 
        /* should wait at least two passes before computing */
-       if (time_ref->tv_host.tv_sec > 0) {
+       if (ktime_to_ns(time_ref->tv_host) > 0) {
                u32 delta_ts = time_ref->ts_dev_2 - time_ref->ts_dev_1;
 
                if (time_ref->ts_dev_2 < time_ref->ts_dev_1)
  */
 void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now)
 {
-       if (time_ref->tv_host_0.tv_sec == 0) {
+       if (ktime_to_ns(time_ref->tv_host_0) == 0) {
                /* use monotonic clock to correctly compute further deltas */
-               time_ref->tv_host_0 = ktime_to_timeval(ktime_get());
-               time_ref->tv_host.tv_sec = 0;
+               time_ref->tv_host_0 = ktime_get();
+               time_ref->tv_host = ktime_set(0, 0);
        } else {
                /*
-                * delta_us should not be >= 2^32 => delta_s should be < 4294
+                * delta_us should not be >= 2^32 => delta should be < 4294s
                 * handle 32-bits wrapping here: if count of s. reaches 4200,
                 * reset counters and change time base
                 */
-               if (time_ref->tv_host.tv_sec != 0) {
-                       u32 delta_s = time_ref->tv_host.tv_sec
-                                               - time_ref->tv_host_0.tv_sec;
-                       if (delta_s > 4200) {
+               if (ktime_to_ns(time_ref->tv_host)) {
+                       ktime_t delta = ktime_sub(time_ref->tv_host,
+                                                 time_ref->tv_host_0);
+                       if (ktime_to_ns(delta) > (4200ull * NSEC_PER_SEC)) {
                                time_ref->tv_host_0 = time_ref->tv_host;
                                time_ref->ts_total = 0;
                        }
                }
 
-               time_ref->tv_host = ktime_to_timeval(ktime_get());
+               time_ref->tv_host = ktime_get();
                time_ref->tick_count++;
        }
 
 }
 
 /*
- * compute timeval according to current ts and time_ref data
+ * compute time according to current ts and time_ref data
  */
 void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *time)
 {
-       /* protect from getting timeval before setting now */
-       if (time_ref->tv_host.tv_sec > 0) {
-               struct timeval tv;
+       /* protect from getting time before setting now */
+       if (ktime_to_ns(time_ref->tv_host)) {
                u64 delta_us;
 
                delta_us = ts - time_ref->ts_dev_2;
                delta_us *= time_ref->adapter->us_per_ts_scale;
                delta_us >>= time_ref->adapter->us_per_ts_shift;
 
-               tv = time_ref->tv_host_0;
-               peak_usb_add_us(&tv, (u32)delta_us);
-               *time = timeval_to_ktime(tv);
+               *time = ktime_add_us(time_ref->tv_host_0, delta_us);
        } else {
                *time = ktime_get();
        }