From 6ceb8fdeaec665642de944ee47d11440e72a5e26 Mon Sep 17 00:00:00 2001 From: Viresh Kumar Date: Fri, 3 Jul 2015 17:00:30 +0530 Subject: [PATCH] greybus: svc: save pointer to struct gb_svc in struct gb_interface Its another special protocol (just like control protocol) and is required to be accessed from other files, lets save a pointer to it in interface structure. Signed-off-by: Viresh Kumar Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/interface.h | 1 + drivers/staging/greybus/svc.c | 13 ++++++------- drivers/staging/greybus/svc.h | 7 ++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/staging/greybus/interface.h b/drivers/staging/greybus/interface.h index 86eb894..c2bcb92 100644 --- a/drivers/staging/greybus/interface.h +++ b/drivers/staging/greybus/interface.h @@ -14,6 +14,7 @@ struct gb_interface { struct device dev; struct gb_control *control; + struct gb_svc *svc; struct list_head bundles; struct list_head links; /* greybus_host_device->interfaces */ diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c index 8a5a9b7..ce789c9 100644 --- a/drivers/staging/greybus/svc.c +++ b/drivers/staging/greybus/svc.c @@ -9,12 +9,6 @@ #include "greybus.h" -struct gb_svc { - struct gb_connection *connection; - u8 version_major; - u8 version_minor; -}; - /* Define get_version() routine */ define_get_version(gb_svc, SVC); @@ -217,6 +211,9 @@ static int gb_svc_connection_init(struct gb_connection *connection) if (ret) kfree(svc); + /* Set interface's svc connection */ + connection->bundle->intf->svc = svc; + return ret; } @@ -224,9 +221,11 @@ static void gb_svc_connection_exit(struct gb_connection *connection) { struct gb_svc *svc = connection->private; - if (!svc) + if (WARN_ON(connection->bundle->intf->svc != svc)) return; + connection->bundle->intf->svc = NULL; + kfree(svc); } diff --git a/drivers/staging/greybus/svc.h b/drivers/staging/greybus/svc.h index b039aea..ebabe5f 100644 --- a/drivers/staging/greybus/svc.h +++ b/drivers/staging/greybus/svc.h @@ -10,7 +10,12 @@ #ifndef __SVC_H #define __SVC_H -struct gb_svc; +struct gb_svc { + struct gb_connection *connection; + u8 version_major; + u8 version_minor; +}; + int gb_svc_intf_device_id(struct gb_svc *svc, u8 intf_id, u8 device_id); int gb_svc_intf_reset(struct gb_svc *svc, u8 intf_id); -- 2.7.4