public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: renesas_usbhs: fix signed-unsigned return
@ 2016-04-08 15:05 Sudip Mukherjee
  2016-04-14 10:52 ` Yoshihiro Shimoda
  0 siblings, 1 reply; 4+ messages in thread
From: Sudip Mukherjee @ 2016-04-08 15:05 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Felipe Balbi; +Cc: linux-kernel, linux-usb, Sudip Mukherjee

The return type of usbhsp_setup_pipecfg() was u16 but it was returning
a negative value (-EINVAL). Instead lets return a pointer to u16 which
will hold the value to be returned or in case of error, return the
error code in ERR_PTR.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
---
 drivers/usb/renesas_usbhs/pipe.c | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c
index 78e9dba..00d595c 100644
--- a/drivers/usb/renesas_usbhs/pipe.c
+++ b/drivers/usb/renesas_usbhs/pipe.c
@@ -391,9 +391,9 @@ void usbhs_pipe_set_trans_count_if_bulk(struct usbhs_pipe *pipe, int len)
 /*
  *		pipe setup
  */
-static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe,
-				int is_host,
-				int dir_in)
+static u16 *usbhsp_setup_pipecfg(struct usbhs_pipe *pipe,
+				 int is_host,
+				 int dir_in)
 {
 	u16 type = 0;
 	u16 bfre = 0;
@@ -407,9 +407,13 @@ static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe,
 		[USB_ENDPOINT_XFER_INT]  = TYPE_INT,
 		[USB_ENDPOINT_XFER_ISOC] = TYPE_ISO,
 	};
+	u16 *result;
 
 	if (usbhs_pipe_is_dcp(pipe))
-		return -EINVAL;
+		return ERR_PTR(-EINVAL);
+	result = kmalloc(sizeof(u16), GFP_KERNEL);
+	if (!result)
+		return ERR_PTR(-ENOMEM);
 
 	/*
 	 * PIPECFG
@@ -451,14 +455,14 @@ static u16 usbhsp_setup_pipecfg(struct usbhs_pipe *pipe,
 
 	/* EPNUM */
 	epnum = 0; /* see usbhs_pipe_config_update() */
-
-	return	type	|
-		bfre	|
-		dblb	|
-		cntmd	|
-		dir	|
-		shtnak	|
-		epnum;
+	*result = type	 |
+		  bfre	 |
+		  dblb	 |
+		  cntmd	 |
+		  dir	 |
+		  shtnak |
+		  epnum;
+	return result;
 }
 
 static u16 usbhsp_setup_pipebuff(struct usbhs_pipe *pipe)
@@ -683,6 +687,7 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,
 	int is_host = usbhs_mod_is_host(priv);
 	int ret;
 	u16 pipecfg, pipebuf;
+	u16 *result;
 
 	pipe = usbhsp_get_pipe(priv, endpoint_type);
 	if (!pipe) {
@@ -702,7 +707,14 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,
 		return NULL;
 	}
 
-	pipecfg  = usbhsp_setup_pipecfg(pipe, is_host, dir_in);
+	result = usbhsp_setup_pipecfg(pipe, is_host, dir_in);
+	if (IS_ERR(result)) {
+		dev_err(dev, "can't setup pipe\n");
+		return NULL;
+	}
+	pipecfg = *result;
+	kfree(result);
+
 	pipebuf  = usbhsp_setup_pipebuff(pipe);
 
 	usbhsp_pipe_select(pipe);
-- 
1.9.1

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

end of thread, other threads:[~2016-04-14 15:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-08 15:05 [PATCH] usb: renesas_usbhs: fix signed-unsigned return Sudip Mukherjee
2016-04-14 10:52 ` Yoshihiro Shimoda
2016-04-14 10:55   ` Felipe Balbi
2016-04-14 15:50     ` Sudip Mukherjee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox