All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [media] au0828: Cache the decoder info at au0828 dev structure
@ 2015-06-18 17:27 Mauro Carvalho Chehab
  2015-06-18 18:17 ` Hans Verkuil
  0 siblings, 1 reply; 2+ messages in thread
From: Mauro Carvalho Chehab @ 2015-06-18 17:27 UTC (permalink / raw)
  To: Linux Media Mailing List
  Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, Hans Verkuil,
	Prabhakar Lad, Shuah Khan, Rafael Lourenço de Lima Chehab,
	Ramakrishnan Muthukrishnan, Julia Lawall

Instead of seeking for the decoder every time analog stream is
started, cache it.

Requested-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

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
 };
 
-- 
2.4.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] [media] au0828: Cache the decoder info at au0828 dev structure
  2015-06-18 17:27 [PATCH] [media] au0828: Cache the decoder info at au0828 dev structure Mauro Carvalho Chehab
@ 2015-06-18 18:17 ` Hans Verkuil
  0 siblings, 0 replies; 2+ messages in thread
From: Hans Verkuil @ 2015-06-18 18:17 UTC (permalink / raw)
  To: Mauro Carvalho Chehab, Linux Media Mailing List
  Cc: Mauro Carvalho Chehab, Hans Verkuil, Prabhakar Lad, Shuah Khan,
	Rafael Lourenço de Lima Chehab, Ramakrishnan Muthukrishnan,
	Julia Lawall

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@xs4all.nl>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>

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
>  };
>  
> 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-06-18 18:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-18 17:27 [PATCH] [media] au0828: Cache the decoder info at au0828 dev structure Mauro Carvalho Chehab
2015-06-18 18:17 ` Hans Verkuil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.