greybus: connection: request protocol version before initializing connection

This can (should) be done from a common place as its required for most
of the protocols. Do it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Viresh Kumar 2015-08-11 07:35:59 +05:30 committed by Greg Kroah-Hartman
parent d653f4b191
commit 7ba26a8ced
1 changed files with 24 additions and 7 deletions

View File

@ -382,17 +382,34 @@ int gb_connection_init(struct gb_connection *connection)
connection->state = GB_CONNECTION_STATE_ENABLED;
spin_unlock_irq(&connection->lock);
ret = connection->protocol->connection_init(connection);
if (ret) {
spin_lock_irq(&connection->lock);
connection->state = GB_CONNECTION_STATE_ERROR;
spin_unlock_irq(&connection->lock);
goto disconnect;
/*
* Request protocol version supported by the module. We don't need to do
* this for SVC as that is initiated by the SVC.
*/
if (connection->hd_cport_id != GB_SVC_CPORT_ID) {
struct gb_protocol_version_response response;
ret = gb_protocol_get_version(connection,
GB_REQUEST_TYPE_PROTOCOL_VERSION,
NULL, 0, &response,
connection->protocol->major);
if (ret) {
dev_err(&connection->dev,
"Failed to get version CPort-%d (%d)\n",
cport_id, ret);
goto disconnect;
}
}
return 0;
ret = connection->protocol->connection_init(connection);
if (!ret)
return 0;
disconnect:
spin_lock_irq(&connection->lock);
connection->state = GB_CONNECTION_STATE_ERROR;
spin_unlock_irq(&connection->lock);
gb_connection_disconnected(connection);
return ret;
}