linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC/PATCH 13/45] media: usbtv: core: make use of new usb_endpoint_maxp_mult()
       [not found] <20160928130554.29790-1-felipe.balbi@linux.intel.com>
@ 2016-09-28 13:05 ` Felipe Balbi
  2016-09-28 13:05 ` [RFC/PATCH 14/45] media: usb: uvc: " Felipe Balbi
  2016-09-28 13:05 ` [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation Felipe Balbi
  2 siblings, 0 replies; 6+ messages in thread
From: Felipe Balbi @ 2016-09-28 13:05 UTC (permalink / raw)
  To: Linux USB; +Cc: Felipe Balbi, Mauro Carvalho Chehab, linux-media

We have introduced a helper to calculate multiplier
value from wMaxPacketSize. Start using it.

Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: <linux-media@vger.kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
---
 drivers/media/usb/usbtv/usbtv-core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c
index dc76fd41e00f..ceb953be0770 100644
--- a/drivers/media/usb/usbtv/usbtv-core.c
+++ b/drivers/media/usb/usbtv/usbtv-core.c
@@ -71,6 +71,7 @@ static int usbtv_probe(struct usb_interface *intf,
 	int size;
 	struct device *dev = &intf->dev;
 	struct usbtv *usbtv;
+	struct usb_host_endpoint *ep;
 
 	/* Checks that the device is what we think it is. */
 	if (intf->num_altsetting != 2)
@@ -78,10 +79,12 @@ static int usbtv_probe(struct usb_interface *intf,
 	if (intf->altsetting[1].desc.bNumEndpoints != 4)
 		return -ENODEV;
 
+	ep = &intf->altsetting[1].endpoint[0];
+
 	/* Packet size is split into 11 bits of base size and count of
 	 * extra multiplies of it.*/
-	size = usb_endpoint_maxp(&intf->altsetting[1].endpoint[0].desc);
-	size = (size & 0x07ff) * (((size & 0x1800) >> 11) + 1);
+	size = usb_endpoint_maxp(&ep->desc);
+	size = (size & 0x07ff) * usb_endpoint_maxp_mult(&ep->desc);
 
 	/* Device structure */
 	usbtv = kzalloc(sizeof(struct usbtv), GFP_KERNEL);
-- 
2.10.0.440.g21f862b


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

* [RFC/PATCH 14/45] media: usb: uvc: make use of new usb_endpoint_maxp_mult()
       [not found] <20160928130554.29790-1-felipe.balbi@linux.intel.com>
  2016-09-28 13:05 ` [RFC/PATCH 13/45] media: usbtv: core: make use of new usb_endpoint_maxp_mult() Felipe Balbi
@ 2016-09-28 13:05 ` Felipe Balbi
  2016-09-29  9:18   ` Laurent Pinchart
  2016-09-28 13:05 ` [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation Felipe Balbi
  2 siblings, 1 reply; 6+ messages in thread
From: Felipe Balbi @ 2016-09-28 13:05 UTC (permalink / raw)
  To: Linux USB
  Cc: Felipe Balbi, Laurent Pinchart, Mauro Carvalho Chehab,
	linux-media

We have introduced a helper to calculate multiplier
value from wMaxPacketSize. Start using it.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: <linux-media@vger.kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
---
 drivers/media/usb/uvc/uvc_video.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
index b5589d5f5da4..11e0e5f4e1c2 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -1467,6 +1467,7 @@ static unsigned int uvc_endpoint_max_bpi(struct usb_device *dev,
 					 struct usb_host_endpoint *ep)
 {
 	u16 psize;
+	u16 mult;
 
 	switch (dev->speed) {
 	case USB_SPEED_SUPER:
@@ -1474,7 +1475,8 @@ static unsigned int uvc_endpoint_max_bpi(struct usb_device *dev,
 		return le16_to_cpu(ep->ss_ep_comp.wBytesPerInterval);
 	case USB_SPEED_HIGH:
 		psize = usb_endpoint_maxp(&ep->desc);
-		return (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
+		mult = usb_endpoint_maxp_mult(&ep->desc);
+		return (psize & 0x07ff) * mult;
 	case USB_SPEED_WIRELESS:
 		psize = usb_endpoint_maxp(&ep->desc);
 		return psize;
-- 
2.10.0.440.g21f862b


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

* [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation
       [not found] <20160928130554.29790-1-felipe.balbi@linux.intel.com>
  2016-09-28 13:05 ` [RFC/PATCH 13/45] media: usbtv: core: make use of new usb_endpoint_maxp_mult() Felipe Balbi
  2016-09-28 13:05 ` [RFC/PATCH 14/45] media: usb: uvc: " Felipe Balbi
@ 2016-09-28 13:05 ` Felipe Balbi
  2016-09-29  9:19   ` Laurent Pinchart
  2 siblings, 1 reply; 6+ messages in thread
From: Felipe Balbi @ 2016-09-28 13:05 UTC (permalink / raw)
  To: Linux USB
  Cc: Felipe Balbi, Laurent Pinchart, Mauro Carvalho Chehab,
	linux-media

Now that usb_endpoint_maxp() only returns the lowest
11 bits from wMaxPacketSize, we can remove the &
operation from this driver.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: <linux-media@vger.kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
---
 drivers/media/usb/uvc/uvc_video.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
index 11e0e5f4e1c2..f3c1c852e401 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -1553,7 +1553,7 @@ static int uvc_init_video_bulk(struct uvc_streaming *stream,
 	u16 psize;
 	u32 size;
 
-	psize = usb_endpoint_maxp(&ep->desc) & 0x7ff;
+	psize = usb_endpoint_maxp(&ep->desc);
 	size = stream->ctrl.dwMaxPayloadTransferSize;
 	stream->bulk.max_payload_size = size;
 
-- 
2.10.0.440.g21f862b


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

* Re: [RFC/PATCH 14/45] media: usb: uvc: make use of new usb_endpoint_maxp_mult()
  2016-09-28 13:05 ` [RFC/PATCH 14/45] media: usb: uvc: " Felipe Balbi
@ 2016-09-29  9:18   ` Laurent Pinchart
  2016-09-29  9:44     ` Felipe Balbi
  0 siblings, 1 reply; 6+ messages in thread
From: Laurent Pinchart @ 2016-09-29  9:18 UTC (permalink / raw)
  To: Felipe Balbi; +Cc: Linux USB, Mauro Carvalho Chehab, linux-media

Hi Felipe,

Thanks for the patch.

On Wednesday 28 Sep 2016 16:05:23 Felipe Balbi wrote:
> We have introduced a helper to calculate multiplier
> value from wMaxPacketSize. Start using it.
> 
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
> Cc: <linux-media@vger.kernel.org>
> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
> ---
>  drivers/media/usb/uvc/uvc_video.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_video.c
> b/drivers/media/usb/uvc/uvc_video.c index b5589d5f5da4..11e0e5f4e1c2 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -1467,6 +1467,7 @@ static unsigned int uvc_endpoint_max_bpi(struct
> usb_device *dev, struct usb_host_endpoint *ep)
>  {
>  	u16 psize;
> +	u16 mult;
> 
>  	switch (dev->speed) {
>  	case USB_SPEED_SUPER:
> @@ -1474,7 +1475,8 @@ static unsigned int uvc_endpoint_max_bpi(struct
> usb_device *dev, return le16_to_cpu(ep->ss_ep_comp.wBytesPerInterval);
>  	case USB_SPEED_HIGH:
>  		psize = usb_endpoint_maxp(&ep->desc);
> -		return (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
> +		mult = usb_endpoint_maxp_mult(&ep->desc);
> +		return (psize & 0x07ff) * mult;

I believe you can remove the & 0x07ff here after patch 28/45.

This being said, wouldn't it be useful to introduce a helper function that 
performs the full computation instead of requiring usage of two helpers that 
both call __le16_to_cpu() on the same field ? Or possibly turn the whole 
uvc_endpoint_max_bpi() function into a core helper ? I haven't checked whether 
it can be useful to other drivers though.

>  	case USB_SPEED_WIRELESS:
>  		psize = usb_endpoint_maxp(&ep->desc);
>  		return psize;

-- 
Regards,

Laurent Pinchart


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

* Re: [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation
  2016-09-28 13:05 ` [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation Felipe Balbi
@ 2016-09-29  9:19   ` Laurent Pinchart
  0 siblings, 0 replies; 6+ messages in thread
From: Laurent Pinchart @ 2016-09-29  9:19 UTC (permalink / raw)
  To: Felipe Balbi; +Cc: Linux USB, Mauro Carvalho Chehab, linux-media

Hi Felipe,

Thank you for the patch.

On Wednesday 28 Sep 2016 16:05:39 Felipe Balbi wrote:
> Now that usb_endpoint_maxp() only returns the lowest
> 11 bits from wMaxPacketSize, we can remove the &
> operation from this driver.
> 
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
> Cc: <linux-media@vger.kernel.org>
> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/media/usb/uvc/uvc_video.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_video.c
> b/drivers/media/usb/uvc/uvc_video.c index 11e0e5f4e1c2..f3c1c852e401 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -1553,7 +1553,7 @@ static int uvc_init_video_bulk(struct uvc_streaming
> *stream, u16 psize;
>  	u32 size;
> 
> -	psize = usb_endpoint_maxp(&ep->desc) & 0x7ff;
> +	psize = usb_endpoint_maxp(&ep->desc);
>  	size = stream->ctrl.dwMaxPayloadTransferSize;
>  	stream->bulk.max_payload_size = size;

-- 
Regards,

Laurent Pinchart


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

* Re: [RFC/PATCH 14/45] media: usb: uvc: make use of new usb_endpoint_maxp_mult()
  2016-09-29  9:18   ` Laurent Pinchart
@ 2016-09-29  9:44     ` Felipe Balbi
  0 siblings, 0 replies; 6+ messages in thread
From: Felipe Balbi @ 2016-09-29  9:44 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Linux USB, Mauro Carvalho Chehab, linux-media

[-- Attachment #1: Type: text/plain, Size: 2272 bytes --]


Hi,

Laurent Pinchart <laurent.pinchart@ideasonboard.com> writes:
> Hi Felipe,
>
> Thanks for the patch.
>
> On Wednesday 28 Sep 2016 16:05:23 Felipe Balbi wrote:
>> We have introduced a helper to calculate multiplier
>> value from wMaxPacketSize. Start using it.
>> 
>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
>> Cc: <linux-media@vger.kernel.org>
>> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
>> ---
>>  drivers/media/usb/uvc/uvc_video.c | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/media/usb/uvc/uvc_video.c
>> b/drivers/media/usb/uvc/uvc_video.c index b5589d5f5da4..11e0e5f4e1c2 100644
>> --- a/drivers/media/usb/uvc/uvc_video.c
>> +++ b/drivers/media/usb/uvc/uvc_video.c
>> @@ -1467,6 +1467,7 @@ static unsigned int uvc_endpoint_max_bpi(struct
>> usb_device *dev, struct usb_host_endpoint *ep)
>>  {
>>  	u16 psize;
>> +	u16 mult;
>> 
>>  	switch (dev->speed) {
>>  	case USB_SPEED_SUPER:
>> @@ -1474,7 +1475,8 @@ static unsigned int uvc_endpoint_max_bpi(struct
>> usb_device *dev, return le16_to_cpu(ep->ss_ep_comp.wBytesPerInterval);
>>  	case USB_SPEED_HIGH:
>>  		psize = usb_endpoint_maxp(&ep->desc);
>> -		return (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
>> +		mult = usb_endpoint_maxp_mult(&ep->desc);
>> +		return (psize & 0x07ff) * mult;
>
> I believe you can remove the & 0x07ff here after patch 28/45.
>
> This being said, wouldn't it be useful to introduce a helper function that 
> performs the full computation instead of requiring usage of two helpers that 
> both call __le16_to_cpu() on the same field ? Or possibly turn the whole 
> uvc_endpoint_max_bpi() function into a core helper ? I haven't checked whether 
> it can be useful to other drivers though.

it's probably not useful for many other drivers. The multiplier is only
valid for High-speed Isochronous and Interrupt endpoints. If it's not
High speed, we don't care. If it's not Isoc or Int, we don't care.

If we have a single helper, we are likely gonna be doing extra
computation for no reason. Moreover, this is only called once during
probe(), there's really nothing to optimize here.

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 800 bytes --]

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

end of thread, other threads:[~2016-09-29  9:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20160928130554.29790-1-felipe.balbi@linux.intel.com>
2016-09-28 13:05 ` [RFC/PATCH 13/45] media: usbtv: core: make use of new usb_endpoint_maxp_mult() Felipe Balbi
2016-09-28 13:05 ` [RFC/PATCH 14/45] media: usb: uvc: " Felipe Balbi
2016-09-29  9:18   ` Laurent Pinchart
2016-09-29  9:44     ` Felipe Balbi
2016-09-28 13:05 ` [RFC/PATCH 30/45] media: usb: uvc: remove unnecessary & operation Felipe Balbi
2016-09-29  9:19   ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).