HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //proc/25636/root/etc.defaults/rc.fan
#!/bin/sh
# Copyright (c) 2000-2014 Synology Inc. All rights reserved.

. /usr/syno/share/kernelversion.sh

CheckADTDevice()
{
	file=/sys/class/hwmon/
	for f in $file*
	do
		if [ -d $f/device ]; then
			name=`cat $f/device/name`
			if [ "$name" == "adt7490" ];then
				return 1
			fi
		fi
	done
	return 0
}

SYNOLoadAdt7490()
{
	local supportadt7490
	local PLATFORM

	supportadt7490=`get_key_value $SYNOINFO_DEF supportadt7490`
	PLATFORM=`get_key_value $SYNOINFO_DEF unique | cut -d"_" -f2`

	if [ "$supportadt7490" = "yes" ]; then
		if [ "$PLATFORM" = "denverton" ] || [ "$PLATFORM" = "skylaked" ]; then
			SYNOLoadModules hwmon-vid
		fi

		if [ "$PLATFORM" = "v1000" ] || [ "$PLATFORM" = "v1000nk" ] || [ "$PLATFORM" = "v1000sofs" ] || [ "$PLATFORM" = "epyc7002" ] || [ "$PLATFORM" = "epyc7002sofs" ] || [ "$PLATFORM" = "ryzen5k" ]; then
			SYNOLoadModules hwmon-vid
		else
			SYNOLoadModules i2c-i801
		fi

		SYNOLoadModules adt7475

		for retry_count in `seq 1 3`
		do
			CheckADTDevice
			if [ $? -eq 0 ]; then
				echo Can not detect ADT device, Retry: $retry_count...
				sleep 1
				SYNOUnloadModules i2c-i801 adt7475
				sleep 1
				SYNOLoadModules i2c-i801 adt7475
			else
				break
			fi
		done
	fi
}

SYNOUnloadAdt7490()
{
	local supportadt7490
	local PLATFORM

	supportadt7490=`get_key_value $SYNOINFO_DEF supportadt7490`
	PLATFORM=`get_key_value $SYNOINFO_DEF unique | cut -d"_" -f2`

	if [ "$supportadt7490" = "yes" ]; then
		SYNOUnloadModules adt7475
		if [ "$PLATFORM" = "v1000" ] || [ "$PLATFORM" = "v1000nk" ] || [ "$PLATFORM" = "v1000sofs" ] || [ "$PLATFORM" = "epyc7002" ] || [ "$PLATFORM" = "epyc7002sofs" ] || [ "$PLATFORM" = "ryzen5k" ]; then
			SYNOUnloadModules hwmon-vid
		else
			SYNOUnloadModules i2c-i801
		fi

		if [ "$PLATFORM" = "denverton" ] || [ "$PLATFORM" = "skylaked" ]; then
			SYNOUnloadModules hwmon-vid
		fi
	fi
}

findADTPath()
{
	ret=0
	unset ADTDIRS
	file="/sys/class/i2c-dev/i2c-*/device/*-002[c-e]"
	for f in $file
	do
		if [ ! -f "$f/name" ]; then
			continue
		fi
		name=`cat $f/name`
		if [ "$name" == "adt7490" ];then
			ADTDIRS="${ADTDIRS} $f"
			ret=1
		fi
	done
	return ${ret}
}

# here we assume adt master will always 0x2e, because due to adt7490's spec, only 0x2e address can be fixed
findADTMaster()
{
	unset ADTMASTER
	local device

	files="/sys/class/i2c-dev/i2c-*/device/*-002e \
			/sys/class/i2c-dev/i2c-*/device/*-002c \
			/sys/class/i2c-dev/i2c-*/device/*-002d"
	for file in $files
	do
		if [ -f "$file/name" ]; then
			device=`cat "$file/name"`

			if [ "$device" == "adt7490" ]; then
				ADTMASTER="$file"
				break
			fi
		fi
	done
}

SoftLink7490fanInput()
{
	local supportadt7490
	local kernelVer

	supportadt7490=`get_key_value $SYNOINFO_DEF supportadt7490`
	kernelVer=`KernelVersionCode "$(KernelVersion)"`

	if [ "$supportadt7490" != "yes" ]; then
		return
	fi
	adtfanTmpPath="/tmp/ADTFanPath/"
	findADTPath
	# no adt path found
	if [ 1 -ne $? ]; then
		return
	fi
	findADTMaster
	if [ -z ${ADTMASTER} ]; then
		return
	fi
	/bin/mkdir -p ${adtfanTmpPath}
	# soft link master adt7490

	if [ $kernelVer -ge "$(KernelVersionCode "5.10")" ]; then
		masterfiles=`ls -d ${ADTMASTER}/hwmon/hwmon*/*`
	else
		masterfiles=`ls -d ${ADTMASTER}/*`
	fi

	for masterfile in ${masterfiles}
	do
		ln -s ${masterfile} ${adtfanTmpPath}/
	done

	# assume other fan input comes from 5
	fanCnt=5
	# soft link slave adt7490
	for ADTDIR in ${ADTDIRS}
	do
		# skip master itself
		if [ "${ADTDIR}" == "${ADTMASTER}" ]; then
			continue
		fi

		if [ $kernelVer -ge "$(KernelVersionCode "5.10")" ]; then
			slaveFans=`ls ${ADTDIR}/hwmon/hwmon*/fan*_input`
		else
			slaveFans=`ls ${ADTDIR}/fan*_input`
		fi

		for slavefan in ${slaveFans}
		do
			ln -s ${slavefan} ${adtfanTmpPath}/fan${fanCnt}_input
			fanCnt=`expr ${fanCnt} + 1`
		done
	done
}