greybus: set up connection->private properly

The connection->private pointer should refer to a protocol-specific
data structure.  Change two protocol drivers (USB and vibrator) so
they now set this.

In addition, because the setup routine may need access to the
data structure, the private pointer should be set early--as
early as possible.  Make the UART, i2c, and GPIO protocol drivers
set the private pointer earlier.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/greybus/gpio-gb.c b/drivers/staging/greybus/gpio-gb.c
index 09d77c1..c573cce 100644
--- a/drivers/staging/greybus/gpio-gb.c
+++ b/drivers/staging/greybus/gpio-gb.c
@@ -472,6 +472,7 @@
 	if (!gb_gpio_controller)
 		return -ENOMEM;
 	gb_gpio_controller->connection = connection;
+	connection->private = gb_gpio_controller;
 
 	ret = gb_gpio_controller_setup(gb_gpio_controller);
 	if (ret)
@@ -502,7 +503,6 @@
 		pr_err("Failed to register GPIO\n");
 		return ret;
 	}
-	connection->private = gb_gpio_controller;
 
 	return 0;
 out_err:
diff --git a/drivers/staging/greybus/i2c-gb.c b/drivers/staging/greybus/i2c-gb.c
index bd1bada..8936389 100644
--- a/drivers/staging/greybus/i2c-gb.c
+++ b/drivers/staging/greybus/i2c-gb.c
@@ -377,6 +377,7 @@
 		return -ENOMEM;
 
 	gb_i2c_dev->connection = connection;	/* refcount? */
+	connection->private = gb_i2c_dev;
 
 	ret = gb_i2c_device_setup(gb_i2c_dev);
 	if (ret)
@@ -399,8 +400,6 @@
 	if (ret)
 		goto out_err;
 
-	connection->private = gb_i2c_dev;
-
 	return 0;
 out_err:
 	/* kref_put(gb_i2c_dev->connection) */
diff --git a/drivers/staging/greybus/pwm-gb.c b/drivers/staging/greybus/pwm-gb.c
index 9678b64..c505f1d 100644
--- a/drivers/staging/greybus/pwm-gb.c
+++ b/drivers/staging/greybus/pwm-gb.c
@@ -266,6 +266,7 @@
 	if (!pwmc)
 		return -ENOMEM;
 	pwmc->connection = connection;
+	connection->private = pwmc;
 
 	/* Check for compatible protocol version */
 	ret = gb_pwm_proto_version_operation(pwmc);
@@ -290,7 +291,6 @@
 		pr_err("Failed to register PWM\n");
 		return ret;
 	}
-	connection->private = pwmc;
 
 	return 0;
 out_err:
diff --git a/drivers/staging/greybus/uart-gb.c b/drivers/staging/greybus/uart-gb.c
index 6432c64..fad8635 100644
--- a/drivers/staging/greybus/uart-gb.c
+++ b/drivers/staging/greybus/uart-gb.c
@@ -637,6 +637,7 @@
 	if (!gb_tty)
 		return -ENOMEM;
 	gb_tty->connection = connection;
+	connection->private = gb_tty;
 
 	/* Check for compatible protocol version */
 	retval = get_version(gb_tty);
@@ -659,8 +660,6 @@
 	init_waitqueue_head(&gb_tty->wioctl);
 	mutex_init(&gb_tty->mutex);
 
-	connection->private = gb_tty;
-
 	send_control(gb_tty, gb_tty->ctrlout);
 
 	/* initialize the uart to be 9600n81 */
diff --git a/drivers/staging/greybus/usb-gb.c b/drivers/staging/greybus/usb-gb.c
index e5da72a..b3092ed 100644
--- a/drivers/staging/greybus/usb-gb.c
+++ b/drivers/staging/greybus/usb-gb.c
@@ -341,6 +341,7 @@
 		return -ENOMEM;
 
 	gb_usb_dev->connection = connection;
+	connection->private = gb_usb_dev;
 
 	/* Check for compatible protocol version */
 	retval = get_version(gb_usb_dev);
diff --git a/drivers/staging/greybus/vibrator-gb.c b/drivers/staging/greybus/vibrator-gb.c
index d00301d..8970c69 100644
--- a/drivers/staging/greybus/vibrator-gb.c
+++ b/drivers/staging/greybus/vibrator-gb.c
@@ -139,6 +139,7 @@
 		return -ENOMEM;
 
 	vib->connection = connection;
+	connection->private = vib;
 
 	retval = get_version(vib);
 	if (retval)