Lines Matching refs:pps_gen
39 struct pps_gen_device *pps_gen = file->private_data; in pps_gen_cdev_poll() local
41 poll_wait(file, &pps_gen->queue, wait); in pps_gen_cdev_poll()
47 struct pps_gen_device *pps_gen = file->private_data; in pps_gen_cdev_fasync() local
49 return fasync_helper(fd, file, on, &pps_gen->async_queue); in pps_gen_cdev_fasync()
55 struct pps_gen_device *pps_gen = file->private_data; in pps_gen_cdev_ioctl() local
63 dev_dbg(pps_gen->dev, "PPS_GEN_SETENABLE\n"); in pps_gen_cdev_ioctl()
69 ret = pps_gen->info->enable(pps_gen, status); in pps_gen_cdev_ioctl()
72 pps_gen->enabled = status; in pps_gen_cdev_ioctl()
77 dev_dbg(pps_gen->dev, "PPS_GEN_USESYSTEMCLOCK\n"); in pps_gen_cdev_ioctl()
79 ret = put_user(pps_gen->info->use_system_clock, uiuarg); in pps_gen_cdev_ioctl()
87 unsigned int ev = pps_gen->last_ev; in pps_gen_cdev_ioctl()
89 dev_dbg(pps_gen->dev, "PPS_GEN_FETCHEVENT\n"); in pps_gen_cdev_ioctl()
91 ret = wait_event_interruptible(pps_gen->queue, in pps_gen_cdev_ioctl()
92 ev != pps_gen->last_ev); in pps_gen_cdev_ioctl()
94 dev_dbg(pps_gen->dev, "pending signal caught\n"); in pps_gen_cdev_ioctl()
98 spin_lock_irq(&pps_gen->lock); in pps_gen_cdev_ioctl()
99 info.sequence = pps_gen->sequence; in pps_gen_cdev_ioctl()
100 info.event = pps_gen->event; in pps_gen_cdev_ioctl()
101 spin_unlock_irq(&pps_gen->lock); in pps_gen_cdev_ioctl()
118 struct pps_gen_device *pps_gen = container_of(inode->i_cdev, in pps_gen_cdev_open() local
121 get_device(pps_gen->dev); in pps_gen_cdev_open()
122 file->private_data = pps_gen; in pps_gen_cdev_open()
128 struct pps_gen_device *pps_gen = file->private_data; in pps_gen_cdev_release() local
130 put_device(pps_gen->dev); in pps_gen_cdev_release()
149 struct pps_gen_device *pps_gen = dev_get_drvdata(dev); in pps_gen_device_destruct() local
151 cdev_del(&pps_gen->cdev); in pps_gen_device_destruct()
153 pr_debug("deallocating pps-gen%d\n", pps_gen->id); in pps_gen_device_destruct()
154 ida_free(&pps_gen_ida, pps_gen->id); in pps_gen_device_destruct()
157 kfree(pps_gen); in pps_gen_device_destruct()
160 static int pps_gen_register_cdev(struct pps_gen_device *pps_gen) in pps_gen_register_cdev() argument
173 pps_gen->id = err; in pps_gen_register_cdev()
175 devt = MKDEV(MAJOR(pps_gen_devt), pps_gen->id); in pps_gen_register_cdev()
177 cdev_init(&pps_gen->cdev, &pps_gen_cdev_fops); in pps_gen_register_cdev()
178 pps_gen->cdev.owner = pps_gen->info->owner; in pps_gen_register_cdev()
180 err = cdev_add(&pps_gen->cdev, devt, 1); in pps_gen_register_cdev()
183 MAJOR(pps_gen_devt), pps_gen->id); in pps_gen_register_cdev()
186 pps_gen->dev = device_create(pps_gen_class, pps_gen->info->parent, devt, in pps_gen_register_cdev()
187 pps_gen, "pps-gen%d", pps_gen->id); in pps_gen_register_cdev()
188 if (IS_ERR(pps_gen->dev)) { in pps_gen_register_cdev()
189 err = PTR_ERR(pps_gen->dev); in pps_gen_register_cdev()
192 pps_gen->dev->release = pps_gen_device_destruct; in pps_gen_register_cdev()
193 dev_set_drvdata(pps_gen->dev, pps_gen); in pps_gen_register_cdev()
196 MAJOR(pps_gen_devt), pps_gen->id); in pps_gen_register_cdev()
201 cdev_del(&pps_gen->cdev); in pps_gen_register_cdev()
203 ida_free(&pps_gen_ida, pps_gen->id); in pps_gen_register_cdev()
207 static void pps_gen_unregister_cdev(struct pps_gen_device *pps_gen) in pps_gen_unregister_cdev() argument
209 pr_debug("unregistering pps-gen%d\n", pps_gen->id); in pps_gen_unregister_cdev()
210 device_destroy(pps_gen_class, pps_gen->dev->devt); in pps_gen_unregister_cdev()
230 struct pps_gen_device *pps_gen; in pps_gen_register_source() local
233 pps_gen = kzalloc(sizeof(struct pps_gen_device), GFP_KERNEL); in pps_gen_register_source()
234 if (pps_gen == NULL) { in pps_gen_register_source()
238 pps_gen->info = info; in pps_gen_register_source()
239 pps_gen->enabled = false; in pps_gen_register_source()
241 init_waitqueue_head(&pps_gen->queue); in pps_gen_register_source()
242 spin_lock_init(&pps_gen->lock); in pps_gen_register_source()
245 err = pps_gen_register_cdev(pps_gen); in pps_gen_register_source()
251 return pps_gen; in pps_gen_register_source()
254 kfree(pps_gen); in pps_gen_register_source()
270 void pps_gen_unregister_source(struct pps_gen_device *pps_gen) in pps_gen_unregister_source() argument
272 pps_gen_unregister_cdev(pps_gen); in pps_gen_unregister_source()
284 void pps_gen_event(struct pps_gen_device *pps_gen, in pps_gen_event() argument
289 dev_dbg(pps_gen->dev, "PPS generator event %u\n", event); in pps_gen_event()
291 spin_lock_irqsave(&pps_gen->lock, flags); in pps_gen_event()
293 pps_gen->event = event; in pps_gen_event()
294 pps_gen->sequence++; in pps_gen_event()
296 pps_gen->last_ev++; in pps_gen_event()
297 wake_up_interruptible_all(&pps_gen->queue); in pps_gen_event()
298 kill_fasync(&pps_gen->async_queue, SIGIO, POLL_IN); in pps_gen_event()
300 spin_unlock_irqrestore(&pps_gen->lock, flags); in pps_gen_event()