PWMconfig problem with Asus P5B Deluxe / Winbond 83627DHG

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alex,

> > I recall seeing this problem before. The list archives have a similar
> > problem for an MSI 975x board:
> > http://lists.lm-sensors.org/pipermail/lm-sensors/2007-April/019545.html
> > http://lists.lm-sensors.org/pipermail/lm-sensors/2007-April/019566.html
> >
> > For that board, the solution was that the Intel ICH7 chip controlled
> > the fan using a GPIO pin.
>
> No. This isn't the same problem I have. He uses the 4-pin connector. I
> only use two case fans on normal 3-pin connectors which are controllable
> by Speedfan under Windows.
>
> > But he wasn't getting a "Permission denied"
> > error. Can you please double-check that you have permission to write
> > to the files? I'm not going to quiz you on your setup (SELinux? or a
> > problem in /etc/sudoers?) -- but I'll take your word for it that it's
> > a driver error and not a sysfs permissions error.
>
> Good point. I'm so stupid. I do a sudo echo "0" > pwm1. So echo "0" is
> executed as root but the file writing not. Ok as root it works. I can
> write something into actually pwm4 and the fan stops.
>
> But pwmconfig does not work either. It says:
>
> ------------------------------------------------------------
> Found the following PWM controls:
>    hwmon0/device/pwm1
> hwmon0/device/pwm1_enable stuck to 1
> Failed to set pwmhwmon0/device/pwm1 to full speed
> Something's wrong, check your fans!
> ------------------------------------------------------------
>
> And  if I try a echo "0" > pwm1_enable I get "bash: echo: write error:
> Invalid argument". echo "2" works. So I think this is one for you.
>
>
> Best Regards and thanks for help
> Alex

I understand the problem now. In the w83627ehf driver, there is this code:
static ssize_t
store_pwm_enable(struct device *dev, struct device_attribute *attr,
                        const char *buf, size_t count)

...

        if (!val || (val > 2))  /* only modes 1 and 2 are supported */
                return -EINVAL;

That is the "write error: invalid argument" error. The reason this
code rejects a write of 0 to pwm_enable is because the w83627ehf does
not have a true "disable" mode. Some other chips will set the pwm
output to 100% when they are disabled. The w83627ehf doesn't have a
disable mode. Of course, setting it to manual and storing 255 in the
pwm would do the same thing.

That's what pwmconfig (lm_sensors version 2.10.4) does:
                # Try pwmN_enable=0
                echo 0 > $ENABLE 2> /dev/null
                if [ "`cat $ENABLE`" -eq 0 ]
                then
                        # Success
                        return 0
                fi

                # It didn't work, try pwmN_enable=1 pwmN=255
                echo 1 > $ENABLE 2> /dev/null
                echo $MAX > $1
                if [ "`cat $ENABLE`" -eq 1 -a "`cat $1`" -ge 190 ]
                then
                        # Success
                        return 0
                fi

So I *think* the problem is in pwmconfig. But yes, manually writing 0
to pwm_enable will give you an -EINVAL.

To be completely honest, I haven't run pwmconfig in a while. I know it
generally works, but someone should probably post a patch to get it to
work smoothly with w83627ehf and w83627dhg chips. (I could do that...
given lots of time :-)

Hope that helps,
David




[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux