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
1463 guard(srcu)(&lr->gdev->srcu); in linereq_ioctl()
1465 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_ioctl()
1494 guard(srcu)(&lr->gdev->srcu); in linereq_poll()
1496 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_poll()
1516 guard(srcu)(&lr->gdev->srcu); in linereq_read()
1518 if (!rcu_access_pointer(lr->gdev->chip)) in linereq_read()
1563 blocking_notifier_chain_unregister(&lr->gdev->device_notifier, in linereq_free()
1574 gpio_device_put(lr->gdev); in linereq_free()
1590 struct device *dev = &lr->gdev->dev; in linereq_show_fdinfo()
1616 static int linereq_create(struct gpio_device *gdev, void __user *ip) in linereq_create() argument
1645 lr->gdev = gpio_device_get(gdev); in linereq_create()
1677 struct gpio_desc *desc = gpio_device_get_desc(gdev, offset); in linereq_create()
1722 dev_dbg(&gdev->dev, "registered chardev handle for line %d\n", in linereq_create()
1727 ret = blocking_notifier_chain_register(&gdev->device_notifier, in linereq_create()
1758 dev_dbg(&gdev->dev, "registered chardev handle for %d lines\n", in linereq_create()
1791 struct gpio_device *gdev; member
1812 guard(srcu)(&le->gdev->srcu); in lineevent_poll()
1814 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_poll()
1850 guard(srcu)(&le->gdev->srcu); in lineevent_read()
1852 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_read()
1908 blocking_notifier_chain_unregister(&le->gdev->device_notifier, in lineevent_free()
1915 gpio_device_put(le->gdev); in lineevent_free()
1932 guard(srcu)(&le->gdev->srcu); in lineevent_ioctl()
1934 if (!rcu_access_pointer(le->gdev->chip)) in lineevent_ioctl()
2040 static int lineevent_create(struct gpio_device *gdev, void __user *ip) in lineevent_create() argument
2061 desc = gpio_device_get_desc(gdev, offset); in lineevent_create()
2087 le->gdev = gpio_device_get(gdev); in lineevent_create()
2132 ret = blocking_notifier_chain_register(&gdev->device_notifier, in lineevent_create()
2257 scoped_guard(srcu, &desc->gdev->desc_srcu) { in gpio_desc_to_lineinfo()
2327 struct gpio_device *gdev; member
2341 struct gpio_device *gdev = cdev->gdev; in chipinfo_get() local
2346 strscpy(chipinfo.name, dev_name(&gdev->dev), sizeof(chipinfo.name)); in chipinfo_get()
2347 strscpy(chipinfo.label, gdev->label, sizeof(chipinfo.label)); in chipinfo_get()
2348 chipinfo.lines = gdev->ngpio; in chipinfo_get()
2380 desc = gpio_device_get_desc(cdev->gdev, lineinfo.line_offset); in lineinfo_get_v1()
2417 desc = gpio_device_get_desc(cdev->gdev, lineinfo.offset); in lineinfo_get()
2447 if (offset >= cdev->gdev->ngpio) in lineinfo_unwatch()
2462 struct gpio_device *gdev = cdev->gdev; in gpio_ioctl() local
2465 guard(srcu)(&gdev->srcu); in gpio_ioctl()
2468 if (!rcu_access_pointer(gdev->chip)) in gpio_ioctl()
2477 return linehandle_create(gdev, ip); in gpio_ioctl()
2479 return lineevent_create(gdev, ip); in gpio_ioctl()
2490 return linereq_create(gdev, ip); in gpio_ioctl()
2509 struct gpio_device *gdev; member
2527 scoped_guard(srcu, &ctx->gdev->srcu) { in lineinfo_changed_func()
2528 gc = srcu_dereference(ctx->gdev->chip, &ctx->gdev->srcu); in lineinfo_changed_func()
2542 gpio_device_put(ctx->gdev); in lineinfo_changed_func()
2579 ctx->gdev = gpio_device_get(desc->gdev); in lineinfo_changed_notify()
2585 queue_work(ctx->gdev->line_state_wq, &ctx->work); in lineinfo_changed_notify()
2608 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_poll()
2610 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_poll()
2631 guard(srcu)(&cdev->gdev->srcu); in lineinfo_watch_read()
2633 if (!rcu_access_pointer(cdev->gdev->chip)) in lineinfo_watch_read()
2708 struct gpio_device *gdev = container_of(inode->i_cdev, in gpio_chrdev_open() local
2713 guard(srcu)(&gdev->srcu); in gpio_chrdev_open()
2716 if (!rcu_access_pointer(gdev->chip)) in gpio_chrdev_open()
2723 cdev->watched_lines = bitmap_zalloc(gdev->ngpio, GFP_KERNEL); in gpio_chrdev_open()
2729 cdev->gdev = gpio_device_get(gdev); in gpio_chrdev_open()
2732 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2733 ret = raw_notifier_chain_register(&gdev->line_state_notifier, in gpio_chrdev_open()
2740 ret = blocking_notifier_chain_register(&gdev->device_notifier, in gpio_chrdev_open()
2755 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_open()
2758 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_open()
2759 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_open()
2762 gpio_device_put(gdev); in gpio_chrdev_open()
2780 struct gpio_device *gdev = cdev->gdev; in gpio_chrdev_release() local
2782 blocking_notifier_chain_unregister(&gdev->device_notifier, in gpio_chrdev_release()
2784 scoped_guard(write_lock_irqsave, &gdev->line_state_lock) in gpio_chrdev_release()
2785 raw_notifier_chain_unregister(&gdev->line_state_notifier, in gpio_chrdev_release()
2788 gpio_device_put(gdev); in gpio_chrdev_release()
2806 int gpiolib_cdev_register(struct gpio_device *gdev, dev_t devt) in gpiolib_cdev_register() argument
2811 cdev_init(&gdev->chrdev, &gpio_fileops); in gpiolib_cdev_register()
2812 gdev->chrdev.owner = THIS_MODULE; in gpiolib_cdev_register()
2813 gdev->dev.devt = MKDEV(MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2815 gdev->line_state_wq = alloc_ordered_workqueue("%s", WQ_HIGHPRI, in gpiolib_cdev_register()
2816 dev_name(&gdev->dev)); in gpiolib_cdev_register()
2817 if (!gdev->line_state_wq) in gpiolib_cdev_register()
2820 ret = cdev_device_add(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_register()
2824 guard(srcu)(&gdev->srcu); in gpiolib_cdev_register()
2825 gc = srcu_dereference(gdev->chip, &gdev->srcu); in gpiolib_cdev_register()
2829 chip_dbg(gc, "added GPIO chardev (%d:%d)\n", MAJOR(devt), gdev->id); in gpiolib_cdev_register()
2834 void gpiolib_cdev_unregister(struct gpio_device *gdev) in gpiolib_cdev_unregister() argument
2836 destroy_workqueue(gdev->line_state_wq); in gpiolib_cdev_unregister()
2837 cdev_device_del(&gdev->chrdev, &gdev->dev); in gpiolib_cdev_unregister()
2838 blocking_notifier_call_chain(&gdev->device_notifier, 0, NULL); in gpiolib_cdev_unregister()