diff options
| author | Armin Wolf <W_Armin@gmx.de> | 2021-07-29 00:15:52 +0200 | 
|---|---|---|
| committer | Guenter Roeck <linux@roeck-us.net> | 2021-08-17 14:54:25 -0700 | 
| commit | 1492fa21c0ba531e3ae4fc1b5cdaaf96603bf800 (patch) | |
| tree | 266280ee20445e4881156b922125c2eb4761636a | |
| parent | 60b76c3a117ce076f60f58de17bae1122849746a (diff) | |
hwmon: (dell-smm-hwmon) Use platform device
Register a platform device for usage with
devm_hwmon_device_register_with_groups since
the platform device is necessary for future
changes.
Also fix some checkpatch warnings.
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Link: https://lore.kernel.org/r/20210728221557.8891-2-W_Armin@gmx.de
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| -rw-r--r-- | drivers/hwmon/dell-smm-hwmon.c | 113 | 
1 files changed, 62 insertions, 51 deletions
| diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c index f2221ca0aa7b..f06873413aea 100644 --- a/drivers/hwmon/dell-smm-hwmon.c +++ b/drivers/hwmon/dell-smm-hwmon.c @@ -14,7 +14,9 @@  #include <linux/cpu.h>  #include <linux/delay.h> +#include <linux/err.h>  #include <linux/module.h> +#include <linux/platform_device.h>  #include <linux/types.h>  #include <linux/init.h>  #include <linux/proc_fs.h> @@ -896,7 +898,7 @@ static const struct attribute_group i8k_group = {  };  __ATTRIBUTE_GROUPS(i8k); -static int __init i8k_init_hwmon(void) +static int __init dell_smm_init_hwmon(struct device *dev)  {  	int err; @@ -956,15 +958,9 @@ static int __init i8k_init_hwmon(void)  	if (err >= 0)  		i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN3; -	i8k_hwmon_dev = hwmon_device_register_with_groups(NULL, "dell_smm", -							  NULL, i8k_groups); -	if (IS_ERR(i8k_hwmon_dev)) { -		err = PTR_ERR(i8k_hwmon_dev); -		i8k_hwmon_dev = NULL; -		pr_err("hwmon registration failed (%d)\n", err); -		return err; -	} -	return 0; +	i8k_hwmon_dev = devm_hwmon_device_register_with_groups(dev, "dell_smm", NULL, i8k_groups); + +	return PTR_ERR_OR_ZERO(i8k_hwmon_dev);  }  struct i8k_config_data { @@ -1221,28 +1217,11 @@ static struct dmi_system_id i8k_whitelist_fan_control[] __initdata = {  	{ }  }; -/* - * Probe for the presence of a supported laptop. - */ -static int __init i8k_probe(void) +static int __init dell_smm_probe(struct platform_device *pdev)  {  	const struct dmi_system_id *id, *fan_control;  	int fan, ret; -	/* -	 * Get DMI information -	 */ -	if (!dmi_check_system(i8k_dmi_table)) { -		if (!ignore_dmi && !force) -			return -ENODEV; - -		pr_info("not running on a supported Dell system.\n"); -		pr_info("vendor=%s, model=%s, version=%s\n", -			i8k_get_dmi_data(DMI_SYS_VENDOR), -			i8k_get_dmi_data(DMI_PRODUCT_NAME), -			i8k_get_dmi_data(DMI_BIOS_VERSION)); -	} -  	if (dmi_check_system(i8k_blacklist_fan_support_dmi_table)) {  		pr_warn("broken Dell BIOS detected, disallow fan support\n");  		if (!force) @@ -1255,28 +1234,19 @@ static int __init i8k_probe(void)  			disallow_fan_type_call = true;  	} -	strlcpy(bios_version, i8k_get_dmi_data(DMI_BIOS_VERSION), +	strscpy(bios_version, i8k_get_dmi_data(DMI_BIOS_VERSION),  		sizeof(bios_version)); -	strlcpy(bios_machineid, i8k_get_dmi_data(DMI_PRODUCT_SERIAL), +	strscpy(bios_machineid, i8k_get_dmi_data(DMI_PRODUCT_SERIAL),  		sizeof(bios_machineid));  	/* -	 * Get SMM Dell signature -	 */ -	if (i8k_get_dell_signature(I8K_SMM_GET_DELL_SIG1) && -	    i8k_get_dell_signature(I8K_SMM_GET_DELL_SIG2)) { -		pr_err("unable to get SMM Dell signature\n"); -		if (!force) -			return -ENODEV; -	} - -	/*  	 * Set fan multiplier and maximal fan speed from dmi config  	 * Values specified in module parameters override values from dmi  	 */  	id = dmi_first_match(i8k_dmi_table);  	if (id && id->driver_data) {  		const struct i8k_config_data *conf = id->driver_data; +  		if (!fan_mult && conf->fan_mult)  			fan_mult = conf->fan_mult;  		if (!fan_max && conf->fan_max) @@ -1313,29 +1283,70 @@ static int __init i8k_probe(void)  		i8k_fan_mult = fan_mult;  	} +	ret = dell_smm_init_hwmon(&pdev->dev); +	if (ret) +		return ret; + +	i8k_init_procfs(); +  	return 0;  } +static int dell_smm_remove(struct platform_device *pdev) +{ +	i8k_exit_procfs(); + +	return 0; +} + +static struct platform_driver dell_smm_driver = { +	.driver		= { +		.name	= KBUILD_MODNAME, +	}, +	.remove		= dell_smm_remove, +}; + +static struct platform_device *dell_smm_device; + +/* + * Probe for the presence of a supported laptop. + */  static int __init i8k_init(void)  { -	int err; +	/* +	 * Get DMI information +	 */ +	if (!dmi_check_system(i8k_dmi_table)) { +		if (!ignore_dmi && !force) +			return -ENODEV; -	/* Are we running on an supported laptop? */ -	if (i8k_probe()) -		return -ENODEV; +		pr_info("not running on a supported Dell system.\n"); +		pr_info("vendor=%s, model=%s, version=%s\n", +			i8k_get_dmi_data(DMI_SYS_VENDOR), +			i8k_get_dmi_data(DMI_PRODUCT_NAME), +			i8k_get_dmi_data(DMI_BIOS_VERSION)); +	} -	err = i8k_init_hwmon(); -	if (err) -		return err; +	/* +	 * Get SMM Dell signature +	 */ +	if (i8k_get_dell_signature(I8K_SMM_GET_DELL_SIG1) && +	    i8k_get_dell_signature(I8K_SMM_GET_DELL_SIG2)) { +		pr_err("unable to get SMM Dell signature\n"); +		if (!force) +			return -ENODEV; +	} -	i8k_init_procfs(); -	return 0; +	dell_smm_device = platform_create_bundle(&dell_smm_driver, dell_smm_probe, NULL, 0, NULL, +						 0); + +	return PTR_ERR_OR_ZERO(dell_smm_device);  }  static void __exit i8k_exit(void)  { -	hwmon_device_unregister(i8k_hwmon_dev); -	i8k_exit_procfs(); +	platform_device_unregister(dell_smm_device); +	platform_driver_unregister(&dell_smm_driver);  }  module_init(i8k_init); | 
