Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pps: default echo function

A default echo function has been provided so it is no longer an error when
you specify PPS_ECHOASSERT or PPS_ECHOCLEAR without an explicit echo
function. This allows some code re-use and also makes it easier to write
client drivers since the default echo function does not normally need to
change.

Signed-off-by: James Nuss <jamesnuss@nanometrics.ca>
Reviewed-by: Ben Gardiner <bengardiner@nanometrics.ca>
Acked-by: Rodolfo Giometti <giometti@linux.it>
Cc: Ricardo Martins <rasm@fe.up.pt>
Cc: Alexander Gordeev <lasaine@lvk.cs.msu.su>
Cc: Igor Plyatov <plyatov@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

James Nuss and committed by
Linus Torvalds
437c5341 842fa69f

+13 -28
-12
drivers/pps/clients/pps-ktimer.c
··· 52 52 } 53 53 54 54 /* 55 - * The echo function 56 - */ 57 - 58 - static void pps_ktimer_echo(struct pps_device *pps, int event, void *data) 59 - { 60 - dev_info(pps->dev, "echo %s %s\n", 61 - event & PPS_CAPTUREASSERT ? "assert" : "", 62 - event & PPS_CAPTURECLEAR ? "clear" : ""); 63 - } 64 - 65 - /* 66 55 * The PPS info struct 67 56 */ 68 57 ··· 61 72 .mode = PPS_CAPTUREASSERT | PPS_OFFSETASSERT | 62 73 PPS_ECHOASSERT | 63 74 PPS_CANWAIT | PPS_TSFMT_TSPEC, 64 - .echo = pps_ktimer_echo, 65 75 .owner = THIS_MODULE, 66 76 }; 67 77
-9
drivers/pps/clients/pps_parport.c
··· 133 133 return; 134 134 } 135 135 136 - /* the PPS echo function */ 137 - static void pps_echo(struct pps_device *pps, int event, void *data) 138 - { 139 - dev_info(pps->dev, "echo %s %s\n", 140 - event & PPS_CAPTUREASSERT ? "assert" : "", 141 - event & PPS_CAPTURECLEAR ? "clear" : ""); 142 - } 143 - 144 136 static void parport_attach(struct parport *port) 145 137 { 146 138 struct pps_client_pp *device; ··· 143 151 PPS_OFFSETASSERT | PPS_OFFSETCLEAR | \ 144 152 PPS_ECHOASSERT | PPS_ECHOCLEAR | \ 145 153 PPS_CANWAIT | PPS_TSFMT_TSPEC, 146 - .echo = pps_echo, 147 154 .owner = THIS_MODULE, 148 155 .dev = NULL 149 156 };
+13 -7
drivers/pps/kapi.c
··· 52 52 ts->sec += offset->sec; 53 53 } 54 54 55 + static void pps_echo_client_default(struct pps_device *pps, int event, 56 + void *data) 57 + { 58 + dev_info(pps->dev, "echo %s %s\n", 59 + event & PPS_CAPTUREASSERT ? "assert" : "", 60 + event & PPS_CAPTURECLEAR ? "clear" : ""); 61 + } 62 + 55 63 /* 56 64 * Exported functions 57 65 */ ··· 88 80 err = -EINVAL; 89 81 goto pps_register_source_exit; 90 82 } 91 - if ((info->mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) != 0 && 92 - info->echo == NULL) { 93 - pr_err("%s: echo function is not defined\n", 94 - info->name); 95 - err = -EINVAL; 96 - goto pps_register_source_exit; 97 - } 98 83 if ((info->mode & (PPS_TSFMT_TSPEC | PPS_TSFMT_NTPFP)) == 0) { 99 84 pr_err("%s: unspecified time format\n", 100 85 info->name); ··· 108 107 pps->params.api_version = PPS_API_VERS; 109 108 pps->params.mode = default_params; 110 109 pps->info = *info; 110 + 111 + /* check for default echo function */ 112 + if ((pps->info.mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) && 113 + pps->info.echo == NULL) 114 + pps->info.echo = pps_echo_client_default; 111 115 112 116 init_waitqueue_head(&pps->queue); 113 117 spin_lock_init(&pps->lock);