Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 594fbe71 authored by Arnaud Ebalard's avatar Arnaud Ebalard Committed by Guenter Roeck
Browse files

Add support for GMT G762/G763 PWM fan controllers



GMT G762/763 fan speed PWM controller is connected directly to a fan
and performs closed-loop or open-loop control of the fan speed. Two
modes - PWM or DC - are supported by the chip. Introduced driver
provides various knobs to control the operations of the chip (via
sysfs interface). Specific characteristics of the system can be passed
either using board init code or via DT. Documentation for both the
driver and DT bindings are also provided.

Signed-off-by: default avatarArnaud Ebalard <arno@natisbad.org>
Tested-by: default avatarSimon Guinot <simon.guinot@sequanux.org>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 31e7ad74
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
GMT G762/G763 PWM Fan controller

Required node properties:

 - "compatible": must be either "gmt,g762" or "gmt,g763"
 - "reg": I2C bus address of the device
 - "clocks": a fixed clock providing input clock frequency
	     on CLK pin of the chip.

Optional properties:

 - "fan_startv": fan startup voltage. Accepted values are 0, 1, 2 and 3.
	       The higher the more.

 - "pwm_polarity": pwm polarity. Accepted values are 0 (positive duty)
	       and 1 (negative duty).

 - "fan_gear_mode": fan gear mode. Supported values are 0, 1 and 2.

If an optional property is not set in .dts file, then current value is kept
unmodified (e.g. u-boot installed value).

Additional information on operational parameters for the device is available
in Documentation/hwmon/g762. A detailed datasheet for the device is available
at http://natisbad.org/NAS/refs/GMT_EDS-762_763-080710-0.2.pdf.

Example g762 node:

   clocks {
	#address-cells = <1>;
	#size-cells = <0>;

	g762_clk: fixedclk {
		 compatible = "fixed-clock";
		 #clock-cells = <0>;
		 clock-frequency = <8192>;
	}
   }

   g762: g762@3e {
	compatible = "gmt,g762";
	reg = <0x3e>;
	clocks = <&g762_clk>
	fan_gear_mode = <0>; /* chip default */
	fan_startv = <1>;    /* chip default */
	pwm_polarity = <0>;  /* chip default */
   };
+65 −0
Original line number Original line Diff line number Diff line
Kernel driver g762
==================

The GMT G762 Fan Speed PWM Controller is connected directly to a fan
and performs closed-loop or open-loop control of the fan speed. Two
modes - PWM or DC - are supported by the device.

For additional information, a detailed datasheet is available at
http://natisbad.org/NAS/ref/GMT_EDS-762_763-080710-0.2.pdf. sysfs
bindings are described in Documentation/hwmon/sysfs-interface.

The following entries are available to the user in a subdirectory of
/sys/bus/i2c/drivers/g762/ to control the operation of the device.
This can be done manually using the following entries but is usually
done via a userland daemon like fancontrol.

Note that those entries do not provide ways to setup the specific
hardware characteristics of the system (reference clock, pulses per
fan revolution, ...); Those can be modified via devicetree bindings
documented in Documentation/devicetree/bindings/hwmon/g762.txt or
using a specific platform_data structure in board initialization
file (see include/linux/platform_data/g762.h).

  fan1_target: set desired fan speed. This only makes sense in closed-loop
            fan speed control (i.e. when pwm1_enable is set to 2).

  fan1_input: provide current fan rotation value in RPM as reported by
            the fan to the device.

  fan1_div: fan clock divisor. Supported value are 1, 2, 4 and 8.

  fan1_pulses: number of pulses per fan revolution. Supported values
            are 2 and 4.

  fan1_fault: reports fan failure, i.e. no transition on fan gear pin for
            about 0.7s (if the fan is not voluntarily set off).

  fan1_alarm: in closed-loop control mode, if fan RPM value is 25% out
            of the programmed value for over 6 seconds 'fan1_alarm' is
            set to 1.

  pwm1_enable: set current fan speed control mode i.e. 1 for manual fan
            speed control (open-loop) via pwm1 described below, 2 for
            automatic fan speed control (closed-loop) via fan1_target
            above.

  pwm1_mode: set or get fan driving mode: 1 for PWM mode, 0 for DC mode.

  pwm1: get or set PWM fan control value in open-loop mode. This is an
            integer value between 0 and 255. 0 stops the fan, 255 makes
            it run at full speed.

Both in PWM mode ('pwm1_mode' set to 1) and DC mode ('pwm1_mode' set to 0),
when current fan speed control mode is open-loop ('pwm1_enable' set to 1),
the fan speed is programmed by setting a value between 0 and 255 via 'pwm1'
entry (0 stops the fan, 255 makes it run at full speed). In closed-loop mode
('pwm1_enable' set to 2), the expected rotation speed in RPM can be passed to
the chip via 'fan1_target'. In closed-loop mode, the target speed is compared
with current speed (available via 'fan1_input') by the device and a feedback
is performed to match that target value. The fan speed value is computed
based on the parameters associated with the physical characteristics of the
system: a reference clock source frequency, a number of pulses per fan
revolution, etc.

Note that the driver will update its values at most once per second.
+10 −0
Original line number Original line Diff line number Diff line
@@ -461,6 +461,16 @@ config SENSORS_G760A
	  This driver can also be built as a module.  If so, the module
	  This driver can also be built as a module.  If so, the module
	  will be called g760a.
	  will be called g760a.


config SENSORS_G762
	tristate "GMT G762 and G763"
	depends on I2C
	help
	  If you say yes here you get support for Global Mixed-mode
	  Technology Inc G762 and G763 fan speed PWM controller chips.

	  This driver can also be built as a module.  If so, the module
	  will be called g762.

config SENSORS_GL518SM
config SENSORS_GL518SM
	tristate "Genesys Logic GL518SM"
	tristate "Genesys Logic GL518SM"
	depends on I2C
	depends on I2C
+1 −0
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ obj-$(CONFIG_SENSORS_F75375S) += f75375s.o
obj-$(CONFIG_SENSORS_FAM15H_POWER) += fam15h_power.o
obj-$(CONFIG_SENSORS_FAM15H_POWER) += fam15h_power.o
obj-$(CONFIG_SENSORS_FSCHMD)	+= fschmd.o
obj-$(CONFIG_SENSORS_FSCHMD)	+= fschmd.o
obj-$(CONFIG_SENSORS_G760A)	+= g760a.o
obj-$(CONFIG_SENSORS_G760A)	+= g760a.o
obj-$(CONFIG_SENSORS_G762)	+= g762.o
obj-$(CONFIG_SENSORS_GL518SM)	+= gl518sm.o
obj-$(CONFIG_SENSORS_GL518SM)	+= gl518sm.o
obj-$(CONFIG_SENSORS_GL520SM)	+= gl520sm.o
obj-$(CONFIG_SENSORS_GL520SM)	+= gl520sm.o
obj-$(CONFIG_SENSORS_GPIO_FAN)	+= gpio-fan.o
obj-$(CONFIG_SENSORS_GPIO_FAN)	+= gpio-fan.o

drivers/hwmon/g762.c

0 → 100644
+1149 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading