root/drivers/pps/clients/pps-ktimer.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pps_ktimer_event
  2. pps_ktimer_exit
  3. pps_ktimer_init

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * pps-ktimer.c -- kernel timer test client
   4  *
   5  * Copyright (C) 2005-2006   Rodolfo Giometti <giometti@linux.it>
   6  */
   7 
   8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9 
  10 #include <linux/kernel.h>
  11 #include <linux/module.h>
  12 #include <linux/init.h>
  13 #include <linux/time.h>
  14 #include <linux/timer.h>
  15 #include <linux/pps_kernel.h>
  16 
  17 /*
  18  * Global variables
  19  */
  20 
  21 static struct pps_device *pps;
  22 static struct timer_list ktimer;
  23 
  24 /*
  25  * The kernel timer
  26  */
  27 
  28 static void pps_ktimer_event(struct timer_list *unused)
  29 {
  30         struct pps_event_time ts;
  31 
  32         /* First of all we get the time stamp... */
  33         pps_get_ts(&ts);
  34 
  35         pps_event(pps, &ts, PPS_CAPTUREASSERT, NULL);
  36 
  37         mod_timer(&ktimer, jiffies + HZ);
  38 }
  39 
  40 /*
  41  * The PPS info struct
  42  */
  43 
  44 static struct pps_source_info pps_ktimer_info = {
  45         .name           = "ktimer",
  46         .path           = "",
  47         .mode           = PPS_CAPTUREASSERT | PPS_OFFSETASSERT |
  48                           PPS_ECHOASSERT |
  49                           PPS_CANWAIT | PPS_TSFMT_TSPEC,
  50         .owner          = THIS_MODULE,
  51 };
  52 
  53 /*
  54  * Module staff
  55  */
  56 
  57 static void __exit pps_ktimer_exit(void)
  58 {
  59         dev_info(pps->dev, "ktimer PPS source unregistered\n");
  60 
  61         del_timer_sync(&ktimer);
  62         pps_unregister_source(pps);
  63 }
  64 
  65 static int __init pps_ktimer_init(void)
  66 {
  67         pps = pps_register_source(&pps_ktimer_info,
  68                                 PPS_CAPTUREASSERT | PPS_OFFSETASSERT);
  69         if (IS_ERR(pps)) {
  70                 pr_err("cannot register PPS source\n");
  71                 return PTR_ERR(pps);
  72         }
  73 
  74         timer_setup(&ktimer, pps_ktimer_event, 0);
  75         mod_timer(&ktimer, jiffies + HZ);
  76 
  77         dev_info(pps->dev, "ktimer PPS source registered\n");
  78 
  79         return 0;
  80 }
  81 
  82 module_init(pps_ktimer_init);
  83 module_exit(pps_ktimer_exit);
  84 
  85 MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
  86 MODULE_DESCRIPTION("dummy PPS source by using a kernel timer (just for debug)");
  87 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */