mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
hwmon/f71882fg: Add a f71882fg_create_fan_sysfs_files helper function
This is a preparation patch for not registering fan/pwm attributes for some fans (rather then register them for all or for none). Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
This commit is contained in:
parent
5584014256
commit
9af0794c63
@ -2154,6 +2154,54 @@ static void f71882fg_remove_sysfs_files(struct platform_device *pdev,
|
|||||||
device_remove_file(&pdev->dev, &attr[i].dev_attr);
|
device_remove_file(&pdev->dev, &attr[i].dev_attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __devinit f71882fg_create_fan_sysfs_files(
|
||||||
|
struct platform_device *pdev, int idx, bool pwm_auto_point)
|
||||||
|
{
|
||||||
|
struct f71882fg_data *data = platform_get_drvdata(pdev);
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = f71882fg_create_sysfs_files(pdev, &fxxxx_fan_attr[idx][0],
|
||||||
|
ARRAY_SIZE(fxxxx_fan_attr[0]));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if (f71882fg_fan_has_beep[data->type]) {
|
||||||
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
|
&fxxxx_fan_beep_attr[idx],
|
||||||
|
1);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pwm_auto_point)
|
||||||
|
return 0; /* All done */
|
||||||
|
|
||||||
|
switch (data->type) {
|
||||||
|
case f71862fg:
|
||||||
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
|
&f71862fg_auto_pwm_attr[idx][0],
|
||||||
|
ARRAY_SIZE(f71862fg_auto_pwm_attr[0]));
|
||||||
|
break;
|
||||||
|
case f71808e:
|
||||||
|
case f71869:
|
||||||
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
|
&f71869_auto_pwm_attr[idx][0],
|
||||||
|
ARRAY_SIZE(f71869_auto_pwm_attr[0]));
|
||||||
|
break;
|
||||||
|
case f8000:
|
||||||
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
|
&f8000_auto_pwm_attr[idx][0],
|
||||||
|
ARRAY_SIZE(f8000_auto_pwm_attr[0]));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
|
&fxxxx_auto_pwm_attr[idx][0],
|
||||||
|
ARRAY_SIZE(fxxxx_auto_pwm_attr[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int __devinit f71882fg_probe(struct platform_device *pdev)
|
static int __devinit f71882fg_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct f71882fg_data *data;
|
struct f71882fg_data *data;
|
||||||
@ -2247,6 +2295,8 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (start_reg & 0x02) {
|
if (start_reg & 0x02) {
|
||||||
|
bool pwm_auto_point = true;
|
||||||
|
|
||||||
switch (data->type) {
|
switch (data->type) {
|
||||||
case f71808e:
|
case f71808e:
|
||||||
case f71808a:
|
case f71808a:
|
||||||
@ -2298,18 +2348,6 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
|
|||||||
goto exit_unregister_sysfs;
|
goto exit_unregister_sysfs;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = f71882fg_create_sysfs_files(pdev, &fxxxx_fan_attr[0][0],
|
|
||||||
ARRAY_SIZE(fxxxx_fan_attr[0]) * nr_fans);
|
|
||||||
if (err)
|
|
||||||
goto exit_unregister_sysfs;
|
|
||||||
|
|
||||||
if (f71882fg_fan_has_beep[data->type]) {
|
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
|
||||||
fxxxx_fan_beep_attr, nr_fans);
|
|
||||||
if (err)
|
|
||||||
goto exit_unregister_sysfs;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (data->type) {
|
switch (data->type) {
|
||||||
case f71808e:
|
case f71808e:
|
||||||
case f71808a:
|
case f71808a:
|
||||||
@ -2331,59 +2369,41 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
|
|||||||
"Auto pwm controlled by raw digital "
|
"Auto pwm controlled by raw digital "
|
||||||
"data, disabling pwm auto_point "
|
"data, disabling pwm auto_point "
|
||||||
"sysfs attributes\n");
|
"sysfs attributes\n");
|
||||||
goto no_pwm_auto_point;
|
pwm_auto_point = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < nr_fans; i++) {
|
||||||
|
err = f71882fg_create_fan_sysfs_files(pdev, i,
|
||||||
|
pwm_auto_point);
|
||||||
|
if (err)
|
||||||
|
goto exit_unregister_sysfs;
|
||||||
|
|
||||||
|
dev_info(&pdev->dev, "Fan: %d is in %s mode\n", i + 1,
|
||||||
|
(data->pwm_enable & (1 << 2 * i)) ?
|
||||||
|
"duty-cycle" : "RPM");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Some types have 1 extra fan with limited functionality */
|
||||||
switch (data->type) {
|
switch (data->type) {
|
||||||
case f71808a:
|
case f71808a:
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
|
||||||
&fxxxx_auto_pwm_attr[0][0],
|
|
||||||
ARRAY_SIZE(fxxxx_auto_pwm_attr[0]) * nr_fans);
|
|
||||||
if (err)
|
|
||||||
goto exit_unregister_sysfs;
|
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
f71808a_fan3_attr,
|
f71808a_fan3_attr,
|
||||||
ARRAY_SIZE(f71808a_fan3_attr));
|
ARRAY_SIZE(f71808a_fan3_attr));
|
||||||
break;
|
break;
|
||||||
case f71862fg:
|
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
|
||||||
&f71862fg_auto_pwm_attr[0][0],
|
|
||||||
ARRAY_SIZE(f71862fg_auto_pwm_attr[0]) *
|
|
||||||
nr_fans);
|
|
||||||
break;
|
|
||||||
case f71808e:
|
|
||||||
case f71869:
|
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
|
||||||
&f71869_auto_pwm_attr[0][0],
|
|
||||||
ARRAY_SIZE(f71869_auto_pwm_attr[0]) * nr_fans);
|
|
||||||
break;
|
|
||||||
case f8000:
|
case f8000:
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
err = f71882fg_create_sysfs_files(pdev,
|
||||||
f8000_fan_attr,
|
f8000_fan_attr,
|
||||||
ARRAY_SIZE(f8000_fan_attr));
|
ARRAY_SIZE(f8000_fan_attr));
|
||||||
if (err)
|
|
||||||
goto exit_unregister_sysfs;
|
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
|
||||||
&f8000_auto_pwm_attr[0][0],
|
|
||||||
ARRAY_SIZE(f8000_auto_pwm_attr[0]) * nr_fans);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
err = f71882fg_create_sysfs_files(pdev,
|
break;
|
||||||
&fxxxx_auto_pwm_attr[0][0],
|
|
||||||
ARRAY_SIZE(fxxxx_auto_pwm_attr[0]) * nr_fans);
|
|
||||||
}
|
}
|
||||||
if (err)
|
if (err)
|
||||||
goto exit_unregister_sysfs;
|
goto exit_unregister_sysfs;
|
||||||
|
|
||||||
no_pwm_auto_point:
|
|
||||||
for (i = 0; i < nr_fans; i++)
|
|
||||||
dev_info(&pdev->dev, "Fan: %d is in %s mode\n", i + 1,
|
|
||||||
(data->pwm_enable & (1 << 2 * i)) ?
|
|
||||||
"duty-cycle" : "RPM");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data->hwmon_dev = hwmon_device_register(&pdev->dev);
|
data->hwmon_dev = hwmon_device_register(&pdev->dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user