Commit 6c542426 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Mauro Carvalho Chehab

media: solo6x10: use ktime_get_ts64() for time sync

solo6x10 correctly deals with time stamps and will never
suffer from overflows, but it uses the deprecated 'struct timespec'
type and 'ktime_get_ts()' interface to read the monotonic clock.

This changes it to use ktime_get_ts64() instead, so we can
eventually remove ktime_get_ts().
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarIsmael Luceno <ismael@iodev.co.uk>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent f7d12fea
...@@ -47,18 +47,19 @@ MODULE_PARM_DESC(full_eeprom, "Allow access to full 128B EEPROM (dangerous)"); ...@@ -47,18 +47,19 @@ MODULE_PARM_DESC(full_eeprom, "Allow access to full 128B EEPROM (dangerous)");
static void solo_set_time(struct solo_dev *solo_dev) static void solo_set_time(struct solo_dev *solo_dev)
{ {
struct timespec ts; struct timespec64 ts;
ktime_get_ts(&ts); ktime_get_ts64(&ts);
solo_reg_write(solo_dev, SOLO_TIMER_SEC, ts.tv_sec); /* no overflow because we use monotonic timestamps */
solo_reg_write(solo_dev, SOLO_TIMER_USEC, ts.tv_nsec / NSEC_PER_USEC); solo_reg_write(solo_dev, SOLO_TIMER_SEC, (u32)ts.tv_sec);
solo_reg_write(solo_dev, SOLO_TIMER_USEC, (u32)ts.tv_nsec / NSEC_PER_USEC);
} }
static void solo_timer_sync(struct solo_dev *solo_dev) static void solo_timer_sync(struct solo_dev *solo_dev)
{ {
u32 sec, usec; u32 sec, usec;
struct timespec ts; struct timespec64 ts;
long diff; long diff;
if (solo_dev->type != SOLO_DEV_6110) if (solo_dev->type != SOLO_DEV_6110)
...@@ -72,11 +73,11 @@ static void solo_timer_sync(struct solo_dev *solo_dev) ...@@ -72,11 +73,11 @@ static void solo_timer_sync(struct solo_dev *solo_dev)
sec = solo_reg_read(solo_dev, SOLO_TIMER_SEC); sec = solo_reg_read(solo_dev, SOLO_TIMER_SEC);
usec = solo_reg_read(solo_dev, SOLO_TIMER_USEC); usec = solo_reg_read(solo_dev, SOLO_TIMER_USEC);
ktime_get_ts(&ts); ktime_get_ts64(&ts);
diff = (long)ts.tv_sec - (long)sec; diff = (s32)ts.tv_sec - (s32)sec;
diff = (diff * 1000000) diff = (diff * 1000000)
+ ((long)(ts.tv_nsec / NSEC_PER_USEC) - (long)usec); + ((s32)(ts.tv_nsec / NSEC_PER_USEC) - (s32)usec);
if (diff > 1000 || diff < -1000) { if (diff > 1000 || diff < -1000) {
solo_set_time(solo_dev); solo_set_time(solo_dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment