Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=31a1854706707dc3b67eb0d3bf0f51c67d91c82e
Commit:     31a1854706707dc3b67eb0d3bf0f51c67d91c82e
Parent:     4f210e072235c3c123b068d348a1a02e624ff5be
Author:     Mike Isely <[EMAIL PROTECTED]>
AuthorDate: Sun Apr 8 01:11:47 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Apr 27 15:45:30 2007 -0300

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h |    2 +
 drivers/media/video/pvrusb2/pvrusb2-hdw.c          |   12 ++++++++
 drivers/media/video/pvrusb2/pvrusb2-hdw.h          |    3 ++
 drivers/media/video/pvrusb2/pvrusb2-sysfs.c        |   30 ++++++++++++++++++++
 drivers/media/video/pvrusb2/pvrusb2-v4l2.c         |    2 +
 5 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h 
b/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
index 16bd741..ce66ab8 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
@@ -283,6 +283,8 @@ struct pvr2_hdw {
        int unit_number;             /* ID for driver instance */
        unsigned long serial_number; /* ID for hardware itself */
 
+       char bus_info[32]; /* Bus location info */
+
        /* Minor numbers used by v4l logic (yes, this is a hack, as there
           should be no v4l junk here).  Probably a better way to do this. */
        int v4l_minor_number_video;
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c 
b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 504301e..acf651e 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -1008,6 +1008,13 @@ unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
        return hdw->serial_number;
 }
 
+
+const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
+{
+       return hdw->bus_info;
+}
+
+
 unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
 {
        return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
@@ -2105,6 +2112,11 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface 
*intf,
        hdw->usb_intf = intf;
        hdw->usb_dev = interface_to_usbdev(intf);
 
+       scnprintf(hdw->bus_info,sizeof(hdw->bus_info),
+                 "usb %s address %d",
+                 hdw->usb_dev->dev.bus_id,
+                 hdw->usb_dev->devnum);
+
        ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
        usb_set_interface(hdw->usb_dev,ifnum,0);
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.h 
b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
index 0c9cca4..4dba8d0 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
@@ -124,6 +124,9 @@ struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *);
 /* Retrieve serial number of device */
 unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *);
 
+/* Retrieve bus location info of device */
+const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *);
+
 /* Called when hardware has been unplugged */
 void pvr2_hdw_disconnect(struct pvr2_hdw *);
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c 
b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
index 91396fd..a741c55 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-sysfs.c
@@ -42,9 +42,11 @@ struct pvr2_sysfs {
        struct class_device_attribute attr_v4l_minor_number;
        struct class_device_attribute attr_v4l_radio_minor_number;
        struct class_device_attribute attr_unit_number;
+       struct class_device_attribute attr_bus_info;
        int v4l_minor_number_created_ok;
        int v4l_radio_minor_number_created_ok;
        int unit_number_created_ok;
+       int bus_info_created_ok;
 };
 
 #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
@@ -705,6 +707,10 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp)
        pvr2_sysfs_tear_down_debugifc(sfp);
 #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */
        pvr2_sysfs_tear_down_controls(sfp);
+       if (sfp->bus_info_created_ok) {
+               class_device_remove_file(sfp->class_dev,
+                                        &sfp->attr_bus_info);
+       }
        if (sfp->v4l_minor_number_created_ok) {
                class_device_remove_file(sfp->class_dev,
                                         &sfp->attr_v4l_minor_number);
@@ -735,6 +741,16 @@ static ssize_t v4l_minor_number_show(struct class_device 
*class_dev,char *buf)
 }
 
 
+static ssize_t bus_info_show(struct class_device *class_dev,char *buf)
+{
+       struct pvr2_sysfs *sfp;
+       sfp = (struct pvr2_sysfs *)class_dev->class_data;
+       if (!sfp) return -EINVAL;
+       return scnprintf(buf,PAGE_SIZE,"%s\n",
+                        pvr2_hdw_get_bus_info(sfp->channel.hdw));
+}
+
+
 static ssize_t v4l_radio_minor_number_show(struct class_device *class_dev,
                                           char *buf)
 {
@@ -836,6 +852,20 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
                sfp->unit_number_created_ok = !0;
        }
 
+       sfp->attr_bus_info.attr.owner = THIS_MODULE;
+       sfp->attr_bus_info.attr.name = "bus_info_str";
+       sfp->attr_bus_info.attr.mode = S_IRUGO;
+       sfp->attr_bus_info.show = bus_info_show;
+       sfp->attr_bus_info.store = NULL;
+       ret = class_device_create_file(sfp->class_dev,
+                                      &sfp->attr_bus_info);
+       if (ret < 0) {
+               printk(KERN_WARNING "%s: class_device_create_file error: %d\n",
+                      __FUNCTION__, ret);
+       } else {
+               sfp->bus_info_created_ok = !0;
+       }
+
        pvr2_sysfs_add_controls(sfp);
 #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
        pvr2_sysfs_add_debugifc(sfp);
diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c 
b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
index 25d3830..4563b3d 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
@@ -203,6 +203,8 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct 
file *file,
                struct v4l2_capability *cap = arg;
 
                memcpy(cap, &pvr_capability, sizeof(struct v4l2_capability));
+               strlcpy(cap->bus_info,pvr2_hdw_get_bus_info(hdw),
+                       sizeof(cap->bus_info));
 
                ret = 0;
                break;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to