--- orig.lm_sensors-3-init.d 2008-03-17 02:59:28.000000000 -0500 +++ lm_sensors-3-init.d 2015-03-27 11:02:28.003256446 -0500 @@ -10,8 +10,12 @@ fi if [ "${LOADMODULES}" = "yes" -a -f /proc/modules ]; then - if [ -z "${MODULE_0}" ]; then - eerror "MODULE_0 is not set in /etc/conf.d/lm_sensors, try running sensors-detect" + if [ -z "${MODULE_0}" ] && [ -z "${HWMON_MODULES}" ]; then + eerror "HWMON_MODULES or MODULE_0 is not set in /etc/conf.d/lm_sensors, try running sensors-detect" + return 1 + fi + if ! [ -z "${MODULE_0}" ] && ! [ -z "${HWMON_MODULES}" ]; then + eerror "HWMON_MODULES or MODULE_0 can't be both set in /etc/conf.d/lm_sensors, try running sensors-detect" return 1 fi fi @@ -46,18 +50,28 @@ eend 0 fi - i=0 - while true; do - module=`eval echo '$'MODULE_${i}` - module_args=`eval echo '$'MODULE_${i}_ARGS` - if [ -z "${module}" ]; then - break - fi - ebegin " Loading ${module}" - modprobe ${module} ${module_args} >/dev/null 2>&1 - eend $? - i=$(($i+1)) - done + if ! [ -z "${MODULE_0}" ]; then + i=0 + while true; do + module=`eval echo '$'MODULE_${i}` + module_args=`eval echo '$'MODULE_${i}_ARGS` + if [ -z "${module}" ]; then + break + fi + ebegin " Loading ${module}" + modprobe ${module} ${module_args} >/dev/null 2>&1 + eend $? + i=$(($i+1)) + done + fi + + if ! [ -z "${HWMON_MODULES}" ]; then + for module in ${HWMON_MODULES}; do + ebegin " Loading ${module}" + modprobe ${module} >/dev/null 2>&1 + eend $? + done + fi fi if [ "${INITSENSORS}" = "yes" ]; then @@ -78,23 +92,39 @@ if [ "${LOADMODULES}" = "yes" -a -f /proc/modules ]; then einfo "Unloading lm_sensors modules..." - # find the highest possible MODULE_ number - i=0 - while true; do - module=`eval echo '$'MODULE_${i}` - if [ -z "${module}" ] ; then - break - fi - i=$(($i+1)) - done + if ! [ -z "${MODULE_0}" ]; then + # find the highest possible MODULE_ number + i=0 + while true; do + module=`eval echo '$'MODULE_${i}` + if [ -z "${module}" ] ; then + break + fi + i=$(($i+1)) + done - while [ ${i} -gt 0 ]; do - i=$(($i-1)) - module=`eval echo '$'MODULE_${i}` - ebegin " Unloading ${module}" - rmmod ${module} >/dev/null 2>&1 - eend $? - done + while [ ${i} -gt 0 ]; do + i=$(($i-1)) + module=`eval echo '$'MODULE_${i}` + ebegin " Unloading ${module}" + rmmod ${module} >/dev/null 2>&1 + eend $? + done + fi + + if ! [ -z "${HWMON_MODULES}" ]; then + # unload modules in reverse order + REV_HW_MODULES="" + for module in ${HWMON_MODULES}; do + REV_HWMON_MODULES=${module}" "${REV_HWMON_MODULES} + done + + for module in ${REV_HWMON_MODULES}; do + ebegin " Unloading ${module}" + rmmod ${module} >/dev/null 2>&1 + eend $? + done + fi if [ -e /proc/sys/dev/sensors ] ; then ebegin " Unloading i2c-proc"