greybus: connection: clean up svc-connection creation

Move SVC-connection creation to its own helper.

Note that the connection_create host-driver callback is really
unrelated to the SVC connection, and will be removed by a later patch.
It is is included for now as the connection_destroy callback is
currently made from the SVC-connection-destroy helper.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2015-09-17 13:17:21 +02:00 коммит произвёл Greg Kroah-Hartman
Родитель ced6007a6d
Коммит a95c258c6f
1 изменённых файлов: 34 добавлений и 19 удалений

Просмотреть файл

@ -321,6 +321,37 @@ static void gb_connection_cancel_operations(struct gb_connection *connection,
spin_unlock_irq(&connection->lock); spin_unlock_irq(&connection->lock);
} }
/*
* Request the SVC to create a connection from AP's cport to interface's
* cport.
*/
static int
gb_connection_svc_connection_create(struct gb_connection *connection)
{
struct greybus_host_device *hd = connection->hd;
struct gb_protocol *protocol = connection->protocol;
int ret;
if (protocol->flags & GB_PROTOCOL_SKIP_SVC_CONNECTION)
return 0;
ret = gb_svc_connection_create(hd->svc,
hd->endo->ap_intf_id,
connection->hd_cport_id,
connection->bundle->intf->interface_id,
connection->intf_cport_id);
if (ret) {
dev_err(&connection->dev,
"failed to create svc connection: %d\n", ret);
return ret;
}
if (hd->driver->connection_create)
hd->driver->connection_create(connection);
return 0;
}
static void static void
gb_connection_svc_connection_destroy(struct gb_connection *connection) gb_connection_svc_connection_destroy(struct gb_connection *connection)
{ {
@ -358,29 +389,13 @@ static void gb_connection_disconnected(struct gb_connection *connection)
static int gb_connection_init(struct gb_connection *connection) static int gb_connection_init(struct gb_connection *connection)
{ {
int cport_id = connection->intf_cport_id; int cport_id = connection->intf_cport_id;
struct greybus_host_device *hd = connection->hd;
struct gb_protocol *protocol = connection->protocol; struct gb_protocol *protocol = connection->protocol;
int ret; int ret;
/* ret = gb_connection_svc_connection_create(connection);
* Request the SVC to create a connection from AP's cport to interface's if (ret)
* cport. return ret;
*/
if (!(protocol->flags & GB_PROTOCOL_SKIP_SVC_CONNECTION)) {
ret = gb_svc_connection_create(hd->svc,
hd->endo->ap_intf_id, connection->hd_cport_id,
connection->bundle->intf->interface_id,
cport_id);
if (ret) {
dev_err(&connection->dev,
"%s: Failed to create svc connection (%d)\n",
__func__, ret);
return ret;
}
if (hd->driver->connection_create)
hd->driver->connection_create(connection);
}
/* Inform Interface about active CPorts */ /* Inform Interface about active CPorts */
if (!(protocol->flags & GB_PROTOCOL_SKIP_CONTROL_CONNECTED)) { if (!(protocol->flags & GB_PROTOCOL_SKIP_CONTROL_CONNECTED)) {
struct gb_control *control = connection->bundle->intf->control; struct gb_control *control = connection->bundle->intf->control;