Ejemplo n.º 1
0
static int pc87427_remove(struct platform_device *pdev)
{
	struct pc87427_data *data = platform_get_drvdata(pdev);

	hwmon_device_unregister(data->hwmon_dev);
	pc87427_remove_files(&pdev->dev);

	return 0;
}
Ejemplo n.º 2
0
static int __devexit pc87427_remove(struct platform_device *pdev)
{
	struct pc87427_data *data = platform_get_drvdata(pdev);
	int res_count;

	res_count = (data->address[0] != 0) + (data->address[1] != 0);

	hwmon_device_unregister(data->hwmon_dev);
	pc87427_remove_files(&pdev->dev);
	platform_set_drvdata(pdev, NULL);
	kfree(data);

	pc87427_release_regions(pdev, res_count);

	return 0;
}
Ejemplo n.º 3
0
static int pc87427_probe(struct platform_device *pdev)
{
	struct pc87427_sio_data *sio_data = dev_get_platdata(&pdev->dev);
	struct pc87427_data *data;
	int i, err, res_count;

	data = devm_kzalloc(&pdev->dev, sizeof(struct pc87427_data),
			    GFP_KERNEL);
	if (!data) {
		pr_err("Out of memory\n");
		return -ENOMEM;
	}

	data->address[0] = sio_data->address[0];
	data->address[1] = sio_data->address[1];
	res_count = (data->address[0] != 0) + (data->address[1] != 0);

	err = pc87427_request_regions(pdev, res_count);
	if (err)
		return err;

	mutex_init(&data->lock);
	data->name = "pc87427";
	platform_set_drvdata(pdev, data);
	pc87427_init_device(&pdev->dev);

	/* Register sysfs hooks */
	err = device_create_file(&pdev->dev, &dev_attr_name);
	if (err)
		return err;
	for (i = 0; i < 8; i++) {
		if (!(data->fan_enabled & (1 << i)))
			continue;
		err = sysfs_create_group(&pdev->dev.kobj,
					 &pc87427_group_fan[i]);
		if (err)
			goto exit_remove_files;
	}
	for (i = 0; i < 4; i++) {
		if (!(data->pwm_enabled & (1 << i)))
			continue;
		err = sysfs_create_group(&pdev->dev.kobj,
					 &pc87427_group_pwm[i]);
		if (err)
			goto exit_remove_files;
	}
	for (i = 0; i < 6; i++) {
		if (!(data->temp_enabled & (1 << i)))
			continue;
		err = sysfs_create_group(&pdev->dev.kobj,
					 &pc87427_group_temp[i]);
		if (err)
			goto exit_remove_files;
	}

	data->hwmon_dev = hwmon_device_register(&pdev->dev);
	if (IS_ERR(data->hwmon_dev)) {
		err = PTR_ERR(data->hwmon_dev);
		dev_err(&pdev->dev, "Class registration failed (%d)\n", err);
		goto exit_remove_files;
	}

	return 0;

exit_remove_files:
	pc87427_remove_files(&pdev->dev);
	return err;
}