On 06/18/2015 07:27 PM, Mauro Carvalho Chehab wrote: > Instead of seeking for the decoder every time analog stream is > started, cache it. > > Requested-by: Hans Verkuil <hverkuil@xxxxxxxxx> > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxx> Acked-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> Regards, Hans > > diff --git a/drivers/media/usb/au0828/au0828-cards.c b/drivers/media/usb/au0828/au0828-cards.c > index 6b469e8c4c6e..f7337dbbc59f 100644 > --- a/drivers/media/usb/au0828/au0828-cards.c > +++ b/drivers/media/usb/au0828/au0828-cards.c > @@ -228,6 +228,10 @@ void au0828_card_analog_fe_setup(struct au0828_dev *dev) > "au8522", 0x8e >> 1, NULL); > if (sd == NULL) > pr_err("analog subdev registration failed\n"); > +#if CONFIG_MEDIA_CONTROLLER > + if (sd) > + dev->decoder = &sd->entity; > +#endif > } > > /* Setup tuners */ > diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c > index 4ebe13673adf..939b2ad73501 100644 > --- a/drivers/media/usb/au0828/au0828-video.c > +++ b/drivers/media/usb/au0828/au0828-video.c > @@ -641,11 +641,11 @@ static int au0828_enable_analog_tuner(struct au0828_dev *dev) > { > #ifdef CONFIG_MEDIA_CONTROLLER > struct media_device *mdev = dev->media_dev; > - struct media_entity *entity, *decoder = NULL, *source; > + struct media_entity *entity, *source; > struct media_link *link, *found_link = NULL; > int i, ret, active_links = 0; > > - if (!mdev) > + if (!mdev || !dev->decoder) > return 0; > > /* > @@ -655,18 +655,9 @@ static int au0828_enable_analog_tuner(struct au0828_dev *dev) > * do DVB streaming while the DMA engine is being used for V4L2, > * this should be enough for the actual needs. > */ > - media_device_for_each_entity(entity, mdev) { > - if (entity->type == MEDIA_ENT_T_V4L2_SUBDEV_DECODER) { > - decoder = entity; > - break; > - } > - } > - if (!decoder) > - return 0; > - > - for (i = 0; i < decoder->num_links; i++) { > - link = &decoder->links[i]; > - if (link->sink->entity == decoder) { > + for (i = 0; i < dev->decoder->num_links; i++) { > + link = &dev->decoder->links[i]; > + if (link->sink->entity == dev->decoder) { > found_link = link; > if (link->flags & MEDIA_LNK_FL_ENABLED) > active_links++; > diff --git a/drivers/media/usb/au0828/au0828.h b/drivers/media/usb/au0828/au0828.h > index 7e6a3bbc68ab..d3644b3fe6fa 100644 > --- a/drivers/media/usb/au0828/au0828.h > +++ b/drivers/media/usb/au0828/au0828.h > @@ -280,6 +280,7 @@ struct au0828_dev { > #ifdef CONFIG_MEDIA_CONTROLLER > struct media_device *media_dev; > struct media_pad video_pad, vbi_pad; > + struct media_entity *decoder; > #endif > }; > > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html