int muic_device_register(struct muic_device *mdev, struct muic_ops *ops) { int ret; if (!mdev) return -EINVAL; if (_mdev != NULL) { printk(KERN_ERR "muic device is alread installed!\n"); return -EPERM; } if (!muic_class) { ret = create_muic_class(); if (ret < 0) return ret; } mdev->index = atomic_inc_return(&device_count); mdev->dev = device_create(muic_class, NULL, MKDEV(0, mdev->index), mdev, mdev->name); if (IS_ERR(mdev->dev)) return PTR_ERR(mdev->dev); ret = device_create_file(mdev->dev, &dev_attr_state); if (ret < 0) goto err_create_file_1; ret = device_create_file(mdev->dev, &dev_attr_name); if (ret < 0) goto err_create_file_2; ret = device_create_file(mdev->dev, &dev_attr_int_state); if (ret < 0) goto err_create_file_2; mdev->mode = MUIC_UNKNOWN; _mdev = mdev; return 0; err_create_file_2: device_remove_file(mdev->dev, &dev_attr_state); err_create_file_1: device_destroy(muic_class, MKDEV(0, mdev->index)); printk(KERN_ERR "muic: Failed to register driver %s\n", mdev->name); return ret; }
int muic_device_register(struct muic_device *mdev, struct muic_ops *ops) { int ret; if (!mdev) return -EINVAL; if (_mdev != NULL) { printk(KERN_ERR "muic device is already installed!\n"); return -EPERM; } if (!muic_class) { ret = create_muic_class(); if (ret < 0) { printk(KERN_ERR "%s: create_muic_class fails!\n", __func__); return ret; } } mdev->index = atomic_inc_return(&device_count); mdev->dev = device_create(muic_class, NULL, MKDEV(0, mdev->index), mdev, mdev->name); if (IS_ERR(mdev->dev)) { printk(KERN_ERR "%s: device_create fails!\n", __func__); return PTR_ERR(mdev->dev); } ret = device_create_file(mdev->dev, &dev_attr_state); if (ret < 0) goto err_create_file_1; ret = device_create_file(mdev->dev, &dev_attr_name); if (ret < 0) goto err_create_file_2; ret = device_create_file(mdev->dev, &dev_attr_int_state); if (ret < 0) goto err_create_file_3; mdev->mode = MUIC_NONE; #if defined(CONFIG_MAX8971_CHARGER) mdev->mode_in_retain = MUIC_NONE; #endif _mdev = mdev; return 0; err_create_file_3: device_remove_file(mdev->dev, &dev_attr_name); err_create_file_2: device_remove_file(mdev->dev, &dev_attr_state); err_create_file_1: device_destroy(muic_class, MKDEV(0, mdev->index)); printk(KERN_ERR "muic: Failed to register driver %s\n", mdev->name); return ret; }