- Update to 2.6.25-rc3.
[linux-flexiantxendom0-3.2.10.git] / drivers / media / video / pvrusb2 / pvrusb2-sysfs.c
index 3c57a7d..7a1cd87 100644 (file)
@@ -43,10 +43,14 @@ struct pvr2_sysfs {
        struct device_attribute attr_v4l_radio_minor_number;
        struct device_attribute attr_unit_number;
        struct device_attribute attr_bus_info;
+       struct device_attribute attr_hdw_name;
+       struct device_attribute attr_hdw_desc;
        int v4l_minor_number_created_ok;
        int v4l_radio_minor_number_created_ok;
        int unit_number_created_ok;
        int bus_info_created_ok;
+       int hdw_name_created_ok;
+       int hdw_desc_created_ok;
 };
 
 #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
@@ -712,6 +716,14 @@ 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->hdw_desc_created_ok) {
+               device_remove_file(sfp->class_dev,
+                                  &sfp->attr_hdw_desc);
+       }
+       if (sfp->hdw_name_created_ok) {
+               device_remove_file(sfp->class_dev,
+                                  &sfp->attr_hdw_name);
+       }
        if (sfp->bus_info_created_ok) {
                device_remove_file(sfp->class_dev,
                                         &sfp->attr_bus_info);
@@ -758,6 +770,28 @@ static ssize_t bus_info_show(struct device *class_dev,
 }
 
 
+static ssize_t hdw_name_show(struct device *class_dev,
+                            struct device_attribute *attr, char *buf)
+{
+       struct pvr2_sysfs *sfp;
+       sfp = (struct pvr2_sysfs *)class_dev->driver_data;
+       if (!sfp) return -EINVAL;
+       return scnprintf(buf,PAGE_SIZE,"%s\n",
+                        pvr2_hdw_get_type(sfp->channel.hdw));
+}
+
+
+static ssize_t hdw_desc_show(struct device *class_dev,
+                            struct device_attribute *attr, char *buf)
+{
+       struct pvr2_sysfs *sfp;
+       sfp = (struct pvr2_sysfs *)class_dev->driver_data;
+       if (!sfp) return -EINVAL;
+       return scnprintf(buf,PAGE_SIZE,"%s\n",
+                        pvr2_hdw_get_desc(sfp->channel.hdw));
+}
+
+
 static ssize_t v4l_radio_minor_number_show(struct device *class_dev,
                                           struct device_attribute *attr,
                                           char *buf)
@@ -871,6 +905,32 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
                sfp->bus_info_created_ok = !0;
        }
 
+       sfp->attr_hdw_name.attr.name = "device_hardware_type";
+       sfp->attr_hdw_name.attr.mode = S_IRUGO;
+       sfp->attr_hdw_name.show = hdw_name_show;
+       sfp->attr_hdw_name.store = NULL;
+       ret = device_create_file(sfp->class_dev,
+                                &sfp->attr_hdw_name);
+       if (ret < 0) {
+               printk(KERN_WARNING "%s: device_create_file error: %d\n",
+                      __FUNCTION__, ret);
+       } else {
+               sfp->hdw_name_created_ok = !0;
+       }
+
+       sfp->attr_hdw_desc.attr.name = "device_hardware_description";
+       sfp->attr_hdw_desc.attr.mode = S_IRUGO;
+       sfp->attr_hdw_desc.show = hdw_desc_show;
+       sfp->attr_hdw_desc.store = NULL;
+       ret = device_create_file(sfp->class_dev,
+                                &sfp->attr_hdw_desc);
+       if (ret < 0) {
+               printk(KERN_WARNING "%s: device_create_file error: %d\n",
+                      __FUNCTION__, ret);
+       } else {
+               sfp->hdw_desc_created_ok = !0;
+       }
+
        pvr2_sysfs_add_controls(sfp);
 #ifdef CONFIG_VIDEO_PVRUSB2_DEBUGIFC
        pvr2_sysfs_add_debugifc(sfp);