linux/drivers/hwmon
Jonas Malaco 82e3430dfa hwmon: add driver for NZXT Kraken X42/X52/X62/X72
These are "all-in-one" CPU liquid coolers that can be monitored and
controlled through a proprietary USB HID protocol.

While the models have differently sized radiators and come with varying
numbers of fans, they are all indistinguishable at the software level.

The driver exposes fan/pump speeds and coolant temperature through the
standard hwmon sysfs interface.

Fan and pump control, while supported by the devices, are not currently
exposed.  The firmware accepts up to 61 trip points per channel
(fan/pump), but the same set of trip temperatures has to be maintained
for both; with pwmX_auto_point_Y_temp attributes, users would need to
maintain this invariant themselves.

Instead, fan and pump control, as well as LED control (which the device
also supports for 9 addressable RGB LEDs on the CPU water block) are
left for existing and already mature user-space tools, which can still
be used alongside the driver, thanks to hidraw.  A link to one, which I
also maintain, is provided in the documentation.

The implementation is based on USB traffic analysis.  It has been
runtime tested on x86_64, both as a built-in driver and as a module.

Signed-off-by: Jonas Malaco <jonas@protocubo.io>
Link: https://lore.kernel.org/r/20210319045544.416138-1-jonas@protocubo.io
[groeck: Removed unnecessary spinlock.h include]
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
2021-04-20 06:50:14 -07:00
..
occ hwmon: (occ) Add new temperature sensor type 2020-12-11 07:42:27 -08:00
pmbus hwmon: (pmbus/stpddc60) Add ST STPDDC60 pmbus driver 2021-04-20 06:50:14 -07:00
abituguru3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
abituguru.c hwmon: abituguru: make array probe_order static, makes object smaller 2019-11-06 14:37:19 -08:00
acpi_power_meter.c ACPI: Test for ACPI_SUCCESS rather than !ACPI_FAILURE 2021-01-27 18:43:07 +01:00
ad7314.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 149 2019-05-30 11:25:18 -07:00
ad7414.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ad7418.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adc128d818.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
adcxx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
adm1021.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adm1025.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adm1026.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adm1029.c hwmon: (adm1029) use simple i2c probe 2020-09-23 09:42:39 -07:00
adm1031.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adm1177.c hwmon: (adm1177) Fix kerneldoc attribute formatting 2020-12-02 17:42:23 -08:00
adm9240.c hwmon: (adm9240) Convert to devm_hwmon_device_register_with_info API 2021-04-20 06:50:14 -07:00
ads7828.c hwmon: use simple i2c probe function (take 2) 2020-09-23 09:42:40 -07:00
ads7871.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 51 2019-05-24 17:36:42 +02:00
adt7x10.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
adt7x10.h
adt7310.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 149 2019-05-30 11:25:18 -07:00
adt7410.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adt7411.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adt7462.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
adt7470.c hwmon: (adt7470) Create functions for updating readings and limits 2020-12-02 17:42:23 -08:00
adt7475.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
aht10.c hwmon: (aht10) Unlock on error in aht10_read_values() 2021-01-27 17:44:19 -08:00
amc6821.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
amd_energy.c hwmon: (amd_energy) Add AMD family 19h model 30h x86 match 2021-02-11 20:27:15 -08:00
applesmc.c hwmon: (applesmc) Assign boolean values to a bool variable 2021-01-27 17:44:18 -08:00
as370-hwmon.c hwmon: (as370-hwmon) fix devm_platform_ioremap_resource.cocci warnings 2019-09-03 12:47:17 -07:00
asb100.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
asc7621.c hwmon: (asc7621) use simple i2c probe 2020-09-23 09:42:40 -07:00
aspeed-pwm-tacho.c hwmon: (aspeed-pwm-tacho) Switch to using the new API kobj_to_dev() 2021-01-27 17:44:18 -08:00
asus_atk0110.c hwmon: (asus_atk0110) no need to check return value of debugfs_create functions 2019-06-23 18:33:01 -07:00
atxp1.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
axi-fan-control.c hwmon: (axi-fan-control) remove duplicate macros 2020-08-04 14:27:20 -07:00
bt1-pvt.c hwmon: (bt1-pvt) Wait for the completion with timeout 2020-10-04 08:40:10 -07:00
bt1-pvt.h hwmon: (bt1-pvt) Cache current update timeout 2020-10-04 08:40:10 -07:00
coretemp.c hwmon: Convert to new X86 CPU match macros 2020-03-24 21:33:36 +01:00
corsair-cpro.c hwmon: (corsair-cpro) add reading pwm values 2020-07-24 07:44:57 -07:00
corsair-psu.c hwmon: (corsair-psu) add support for critical values 2021-04-20 06:50:14 -07:00
da9052-hwmon.c hwmon: (da9052) Switch to using the new API kobj_to_dev() 2021-02-11 20:28:56 -08:00
da9055-hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dell-smm-hwmon.c hwmon: (dell-smm) Add XPS 15 L502X to fan control blacklist 2021-01-27 17:44:00 -08:00
dme1737.c hwmon: (dme1737) use simple i2c probe 2020-09-23 09:42:40 -07:00
drivetemp.c hwmon: drivetemp: fix typo temperatire => temperature 2020-12-02 17:42:23 -08:00
ds620.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ds1621.c hwmon: (ds1621) Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
emc6w201.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
emc1403.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
emc2103.c hwmon: (emc2103) use simple i2c probe 2020-09-23 09:42:40 -07:00
f71805f.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
f71882fg.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
f75375s.c hwmon: (f75375s) use simple i2c probe 2020-09-23 09:42:40 -07:00
fam15h_power.c x86/msr: Lift AMD family 0x15 power-specific MSRs 2020-06-15 19:25:53 +02:00
fschmd.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ftsteutates.c hwmon: (ftsteutates) Fix spelling typo 2021-04-20 06:50:14 -07:00
g760a.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
g762.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
gl518sm.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
gl520sm.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
gpio-fan.c hwmon: (gpio-fan) Switch to using the new API kobj_to_dev() 2021-01-27 17:44:18 -08:00
gsc-hwmon.c hwmon: (gsc-hwmon) add fan sensor 2020-09-23 09:42:41 -07:00
hih6130.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
hwmon-vid.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
hwmon.c hwmon: Switch to using the new API kobj_to_dev() 2021-04-20 06:50:14 -07:00
i5k_amb.c hwmon: (i5k_amb, vt8231) Drop uses of pci_read_config_*() return value 2020-08-04 14:24:39 -07:00
i5500_temp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
ibmaem.c hwmon: (ibmaem) Replace zero-length array with flexible-array member 2020-03-08 20:35:46 -07:00
ibmpex.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
ibmpowernv.c hwmon: (ibmpowernv) Silence strncpy() warning 2020-12-02 17:42:23 -08:00
iio_hwmon.c hwmon: (iio_hwmon) Drop bogus __refdata annotation 2020-12-11 07:42:27 -08:00
ina2xx.c hwmon: (ina2xx) Convert sysfs sprintf/snprintf family to sysfs_emit 2021-04-20 06:50:14 -07:00
ina209.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ina3221.c hwmon: (ina3221) Demote seemingly unintentional kerneldoc header 2020-12-02 17:42:23 -08:00
intel-m10-bmc-hwmon.c hwmon: Add hwmon driver for Intel MAX 10 BMC 2020-10-04 08:40:10 -07:00
it87.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
jc42.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
k8temp.c hwmon: (k8temp) update to use new hwmon registration API 2019-09-03 12:47:17 -07:00
k10temp.c hwmon: (k10temp) Zen3 Ryzen Desktop CPUs support 2021-01-27 17:44:18 -08:00
Kconfig hwmon: add driver for NZXT Kraken X42/X52/X62/X72 2021-04-20 06:50:14 -07:00
lineage-pem.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm63.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
lm70.c hwmon: (lm70) Use device_get_match_data() 2021-01-28 15:46:08 -06:00
lm73.c hwmon: (lm73) use simple i2c probe 2020-09-23 09:42:40 -07:00
lm75.c hwmon: (lm75) Add regulator support 2020-10-04 08:40:10 -07:00
lm75.h hwmon: (lm75) Fix all coding-style warnings on lm75 driver 2020-05-22 06:28:38 -07:00
lm77.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm78.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm80.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm83.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm85.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm87.c hwmon: use simple i2c probe function (take 2) 2020-09-23 09:42:40 -07:00
lm90.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm92.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm93.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm95234.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm95241.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lm95245.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
lochnagar-hwmon.c
ltc2945.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc2947-core.c hwmon: Add support for ltc2947 2019-11-06 14:37:19 -08:00
ltc2947-i2c.c hwmon: (ltc2947) use simple i2c probe 2020-09-23 09:42:40 -07:00
ltc2947-spi.c hwmon: Add support for ltc2947 2019-11-06 14:37:19 -08:00
ltc2947.h hwmon: Add support for ltc2947 2019-11-06 14:37:19 -08:00
ltc2990.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
ltc2992.c hwmon: (ltc2992) Fix less than zero comparisons with an unsigned integer 2020-12-11 07:42:27 -08:00
ltc4151.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc4215.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc4222.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc4245.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc4260.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltc4261.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
ltq-cputemp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
Makefile hwmon: add driver for NZXT Kraken X42/X52/X62/X72 2021-04-20 06:50:14 -07:00
max127.c hwmon: (max127) Add Maxim MAX127 hardware monitoring driver 2020-12-02 17:42:24 -08:00
max197.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
max1111.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 332 2019-06-05 17:37:06 +02:00
max1619.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max1668.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max6621.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max6639.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max6642.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max6650.c hwmon: (max6650) Switch to using the new API kobj_to_dev() 2021-01-27 17:44:18 -08:00
max6697.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
max16065.c hwmon: Use kobj_to_dev() 2021-04-20 06:50:14 -07:00
max31722.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 330 2019-06-05 17:37:06 +02:00
max31730.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
max31790.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
mc13783-adc.c
mcp3021.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
menf21bmc_hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
mlxreg-fan.c Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal 2019-05-16 07:56:57 -07:00
mr75203.c hwmon: Add hardware monitoring driver for Moortec MR75203 PVT controller 2020-10-06 14:51:18 -07:00
nct6683.c hwmon: (nct6683) Support NCT6686D 2021-04-20 06:50:14 -07:00
nct6775.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
nct7802.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
nct7904.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
npcm750-pwm-fan.c hwmon: (npcm750-pwm-fan) Remove dev_err() usage after platform_get_irq() 2019-09-03 12:47:17 -07:00
nsa320-hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 408 2019-06-05 17:37:14 +02:00
ntc_thermistor.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
nzxt-kraken2.c hwmon: add driver for NZXT Kraken X42/X52/X62/X72 2021-04-20 06:50:14 -07:00
pc87360.c hwmon: (pc87360) convert comma to semicolon 2021-01-27 17:44:17 -08:00
pc87427.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
pcf8591.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
powr1220.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
pwm-fan.c - Use the newly introduced 'hot' and 'critical' ops for the acpi 2021-02-22 09:39:11 -08:00
raspberrypi-hwmon.c hwmon: (raspberrypi) update MODULE_AUTHOR() email address 2019-09-03 12:47:17 -07:00
s3c-hwmon.c ARM: s3c: adc: move header to linux/soc/samsung 2020-08-19 21:44:11 +02:00
sbtsi_temp.c hwmon: (sbtsi) Add basic support for SB-TSI sensors 2020-12-12 08:32:35 -08:00
sch56xx-common.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sch56xx-common.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sch5627.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sch5636.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
scmi-hwmon.c hwmon: (scmi) Update hwmon internal scale data type 2020-11-22 18:00:14 +00:00
scpi-hwmon.c hwmon: Convert remaining drivers to use SPDX identifier 2019-06-23 18:34:11 -07:00
sht3x.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
sht15.c docs: hwmon: Add an index file and rename docs to *.rst 2019-04-17 10:37:23 -07:00
sht21.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
shtc1.c hwmon: shtc1: add support for device tree bindings 2020-09-23 09:42:40 -07:00
sis5595.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
sl28cpld-hwmon.c hwmon: Add support for the sl28cpld hardware monitoring controller 2020-09-17 16:02:42 +01:00
smm665.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
smsc47b397.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
smsc47m1.c hwmon: (smsc47m1) Remove 'h' from printk format specifier 2021-01-27 17:44:17 -08:00
smsc47m192.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
sparx5-temp.c hwmon: (sparx5) Fix initial reading of temperature 2020-09-23 09:39:40 -07:00
stts751.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tc74.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tc654.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
thmc50.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp102.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp103.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp108.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp401.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp421.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
tmp513.c hwmon: (tmp513) fix spelling typo in comments 2020-10-04 08:40:10 -07:00
tps23861.c hwmon: add Texas Instruments TPS23861 driver 2021-02-12 07:02:55 -08:00
ultra45_env.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
vexpress-hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
via686a.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
via-cputemp.c hwmon: Convert to new X86 CPU match macros 2020-03-24 21:33:36 +01:00
vt1211.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
vt8231.c hwmon: (i5k_amb, vt8231) Drop uses of pci_read_config_*() return value 2020-08-04 14:24:39 -07:00
w83l785ts.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
w83l786ng.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
w83627ehf.c hwmon: (w83627ehf) Switch to using the new API kobj_to_dev() 2021-01-27 17:44:17 -08:00
w83627hf.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
w83773g.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
w83781d.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
w83791d.c hwmon: (w83791d) use simple i2c probe 2020-09-23 09:42:40 -07:00
w83792d.c hwmon: use simple i2c probe function 2020-09-23 09:42:39 -07:00
w83793.c hwmon: (w83793) use simple i2c probe 2020-09-23 09:42:39 -07:00
w83795.c hwmon: use simple i2c probe function (take 2) 2020-09-23 09:42:40 -07:00
wm831x-hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 271 2019-06-05 17:30:30 +02:00
wm8350-hwmon.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 271 2019-06-05 17:30:30 +02:00
xgene-hwmon.c hwmon: (xgene) Drop bogus __refdata annotation 2020-12-11 07:42:27 -08:00