Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aorus Liquid Cooler support? #167

Open
zilpe opened this issue Aug 4, 2020 · 138 comments
Open

Aorus Liquid Cooler support? #167

zilpe opened this issue Aug 4, 2020 · 138 comments
Labels
new device Support for a new device

Comments

@zilpe
Copy link

zilpe commented Aug 4, 2020

Hey! I saw that liquidctl supports the NZXT Z63 and Z73 coolers, which is great.

I have the Aorus Liquid Cooler, which is essentially the exact same hardware, screen, and pump design since it's made by Asetek too. They have the exact same screens. I would love to see support for it, since it has awful software compared to NZXT's CAM.

Hopefully it's achievable. I am more than happy to do any testing if required.

Thanks!

@jonasmalacofilho
Copy link
Member

That's interesting, I didn't know they were so similar. Though just to adjust expectations, they could still use very different firmware and protocols, as is the case with the 5th-gen. Asetek coolers.

But let's take a look. Can you follow Capturing USB traffic on a native Windows host and share the PCAP capture files with me?

@jonasmalacofilho jonasmalacofilho added the new device Support for a new device label Aug 4, 2020
@jonasmalacofilho
Copy link
Member

Let me know if you need more help with the traffic captures.

@zilpe
Copy link
Author

zilpe commented Aug 13, 2020

Hello. Sorry for the late reply. I have been trying to follow the 'Capturing USB traffic on a native Windows host' guide you linked, but I'm stuck. You say 'For this example, assume the target device has vendor and product IDs 0x1e71 and 0x170e, respectively.'

So for the Aorus Liquid Cooler, how am I meant to know which traffic is coming from it? It's not going to have the same IDs' right?

Thank you!

@jonasmalacofilho
Copy link
Member

Hi @ArshZilpe,

Right! You can find right IDs in Device Manager (device -> ... -> Hardware IDs).

Additionally, feel free to send me the unfiltered captures, I may be able to spot the device through other means.

@jonasmalacofilho
Copy link
Member

Hi @ArshZilpe, any news on your end?

@jonasmalacofilho
Copy link
Member

Thanks to a kind soul on Reddit:

    Bus 001 Device 003: ID 1044:7a46 Chu Yuen Enterprise Co., Ltd USB-MASS STORAGE
    Couldn't open device, some information will be missing
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               1.10
      bDeviceClass            0 
      bDeviceSubClass         0 
      bDeviceProtocol         0 
      bMaxPacketSize0        64
      idVendor           0x1044 Chu Yuen Enterprise Co., Ltd
      idProduct          0x7a46 
      bcdDevice            1.00
      iManufacturer           1 
      iProduct                2 
      iSerial                 3 
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x0040
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass         8 Mass Storage
          bInterfaceSubClass      6 SCSI
          bInterfaceProtocol     80 Bulk-Only
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass         3 Human Interface Device
          bInterfaceSubClass      0 
          bInterfaceProtocol      0 
          iInterface              0 
            HID Device Descriptor:
              bLength                 9
              bDescriptorType        33
              bcdHID               1.10
              bCountryCode           33 US
              bNumDescriptors         1
              bDescriptorType        34 Report
              wDescriptorLength      47
             Report Descriptors: 
               ** UNAVAILABLE **
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x04  EP 4 OUT
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1

It's unlikely we'll find any similarities between this cooler and the NZXT Z63/Z73.

@jonasmalacofilho
Copy link
Member

More info:

When changing the image or the orientation of the screen, the windows tool seems to recompile and upload the whole firmware again.

@zilpe
Copy link
Author

zilpe commented Nov 15, 2020

Aw that sucks. I apologise for not responding again (I hadn't checked GitHub in a while). Thank you for all the efforts anyway!

I did notice one thing while looking around myself. In the Program Files for Aorus Engine (used to control the AIO), there is a 'FlashAIOImage.exe', 'FlashAIOImage.pdb', and 'FlashAIOImage.vhost.exe'.

Then there is also a folder named 'images' which has three .bin files named 0, 90 and 180. There are also two other folders with .recourse.dll files in them.

I have uploaded the folder if that is any help to you. @jonasmalacofilho

AIO.zip

@jonasmalacofilho
Copy link
Member

No news on my side, I haven't been able to decode those .bin files yet.

They may be the key to understanding the traffic captures. By the way, protocol looks nothing like is used used by the Kraken Z coolers.

@zilpe
Copy link
Author

zilpe commented Nov 23, 2020

I see. That's a shame. Thank you anyway! I'll keep digging around.

@alkanna
Copy link

alkanna commented Mar 24, 2021

Hey, I started digging around and found some patterns already @jonasmalacofilho :
It seems that on my 360 version of the cooler (3 fans) there are always 5 data packets being sent when changing the configuration of the lightning (not this is only RGB control testing for now, I haven't dug into temperature reporting yet)

Let's take these 4 packets :

B0 02 FF 21 00 FF 21 00
B1 02 FF 21 00 FF 21 00
B2 02 FF 21 00 FF 21 00
B3 02 FF 21 00 FF 21 00

This happens on saving some RGB config for the AIO. So far I can only guess that the B0/B1/B2/B3 are the three fans and something else (haven't found that out yet), the next byte (here 02) is the current RGB mode. This AIO supports Static, pulse, flash, double flash etc... (11 total including off), and it seems to start at 01 with 01 being Static, 02 is Pulse, and so on.

The next 6 bytes are RGB, for some reason sent two times for each fan (FF 21 00 being 255/33/0 in RGB)

There is also another packet sent right before these 4 which contains some more settings, let's take for example this one :

C9 02 64 05 00 00 00 00

First byte - No idea yet, might just be identifier for this config array
Second byte (02) - Speed of the effect, ranging from 00 to 05 I think
For the rest I got no clue yet, but I haven't played a lot with the rest of the settings.

At first I wanted to make a golang daemon to control this from OSX, but it seems wiser to add support for it in liquidctl so I hope someone else will help 😄

@jonasmalacofilho
Copy link
Member

jonasmalacofilho commented Mar 24, 2021

Very nice! Can you attach a complete traffic capture?


To get started writing a liquidctl driver, I suggest you begin with basic temperature/fan speed monitoring, then go into fan speed control, and let fan LED control [and the screen] for last.

Porting drivers from OpenCorsairLink, despite the name and obvious on that specific scenario, should help give you an overview of how liquidctl is structured.

And you can also ask me questions on our developer's Discord server.

@alkanna
Copy link

alkanna commented Mar 25, 2021

@jonasmalacofilho The discord invite is expired is seems :)

@jonasmalacofilho
Copy link
Member

@alkanna updated.

@zilpe
Copy link
Author

zilpe commented Mar 25, 2021

@jonasmalacofilho Hey! I have attached a traffic capture (I'm pretty sure). I'm still learning how to do this haha.

One thing I noticed was that every time the temperature changed on the display, there is a chunk of SET_REPORT Request and Response packets. I'm not 100% sure if they're related though.

AIOcapture.zip

@jogiji
Copy link

jogiji commented May 10, 2021

Any progress on this ?

@jonasmalacofilho
Copy link
Member

Not that I'm aware. But I'm available to help anyone working on adding support for this device.

@fearless-spider
Copy link

Not that I'm aware. But I'm available to help anyone working on adding support for this device.

Hello, I have this device too, version Waterforce X 360. Im debuging it. It works as HID Interrupt Transfer. How can I send data to this device?

Thanks

@jonasmalacofilho
Copy link
Member

@fearless-spider ,

For HIDs, we use hidapi through cython-hidapi. You can also experiment with hidpytoy (I haven't used it myself yet).

One thing though: according to its USB descriptors, that device has two interfaces, and you'll probably need to use both to control all features. For the non-HID interface you can use libusb (we use it through PyUSB).

That said, it's possible that the HID interface is enough for status monitoring and fan/pump speed control, maybe even LED control.

@fearless-spider
Copy link

Thank You @jonasmalacofilho I will play with it

@thankjura
Copy link

thankjura commented Dec 16, 2021

@fearless-spider

I will play with it

Did anything work out?

@fearless-spider
Copy link

@fearless-spider

I will play with it

Did anything work out?

I had no time. A lot of work at the end of year.

@jonasmalacofilho
Copy link
Member

Triage: is anyone interested in working on this?

@Wapitiii
Copy link

Triage: is anyone interested in working on this?

I would be interested.

@jonasmalacofilho
Copy link
Member

@Wapitiii,

Great. I think you could start by taking a look at the previous comments and at our developers docs. And I'm around if you have questions or need help.

@flisboac
Copy link

flisboac commented Oct 1, 2022

If I may, I also want to express some support for Gigabyte AIOs in general. I have an Aorus Waterforce 240, and it would be awesome to be able to control fan and pump speed from liquidctl on Linux. Right now, the device isn't even recognized by liquidctl, but I can see it:

$ lsusb | grep -i gigabyte
Bus 003 Device 004: ID 1044:7a51 Chu Yuen Enterprise Co., Ltd GIGABYTE CPU Cooler

$ lsusb -s 003:004 -vvv
Bus 003 Device 004: ID 1044:7a51 Chu Yuen Enterprise Co., Ltd GIGABYTE CPU Cooler
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x1044 Chu Yuen Enterprise Co., Ltd
  idProduct          0x7a51 
  bcdDevice            1.00
  iManufacturer           1 ROCCAT
  iProduct                2 GIGABYTE CPU Cooler
  iSerial                 3 000000000000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0062
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      24
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      34
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Warning: Descriptor too short
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         2
          bDescriptorType        34 Report
          wDescriptorLength      47
          bDescriptorType         0 (null)
          wDescriptorLength       0
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)

@flisboac
Copy link

flisboac commented Oct 2, 2022

If it may help, I made some USB captures for the Aorus Waterforce 240, following the guidelines on the documentation. All of them were made with Wireshark, on Windows, using USBPcap. On some of the captures, I manipulated Aorus Engine, as noted in the capture files' names.

https://drive.google.com/drive/folders/1kp7IBvVG80fekMy7w9_8m9bmitH86COp?usp=sharing

In the folder, there's also a hardware report I generated with hwinfo64.

Also, I think this display filter will be needed: usb.bus_id == 2 and usb.device_address == 3. (I couldn't apply a capture filter, for some reason the necessary flag is missing, or a wrong one is being passed instead)

@supercraftfox1
Copy link

Hello everyone I want my aorus liquid cooler 280 to work under arch. Is there anything I can do to help ?

@amazonparrot
Copy link

amazonparrot commented May 20, 2023

hello @aleksamagicka @amazonparrot

Do you know if the driver writes something directly on the device ? i few days ago i noticed that the LCD panel stopped working properly, not sure if there's a correlation

You could try cold boot the machine and boot in Windows and use the Aorus program and see if this helps, I hope it's just cables and you could try to unplug and plug back the device. I have been using my python and now my kernel driver for more than 5 months, so far without issues. I didn't use the write curve function though. My driver and python code just write the CPU temperature every 2 secs to the device and that's what I believe the drivers in Windows does also.

As a last attempt, you might try flashing the device with firmware too, but I have read somewhere that some firmware might crash the device too.

@joaortizro
Copy link

joaortizro commented May 21, 2023

I switch OS daily , i've tried disconected the usb-c cable and reinstalling drivers but no success, will check for the 'power button' or something similar to reset the device

but the funcionality overall its ok, its just the lcd working bad

@aleksamagicka
Copy link
Member

(I meant the PC power button)

@joaortizro
Copy link

(I meant the PC power button)

oh, silly me

@aleksamagicka
Copy link
Member

aleksamagicka commented May 21, 2023

Also what I noticed with the non-X model is that whatever I screw up with through the kernel driver (sending bad reports, etc.), the official software will reset the device on its own when I boot into Windows and launch it (I don't need to cold boot). You haven't said exactly what the problem with the LCD is, but if their software doesn't reset it or isn't able to control it, it may be a hardware issue.

@namidairo
Copy link

But I didn't yet find the liquid temp, it's not shown in Aorus Engine either. Will investigate, of course.

I don't think either software suite (GCC or Aorus Engine) show the liquid temp (Or liquid temperatures in the code). It's just a byte that I noticed in the reports, correlating with the liquid temp display.

I'd wonder whether the non-X version even has the capability to show liquid temperature at all, considering the software does not show it and it lacks the lcd panel to display it outwardly. Also the sensor gets into some weird failure mode on some people's units (including mine briefly) where it spits out nonsense multiples of 0x10...

@joaortizro
Copy link

@amazonparrot @aleksamagicka i just randomly fixed by installing again the drivers and turning off my PC completely (by powering off the power supply )

@mr7ndr3
Copy link

mr7ndr3 commented May 29, 2023

It is FIXED - last firmware update on WaterForce x240 (F1.9), resolves the issue. Now the fans returns to their speed profile after computer power on! NO more need to open Gygabyte/AORUS to slow down the fans!

After install de driver https://github.com/aleksamagicka/waterforce-hwmon, I can see the FAN SPEED, but I'm hoping someone could help me change the FAN RPM.
At this point, I open a Virtual Windows and pass-through the 'Bus 001 Device 007: ID 1044:7a4d Chu Yuen Enterprise Co., Ltd Castor' to Windows, and then with AORUS ENGINE or GCC, I can change the FAN SPEED and, if needed, shut down the RGB. But if I could do it in Linux, it would be perfect...

doesn't work with:
echo "1000" > /sys/class/hwmon/hwmon8/fan1_target
echo "1000" | sudo tee /sys/class/hwmon/hwmon8/fan1_target
echo "1000" | sudo tee /sys/class/hwmon/hwmon8/fan1_input

I've tried OpenRGB liquictl and nothing even with:
sudo modprobe i2c-dev
sudo modprobe i2c-i801
sudo i2cdetect -l
sudo sensors-detect
fancontrol
sudo pwmconfig

@aleksamagicka
Copy link
Member

I've acquired a X240, so I'm restarting development of the kernel driver. Liquidctl support should follow.

@zilpe
Copy link
Author

zilpe commented Oct 18, 2023

I have a 1st gen Aorus Liquid Cooler (non Waterforce) and I've been developing a driver too. Will share soon :)

@namidairo
Copy link

From what I can see there's also an unannounced set of new units labelled "Waterforce II" or similar. They're far enough along to have specified the USB vid/pid and fan/pump speed tables and as is, either unimplemented or just flat out identical report structure as the old ones.

aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 19, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce all-in-one
CPU liquid coolers, which communicate through a proprietary USB HID protocol.
Report offsets were initially discovered in [1] and confirmed by me on a
Waterforce X240.

Available sensors are pump and fan speed in RPM, as well as coolant temperature.
Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the device. If
it's not connected, the fan-related sensors will report zeroes.

The addressable RGB LEDs and LCD screen are not supported in this driver and
should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 19, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce all-in-one
CPU liquid coolers, which communicate through a proprietary USB HID protocol.
Report offsets were initially discovered in [1] and confirmed by me on a
Waterforce X240.

Available sensors are pump and fan speed in RPM, as well as coolant temperature.
Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the device. If
it's not connected, the fan-related sensors will report zeroes.

The addressable RGB LEDs and LCD screen are not supported in this driver and
should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 19, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce all-in-one
CPU liquid coolers, which communicate through a proprietary USB HID protocol.
Report offsets were initially discovered in [1] and confirmed by me on a
Waterforce X240.

Available sensors are pump and fan speed in RPM, as well as coolant temperature.
Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the device. If
it's not connected, the fan-related sensors will report zeroes.

The addressable RGB LEDs and LCD screen are not supported in this driver and
should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 19, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 20, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Oct 20, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue Oct 20, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Dec 3, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
Changes in v2 (fix issues reported by kernel bot):
- Add driver doc to hwmon doc index
- Initialize ret value in waterforce_get_status() to 0
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Dec 3, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
Changes in v2 (fix issues reported by kernel bot):
- Add driver doc to hwmon doc index
- Initialize ret value in waterforce_get_status() to 0
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Dec 3, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
Changes in v2 (fix issues reported by kernel bot):
- Add driver doc to hwmon doc index
- Initialize ret value in waterforce_get_status() to 0
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue Dec 3, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Dec 5, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
Changes in v3:
- Used memcpy_and_pad() in waterforce_write_expanded()
- Received return code of mutex locking in waterforce_get_status() is now
  being returned instead of -ENODATA
- After wait_for_completion_interruptible_timeout() calls, -ETIMEOUT or
  received error code are returned throughout the driver
- Formatted variable declarations to follow the reverse christmas tree shape
- In waterforce_read(), error code of waterforce_get_status() is now returned
  instead of -ENODATA
- In waterforce_read(), -EOPNOTSUPP is now returned in the default case of
  hwmon_pwm
- Removed unneeded #ifdef related to CONFIG_DEBUG_FS and the empty function
- Moved fw version check to waterforce_debugfs_init()
- Fixed the error handling path in waterforce_probe()
- Moved the fw version request before hwmon registration and removed the
  hid_device_io_stop() call in waterforce_probe()
- Added missing debugfs_remove_recursive() call in waterforce_remove()

Changes in v2 (fix issues reported by kernel bot):
- Add driver doc to hwmon doc index
- Initialize ret value in waterforce_get_status() to 0
aleksamagicka added a commit to aleksamagicka/linux that referenced this issue Dec 5, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
---
Changes in v3:
- Used memcpy_and_pad() in waterforce_write_expanded()
- Received error code of mutex locking in waterforce_get_status() is now
  being returned instead of -ENODATA
- After wait_for_completion_interruptible_timeout() calls, -ETIMEOUT or
  received error code are returned throughout the driver
- Formatted variable declarations to follow the reverse christmas tree shape
- In waterforce_read(), removed status validity check because it's checked
  when actually getting status
- In waterforce_read(), error code of waterforce_get_status() is now returned
  instead of -ENODATA
- In waterforce_read(), -EOPNOTSUPP is now returned in the default case of
  hwmon_pwm
- Removed unneeded #ifdef related to CONFIG_DEBUG_FS and the empty function
- Moved check of success of fw version retrieval to waterforce_debugfs_init()
- Fixed the error handling path in waterforce_probe()
- Moved the fw version request before hwmon registration and removed the
  hid_device_io_stop() call in waterforce_probe()
- Added missing debugfs_remove_recursive() call in waterforce_remove()

Changes in v2 (fix issues reported by kernel bot):
- Add driver doc to hwmon doc index
- Initialize ret value in waterforce_get_status() to 0
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue Dec 7, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue Dec 11, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
Link: https://lore.kernel.org/r/20231207122402.107032-1-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
akiyks pushed a commit to akiyks/linux that referenced this issue Dec 13, 2023
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
Link: https://lore.kernel.org/r/20231207122402.107032-1-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
intel-lab-lkp pushed a commit to intel-lab-lkp/linux that referenced this issue Jan 9, 2024
This driver exposes hardware sensors of the Gigabyte AORUS Waterforce
all-in-one CPU liquid coolers, which communicate through a proprietary
USB HID protocol. Report offsets were initially discovered in [1] and
confirmed by me on a Waterforce X240 by observing the sent reports from
the official software.

Available sensors are pump and fan speed in RPM, as well as coolant
temperature. Also available through debugfs is the firmware version.

Attaching a fan is optional and allows it to be controlled from the
device. If it's not connected, the fan-related sensors will report
zeroes.

The addressable RGB LEDs and LCD screen are not supported in this
driver and should be controlled through userspace tools.

[1]: liquidctl/liquidctl#167

Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
Link: https://lore.kernel.org/r/20231207122402.107032-1-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new device Support for a new device
Projects
None yet
Development

No branches or pull requests