예제 #1
0
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;
}
예제 #2
0
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;
}