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; }
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; }
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; }