Fan Hardware Design and Operation

I’ve designed a TX1 carrier and of all the things that may go wrong, the only thing that isn’t working is the fan (go figure something simple like this…or is it??). … and yes I know the fan is not normally running; only turning on when stressing the TX1 beyond some temperature threshold.

In the reference design there is a FAN_DISABLE GPIO signal that comes from a I2C-to-GPIO chip. This signal will force the FAN_PWM signal low and only goes high when a certain thermal threshold is crossed to start the fan. I did not include this disable signal on my carrier design. I assumed the FAN_PWM signal would only pulse when the fan should be spinning and otherwise stay low.

Other than the above disable signal my fan circuitry (FAN_PWM and FAN_TACH signals) is nearly identical to the reference design.

However when I boot the TX1 on my carrier, I do not see “tegra_fan” within /sys/kernel/debug/. I assume it doesn’t show “tegra_fan” become the software thinks there is no fan present.

Does anyone know how the software determines if the fan is present or not?

I assume that the fan does not show up in the first few seconds of dmesg, nor does it show up somewhere under /sys/devices/platform/regulators*, and that if you boot an identical kernel on the dev kit carrier board, it does show up?

when i searched kernel log a short while ago this is what is returned

04/22/16 06:26:20 AM vdd-fan 5000 mV ; Rail OFF
04/22/16 06:26:24 AM THERMAL EST start of therm_fan_est_probe.
04/22/16 06:26:24 AM THERMAL EST name thermal-fan-est.
04/22/16 06:26:24 AM THERMAL EST cdev_type: pwm-fan.
04/22/16 06:26:24 AM thermal thermal_zone7: Registering thermal zone thermal_zone7 for type thermal-fan-est.38
04/22/16 06:26:25 AM FAN dev name pwm-fan
04/22/16 06:26:25 AM FAN pio request success.
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: cap state:7, cap pwm:255
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: got pwm for fan
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 0: pwm=0, rpm=0, rru=40, rrd=40, state:2
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 1: pwm=80, rpm=1000, rru=2, rrd=2, state:2
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 2: pwm=120, rpm=2000, rru=1, rrd=1, state:2
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 3: pwm=160, rpm=3000, rru=1, rrd=1, state:2
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 4: pwm=255, rpm=4000, rru=1, rrd=1, state:3
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 5: pwm=255, rpm=5000, rru=1, rrd=1, state:3
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 6: pwm=255, rpm=6000, rru=1, rrd=1, state:3
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 7: pwm=255, rpm=7000, rru=1, rrd=1, state:4
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 8: pwm=255, rpm=10000, rru=1, rrd=1, state:4
04/22/16 06:26:25 AM pwm_fan_driver pwm-fan.35: index 9: pwm=255, rpm=11000, rru=1, rrd=1, state:4
04/22/16 06:26:27 AM vdd-fan disabling

That is correct.

I’m guessing the pwm_fan_driver won’t load because I don’t make use of the vdd-fan signal.

Modified the device tree to get the fan show up. The issue boiled down to the different hardware architecture and the use of the disable signal.