&dev_attr_role.attr,
        NULL,
 };
-
-static const struct attribute_group ci_attr_group = {
-       .attrs = ci_attrs,
-};
+ATTRIBUTE_GROUPS(ci);
 
 static int ci_hdrc_probe(struct platform_device *pdev)
 {
        device_set_wakeup_capable(&pdev->dev, true);
        dbg_create_files(ci);
 
-       ret = sysfs_create_group(&dev->kobj, &ci_attr_group);
-       if (ret)
-               goto remove_debug;
-
        return 0;
 
-remove_debug:
-       dbg_remove_files(ci);
 stop:
        if (ci->is_otg && ci->roles[CI_ROLE_GADGET])
                ci_hdrc_otg_destroy(ci);
        }
 
        dbg_remove_files(ci);
-       sysfs_remove_group(&ci->dev->kobj, &ci_attr_group);
        ci_role_destroy(ci);
        ci_hdrc_enter_lpm(ci, true);
        ci_usb_phy_exit(ci);
        .driver = {
                .name   = "ci_hdrc",
                .pm     = &ci_pm_ops,
+               .dev_groups = ci_groups,
        },
 };