Lines Matching refs:gdev
75 struct gpio_device *gdev; member
214 guard(srcu)(&lh->gdev->srcu); in linehandle_ioctl()
216 if (!rcu_access_pointer(lh->gdev->chip)) in linehandle_ioctl()
281 gpio_device_put(lh->gdev); in linehandle_free()
301 static int linehandle_create(struct gpio_device *gdev, void __user *ip) in linehandle_create() argument
323 lh->gdev = gpio_device_get(gdev); in linehandle_create()
341 struct gpio_desc *desc = gpio_device_get_desc(gdev, offset); in linehandle_create()
376 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linehandle_create()
408 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linehandle_create()
525 struct gpio_device *gdev; member
1460 guard(srcu)(&lr->gdev->srcu); in linereq_ioctl()
1462 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_ioctl()
1491 guard(srcu)(&lr->gdev->srcu); in linereq_poll()
1493 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_poll()
1513 guard(srcu)(&lr->gdev->srcu); in linereq_read()
1515 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_read()
1560 blocking_notifier_chain_unregister(&lr->gdev->device_notifier, in linereq_free()
1571 gpio_device_put(lr->gdev); in linereq_free()
1587 struct device *dev = &lr->gdev->dev; in linereq_show_fdinfo()
1613 static int linereq_create(struct gpio_device *gdev, void __user *ip) in linereq_create() argument
1642 lr->gdev = gpio_device_get(gdev); in linereq_create()
1674 struct gpio_desc *desc = gpio_device_get_desc(gdev, offset); in linereq_create()
1719 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linereq_create()
1724 ret = blocking_notifier_chain_register(&gdev->device_notifier, in linereq_create()
1755 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linereq_create()
1788 struct gpio_device *gdev; member
1809 guard(srcu)(&le->gdev->srcu); in lineevent_poll()
1811 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_poll()
1847 guard(srcu)(&le->gdev->srcu); in lineevent_read()
1849 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_read()
1905 blocking_notifier_chain_unregister(&le->gdev->device_notifier, in lineevent_free()
1912 gpio_device_put(le->gdev); in lineevent_free()
1929 guard(srcu)(&le->gdev->srcu); in lineevent_ioctl()
1931 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_ioctl()
2037 static int lineevent_create(struct gpio_device *gdev, void __user *ip) in lineevent_create() argument
2058 desc = gpio_device_get_desc(gdev, offset); in lineevent_create()
2084 le->gdev = gpio_device_get(gdev); in lineevent_create()
2129 ret = blocking_notifier_chain_register(&gdev->device_notifier, in lineevent_create()
2254 scoped_guard(srcu, &desc->gdev->desc_srcu) { in gpio_desc_to_lineinfo()
2324 struct gpio_device *gdev; member
2338 struct gpio_device *gdev = cdev->gdev; in chipinfo_get() local
2343 strscpy(chipinfo.name, dev_name(&gdev->dev), sizeof(chipinfo.name)); in chipinfo_get()
2344 strscpy(chipinfo.label, gdev->label, sizeof(chipinfo.label)); in chipinfo_get()
2345 chipinfo.lines = gdev->ngpio; in chipinfo_get()
2377 desc = gpio_device_get_desc(cdev->gdev, lineinfo.line_offset); in lineinfo_get_v1()
2414 desc = gpio_device_get_desc(cdev->gdev, lineinfo.offset); in lineinfo_get()
2444 if (offset >= cdev->gdev->ngpio) in lineinfo_unwatch()
2459 struct gpio_device *gdev = cdev->gdev; in gpio_ioctl() local
2462 guard(srcu)(&gdev->srcu); in gpio_ioctl()
2465 if (!rcu_access_pointer(gdev->chip)) in gpio_ioctl()
2474 return linehandle_create(gdev, ip); in gpio_ioctl()
2476 return lineevent_create(gdev, ip); in gpio_ioctl()
2487 return linereq_create(gdev, ip); in gpio_ioctl()
2506 struct gpio_device *gdev; member
2524 scoped_guard(srcu, &ctx->gdev->srcu) { in lineinfo_changed_func()
2525 gc = srcu_dereference(ctx->gdev->chip, &ctx->gdev->srcu); in lineinfo_changed_func()
2539 gpio_device_put(ctx->gdev); in lineinfo_changed_func()
2576 ctx->gdev = gpio_device_get(desc->gdev); in lineinfo_changed_notify()
2582 queue_work(ctx->gdev->line_state_wq, &ctx->work); in lineinfo_changed_notify()
2605 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_poll()
2607 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_poll()
2628 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_read()
2630 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_read()
2705 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_open() local
2710 guard(srcu)(&gdev->srcu); in gpio_chrdev_open()
2713 if (!rcu_access_pointer(gdev->chip)) in gpio_chrdev_open()
2720 cdev->watched_lines = bitmap_zalloc(gdev->ngpio, GFP_KERNEL); in gpio_chrdev_open()
2726 cdev->gdev = gpio_device_get(gdev); in gpio_chrdev_open()
2729 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2730 ret = raw_notifier_chain_register(&gdev->line_state_notifier, in gpio_chrdev_open()
2737 ret = blocking_notifier_chain_register(&gdev->device_notifier, in gpio_chrdev_open()
2752 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_open()
2755 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2756 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_open()
2759 gpio_device_put(gdev); in gpio_chrdev_open()
2777 struct gpio_device *gdev = cdev->gdev; in gpio_chrdev_release() local
2779 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_release()
2781 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_release()
2782 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_release()
2785 gpio_device_put(gdev); in gpio_chrdev_release()
2803 int gpiolib_cdev_register(struct gpio_device *gdev, dev_t devt) in gpiolib_cdev_register() argument
2808 cdev_init(&gdev->chrdev, &gpio_fileops); in gpiolib_cdev_register()
2809 gdev->chrdev.owner = THIS_MODULE; in gpiolib_cdev_register()
2810 gdev->dev.devt = MKDEV(MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2812 gdev->line_state_wq = alloc_ordered_workqueue("%s", WQ_HIGHPRI, in gpiolib_cdev_register()
2813 dev_name(&gdev->dev)); in gpiolib_cdev_register()
2814 if (!gdev->line_state_wq) in gpiolib_cdev_register()
2817 ret = cdev_device_add(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_register()
2821 guard(srcu)(&gdev->srcu); in gpiolib_cdev_register()
2822 gc = srcu_dereference(gdev->chip, &gdev->srcu); in gpiolib_cdev_register()
2826 chip_dbg(gc, "added GPIO chardev (%d:%d)\n", MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2831 void gpiolib_cdev_unregister(struct gpio_device *gdev) in gpiolib_cdev_unregister() argument
2833 destroy_workqueue(gdev->line_state_wq); in gpiolib_cdev_unregister()
2834 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_unregister()
2835 blocking_notifier_call_chain(&gdev->device_notifier, 0, NULL); in gpiolib_cdev_unregister()