@@ -26,6 +26,7 @@ static const char* ene_channels[] = /* ENE channel strings
2626 " RGB Header" ,
2727 " RGB Header 2" ,
2828 " RGB Header" ,
29+ " SSD" ,
2930 " Unknown" ,
3031};
3132
@@ -35,40 +36,51 @@ ENESMBusController::ENESMBusController(ENESMBusInterface* interface, ene_dev_id
3536 this ->dev = dev;
3637 supports_mode_14 = false ;
3738
38- UpdateDeviceName ();
39-
40- // Read the device configuration table
41- for (int i = 0 ; i < 64 ; i++)
39+ if (interface->GetInterfaceType () != ENE_INTERFACE_TYPE_ROG_ARION)
4240 {
43- config_table[i] = ENERegisterRead (ENE_REG_CONFIG_TABLE + i);
44- }
41+ UpdateDeviceName ();
42+
43+ // Read the device configuration table
44+ for (int i = 0 ; i < 64 ; i++)
45+ {
46+ config_table[i] = ENERegisterRead (ENE_REG_CONFIG_TABLE + i);
47+ }
4548
46- /* -----------------------------------------------------------------*\
47- | If this is running with TRACE or higher loglevel then |
48- | dump the entire Feature list to log |
49- \*-----------------------------------------------------------------*/
50- if (LogManager::get ()->getLoglevel () >= LL_TRACE)
49+ /* -----------------------------------------------------------------*\
50+ | If this is running with TRACE or higher loglevel then |
51+ | dump the entire Feature list to log |
52+ \*-----------------------------------------------------------------*/
53+ if (LogManager::get ()->getLoglevel () >= LL_TRACE)
54+ {
55+ LOG_TRACE (" [ENE SMBus] ENE config table for 0x%02X:" , dev);
56+ LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[0 ], config_table[1 ], config_table[2 ], config_table[3 ],
57+ config_table[4 ], config_table[5 ], config_table[6 ], config_table[7 ],
58+ config_table[8 ], config_table[9 ], config_table[10 ], config_table[11 ],
59+ config_table[12 ], config_table[13 ], config_table[14 ], config_table[15 ]);
60+
61+ LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[16 ], config_table[17 ], config_table[18 ], config_table[19 ],
62+ config_table[20 ], config_table[21 ], config_table[22 ], config_table[23 ],
63+ config_table[24 ], config_table[25 ], config_table[26 ], config_table[27 ],
64+ config_table[28 ], config_table[29 ], config_table[30 ], config_table[31 ]);
65+
66+ LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[32 ], config_table[33 ], config_table[34 ], config_table[35 ],
67+ config_table[36 ], config_table[37 ], config_table[38 ], config_table[39 ],
68+ config_table[40 ], config_table[41 ], config_table[42 ], config_table[43 ],
69+ config_table[44 ], config_table[45 ], config_table[46 ], config_table[47 ]);
70+
71+ LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[48 ], config_table[49 ], config_table[50 ], config_table[51 ],
72+ config_table[52 ], config_table[53 ], config_table[54 ], config_table[55 ],
73+ config_table[56 ], config_table[57 ], config_table[58 ], config_table[59 ],
74+ config_table[60 ], config_table[61 ], config_table[62 ], config_table[63 ]);
75+ }
76+ }
77+ else
5178 {
52- LOG_TRACE (" [ENE SMBus] ENE config table for 0x%02X:" , dev);
53- LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[0 ], config_table[1 ], config_table[2 ], config_table[3 ],
54- config_table[4 ], config_table[5 ], config_table[6 ], config_table[7 ],
55- config_table[8 ], config_table[9 ], config_table[10 ], config_table[11 ],
56- config_table[12 ], config_table[13 ], config_table[14 ], config_table[15 ]);
57-
58- LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[16 ], config_table[17 ], config_table[18 ], config_table[19 ],
59- config_table[20 ], config_table[21 ], config_table[22 ], config_table[23 ],
60- config_table[24 ], config_table[25 ], config_table[26 ], config_table[27 ],
61- config_table[28 ], config_table[29 ], config_table[30 ], config_table[31 ]);
62-
63- LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[32 ], config_table[33 ], config_table[34 ], config_table[35 ],
64- config_table[36 ], config_table[37 ], config_table[38 ], config_table[39 ],
65- config_table[40 ], config_table[41 ], config_table[42 ], config_table[43 ],
66- config_table[44 ], config_table[45 ], config_table[46 ], config_table[47 ]);
67-
68- LOG_TRACE (" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X" , config_table[48 ], config_table[49 ], config_table[50 ], config_table[51 ],
69- config_table[52 ], config_table[53 ], config_table[54 ], config_table[55 ],
70- config_table[56 ], config_table[57 ], config_table[58 ], config_table[59 ],
71- config_table[60 ], config_table[61 ], config_table[62 ], config_table[63 ]);
79+ LOG_TRACE (" [ENE SMBus] ROG STRIX ARION detected, filling in hard coded config table entries." , dev);
80+ memset (config_table, 0 , sizeof (config_table));
81+ config_table[ENE_CONFIG_LED_COUNT] = 4 ;
82+ config_table[0x03 ] = 4 ;
83+ strcpy (device_name, " ROG STRIX ARION" );
7284 }
7385
7486 // Read LED count from configuration table
@@ -166,6 +178,15 @@ ENESMBusController::ENESMBusController(ENESMBusInterface* interface, ene_dev_id
166178 // Read LED count from configuration table
167179 led_count = config_table[ENE_CONFIG_LED_COUNT_0107];
168180 }
181+ // ROG ARION - ASUS ROG Arion external SSD enclosure
182+ // This device does not support ENE read, so we fake the device name string
183+ // if the interface is ROG Arion type. It uses second generation registers.
184+ else if (strcmp (device_name, " ROG STRIX ARION" ) == 0 )
185+ {
186+ direct_reg = ENE_REG_COLORS_DIRECT_V2;
187+ effect_reg = ENE_REG_COLORS_EFFECT_V2;
188+ channel_cfg = ENE_CONFIG_CHANNEL_V2;
189+ }
169190 // Assume first generation controller if string does not match
170191 else
171192 {
@@ -201,53 +222,60 @@ const char * ENESMBusController::GetChannelName(unsigned int cfg_zone)
201222{
202223 LOG_TRACE (" [%s] Config table for zone %02d: %02d" , device_name, cfg_zone, config_table[channel_cfg + cfg_zone]);
203224
204- switch (config_table[channel_cfg + cfg_zone])
225+ if (interface->GetInterfaceType () == ENE_INTERFACE_TYPE_ROG_ARION)
226+ {
227+ return (ene_channels[10 ]);
228+ }
229+ else
205230 {
206- case (unsigned char )ENE_LED_CHANNEL_AUDIO:
207- return (ene_channels[0 ]);
208- break ;
231+ switch (config_table[channel_cfg + cfg_zone])
232+ {
233+ case (unsigned char )ENE_LED_CHANNEL_AUDIO:
234+ return (ene_channels[0 ]);
235+ break ;
209236
210- case (unsigned char )ENE_LED_CHANNEL_BACKPLATE:
211- return (ene_channels[1 ]);
212- break ;
237+ case (unsigned char )ENE_LED_CHANNEL_BACKPLATE:
238+ return (ene_channels[1 ]);
239+ break ;
213240
214- case (unsigned char )ENE_LED_CHANNEL_BACK_IO:
215- return (ene_channels[2 ]);
216- break ;
241+ case (unsigned char )ENE_LED_CHANNEL_BACK_IO:
242+ return (ene_channels[2 ]);
243+ break ;
217244
218- case (unsigned char )ENE_LED_CHANNEL_CENTER:
219- return (ene_channels[3 ]);
220- break ;
245+ case (unsigned char )ENE_LED_CHANNEL_CENTER:
246+ return (ene_channels[3 ]);
247+ break ;
221248
222- case (unsigned char )ENE_LED_CHANNEL_CENTER_START:
223- return (ene_channels[4 ]);
224- break ;
249+ case (unsigned char )ENE_LED_CHANNEL_CENTER_START:
250+ return (ene_channels[4 ]);
251+ break ;
225252
226- case (unsigned char )ENE_LED_CHANNEL_DRAM:
227- case (unsigned char )ENE_LED_CHANNEL_DRAM_2:
228- case (unsigned char )ENE_LED_CHANNEL_DRAM_3:
229- return (ene_channels[5 ]);
230- break ;
253+ case (unsigned char )ENE_LED_CHANNEL_DRAM:
254+ case (unsigned char )ENE_LED_CHANNEL_DRAM_2:
255+ case (unsigned char )ENE_LED_CHANNEL_DRAM_3:
256+ return (ene_channels[5 ]);
257+ break ;
231258
232- case (unsigned char )ENE_LED_CHANNEL_PCIE:
233- return (ene_channels[6 ]);
234- break ;
259+ case (unsigned char )ENE_LED_CHANNEL_PCIE:
260+ return (ene_channels[6 ]);
261+ break ;
235262
236- case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER:
237- return (ene_channels[7 ]);
238- break ;
263+ case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER:
264+ return (ene_channels[7 ]);
265+ break ;
239266
240- case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER_2:
241- return (ene_channels[8 ]);
242- break ;
267+ case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER_2:
268+ return (ene_channels[8 ]);
269+ break ;
243270
244- case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER_3:
245- return (ene_channels[9 ]);
246- break ;
271+ case (unsigned char )ENE_LED_CHANNEL_RGB_HEADER_3:
272+ return (ene_channels[9 ]);
273+ break ;
247274
248- default :
249- return (ene_channels[10 ]);
250- break ;
275+ default :
276+ return (ene_channels[11 ]);
277+ break ;
278+ }
251279 }
252280}
253281
0 commit comments