Lines Matching refs:ptp

99 	struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock);
101 return ptp->info->settime64(ptp->info, tp);
106 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock);
109 if (ptp->info->gettimex64)
110 err = ptp->info->gettimex64(ptp->info, tp, NULL);
112 err = ptp->info->gettime64(ptp->info, tp);
118 struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock);
122 ops = ptp->info;
149 ptp->dialed_frequency = tx->freq;
160 tx->freq = ptp->dialed_frequency;
181 struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev);
183 ptp_cleanup_pin_groups(ptp);
184 mutex_destroy(&ptp->tsevq_mux);
185 mutex_destroy(&ptp->pincfg_mux);
186 ida_simple_remove(&ptp_clocks_map, ptp->index);
187 kfree(ptp);
192 struct ptp_clock *ptp = container_of(work, struct ptp_clock,
194 struct ptp_clock_info *info = ptp->info;
200 kthread_queue_delayed_work(ptp->kworker, &ptp->aux_work, delay);
208 struct ptp_clock *ptp;
216 ptp = kzalloc(sizeof(struct ptp_clock), GFP_KERNEL);
217 if (ptp == NULL)
226 ptp->clock.ops = ptp_clock_ops;
227 ptp->info = info;
228 ptp->devid = MKDEV(major, index);
229 ptp->index = index;
230 spin_lock_init(&ptp->tsevq.lock);
231 mutex_init(&ptp->tsevq_mux);
232 mutex_init(&ptp->pincfg_mux);
233 init_waitqueue_head(&ptp->tsev_wq);
235 if (ptp->info->do_aux_work) {
236 kthread_init_delayed_work(&ptp->aux_work, ptp_aux_kworker);
237 ptp->kworker = kthread_create_worker(0, "ptp%d", ptp->index);
238 if (IS_ERR(ptp->kworker)) {
239 err = PTR_ERR(ptp->kworker);
240 pr_err("failed to create ptp aux_worker %d\n", err);
245 err = ptp_populate_pin_groups(ptp);
253 snprintf(pps.name, PPS_MAX_NAME_LEN, "ptp%d", index);
256 ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS);
257 if (IS_ERR(ptp->pps_source)) {
258 err = PTR_ERR(ptp->pps_source);
265 device_initialize(&ptp->dev);
266 ptp->dev.devt = ptp->devid;
267 ptp->dev.class = ptp_class;
268 ptp->dev.parent = parent;
269 ptp->dev.groups = ptp->pin_attr_groups;
270 ptp->dev.release = ptp_clock_release;
271 dev_set_drvdata(&ptp->dev, ptp);
272 dev_set_name(&ptp->dev, "ptp%d", ptp->index);
275 err = posix_clock_register(&ptp->clock, &ptp->dev);
281 return ptp;
284 if (ptp->pps_source)
285 pps_unregister_source(ptp->pps_source);
287 ptp_cleanup_pin_groups(ptp);
289 if (ptp->kworker)
290 kthread_destroy_worker(ptp->kworker);
292 mutex_destroy(&ptp->tsevq_mux);
293 mutex_destroy(&ptp->pincfg_mux);
296 kfree(ptp);
302 int ptp_clock_unregister(struct ptp_clock *ptp)
304 ptp->defunct = 1;
305 wake_up_interruptible(&ptp->tsev_wq);
307 if (ptp->kworker) {
308 kthread_cancel_delayed_work_sync(&ptp->aux_work);
309 kthread_destroy_worker(ptp->kworker);
313 if (ptp->pps_source)
314 pps_unregister_source(ptp->pps_source);
316 posix_clock_unregister(&ptp->clock);
322 void ptp_clock_event(struct ptp_clock *ptp, struct ptp_clock_event *event)
332 enqueue_external_timestamp(&ptp->tsevq, event);
333 wake_up_interruptible(&ptp->tsev_wq);
338 pps_event(ptp->pps_source, &evt, PTP_PPS_EVENT, NULL);
342 pps_event(ptp->pps_source, &event->pps_times,
349 int ptp_clock_index(struct ptp_clock *ptp)
351 return ptp->index;
355 int ptp_find_pin(struct ptp_clock *ptp,
361 for (i = 0; i < ptp->info->n_pins; i++) {
362 if (ptp->info->pin_config[i].func == func &&
363 ptp->info->pin_config[i].chan == chan) {
364 pin = &ptp->info->pin_config[i];
373 int ptp_find_pin_unlocked(struct ptp_clock *ptp,
378 mutex_lock(&ptp->pincfg_mux);
380 result = ptp_find_pin(ptp, func, chan);
382 mutex_unlock(&ptp->pincfg_mux);
388 int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay)
390 return kthread_mod_delayed_work(ptp->kworker, &ptp->aux_work, delay);
394 void ptp_cancel_worker_sync(struct ptp_clock *ptp)
396 kthread_cancel_delayed_work_sync(&ptp->aux_work);
413 ptp_class = class_create(THIS_MODULE, "ptp");
415 pr_err("ptp: failed to allocate class\n");
419 err = alloc_chrdev_region(&ptp_devt, 0, MINORMASK + 1, "ptp");
421 pr_err("ptp: failed to allocate device region\n");