aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwtracing/stm/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwtracing/stm/core.c')
-rw-r--r--drivers/hwtracing/stm/core.c36
1 files changed, 26 insertions, 10 deletions
diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c
index de80d45d8df9..ff31108b066f 100644
--- a/drivers/hwtracing/stm/core.c
+++ b/drivers/hwtracing/stm/core.c
@@ -67,9 +67,24 @@ static ssize_t channels_show(struct device *dev,
67 67
68static DEVICE_ATTR_RO(channels); 68static DEVICE_ATTR_RO(channels);
69 69
70static ssize_t hw_override_show(struct device *dev,
71 struct device_attribute *attr,
72 char *buf)
73{
74 struct stm_device *stm = to_stm_device(dev);
75 int ret;
76
77 ret = sprintf(buf, "%u\n", stm->data->hw_override);
78
79 return ret;
80}
81
82static DEVICE_ATTR_RO(hw_override);
83
70static struct attribute *stm_attrs[] = { 84static struct attribute *stm_attrs[] = {
71 &dev_attr_masters.attr, 85 &dev_attr_masters.attr,
72 &dev_attr_channels.attr, 86 &dev_attr_channels.attr,
87 &dev_attr_hw_override.attr,
73 NULL, 88 NULL,
74}; 89};
75 90
@@ -546,8 +561,6 @@ static int stm_char_policy_set_ioctl(struct stm_file *stmf, void __user *arg)
546 if (ret) 561 if (ret)
547 goto err_free; 562 goto err_free;
548 563
549 ret = 0;
550
551 if (stm->data->link) 564 if (stm->data->link)
552 ret = stm->data->link(stm->data, stmf->output.master, 565 ret = stm->data->link(stm->data, stmf->output.master,
553 stmf->output.channel); 566 stmf->output.channel);
@@ -668,18 +681,11 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data,
668 stm->dev.parent = parent; 681 stm->dev.parent = parent;
669 stm->dev.release = stm_device_release; 682 stm->dev.release = stm_device_release;
670 683
671 err = kobject_set_name(&stm->dev.kobj, "%s", stm_data->name);
672 if (err)
673 goto err_device;
674
675 err = device_add(&stm->dev);
676 if (err)
677 goto err_device;
678
679 mutex_init(&stm->link_mutex); 684 mutex_init(&stm->link_mutex);
680 spin_lock_init(&stm->link_lock); 685 spin_lock_init(&stm->link_lock);
681 INIT_LIST_HEAD(&stm->link_list); 686 INIT_LIST_HEAD(&stm->link_list);
682 687
688 /* initialize the object before it is accessible via sysfs */
683 spin_lock_init(&stm->mc_lock); 689 spin_lock_init(&stm->mc_lock);
684 mutex_init(&stm->policy_mutex); 690 mutex_init(&stm->policy_mutex);
685 stm->sw_nmasters = nmasters; 691 stm->sw_nmasters = nmasters;
@@ -687,9 +693,19 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data,
687 stm->data = stm_data; 693 stm->data = stm_data;
688 stm_data->stm = stm; 694 stm_data->stm = stm;
689 695
696 err = kobject_set_name(&stm->dev.kobj, "%s", stm_data->name);
697 if (err)
698 goto err_device;
699
700 err = device_add(&stm->dev);
701 if (err)
702 goto err_device;
703
690 return 0; 704 return 0;
691 705
692err_device: 706err_device:
707 unregister_chrdev(stm->major, stm_data->name);
708
693 /* matches device_initialize() above */ 709 /* matches device_initialize() above */
694 put_device(&stm->dev); 710 put_device(&stm->dev);
695err_free: 711err_free: