diff options
author | Mike Isely <isely@pobox.com> | 2007-04-08 00:11:47 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-04-27 14:45:30 -0400 |
commit | 31a1854706707dc3b67eb0d3bf0f51c67d91c82e (patch) | |
tree | 724a4659f07d8b040578da07de3f07909336116d /drivers/media/video/pvrusb2/pvrusb2-sysfs.c | |
parent | 4f210e072235c3c123b068d348a1a02e624ff5be (diff) |
V4L/DVB (5507): Pvrusb2: Gather USB bus address info and report it
The V4L2 API requires a unique bus_info string returned as part of the
v4l2_capability structure. These changes gather up the USB address
information, from the underlying device, into a string and report that
out through v4l2 and via sysfs (for completeness).
Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/pvrusb2/pvrusb2-sysfs.c')
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-sysfs.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c index 91396fd573e4..a741c556a39a 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c +++ b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c | |||
@@ -42,9 +42,11 @@ struct pvr2_sysfs { | |||
42 | struct class_device_attribute attr_v4l_minor_number; | 42 | struct class_device_attribute attr_v4l_minor_number; |
43 | struct class_device_attribute attr_v4l_radio_minor_number; | 43 | struct class_device_attribute attr_v4l_radio_minor_number; |
44 | struct class_device_attribute attr_unit_number; | 44 | struct class_device_attribute attr_unit_number; |
45 | struct class_device_attribute attr_bus_info; | ||
45 | int v4l_minor_number_created_ok; | 46 | int v4l_minor_number_created_ok; |
46 | int v4l_radio_minor_number_created_ok; | 47 | int v4l_radio_minor_number_created_ok; |
47 | int unit_number_created_ok; | 48 | int unit_number_created_ok; |
49 | int bus_info_created_ok; | ||
48 | }; | 50 | }; |
49 | 51 | ||
50 | #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC | 52 | #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC |
@@ -705,6 +707,10 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp) | |||
705 | pvr2_sysfs_tear_down_debugifc(sfp); | 707 | pvr2_sysfs_tear_down_debugifc(sfp); |
706 | #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */ | 708 | #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */ |
707 | pvr2_sysfs_tear_down_controls(sfp); | 709 | pvr2_sysfs_tear_down_controls(sfp); |
710 | if (sfp->bus_info_created_ok) { | ||
711 | class_device_remove_file(sfp->class_dev, | ||
712 | &sfp->attr_bus_info); | ||
713 | } | ||
708 | if (sfp->v4l_minor_number_created_ok) { | 714 | if (sfp->v4l_minor_number_created_ok) { |
709 | class_device_remove_file(sfp->class_dev, | 715 | class_device_remove_file(sfp->class_dev, |
710 | &sfp->attr_v4l_minor_number); | 716 | &sfp->attr_v4l_minor_number); |
@@ -735,6 +741,16 @@ static ssize_t v4l_minor_number_show(struct class_device *class_dev,char *buf) | |||
735 | } | 741 | } |
736 | 742 | ||
737 | 743 | ||
744 | static ssize_t bus_info_show(struct class_device *class_dev,char *buf) | ||
745 | { | ||
746 | struct pvr2_sysfs *sfp; | ||
747 | sfp = (struct pvr2_sysfs *)class_dev->class_data; | ||
748 | if (!sfp) return -EINVAL; | ||
749 | return scnprintf(buf,PAGE_SIZE,"%s\n", | ||
750 | pvr2_hdw_get_bus_info(sfp->channel.hdw)); | ||
751 | } | ||
752 | |||
753 | |||
738 | static ssize_t v4l_radio_minor_number_show(struct class_device *class_dev, | 754 | static ssize_t v4l_radio_minor_number_show(struct class_device *class_dev, |
739 | char *buf) | 755 | char *buf) |
740 | { | 756 | { |
@@ -836,6 +852,20 @@ static void class_dev_create(struct pvr2_sysfs *sfp, | |||
836 | sfp->unit_number_created_ok = !0; | 852 | sfp->unit_number_created_ok = !0; |
837 | } | 853 | } |
838 | 854 | ||
855 | sfp->attr_bus_info.attr.owner = THIS_MODULE; | ||
856 | sfp->attr_bus_info.attr.name = "bus_info_str"; | ||
857 | sfp->attr_bus_info.attr.mode = S_IRUGO; | ||
858 | sfp->attr_bus_info.show = bus_info_show; | ||
859 | sfp->attr_bus_info.store = NULL; | ||
860 | ret = class_device_create_file(sfp->class_dev, | ||
861 | &sfp->attr_bus_info); | ||
862 | if (ret < 0) { | ||
863 | printk(KERN_WARNING "%s: class_device_create_file error: %d\n", | ||
864 | __FUNCTION__, ret); | ||
865 | } else { | ||
866 | sfp->bus_info_created_ok = !0; | ||
867 | } | ||
868 | |||
839 | pvr2_sysfs_add_controls(sfp); | 869 | pvr2_sysfs_add_controls(sfp); |
840 | #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC | 870 | #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC |
841 | pvr2_sysfs_add_debugifc(sfp); | 871 | pvr2_sysfs_add_debugifc(sfp); |