Changeset 4286

Show
Ignore:
Timestamp:
01/07/07 23:10:02 (8 years ago)
Author:
khali
Message:

pwmconfig, fancontrol: Add support for non-i2c drivers. So far the
scripts were assuming that all drivers were i2c-based. As we want to
get rid of i2c-isa in Linux 2.6 soon, it's important to ensure that
platform drivers are handled properly.

Location:
lm-sensors/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/CHANGES

    r4285 r4286  
    3030  Programs dump/*: More robust handling of user inputs 
    3131  Programs pwmconfig, fancontrol: Handle write errors for bash 3.1 
     32                                  Add support for non-i2c drivers 
    3233  Program sensord: Add pc87247 support (fans only) 
    3334                   Add vt1211 support (#2150) 
  • lm-sensors/trunk/prog/pwm/fancontrol

    r4280 r4286  
    102102 
    103103DIR=/proc/sys/dev/sensors 
    104 SDIR=/sys/bus/i2c/devices 
    105104if [ ! -d $DIR ] 
    106105then 
     106        # For Linux 2.6, detect if config file uses the hwmon class or not yet 
     107        if echo "$AFCPWM[0]" | grep '^hwmon[0-9]' 
     108        then 
     109                SDIR=/sys/class/hwmon 
     110        else 
     111                SDIR=/sys/bus/i2c/devices 
     112        fi 
     113 
    107114        if [ ! -d $SDIR ] 
    108115        then 
     
    119126function pwmdisable() 
    120127{ 
    121         if [ "$SYSFS" = "1" ] 
    122         then 
     128        if [ -n "$SYSFS" ] 
     129        then 
     130                ENABLE=${1}_enable 
     131                # No enable file? Just set to max 
     132                if [ ! -f $ENABLE ] 
     133                then 
     134                        echo $MAX > $1 
     135                        return 0 
     136                fi 
     137 
     138                # Try pwmN_enable=0 
     139                echo 0 > $ENABLE 2> /dev/null 
     140                if [ `cat $ENABLE` -eq 0 ] 
     141                then 
     142                        # Success 
     143                        return 0 
     144                fi 
     145 
     146                # It didn't work, try pwmN_enable=1 pwmN=255 
     147                echo 1 > $ENABLE 2> /dev/null 
    123148                echo $MAX > $1 
    124                 ENABLE=${1}_enable 
    125                 if [ -f $ENABLE ] 
    126                 then 
    127                         echo 0 > $ENABLE 2> /dev/null 
    128                 fi 
     149                if [ `cat $ENABLE` -eq 1 -a `cat $1` -ge 190 ] 
     150                then 
     151                        # Success 
     152                        return 0 
     153                fi 
     154 
     155                # Nothing worked 
     156                echo "$ENABLE stuck to" `cat $ENABLE` >&2 
     157                return 1 
    129158        else 
    130159                echo $MAX 0 > $1 
  • lm-sensors/trunk/prog/pwm/pwmconfig

    r4280 r4286  
    4343 
    4444DIR=/proc/sys/dev/sensors 
    45 SDIR=/sys/bus/i2c/devices 
    4645if [ ! -d $DIR ] 
    4746then 
    48         if [ ! -d $SDIR ] 
    49         then 
     47        if [ -d "/sys/class/hwmon" ] 
     48        then 
     49                SYSFS=2 
     50                DIR="/sys/class/hwmon" 
     51        elif [ -d "/sys/bus/i2c/devices" ] 
     52        then 
     53                SYSFS=1 
     54                DIR="/sys/bus/i2c/devices" 
     55        else 
    5056                echo $0: 'No sensors found! (modprobe sensor modules?)' 
    5157                exit 1 
    52         else 
    53                 SYSFS=1 
    54                 DIR=$SDIR 
    5558        fi       
    5659fi 
    5760 
    5861cd $DIR 
    59 DRIVERS=`echo *-*` 
    60 if [ "*-*" = "$DRIVERS" ] 
     62if [ "$SYSFS" = "2" ] 
     63then 
     64        PREFIX='hwmon*/device' 
     65else 
     66        PREFIX='*-*' 
     67fi 
     68DEVICES=`echo $PREFIX` 
     69if [ "$PREFIX" = "$DEVICES" ] 
    6170then 
    6271        echo $0: 'No sensors found! (modprobe sensor modules?)' 
     
    6473fi 
    6574 
    66 MATCH='*/pwm[1-9]' 
     75MATCH=$PREFIX/'pwm[1-9]' 
    6776PWM=`echo $MATCH` 
    6877if [ "$SYSFS" = "1" -a "$MATCH" = "$PWM" ] 
    6978then 
    7079        # Deprecated naming scheme (used in kernels 2.6.5 to 2.6.9) 
    71         MATCH='*/fan[1-9]_pwm' 
     80        MATCH=$PREFIX/'fan[1-9]_pwm' 
    7281        PWM=`echo $MATCH` 
    7382fi 
     
    7887fi 
    7988 
    80 if [ "$SYSFS" = "1" ] 
    81 then 
    82         MATCH='*/fan[1-9]_input' 
     89if [ -n "$SYSFS" ] 
     90then 
     91        MATCH=$PREFIX/'fan[1-9]_input' 
    8392else 
    84         MATCH='*/fan[1-9]' 
     93        MATCH=$PREFIX/'fan[1-9]' 
    8594fi 
    8695FAN=`echo $MATCH` 
     
    9099        exit 1 
    91100fi 
     101 
     102# $1 = padding 
     103# Only works with Linux 2.6 
     104function print_devices() 
     105{ 
     106        for device in $DEVICES 
     107        do 
     108                echo "$1$device is `cat $device/name`" 
     109        done 
     110} 
    92111 
    93112# $1 = pwm file name 
    94113function pwmdisable() 
    95114{ 
    96         if [ "$SYSFS" = "1" ] 
    97         then 
     115        if [ -n "$SYSFS" ] 
     116        then 
     117                ENABLE=${1}_enable 
     118                # No enable file? Just set to max 
     119                if [ ! -f $ENABLE ] 
     120                then 
     121                        echo $MAX > $1 
     122                        return 0 
     123                fi 
     124 
     125                # Try pwmN_enable=0 
     126                echo 0 > $ENABLE 2> /dev/null 
     127                if [ "`cat $ENABLE`" -eq 0 ] 
     128                then 
     129                        # Success 
     130                        return 0 
     131                fi 
     132 
     133                # It didn't work, try pwmN_enable=1 pwmN=255 
     134                echo 1 > $ENABLE 2> /dev/null 
    98135                echo $MAX > $1 
    99                 ENABLE=${1}_enable 
    100                 if [ -w $ENABLE ] 
    101                 then 
    102                         echo 0 > $ENABLE 2> /dev/null 
    103                 fi 
     136                if [ "`cat $ENABLE`" -eq 1 -a "`cat $1`" -ge 190 ] 
     137                then 
     138                        # Success 
     139                        return 0 
     140                fi 
     141 
     142                # Nothing worked 
     143                echo "$ENABLE stuck to `cat $ENABLE`" >&2 
     144                return 1 
    104145        else 
    105146                echo $MAX 0 > $1 
     
    110151function pwmenable() 
    111152{ 
    112         if [ "$SYSFS" = "1" ] 
     153        if [ -n "$SYSFS" ] 
    113154        then 
    114155                ENABLE=${1}_enable 
     
    132173        echo $2 > $1 
    133174} 
     175 
     176if [ -n "$SYSFS" ] 
     177then 
     178        echo 'Found the following devices:' 
     179        print_devices "   " 
     180        echo 
     181fi 
    134182 
    135183echo 'Found the following PWM controls:' 
     
    140188        then 
    141189                pwmdisable $i 
     190                if [ $? -ne 0 ] 
     191                then 
     192                        echo "Failed to set pwm$i to full speed" >&2 
     193                        echo "Something's wrong, check your fans!" >&2 
     194                        exit 1 
     195                fi 
    142196        else 
    143197                NOTROOT=1 
     
    373427fi 
    374428 
    375 if [ "$SYSFS" = "1" ] 
    376 then 
    377         MATCH='*/temp[1-9]_input' 
     429if [ -n "$SYSFS" ] 
     430then 
     431        MATCH=$PREFIX/'temp[1-9]_input' 
    378432else 
    379         MATCH='*/temp[1-9]' 
     433        MATCH=$PREFIX/'temp[1-9]' 
    380434fi 
    381435TEMPS=`echo $MATCH` 
     
    423477        MINSTART=`egrep '^MINSTART=.*$' $1 | sed -e 's/MINSTART=//g'` 
    424478        MINSTOP=`egrep '^MINSTOP=.*$' $1 | sed -e 's/MINSTOP=//g'` 
     479 
     480        # Check for configuration change 
     481        local item 
     482        for item in $FCFANS 
     483        do 
     484                if [ ! -f "`echo $item | sed -e 's/=.*$//'`" ] 
     485                then 
     486                        echo "Configuration appears to be outdated, discarded" 
     487                        FCTEMPS="" 
     488                        FCFANS="" 
     489                        MINTEMP="" 
     490                        MAXTEMP="" 
     491                        MINSTART="" 
     492                        MINSTOP="" 
     493                fi 
     494        done 
    425495} 
    426496 
     
    530600                pwmsed=`echo ${pwms} | sed -e 's/\//\\\\\//g'` #escape / for sed 
    531601                echo 
     602                if [ -n "$SYSFS" ] 
     603                then 
     604                        echo 'Devices:' 
     605                        print_devices "" 
     606                        echo 
     607                fi 
    532608                echo 'Current temperature readings are as follows:' 
    533609                for j in $TEMPS 
     
    535611                        # this will return the first field if there's only one (sysfs) 
    536612                        S=`cat $j | cut -d' ' -f3` 
    537                         if [ "$SYSFS" = "1" ] 
     613                        if [ -n "$SYSFS" ] 
    538614                        then 
    539615                                let S="$S / 1000"