Lines Matching refs:sd
25 static bool match_i2c(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) in match_i2c() argument
28 struct i2c_client *client = i2c_verify_client(sd->dev); in match_i2c()
37 static bool match_devname(struct v4l2_subdev *sd, in match_devname() argument
40 return !strcmp(asd->match.device_name.name, dev_name(sd->dev)); in match_devname()
43 static bool match_of(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) in match_of() argument
45 return sd->of_node == asd->match.of.node; in match_of()
48 static bool match_custom(struct v4l2_subdev *sd, struct v4l2_async_subdev *asd) in match_custom() argument
54 return asd->match.custom.match(sd->dev, asd); in match_custom()
62 struct v4l2_subdev *sd) in v4l2_async_belongs() argument
89 if (match(sd, asd)) in v4l2_async_belongs()
97 struct v4l2_subdev *sd, in v4l2_async_test_notify() argument
104 sd->asd = asd; in v4l2_async_test_notify()
105 sd->notifier = notifier; 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()
118 notifier->unbind(notifier, sd, asd); in v4l2_async_test_notify()
128 static void v4l2_async_cleanup(struct v4l2_subdev *sd) in v4l2_async_cleanup() argument
130 v4l2_device_unregister_subdev(sd); in v4l2_async_cleanup()
132 list_del_init(&sd->async_list); in v4l2_async_cleanup()
133 sd->asd = NULL; in v4l2_async_cleanup()
134 sd->dev = NULL; in v4l2_async_cleanup()
140 struct v4l2_subdev *sd, *tmp; in v4l2_async_notifier_register() local
174 list_for_each_entry_safe(sd, tmp, &subdev_list, async_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()
196 struct v4l2_subdev *sd, *tmp; in v4l2_async_notifier_unregister() local
215 list_for_each_entry_safe(sd, tmp, ¬ifier->done, async_list) { in v4l2_async_notifier_unregister()
218 d = get_device(sd->dev); in v4l2_async_notifier_unregister()
220 v4l2_async_cleanup(sd); in v4l2_async_notifier_unregister()
226 notifier->unbind(notifier, sd, sd->asd); in v4l2_async_notifier_unregister()
272 int v4l2_async_register_subdev(struct v4l2_subdev *sd) in v4l2_async_register_subdev() argument
281 if (!sd->of_node && sd->dev) in v4l2_async_register_subdev()
282 sd->of_node = sd->dev->of_node; in v4l2_async_register_subdev()
286 INIT_LIST_HEAD(&sd->async_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()
298 list_add(&sd->async_list, &subdev_list); in v4l2_async_register_subdev()
306 void v4l2_async_unregister_subdev(struct v4l2_subdev *sd) in v4l2_async_unregister_subdev() argument
308 struct v4l2_async_notifier *notifier = sd->notifier; in v4l2_async_unregister_subdev()
310 if (!sd->asd) { in v4l2_async_unregister_subdev()
311 if (!list_empty(&sd->async_list)) in v4l2_async_unregister_subdev()
312 v4l2_async_cleanup(sd); in v4l2_async_unregister_subdev()
318 list_add(&sd->asd->list, ¬ifier->waiting); in v4l2_async_unregister_subdev()
320 v4l2_async_cleanup(sd); in v4l2_async_unregister_subdev()
323 notifier->unbind(notifier, sd, sd->asd); in v4l2_async_unregister_subdev()