Hi Ezequiel, On 1/17/21 10:52 PM, Ezequiel Garcia wrote: > There are no users for vpif_display_config.asd_sizes > and vpif_display_config.asd members, which means the v4l2-async > subdevices aren't being defined anywhere. > > Remove the v4l2-async, leaving only the synchronous setup. > > Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxx> > --- > drivers/media/platform/davinci/vpif_display.c | 86 ++++--------------- > drivers/media/platform/davinci/vpif_display.h | 1 - > include/media/davinci/vpif_types.h | 2 - > 3 files changed, 15 insertions(+), 74 deletions(-) > > diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c > index 46afc029138f..e5f61d9b221d 100644 > --- a/drivers/media/platform/davinci/vpif_display.c > +++ b/drivers/media/platform/davinci/vpif_display.c > @@ -1117,23 +1117,6 @@ static void free_vpif_objs(void) > kfree(vpif_obj.dev[i]); > } > > -static int vpif_async_bound(struct v4l2_async_notifier *notifier, > - struct v4l2_subdev *subdev, > - struct v4l2_async_subdev *asd) > -{ > - int i; > - > - for (i = 0; i < vpif_obj.config->subdev_count; i++) > - if (!strcmp(vpif_obj.config->subdevinfo[i].name, > - subdev->name)) { > - vpif_obj.sd[i] = subdev; > - vpif_obj.sd[i]->grp_id = 1 << i; > - return 0; > - } > - > - return -EINVAL; > -} > - > static int vpif_probe_complete(void) > { > struct common_obj *common; > @@ -1230,16 +1213,6 @@ static int vpif_probe_complete(void) > return err; > } > > -static int vpif_async_complete(struct v4l2_async_notifier *notifier) > -{ > - return vpif_probe_complete(); > -} > - > -static const struct v4l2_async_notifier_operations vpif_async_ops = { > - .bound = vpif_async_bound, > - .complete = vpif_async_complete, > -}; > - > /* > * vpif_probe: This function creates device entries by register itself to the > * V4L2 driver and initializes fields of each channel objects > @@ -1294,52 +1267,28 @@ static __init int vpif_probe(struct platform_device *pdev) > goto vpif_unregister; > } > > - v4l2_async_notifier_init(&vpif_obj.notifier); > - > - if (!vpif_obj.config->asd_sizes) { > - i2c_adap = i2c_get_adapter(vpif_obj.config->i2c_adapter_id); > - for (i = 0; i < subdev_count; i++) { > - vpif_obj.sd[i] = > - v4l2_i2c_new_subdev_board(&vpif_obj.v4l2_dev, > - i2c_adap, > - &subdevdata[i]. > - board_info, I'm glad you change this, I didn't see it was a dot in the previous line and I thought board_info was some global variable that I couldn't find its declaration xD Reviewed-by: Helen Koike <helen.koike@xxxxxxxxxxxxx> Regards, Helen > - NULL); > - if (!vpif_obj.sd[i]) { > - vpif_err("Error registering v4l2 subdevice\n"); > - err = -ENODEV; > - goto probe_subdev_out; > - } > - > - if (vpif_obj.sd[i]) > - vpif_obj.sd[i]->grp_id = 1 << i; > - } > - err = vpif_probe_complete(); > - if (err) { > + i2c_adap = i2c_get_adapter(vpif_obj.config->i2c_adapter_id); > + for (i = 0; i < subdev_count; i++) { > + vpif_obj.sd[i] = > + v4l2_i2c_new_subdev_board(&vpif_obj.v4l2_dev, > + i2c_adap, > + &subdevdata[i].board_info, > + NULL); > + if (!vpif_obj.sd[i]) { > + vpif_err("Error registering v4l2 subdevice\n"); > + err = -ENODEV; > goto probe_subdev_out; > } > - } else { > - for (i = 0; i < vpif_obj.config->asd_sizes[0]; i++) { > - err = v4l2_async_notifier_add_subdev( > - &vpif_obj.notifier, vpif_obj.config->asd[i]); > - if (err) > - goto probe_cleanup; > - } > > - vpif_obj.notifier.ops = &vpif_async_ops; > - err = v4l2_async_notifier_register(&vpif_obj.v4l2_dev, > - &vpif_obj.notifier); > - if (err) { > - vpif_err("Error registering async notifier\n"); > - err = -EINVAL; > - goto probe_cleanup; > - } > + if (vpif_obj.sd[i]) > + vpif_obj.sd[i]->grp_id = 1 << i; > } > + err = vpif_probe_complete(); > + if (err) > + goto probe_subdev_out; > > return 0; > > -probe_cleanup: > - v4l2_async_notifier_cleanup(&vpif_obj.notifier); > probe_subdev_out: > kfree(vpif_obj.sd); > vpif_unregister: > @@ -1358,11 +1307,6 @@ static int vpif_remove(struct platform_device *device) > struct channel_obj *ch; > int i; > > - if (vpif_obj.config->asd_sizes) { > - v4l2_async_notifier_unregister(&vpif_obj.notifier); > - v4l2_async_notifier_cleanup(&vpif_obj.notifier); > - } > - > v4l2_device_unregister(&vpif_obj.v4l2_dev); > > kfree(vpif_obj.sd); > diff --git a/drivers/media/platform/davinci/vpif_display.h b/drivers/media/platform/davinci/vpif_display.h > index f731a65eefd6..f98062e79167 100644 > --- a/drivers/media/platform/davinci/vpif_display.h > +++ b/drivers/media/platform/davinci/vpif_display.h > @@ -118,7 +118,6 @@ struct vpif_device { > struct v4l2_device v4l2_dev; > struct channel_obj *dev[VPIF_DISPLAY_NUM_CHANNELS]; > struct v4l2_subdev **sd; > - struct v4l2_async_notifier notifier; > struct vpif_display_config *config; > }; > > diff --git a/include/media/davinci/vpif_types.h b/include/media/davinci/vpif_types.h > index 8439e46fb993..d03e5c54347a 100644 > --- a/include/media/davinci/vpif_types.h > +++ b/include/media/davinci/vpif_types.h > @@ -48,8 +48,6 @@ struct vpif_display_config { > int i2c_adapter_id; > struct vpif_display_chan_config chan_config[VPIF_DISPLAY_MAX_CHANNELS]; > const char *card_name; > - struct v4l2_async_subdev **asd; /* Flat array, arranged in groups */ > - int *asd_sizes; /* 0-terminated array of asd group sizes */ > }; > > struct vpif_input { >