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()
303 static int linehandle_create(struct gpio_device *gdev, void __user *ip) in linehandle_create() argument
324 lh->gdev = gpio_device_get(gdev); in linehandle_create()
340 struct gpio_desc *desc = gpio_device_get_desc(gdev, offset); in linehandle_create()
373 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linehandle_create()
390 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linehandle_create()
501 struct gpio_device *gdev; member
1436 guard(srcu)(&lr->gdev->srcu); in linereq_ioctl()
1438 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_ioctl()
1467 guard(srcu)(&lr->gdev->srcu); in linereq_poll()
1469 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_poll()
1489 guard(srcu)(&lr->gdev->srcu); in linereq_read()
1491 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_read()
1536 blocking_notifier_chain_unregister(&lr->gdev->device_notifier, in linereq_free()
1547 gpio_device_put(lr->gdev); in linereq_free()
1563 struct device *dev = &lr->gdev->dev; in linereq_show_fdinfo()
1589 static int linereq_create(struct gpio_device *gdev, void __user *ip) in linereq_create() argument
1618 lr->gdev = gpio_device_get(gdev); in linereq_create()
1650 struct gpio_desc *desc = gpio_device_get_desc(gdev, offset); in linereq_create()
1695 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linereq_create()
1700 ret = blocking_notifier_chain_register(&gdev->device_notifier, in linereq_create()
1731 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linereq_create()
1764 struct gpio_device *gdev; member
1785 guard(srcu)(&le->gdev->srcu); in lineevent_poll()
1787 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_poll()
1823 guard(srcu)(&le->gdev->srcu); in lineevent_read()
1825 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_read()
1881 blocking_notifier_chain_unregister(&le->gdev->device_notifier, in lineevent_free()
1888 gpio_device_put(le->gdev); in lineevent_free()
1905 guard(srcu)(&le->gdev->srcu); in lineevent_ioctl()
1907 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_ioctl()
2013 static int lineevent_create(struct gpio_device *gdev, void __user *ip) in lineevent_create() argument
2034 desc = gpio_device_get_desc(gdev, offset); in lineevent_create()
2060 le->gdev = gpio_device_get(gdev); in lineevent_create()
2105 ret = blocking_notifier_chain_register(&gdev->device_notifier, in lineevent_create()
2230 scoped_guard(srcu, &desc->gdev->desc_srcu) { in gpio_desc_to_lineinfo()
2300 struct gpio_device *gdev; member
2314 struct gpio_device *gdev = cdev->gdev; in chipinfo_get() local
2319 strscpy(chipinfo.name, dev_name(&gdev->dev), sizeof(chipinfo.name)); in chipinfo_get()
2320 strscpy(chipinfo.label, gdev->label, sizeof(chipinfo.label)); in chipinfo_get()
2321 chipinfo.lines = gdev->ngpio; in chipinfo_get()
2353 desc = gpio_device_get_desc(cdev->gdev, lineinfo.line_offset); in lineinfo_get_v1()
2390 desc = gpio_device_get_desc(cdev->gdev, lineinfo.offset); in lineinfo_get()
2420 if (offset >= cdev->gdev->ngpio) in lineinfo_unwatch()
2435 struct gpio_device *gdev = cdev->gdev; in gpio_ioctl() local
2438 guard(srcu)(&gdev->srcu); in gpio_ioctl()
2441 if (!rcu_access_pointer(gdev->chip)) in gpio_ioctl()
2450 return linehandle_create(gdev, ip); in gpio_ioctl()
2452 return lineevent_create(gdev, ip); in gpio_ioctl()
2463 return linereq_create(gdev, ip); in gpio_ioctl()
2482 struct gpio_device *gdev; member
2500 scoped_guard(srcu, &ctx->gdev->srcu) { in lineinfo_changed_func()
2501 gc = srcu_dereference(ctx->gdev->chip, &ctx->gdev->srcu); in lineinfo_changed_func()
2515 gpio_device_put(ctx->gdev); in lineinfo_changed_func()
2560 ctx->gdev = gpio_device_get(desc->gdev); in lineinfo_changed_notify()
2564 queue_work(ctx->gdev->line_state_wq, &ctx->work); in lineinfo_changed_notify()
2587 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_poll()
2589 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_poll()
2610 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_read()
2612 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_read()
2687 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_open() local
2692 guard(srcu)(&gdev->srcu); in gpio_chrdev_open()
2695 if (!rcu_access_pointer(gdev->chip)) in gpio_chrdev_open()
2702 cdev->watched_lines = bitmap_zalloc(gdev->ngpio, GFP_KERNEL); in gpio_chrdev_open()
2708 cdev->gdev = gpio_device_get(gdev); in gpio_chrdev_open()
2711 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2712 ret = raw_notifier_chain_register(&gdev->line_state_notifier, in gpio_chrdev_open()
2719 ret = blocking_notifier_chain_register(&gdev->device_notifier, in gpio_chrdev_open()
2734 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_open()
2737 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2738 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_open()
2741 gpio_device_put(gdev); in gpio_chrdev_open()
2759 struct gpio_device *gdev = cdev->gdev; in gpio_chrdev_release() local
2761 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_release()
2763 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_release()
2764 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_release()
2767 gpio_device_put(gdev); in gpio_chrdev_release()
2785 int gpiolib_cdev_register(struct gpio_device *gdev, dev_t devt) in gpiolib_cdev_register() argument
2790 cdev_init(&gdev->chrdev, &gpio_fileops); in gpiolib_cdev_register()
2791 gdev->chrdev.owner = THIS_MODULE; in gpiolib_cdev_register()
2792 gdev->dev.devt = MKDEV(MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2794 gdev->line_state_wq = alloc_ordered_workqueue("%s", WQ_HIGHPRI, in gpiolib_cdev_register()
2795 dev_name(&gdev->dev)); in gpiolib_cdev_register()
2796 if (!gdev->line_state_wq) in gpiolib_cdev_register()
2799 ret = cdev_device_add(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_register()
2801 destroy_workqueue(gdev->line_state_wq); in gpiolib_cdev_register()
2805 guard(srcu)(&gdev->srcu); in gpiolib_cdev_register()
2806 gc = srcu_dereference(gdev->chip, &gdev->srcu); in gpiolib_cdev_register()
2808 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_register()
2809 destroy_workqueue(gdev->line_state_wq); in gpiolib_cdev_register()
2813 gpiochip_dbg(gc, "added GPIO chardev (%d:%d)\n", MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2818 void gpiolib_cdev_unregister(struct gpio_device *gdev) in gpiolib_cdev_unregister() argument
2820 destroy_workqueue(gdev->line_state_wq); in gpiolib_cdev_unregister()
2821 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_unregister()
2822 blocking_notifier_call_chain(&gdev->device_notifier, 0, NULL); in gpiolib_cdev_unregister()