Lines Matching refs:notifier
66 static bool match_i2c(struct v4l2_async_notifier *notifier, in match_i2c() argument
81 match_fwnode_one(struct v4l2_async_notifier *notifier, in match_fwnode_one() argument
135 dev = notifier->v4l2_dev ? notifier->v4l2_dev->dev in match_fwnode_one()
136 : notifier->sd->dev; in match_fwnode_one()
151 static bool match_fwnode(struct v4l2_async_notifier *notifier, in match_fwnode() argument
154 if (match_fwnode_one(notifier, sd, sd->fwnode, asd)) in match_fwnode()
161 return match_fwnode_one(notifier, sd, sd->fwnode->secondary, asd); in match_fwnode()
169 v4l2_async_find_match(struct v4l2_async_notifier *notifier, in v4l2_async_find_match() argument
172 bool (*match)(struct v4l2_async_notifier *notifier, in v4l2_async_find_match()
176 list_for_each_entry(asd, ¬ifier->waiting, list) { in v4l2_async_find_match()
192 if (match(notifier, sd, asd)) in v4l2_async_find_match()
236 v4l2_async_nf_find_v4l2_dev(struct v4l2_async_notifier *notifier) in v4l2_async_nf_find_v4l2_dev() argument
238 while (notifier->parent) in v4l2_async_nf_find_v4l2_dev()
239 notifier = notifier->parent; in v4l2_async_nf_find_v4l2_dev()
241 return notifier->v4l2_dev; in v4l2_async_nf_find_v4l2_dev()
248 v4l2_async_nf_can_complete(struct v4l2_async_notifier *notifier) in v4l2_async_nf_can_complete() argument
252 if (!list_empty(¬ifier->waiting)) in v4l2_async_nf_can_complete()
255 list_for_each_entry(sd, ¬ifier->done, async_list) { in v4l2_async_nf_can_complete()
272 v4l2_async_nf_try_complete(struct v4l2_async_notifier *notifier) in v4l2_async_nf_try_complete() argument
275 if (!list_empty(¬ifier->waiting)) in v4l2_async_nf_try_complete()
279 while (notifier->parent) in v4l2_async_nf_try_complete()
280 notifier = notifier->parent; in v4l2_async_nf_try_complete()
283 if (!notifier->v4l2_dev) in v4l2_async_nf_try_complete()
287 if (!v4l2_async_nf_can_complete(notifier)) in v4l2_async_nf_try_complete()
290 return v4l2_async_nf_call_complete(notifier); in v4l2_async_nf_try_complete()
294 v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier);
314 static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier, in v4l2_async_match_notify() argument
326 ret = v4l2_async_nf_call_bound(notifier, sd, asd); in v4l2_async_match_notify()
338 ret = v4l2_async_create_ancillary_links(notifier, sd); in v4l2_async_match_notify()
340 v4l2_async_nf_call_unbind(notifier, sd, asd); in v4l2_async_match_notify()
348 sd->notifier = notifier; in v4l2_async_match_notify()
351 list_move(&sd->async_list, ¬ifier->done); in v4l2_async_match_notify()
365 subdev_notifier->parent = notifier; in v4l2_async_match_notify()
372 v4l2_async_nf_try_all_subdevs(struct v4l2_async_notifier *notifier) in v4l2_async_nf_try_all_subdevs() argument
375 v4l2_async_nf_find_v4l2_dev(notifier); in v4l2_async_nf_try_all_subdevs()
386 asd = v4l2_async_find_match(notifier, sd); in v4l2_async_nf_try_all_subdevs()
390 ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd); in v4l2_async_nf_try_all_subdevs()
419 v4l2_async_nf_unbind_all_subdevs(struct v4l2_async_notifier *notifier) in v4l2_async_nf_unbind_all_subdevs() argument
423 list_for_each_entry_safe(sd, tmp, ¬ifier->done, async_list) { in v4l2_async_nf_unbind_all_subdevs()
430 v4l2_async_nf_call_unbind(notifier, sd, sd->asd); in v4l2_async_nf_unbind_all_subdevs()
436 notifier->parent = NULL; in v4l2_async_nf_unbind_all_subdevs()
441 __v4l2_async_nf_has_async_subdev(struct v4l2_async_notifier *notifier, in __v4l2_async_nf_has_async_subdev() argument
447 list_for_each_entry(asd_y, ¬ifier->waiting, list) in __v4l2_async_nf_has_async_subdev()
451 list_for_each_entry(sd, ¬ifier->done, async_list) { in __v4l2_async_nf_has_async_subdev()
468 v4l2_async_nf_has_async_subdev(struct v4l2_async_notifier *notifier, in v4l2_async_nf_has_async_subdev() argument
477 list_for_each_entry(asd_y, ¬ifier->asd_list, asd_list) { in v4l2_async_nf_has_async_subdev()
485 list_for_each_entry(notifier, ¬ifier_list, list) in v4l2_async_nf_has_async_subdev()
486 if (__v4l2_async_nf_has_async_subdev(notifier, asd)) in v4l2_async_nf_has_async_subdev()
492 static int v4l2_async_nf_asd_valid(struct v4l2_async_notifier *notifier, in v4l2_async_nf_asd_valid() argument
497 notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL; in v4l2_async_nf_asd_valid()
505 if (v4l2_async_nf_has_async_subdev(notifier, asd, this_index)) { in v4l2_async_nf_asd_valid()
519 void v4l2_async_nf_init(struct v4l2_async_notifier *notifier) in v4l2_async_nf_init() argument
521 INIT_LIST_HEAD(¬ifier->asd_list); in v4l2_async_nf_init()
525 static int __v4l2_async_nf_register(struct v4l2_async_notifier *notifier) in __v4l2_async_nf_register() argument
530 INIT_LIST_HEAD(¬ifier->waiting); in __v4l2_async_nf_register()
531 INIT_LIST_HEAD(¬ifier->done); in __v4l2_async_nf_register()
535 list_for_each_entry(asd, ¬ifier->asd_list, asd_list) { in __v4l2_async_nf_register()
536 ret = v4l2_async_nf_asd_valid(notifier, asd, i++); in __v4l2_async_nf_register()
540 list_add_tail(&asd->list, ¬ifier->waiting); in __v4l2_async_nf_register()
543 ret = v4l2_async_nf_try_all_subdevs(notifier); in __v4l2_async_nf_register()
547 ret = v4l2_async_nf_try_complete(notifier); in __v4l2_async_nf_register()
552 list_add(¬ifier->list, ¬ifier_list); in __v4l2_async_nf_register()
562 v4l2_async_nf_unbind_all_subdevs(notifier); in __v4l2_async_nf_register()
571 struct v4l2_async_notifier *notifier) in v4l2_async_nf_register() argument
575 if (WARN_ON(!v4l2_dev || notifier->sd)) in v4l2_async_nf_register()
578 notifier->v4l2_dev = v4l2_dev; in v4l2_async_nf_register()
580 ret = __v4l2_async_nf_register(notifier); in v4l2_async_nf_register()
582 notifier->v4l2_dev = NULL; in v4l2_async_nf_register()
589 struct v4l2_async_notifier *notifier) in v4l2_async_subdev_nf_register() argument
593 if (WARN_ON(!sd || notifier->v4l2_dev)) in v4l2_async_subdev_nf_register()
596 notifier->sd = sd; in v4l2_async_subdev_nf_register()
598 ret = __v4l2_async_nf_register(notifier); in v4l2_async_subdev_nf_register()
600 notifier->sd = NULL; in v4l2_async_subdev_nf_register()
607 __v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier) in __v4l2_async_nf_unregister() argument
609 if (!notifier || (!notifier->v4l2_dev && !notifier->sd)) in __v4l2_async_nf_unregister()
612 v4l2_async_nf_unbind_all_subdevs(notifier); in __v4l2_async_nf_unregister()
614 notifier->sd = NULL; in __v4l2_async_nf_unregister()
615 notifier->v4l2_dev = NULL; in __v4l2_async_nf_unregister()
617 list_del(¬ifier->list); in __v4l2_async_nf_unregister()
620 void v4l2_async_nf_unregister(struct v4l2_async_notifier *notifier) in v4l2_async_nf_unregister() argument
624 __v4l2_async_nf_unregister(notifier); in v4l2_async_nf_unregister()
630 static void __v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier) in __v4l2_async_nf_cleanup() argument
634 if (!notifier || !notifier->asd_list.next) in __v4l2_async_nf_cleanup()
637 list_for_each_entry_safe(asd, tmp, ¬ifier->asd_list, asd_list) { in __v4l2_async_nf_cleanup()
647 v4l2_async_nf_call_destroy(notifier, asd); in __v4l2_async_nf_cleanup()
652 void v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier) in v4l2_async_nf_cleanup() argument
656 __v4l2_async_nf_cleanup(notifier); in v4l2_async_nf_cleanup()
662 int __v4l2_async_nf_add_subdev(struct v4l2_async_notifier *notifier, in __v4l2_async_nf_add_subdev() argument
669 ret = v4l2_async_nf_asd_valid(notifier, asd, -1); in __v4l2_async_nf_add_subdev()
673 list_add_tail(&asd->asd_list, ¬ifier->asd_list); in __v4l2_async_nf_add_subdev()
682 __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier, in __v4l2_async_nf_add_fwnode() argument
696 ret = __v4l2_async_nf_add_subdev(notifier, asd); in __v4l2_async_nf_add_fwnode()
730 __v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier, int adapter_id, in __v4l2_async_nf_add_i2c() argument
744 ret = __v4l2_async_nf_add_subdev(notifier, asd); in __v4l2_async_nf_add_i2c()
757 struct v4l2_async_notifier *notifier; in v4l2_async_register_subdev() local
772 list_for_each_entry(notifier, ¬ifier_list, list) { in v4l2_async_register_subdev()
774 v4l2_async_nf_find_v4l2_dev(notifier); in v4l2_async_register_subdev()
780 asd = v4l2_async_find_match(notifier, sd); in v4l2_async_register_subdev()
784 ret = v4l2_async_match_notify(notifier, v4l2_dev, sd, asd); in v4l2_async_register_subdev()
788 ret = v4l2_async_nf_try_complete(notifier); in v4l2_async_register_subdev()
813 v4l2_async_nf_call_unbind(notifier, sd, sd->asd); in v4l2_async_register_subdev()
837 struct v4l2_async_notifier *notifier = sd->notifier; in v4l2_async_unregister_subdev() local
839 list_add(&sd->asd->list, ¬ifier->waiting); in v4l2_async_unregister_subdev()
841 v4l2_async_nf_call_unbind(notifier, sd, sd->asd); in v4l2_async_unregister_subdev()
876 v4l2_async_nf_name(struct v4l2_async_notifier *notifier) in v4l2_async_nf_name() argument
878 if (notifier->v4l2_dev) in v4l2_async_nf_name()
879 return notifier->v4l2_dev->name; in v4l2_async_nf_name()
880 else if (notifier->sd) in v4l2_async_nf_name()
881 return notifier->sd->name; in v4l2_async_nf_name()