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;
        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);
 
 
        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
        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);
 }
 
 
+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)
 {
                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);