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>
This commit is contained in:
parent
842fa69f3e
commit
437c534186
3 changed files with 13 additions and 28 deletions
|
@ -51,17 +51,6 @@ static void pps_ktimer_event(unsigned long ptr)
|
||||||
mod_timer(&ktimer, jiffies + HZ);
|
mod_timer(&ktimer, jiffies + HZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The echo function
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void pps_ktimer_echo(struct pps_device *pps, int event, void *data)
|
|
||||||
{
|
|
||||||
dev_info(pps->dev, "echo %s %s\n",
|
|
||||||
event & PPS_CAPTUREASSERT ? "assert" : "",
|
|
||||||
event & PPS_CAPTURECLEAR ? "clear" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The PPS info struct
|
* The PPS info struct
|
||||||
*/
|
*/
|
||||||
|
@ -72,7 +61,6 @@ static struct pps_source_info pps_ktimer_info = {
|
||||||
.mode = PPS_CAPTUREASSERT | PPS_OFFSETASSERT |
|
.mode = PPS_CAPTUREASSERT | PPS_OFFSETASSERT |
|
||||||
PPS_ECHOASSERT |
|
PPS_ECHOASSERT |
|
||||||
PPS_CANWAIT | PPS_TSFMT_TSPEC,
|
PPS_CANWAIT | PPS_TSFMT_TSPEC,
|
||||||
.echo = pps_ktimer_echo,
|
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -133,14 +133,6 @@ static void parport_irq(void *handle)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the PPS echo function */
|
|
||||||
static void pps_echo(struct pps_device *pps, int event, void *data)
|
|
||||||
{
|
|
||||||
dev_info(pps->dev, "echo %s %s\n",
|
|
||||||
event & PPS_CAPTUREASSERT ? "assert" : "",
|
|
||||||
event & PPS_CAPTURECLEAR ? "clear" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void parport_attach(struct parport *port)
|
static void parport_attach(struct parport *port)
|
||||||
{
|
{
|
||||||
struct pps_client_pp *device;
|
struct pps_client_pp *device;
|
||||||
|
@ -151,7 +143,6 @@ static void parport_attach(struct parport *port)
|
||||||
PPS_OFFSETASSERT | PPS_OFFSETCLEAR | \
|
PPS_OFFSETASSERT | PPS_OFFSETCLEAR | \
|
||||||
PPS_ECHOASSERT | PPS_ECHOCLEAR | \
|
PPS_ECHOASSERT | PPS_ECHOCLEAR | \
|
||||||
PPS_CANWAIT | PPS_TSFMT_TSPEC,
|
PPS_CANWAIT | PPS_TSFMT_TSPEC,
|
||||||
.echo = pps_echo,
|
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.dev = NULL
|
.dev = NULL
|
||||||
};
|
};
|
||||||
|
|
|
@ -52,6 +52,14 @@ static void pps_add_offset(struct pps_ktime *ts, struct pps_ktime *offset)
|
||||||
ts->sec += offset->sec;
|
ts->sec += offset->sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pps_echo_client_default(struct pps_device *pps, int event,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
dev_info(pps->dev, "echo %s %s\n",
|
||||||
|
event & PPS_CAPTUREASSERT ? "assert" : "",
|
||||||
|
event & PPS_CAPTURECLEAR ? "clear" : "");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Exported functions
|
* Exported functions
|
||||||
*/
|
*/
|
||||||
|
@ -80,13 +88,6 @@ struct pps_device *pps_register_source(struct pps_source_info *info,
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto pps_register_source_exit;
|
goto pps_register_source_exit;
|
||||||
}
|
}
|
||||||
if ((info->mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) != 0 &&
|
|
||||||
info->echo == NULL) {
|
|
||||||
pr_err("%s: echo function is not defined\n",
|
|
||||||
info->name);
|
|
||||||
err = -EINVAL;
|
|
||||||
goto pps_register_source_exit;
|
|
||||||
}
|
|
||||||
if ((info->mode & (PPS_TSFMT_TSPEC | PPS_TSFMT_NTPFP)) == 0) {
|
if ((info->mode & (PPS_TSFMT_TSPEC | PPS_TSFMT_NTPFP)) == 0) {
|
||||||
pr_err("%s: unspecified time format\n",
|
pr_err("%s: unspecified time format\n",
|
||||||
info->name);
|
info->name);
|
||||||
|
@ -108,6 +109,11 @@ struct pps_device *pps_register_source(struct pps_source_info *info,
|
||||||
pps->params.mode = default_params;
|
pps->params.mode = default_params;
|
||||||
pps->info = *info;
|
pps->info = *info;
|
||||||
|
|
||||||
|
/* check for default echo function */
|
||||||
|
if ((pps->info.mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) &&
|
||||||
|
pps->info.echo == NULL)
|
||||||
|
pps->info.echo = pps_echo_client_default;
|
||||||
|
|
||||||
init_waitqueue_head(&pps->queue);
|
init_waitqueue_head(&pps->queue);
|
||||||
spin_lock_init(&pps->lock);
|
spin_lock_init(&pps->lock);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue