Lines Matching refs:pps

55 static void pps_echo_client_default(struct pps_device *pps, int event,  in pps_echo_client_default()  argument
58 dev_info(pps->dev, "echo %s %s\n", in pps_echo_client_default()
81 struct pps_device *pps; in pps_register_source() local
99 pps = kzalloc(sizeof(struct pps_device), GFP_KERNEL); in pps_register_source()
100 if (pps == NULL) { in pps_register_source()
108 pps->params.api_version = PPS_API_VERS; in pps_register_source()
109 pps->params.mode = default_params; in pps_register_source()
110 pps->info = *info; in pps_register_source()
113 if ((pps->info.mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) && in pps_register_source()
114 pps->info.echo == NULL) in pps_register_source()
115 pps->info.echo = pps_echo_client_default; in pps_register_source()
117 init_waitqueue_head(&pps->queue); in pps_register_source()
118 spin_lock_init(&pps->lock); in pps_register_source()
121 err = pps_register_cdev(pps); in pps_register_source()
128 dev_info(pps->dev, "new PPS source %s\n", info->name); in pps_register_source()
130 return pps; in pps_register_source()
133 kfree(pps); in pps_register_source()
149 void pps_unregister_source(struct pps_device *pps) in pps_unregister_source() argument
151 pps_kc_remove(pps); in pps_unregister_source()
152 pps_unregister_cdev(pps); in pps_unregister_source()
172 void pps_event(struct pps_device *pps, struct pps_event_time *ts, int event, in pps_event() argument
182 dev_dbg(pps->dev, "PPS event at %ld.%09ld\n", in pps_event()
187 spin_lock_irqsave(&pps->lock, flags); in pps_event()
190 if ((pps->params.mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR))) in pps_event()
191 pps->info.echo(pps, event, data); in pps_event()
194 pps->current_mode = pps->params.mode; in pps_event()
195 if (event & pps->params.mode & PPS_CAPTUREASSERT) { in pps_event()
197 if (pps->params.mode & PPS_OFFSETASSERT) in pps_event()
199 &pps->params.assert_off_tu); in pps_event()
202 pps->assert_tu = ts_real; in pps_event()
203 pps->assert_sequence++; in pps_event()
204 dev_dbg(pps->dev, "capture assert seq #%u\n", in pps_event()
205 pps->assert_sequence); in pps_event()
209 if (event & pps->params.mode & PPS_CAPTURECLEAR) { in pps_event()
211 if (pps->params.mode & PPS_OFFSETCLEAR) in pps_event()
213 &pps->params.clear_off_tu); in pps_event()
216 pps->clear_tu = ts_real; in pps_event()
217 pps->clear_sequence++; in pps_event()
218 dev_dbg(pps->dev, "capture clear seq #%u\n", in pps_event()
219 pps->clear_sequence); in pps_event()
224 pps_kc_event(pps, ts, event); in pps_event()
228 pps->last_ev++; in pps_event()
229 wake_up_interruptible_all(&pps->queue); in pps_event()
231 kill_fasync(&pps->async_queue, SIGIO, POLL_IN); in pps_event()
234 spin_unlock_irqrestore(&pps->lock, flags); in pps_event()