.probe = hammer_probe,
        .remove = hammer_remove,
        .feature_mapping = vivaldi_feature_mapping,
-       .input_configured = vivaldi_input_configured,
        .input_mapping = hammer_input_mapping,
        .event = hammer_event,
+       .driver = {
+               .dev_groups = vivaldi_attribute_groups,
+       },
 };
 
 static int __init hammer_init(void)
 
        NULL
 };
 
-static const struct attribute_group vivaldi_attribute_group = {
-       .attrs = vivaldi_sysfs_attrs,
-};
-
-/**
- * vivaldi_input_configured - Complete initialization of device using vivaldi map
- * @hdev: HID device to which vivaldi attributes should be attached
- * @hidinput: HID input device (unused)
- */
-int vivaldi_input_configured(struct hid_device *hdev,
-                            struct hid_input *hidinput)
+static umode_t vivaldi_is_visible(struct kobject *kobj, struct attribute *attr,
+                                 int n)
 {
+       struct hid_device *hdev = to_hid_device(kobj_to_dev(kobj));
        struct vivaldi_data *data = hid_get_drvdata(hdev);
 
        if (!data->num_function_row_keys)
                return 0;
-
-       return devm_device_add_group(&hdev->dev, &vivaldi_attribute_group);
+       return attr->mode;
 }
-EXPORT_SYMBOL_GPL(vivaldi_input_configured);
+
+static const struct attribute_group vivaldi_attribute_group = {
+       .attrs = vivaldi_sysfs_attrs,
+       .is_visible = vivaldi_is_visible,
+};
+
+const struct attribute_group *vivaldi_attribute_groups[] = {
+       &vivaldi_attribute_group,
+       NULL,
+};
+EXPORT_SYMBOL_GPL(vivaldi_attribute_groups);
 
 MODULE_LICENSE("GPL");
 
 
 struct hid_device;
 struct hid_field;
-struct hid_input;
 struct hid_usage;
 
 void vivaldi_feature_mapping(struct hid_device *hdev,
                             struct hid_field *field, struct hid_usage *usage);
 
-int vivaldi_input_configured(struct hid_device *hdev,
-                            struct hid_input *hidinput);
+extern const struct attribute_group *vivaldi_attribute_groups[];
 
 #endif /* _HID_VIVALDI_COMMON_H */
 
        .id_table = vivaldi_table,
        .probe = vivaldi_probe,
        .feature_mapping = vivaldi_feature_mapping,
-       .input_configured = vivaldi_input_configured,
+       .driver = {
+               .dev_groups = vivaldi_attribute_groups,
+       },
 };
 
 module_hid_driver(hid_vivaldi);