Lines Matching refs:ptp
98 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); in ptp_clock_settime() local
100 return ptp->info->settime64(ptp->info, tp); in ptp_clock_settime()
105 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); in ptp_clock_gettime() local
108 if (ptp->info->gettimex64) in ptp_clock_gettime()
109 err = ptp->info->gettimex64(ptp->info, tp, NULL); in ptp_clock_gettime()
111 err = ptp->info->gettime64(ptp->info, tp); in ptp_clock_gettime()
117 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); in ptp_clock_adjtime() local
121 ops = ptp->info; in ptp_clock_adjtime()
148 ptp->dialed_frequency = tx->freq; in ptp_clock_adjtime()
150 tx->freq = ptp->dialed_frequency; in ptp_clock_adjtime()
171 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); in delete_ptp_clock() local
173 mutex_destroy(&ptp->tsevq_mux); in delete_ptp_clock()
174 mutex_destroy(&ptp->pincfg_mux); in delete_ptp_clock()
175 ida_simple_remove(&ptp_clocks_map, ptp->index); in delete_ptp_clock()
176 kfree(ptp); in delete_ptp_clock()
181 struct ptp_clock *ptp = container_of(work, struct ptp_clock, in ptp_aux_kworker() local
183 struct ptp_clock_info *info = ptp->info; in ptp_aux_kworker()
189 kthread_queue_delayed_work(ptp->kworker, &ptp->aux_work, delay); in ptp_aux_kworker()
197 struct ptp_clock *ptp; in ptp_clock_register() local
205 ptp = kzalloc(sizeof(struct ptp_clock), GFP_KERNEL); in ptp_clock_register()
206 if (ptp == NULL) in ptp_clock_register()
215 ptp->clock.ops = ptp_clock_ops; in ptp_clock_register()
216 ptp->clock.release = delete_ptp_clock; in ptp_clock_register()
217 ptp->info = info; in ptp_clock_register()
218 ptp->devid = MKDEV(major, index); in ptp_clock_register()
219 ptp->index = index; in ptp_clock_register()
220 spin_lock_init(&ptp->tsevq.lock); in ptp_clock_register()
221 mutex_init(&ptp->tsevq_mux); in ptp_clock_register()
222 mutex_init(&ptp->pincfg_mux); in ptp_clock_register()
223 init_waitqueue_head(&ptp->tsev_wq); in ptp_clock_register()
225 if (ptp->info->do_aux_work) { in ptp_clock_register()
226 kthread_init_delayed_work(&ptp->aux_work, ptp_aux_kworker); in ptp_clock_register()
227 ptp->kworker = kthread_create_worker(0, "ptp%d", ptp->index); in ptp_clock_register()
228 if (IS_ERR(ptp->kworker)) { in ptp_clock_register()
229 err = PTR_ERR(ptp->kworker); in ptp_clock_register()
235 err = ptp_populate_pin_groups(ptp); in ptp_clock_register()
240 ptp->dev = device_create_with_groups(ptp_class, parent, ptp->devid, in ptp_clock_register()
241 ptp, ptp->pin_attr_groups, in ptp_clock_register()
242 "ptp%d", ptp->index); in ptp_clock_register()
243 if (IS_ERR(ptp->dev)) { in ptp_clock_register()
244 err = PTR_ERR(ptp->dev); in ptp_clock_register()
255 ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS); in ptp_clock_register()
256 if (IS_ERR(ptp->pps_source)) { in ptp_clock_register()
257 err = PTR_ERR(ptp->pps_source); in ptp_clock_register()
264 err = posix_clock_register(&ptp->clock, ptp->devid); in ptp_clock_register()
270 return ptp; in ptp_clock_register()
273 if (ptp->pps_source) in ptp_clock_register()
274 pps_unregister_source(ptp->pps_source); in ptp_clock_register()
276 device_destroy(ptp_class, ptp->devid); in ptp_clock_register()
278 ptp_cleanup_pin_groups(ptp); in ptp_clock_register()
280 if (ptp->kworker) in ptp_clock_register()
281 kthread_destroy_worker(ptp->kworker); in ptp_clock_register()
283 mutex_destroy(&ptp->tsevq_mux); in ptp_clock_register()
284 mutex_destroy(&ptp->pincfg_mux); in ptp_clock_register()
287 kfree(ptp); in ptp_clock_register()
293 int ptp_clock_unregister(struct ptp_clock *ptp) in ptp_clock_unregister() argument
295 ptp->defunct = 1; in ptp_clock_unregister()
296 wake_up_interruptible(&ptp->tsev_wq); in ptp_clock_unregister()
298 if (ptp->kworker) { in ptp_clock_unregister()
299 kthread_cancel_delayed_work_sync(&ptp->aux_work); in ptp_clock_unregister()
300 kthread_destroy_worker(ptp->kworker); in ptp_clock_unregister()
304 if (ptp->pps_source) in ptp_clock_unregister()
305 pps_unregister_source(ptp->pps_source); in ptp_clock_unregister()
307 device_destroy(ptp_class, ptp->devid); in ptp_clock_unregister()
308 ptp_cleanup_pin_groups(ptp); in ptp_clock_unregister()
310 posix_clock_unregister(&ptp->clock); in ptp_clock_unregister()
315 void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event) in ptp_clock_event() argument
325 enqueue_external_timestamp(&ptp->tsevq, event); in ptp_clock_event()
326 wake_up_interruptible(&ptp->tsev_wq); in ptp_clock_event()
331 pps_event(ptp->pps_source, &evt, PTP_PPS_EVENT, NULL); in ptp_clock_event()
335 pps_event(ptp->pps_source, &event->pps_times, in ptp_clock_event()
342 int ptp_clock_index(struct ptp_clock *ptp) in ptp_clock_index() argument
344 return ptp->index; in ptp_clock_index()
348 int ptp_find_pin(struct ptp_clock *ptp, in ptp_find_pin() argument
354 mutex_lock(&ptp->pincfg_mux); in ptp_find_pin()
355 for (i = 0; i < ptp->info->n_pins; i++) { in ptp_find_pin()
356 if (ptp->info->pin_config[i].func == func && in ptp_find_pin()
357 ptp->info->pin_config[i].chan == chan) { in ptp_find_pin()
358 pin = &ptp->info->pin_config[i]; in ptp_find_pin()
362 mutex_unlock(&ptp->pincfg_mux); in ptp_find_pin()
368 int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay) in ptp_schedule_worker() argument
370 return kthread_mod_delayed_work(ptp->kworker, &ptp->aux_work, delay); in ptp_schedule_worker()