Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d0bee11 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman
Browse files

greybus: connection: fix connection-state handling



Set connection state to ENABLE before sending the control connected
message, and set state DISABLE after sending the control disconnected
event.

Remove the now unused ERROR connection state.

Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 2c92bd52
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -403,15 +403,14 @@ int gb_connection_init(struct gb_connection *connection)
	if (ret)
		goto err_hd_cport_disable;

	ret = gb_connection_control_connected(connection);
	if (ret)
		goto err_svc_destroy;

	/* Need to enable the connection to initialize it */
	spin_lock_irq(&connection->lock);
	connection->state = GB_CONNECTION_STATE_ENABLED;
	spin_unlock_irq(&connection->lock);

	ret = gb_connection_control_connected(connection);
	if (ret)
		goto err_svc_destroy;

	ret = gb_connection_protocol_get_version(connection);
	if (ret)
		goto err_disconnect;
@@ -423,11 +422,11 @@ int gb_connection_init(struct gb_connection *connection)
	return 0;

err_disconnect:
	gb_connection_control_disconnected(connection);

	spin_lock_irq(&connection->lock);
	connection->state = GB_CONNECTION_STATE_ERROR;
	connection->state = GB_CONNECTION_STATE_DISABLED;
	spin_unlock_irq(&connection->lock);

	gb_connection_control_disconnected(connection);
err_svc_destroy:
	gb_connection_svc_connection_destroy(connection);
err_hd_cport_disable:
@@ -451,7 +450,13 @@ void gb_connection_exit(struct gb_connection *connection)
	gb_connection_cancel_operations(connection, -ESHUTDOWN);

	connection->protocol->connection_exit(connection);

	gb_connection_control_disconnected(connection);

	spin_lock_irq(&connection->lock);
	connection->state = GB_CONNECTION_STATE_DISABLED;
	spin_unlock_irq(&connection->lock);

	gb_connection_svc_connection_destroy(connection);
	gb_connection_hd_cport_disable(connection);
	gb_connection_unbind_protocol(connection);
+1 −2
Original line number Diff line number Diff line
@@ -17,8 +17,7 @@ enum gb_connection_state {
	GB_CONNECTION_STATE_INVALID	= 0,
	GB_CONNECTION_STATE_DISABLED	= 1,
	GB_CONNECTION_STATE_ENABLED	= 2,
	GB_CONNECTION_STATE_ERROR	= 3,
	GB_CONNECTION_STATE_DESTROYING	= 4,
	GB_CONNECTION_STATE_DESTROYING	= 3,
};

struct gb_connection {