|
@@ -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);
|