From: Johan Hovold Date: Tue, 19 Jul 2016 13:24:48 +0000 (+0200) Subject: greybus: interface: make attributes type dependent X-Git-Tag: v4.9.8~1233^2~378^2~21^2~142 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=835642526e9310d435cc718cdb69f2fcd7a53b84;p=platform%2Fkernel%2Flinux-rpi3.git greybus: interface: make attributes type dependent Make most interface attributes type dependent (e.g only UniPro and Greybus interfaces should have a DDBL1 Manufacturer ID attribute). Note that the power attributes (e.g. current_now) will only be visible for UniPro- and Greybus-type interfaces (i.e. interfaces that can draw power). Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c index 1d50bd4..c27b18b 100644 --- a/drivers/staging/greybus/interface.c +++ b/drivers/staging/greybus/interface.c @@ -538,15 +538,62 @@ static struct attribute *interface_common_attrs[] = { NULL }; +static umode_t interface_unipro_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct gb_interface *intf = to_gb_interface(dev); + + switch (intf->type) { + case GB_SVC_INTF_TYPE_UNIPRO: + case GB_SVC_INTF_TYPE_GREYBUS: + return attr->mode; + default: + return 0; + } +} + +static umode_t interface_greybus_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct gb_interface *intf = to_gb_interface(dev); + + switch (intf->type) { + case GB_SVC_INTF_TYPE_GREYBUS: + return attr->mode; + default: + return 0; + } +} + +static umode_t interface_power_is_visible(struct kobject *kobj, + struct attribute *attr, int n) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct gb_interface *intf = to_gb_interface(dev); + + switch (intf->type) { + case GB_SVC_INTF_TYPE_UNIPRO: + case GB_SVC_INTF_TYPE_GREYBUS: + return attr->mode; + default: + return 0; + } +} + static const struct attribute_group interface_unipro_group = { + .is_visible = interface_unipro_is_visible, .attrs = interface_unipro_attrs, }; static const struct attribute_group interface_greybus_group = { + .is_visible = interface_greybus_is_visible, .attrs = interface_greybus_attrs, }; static const struct attribute_group interface_power_group = { + .is_visible = interface_power_is_visible, .attrs = interface_power_attrs, };