From 59c85e82c2e7a672cb4342dc5ccf9df8a3a14f73 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Wed, 18 May 2011 14:42:22 +0100 Subject: staging:iio:trigger handle name attr in core, remove old alloc and register any control_attrs via struct device As the majority of triggers don't actually have any other control_attrs lets use the fact that struct device has a groups element when we do need to have these attributes registered. A vargs function is used to cut down on lots of building strings in every single driver just in order to pass them into the allocate. Also iio_allocate_trigger_named -> iio_allocate_trigger as there is no unamed version any more, so that is now just confusing. Blackfin tested and fixed by Michael Hennerich. V2: Elements from Michael Hennerich's patches for the ade7758 Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- .../staging/iio/trigger/iio-trig-periodic-rtc.c | 24 ++++++++-------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'drivers/staging/iio/trigger/iio-trig-periodic-rtc.c') diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c index 24f174e1cda5..01cf7e20b515 100644 --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c @@ -72,20 +72,24 @@ error_ret: return ret; } -static IIO_TRIGGER_NAME_ATTR; static DEVICE_ATTR(frequency, S_IRUGO | S_IWUSR, iio_trig_periodic_read_freq, iio_trig_periodic_write_freq); static struct attribute *iio_trig_prtc_attrs[] = { &dev_attr_frequency.attr, - &dev_attr_name.attr, NULL, }; + static const struct attribute_group iio_trig_prtc_attr_group = { .attrs = iio_trig_prtc_attrs, }; +static const struct attribute_group *iio_trig_prtc_attr_groups[] = { + &iio_trig_prtc_attr_group, + NULL +}; + static void iio_prtc_trigger_poll(void *private_data) { /* Timestamp is not provided currently */ @@ -103,7 +107,7 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev) for (i = 0;; i++) { if (pdata[i] == NULL) break; - trig = iio_allocate_trigger(); + trig = iio_allocate_trigger("periodic%s", pdata[i]); if (!trig) { ret = -ENOMEM; goto error_free_completed_registrations; @@ -118,25 +122,19 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev) trig->private_data = trig_info; trig->owner = THIS_MODULE; trig->set_trigger_state = &iio_trig_periodic_rtc_set_state; - trig->name = kasprintf(GFP_KERNEL, "periodic%s", pdata[i]); - if (trig->name == NULL) { - ret = -ENOMEM; - goto error_free_trig_info; - } - /* RTC access */ trig_info->rtc = rtc_class_open(pdata[i]); if (trig_info->rtc == NULL) { ret = -EINVAL; - goto error_free_name; + goto error_free_trig_info; } trig_info->task.func = iio_prtc_trigger_poll; trig_info->task.private_data = trig; ret = rtc_irq_register(trig_info->rtc, &trig_info->task); if (ret) goto error_close_rtc; - trig->control_attrs = &iio_trig_prtc_attr_group; + trig->dev.groups = iio_trig_prtc_attr_groups; ret = iio_trigger_register(trig); if (ret) goto error_unregister_rtc_irq; @@ -146,8 +144,6 @@ error_unregister_rtc_irq: rtc_irq_unregister(trig_info->rtc, &trig_info->task); error_close_rtc: rtc_class_close(trig_info->rtc); -error_free_name: - kfree(trig->name); error_free_trig_info: kfree(trig_info); error_put_trigger_and_remove_from_list: @@ -161,7 +157,6 @@ error_free_completed_registrations: trig_info = trig->private_data; rtc_irq_unregister(trig_info->rtc, &trig_info->task); rtc_class_close(trig_info->rtc); - kfree(trig->name); kfree(trig_info); iio_trigger_unregister(trig); } @@ -180,7 +175,6 @@ static int iio_trig_periodic_rtc_remove(struct platform_device *dev) trig_info = trig->private_data; rtc_irq_unregister(trig_info->rtc, &trig_info->task); rtc_class_close(trig_info->rtc); - kfree(trig->name); kfree(trig_info); iio_trigger_unregister(trig); } -- cgit v1.2.3-55-g7522