From: Viresh Kumar Date: Fri, 3 Jul 2015 11:30:30 +0000 (+0530) Subject: greybus: svc: save pointer to struct gb_svc in struct gb_interface X-Git-Tag: v5.15~12752^2~378^2~21^2~1400 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ceb8fdeaec665642de944ee47d11440e72a5e26;p=platform%2Fkernel%2Flinux-starfive.git 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 --- 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);