greybus: es2: sync up with recent es1 changes

Fix two bugs in es2 and do some minor clean up.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c
index a6c47a3..526e23c 100644
--- a/drivers/staging/greybus/es2.c
+++ b/drivers/staging/greybus/es2.c
@@ -132,7 +132,7 @@
 	 * that's better aligned for the user.
 	 */
 	hd->buffer_headroom = sizeof(u32);	/* For cport id */
-	hd->buffer_size_max = ES1_GBUF_MSG_SIZE_MAX;
+	hd->buffer_size_max = ES1_GBUF_MSG_SIZE_MAX - hd->buffer_headroom;
 	BUILD_BUG_ON(hd->buffer_headroom > GB_BUFFER_HEADROOM_MAX);
 }
 
@@ -244,7 +244,7 @@
 		pr_err("request to send inbound data buffer\n");
 		return ERR_PTR(-EINVAL);
 	}
-	if (cport_id > (u16)U8_MAX) {
+	if (cport_id > U8_MAX) {
 		pr_err("cport_id (%hd) is out of range for ES1\n", cport_id);
 		return ERR_PTR(-EINVAL);
 	}
@@ -423,7 +423,7 @@
 	 * the rest of the stream is "real" data
 	 */
 	data = urb->transfer_buffer;
-	cport_id = (u16)data[0];
+	cport_id = data[0];
 	data = &data[1];
 
 	/* Pass this data to the greybus core */
@@ -454,14 +454,13 @@
 	free_urb(es1, urb);
 }
 
-static void apb1_log_get(struct es1_ap_dev *es1)
+#define APB1_LOG_MSG_SIZE	64
+static void apb1_log_get(struct es1_ap_dev *es1, char *buf)
 {
-	char buf[65];
 	int retval;
 
 	/* SVC messages go down our control pipe */
 	do {
-		memset(buf, 0, 65);
 		retval = usb_control_msg(es1->usb_dev,
 					usb_rcvctrlpipe(es1->usb_dev,
 							es1->control_endpoint),
@@ -469,7 +468,7 @@
 					USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
 					0x00, 0x00,
 					buf,
-					64,
+					APB1_LOG_MSG_SIZE,
 					ES1_TIMEOUT);
 		if (retval > 0)
 			kfifo_in(&apb1_log_fifo, buf, retval);
@@ -478,10 +477,20 @@
 
 static int apb1_log_poll(void *data)
 {
+	struct es1_ap_dev *es1 = data;
+	char *buf;
+
+	buf = kmalloc(APB1_LOG_MSG_SIZE, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
 	while (!kthread_should_stop()) {
 		msleep(1000);
-		apb1_log_get((struct es1_ap_dev *)data);
+		apb1_log_get(es1, buf);
 	}
+
+	kfree(buf);
+
 	return 0;
 }