Lines Matching refs:notifier
61 static struct v4l2_async_subdev *v4l2_async_belongs(struct v4l2_async_notifier *notifier, in v4l2_async_belongs() argument
67 list_for_each_entry(asd, ¬ifier->waiting, list) { in v4l2_async_belongs()
96 static int v4l2_async_test_notify(struct v4l2_async_notifier *notifier, in v4l2_async_test_notify() argument
105 sd->notifier = notifier; in v4l2_async_test_notify()
107 if (notifier->bound) { in v4l2_async_test_notify()
108 ret = notifier->bound(notifier, sd, asd); in v4l2_async_test_notify()
113 list_move(&sd->async_list, ¬ifier->done); in v4l2_async_test_notify()
115 ret = v4l2_device_register_subdev(notifier->v4l2_dev, sd); in v4l2_async_test_notify()
117 if (notifier->unbind) in v4l2_async_test_notify()
118 notifier->unbind(notifier, sd, asd); in v4l2_async_test_notify()
122 if (list_empty(¬ifier->waiting) && notifier->complete) in v4l2_async_test_notify()
123 return notifier->complete(notifier); in v4l2_async_test_notify()
138 struct v4l2_async_notifier *notifier) in v4l2_async_notifier_register() argument
144 if (!notifier->num_subdevs || notifier->num_subdevs > V4L2_MAX_SUBDEVS) in v4l2_async_notifier_register()
147 notifier->v4l2_dev = v4l2_dev; in v4l2_async_notifier_register()
148 INIT_LIST_HEAD(¬ifier->waiting); in v4l2_async_notifier_register()
149 INIT_LIST_HEAD(¬ifier->done); in v4l2_async_notifier_register()
151 for (i = 0; i < notifier->num_subdevs; i++) { in v4l2_async_notifier_register()
152 asd = notifier->subdevs[i]; in v4l2_async_notifier_register()
161 dev_err(notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL, in v4l2_async_notifier_register()
166 list_add_tail(&asd->list, ¬ifier->waiting); in v4l2_async_notifier_register()
172 list_add(¬ifier->list, ¬ifier_list); in v4l2_async_notifier_register()
177 asd = v4l2_async_belongs(notifier, sd); in v4l2_async_notifier_register()
181 ret = v4l2_async_test_notify(notifier, sd, asd); in v4l2_async_notifier_register()
194 void v4l2_async_notifier_unregister(struct v4l2_async_notifier *notifier) in v4l2_async_notifier_unregister() argument
197 unsigned int notif_n_subdev = notifier->num_subdevs; in v4l2_async_notifier_unregister()
202 if (!notifier->v4l2_dev) in v4l2_async_notifier_unregister()
207 dev_err(notifier->v4l2_dev->dev, in v4l2_async_notifier_unregister()
213 list_del(¬ifier->list); in v4l2_async_notifier_unregister()
215 list_for_each_entry_safe(sd, tmp, ¬ifier->done, async_list) { in v4l2_async_notifier_unregister()
225 if (notifier->unbind) in v4l2_async_notifier_unregister()
226 notifier->unbind(notifier, sd, sd->asd); in v4l2_async_notifier_unregister()
263 notifier->v4l2_dev = NULL; in v4l2_async_notifier_unregister()
274 struct v4l2_async_notifier *notifier; in v4l2_async_register_subdev() local
288 list_for_each_entry(notifier, ¬ifier_list, list) { in v4l2_async_register_subdev()
289 struct v4l2_async_subdev *asd = v4l2_async_belongs(notifier, sd); in v4l2_async_register_subdev()
291 int ret = v4l2_async_test_notify(notifier, sd, asd); in v4l2_async_register_subdev()
308 struct v4l2_async_notifier *notifier = sd->notifier; in v4l2_async_unregister_subdev() local
318 list_add(&sd->asd->list, ¬ifier->waiting); in v4l2_async_unregister_subdev()
322 if (notifier->unbind) in v4l2_async_unregister_subdev()
323 notifier->unbind(notifier, sd, sd->asd); in v4l2_async_unregister_subdev()