The channel attribute dbr_size is only relevant for the DIM2 interface. So is the packets_per_xact for USB. Currently, all attrs are shown by default in sysfs for any channel. To get a clean content of a channel directory, this patch makes the attributes show up only on the channel they belong to. Signed-off-by: Christian Gromm <christian.gromm@xxxxxxxxxxxxx> --- drivers/staging/most/core.c | 12 +++++++++--- drivers/staging/most/core.h | 5 +++++ drivers/staging/most/dim2/dim2.c | 1 + drivers/staging/most/usb/usb.c | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/staging/most/core.c b/drivers/staging/most/core.c index f4c4646..19694a1 100644 --- a/drivers/staging/most/core.c +++ b/drivers/staging/most/core.c @@ -25,6 +25,7 @@ #define MAX_CHANNELS 64 #define STRING_SIZE 80 +#define MAX_NUM_ATTRS 14 static struct ida mdev_id; static int dummy_num_buffers; @@ -459,7 +460,7 @@ static DEVICE_ATTR_RW(set_subbuffer_size); static DEVICE_ATTR_RW(set_packets_per_xact); static DEVICE_ATTR_RW(set_dbr_size); -static struct attribute *channel_attrs[] = { +static struct attribute *channel_attrs[MAX_NUM_ATTRS] = { DEV_ATTR(available_directions), DEV_ATTR(available_datatypes), DEV_ATTR(number_of_packet_buffers), @@ -472,8 +473,6 @@ static struct attribute *channel_attrs[] = { DEV_ATTR(set_direction), DEV_ATTR(set_datatype), DEV_ATTR(set_subbuffer_size), - DEV_ATTR(set_packets_per_xact), - DEV_ATTR(set_dbr_size), NULL, }; @@ -1416,6 +1415,13 @@ int most_register_interface(struct most_interface *iface) iface->dev.init_name = iface->p->name; iface->dev.bus = &mc.bus; iface->dev.parent = &mc.dev; + if (iface->extra_attrs == XACT_ATTRS) { + channel_attrs[12] = DEV_ATTR(set_packets_per_xact); + channel_attrs[13] = NULL; + } else if (iface->extra_attrs == DBR_ATTRS) { + channel_attrs[12] = DEV_ATTR(set_dbr_size); + channel_attrs[13] = NULL; + } iface->dev.groups = interface_attr_groups; iface->dev.release = release_interface; if (device_register(&iface->dev)) { diff --git a/drivers/staging/most/core.h b/drivers/staging/most/core.h index 64cc02f..6fcc42d 100644 --- a/drivers/staging/most/core.h +++ b/drivers/staging/most/core.h @@ -235,6 +235,11 @@ struct most_interface { enum most_interface_type interface; const char *description; unsigned int num_channels; + enum { + NO_ATTRS = 0, + XACT_ATTRS, + DBR_ATTRS + } extra_attrs; struct most_channel_capability *channel_vector; void *(*dma_alloc)(struct mbo *mbo, u32 size); void (*dma_free)(struct mbo *mbo, u32 size); diff --git a/drivers/staging/most/dim2/dim2.c b/drivers/staging/most/dim2/dim2.c index 31fbc1a..d39b755 100644 --- a/drivers/staging/most/dim2/dim2.c +++ b/drivers/staging/most/dim2/dim2.c @@ -875,6 +875,7 @@ static int dim2_probe(struct platform_device *pdev) dev->most_iface.poison_channel = poison_channel; dev->most_iface.request_netinfo = request_netinfo; dev->most_iface.driver_dev = &pdev->dev; + dev->most_iface.extra_attrs = DBR_ATTRS; dev->dev.init_name = "dim2_state"; dev->dev.parent = &dev->most_iface.dev; diff --git a/drivers/staging/most/usb/usb.c b/drivers/staging/most/usb/usb.c index bc820f9..ab873b9 100644 --- a/drivers/staging/most/usb/usb.c +++ b/drivers/staging/most/usb/usb.c @@ -1063,6 +1063,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id) mdev->iface.dma_free = hdm_dma_free; mdev->iface.description = mdev->description; mdev->iface.num_channels = num_endpoints; + mdev->iface.extra_attrs = XACT_ATTRS; snprintf(mdev->description, sizeof(mdev->description), "usb_device %d-%s:%d.%d", -- 2.7.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel