+
     viS  c                   s,   R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
 ]P                  ! ]4      tRtRtRtR	tR
tRtRtRtRtRtRtRtRtRtRtRtRtRtRt Rt!Rt"Rt#Rt$Rt%Rt&Rt'R t(R!t)R"t*R#t+R$t,R%t-R&t.R't/R(t0R)t1R*t2R+t3R,t4R-t5R.t6R/t7R0t8R1t9R2t:R3t;R4t<R5t=R6t>R7t?R8t@R9tAR:tBR;tCR<tDR=tER>tFR?tGR@tHRAtIRBtJRCtKRDtLREtMRFtNRGtORHtPRItQRJtRRKtSRLtTRMtURNtVROtWRPtXRQtYRRtZRSt[RTt\RUt]RVt^RWt_RXt`RYtaRZtbR[tcR\td] ! R] R^]e]	4      4       tf ! R_ R`4      tg ! Ra Rb]]g4      th ! Rc Rd]]g4      tiR# )ezliquidctl drivers for NVIDIA graphics cards.

Copyright Jonas Malaco, Marshall Asch and contributors
SPDX-License-Identifier: GPL-3.0-or-later
N)unique)SmbusDriverNotSupportedByDevice)RelaxedNamesEnumcheck_unsafei  i  i  i  i  i  i  i  i  i!  i!  i!  i!  iG  i  i  i  i  i  i  i  i  i  i  i  i  i%  i%  i$  i%  i$  i$  i$  i$  i$  i"  i
"  i"  i"  i"  iC  i؅  iͅ  iх  i  i  i  i  i  i  i  i  i  i  i  i  i  iO  iR  i  i0  i  i  i  iӆ  i  iu  i  i(  i  i  i'  i)  iq  ip  i  i  i_  i  ij  iƇ  iB8  ivb  itb  ixb  iug  ib  c                   s,   a  ] tR t^vt o R tR tRtV tR# )	_ModeEnumc                sJ    \         P                  W.4      pWn        W#n        V# N)bytes__new__Z_value_required_colors)clsvaluer
   Zobjs   &&& </usr/lib/python3.14/site-packages/liquidctl/driver/nvidia.pyr	   Z_ModeEnum.__new__x   s"    mmC)-
    c                s6    V P                   P                  4       # r   )ZnameZ
capitalize)selfs   &r   __str__Z_ModeEnum.__str__~   s    yy##%%r    N)__name__
__module____qualname____firstlineno__r	   r   __static_attributes____classdictcell____classdict__   @r   r   r   v   s     & &r   r   c                   sD   a  ] tR t^t o RtRt. t. t]RR l4       t	Rt
V tR# )_NvidiaI2CDriveru   Generic NVIDIA I²C driver.Nc              +  sh  "   V'       d   W P                   8w  g5   V'       d   \        V^R7      V P                  9  g   V'       g	   V'       d   R# VP                  V P                   8w  g'   VP                  \
        8w  g   VP                  R8w  d   R# V P                   F  w  rpV'       d   W:8w  g,   V'       d&   VP                  4       VP                  4       9  d   KA  VP                  V
8w  g3   VP                  V	8w  g"   VP                  P                  R4      '       g   K  WV3x  K  	  R# 5i)i   )ZbaseNZnvidiazNVIDIA i2c adapter 1 )_VENDORZint
_ADDRESSESZparent_subsystem_vendorZparent_vendorNVIDIAZparent_driver_MATCHESZlowerZparent_subsystem_deviceZparent_devicedescriptionZ
startswith)r   smbusvendorproductaddressmatchreleaseserialkwargsdev_id
sub_dev_iddescs   &&&&&&&&,   r   	pre_probeZ_NvidiaI2CDriver.pre_probe   s      v,G" 5S^^ Kf((CKK7&&&0&&(2(+$FG1%++-tzz|"C,,
:**f4 ,,778OPPt,, )5s$    D2#D2D2A,D2<A'D2$D2r   NNNNNN)r   r   r   r   __doc__r   r   r   classmethodr,   r   r   r   r   r   r   r      s)     %GJH- -r   r   c                   s   a a ] tR t^t oRt^t^	t^
t^t^#t	^t
]t^I.t]]R3]]R3]]R3]]R3]]R3.t] ! R R]4      4       t]RV 3R	 ll4       tV 3R
 ltRR ltRR ltR tR t R t!R t"Rt#Vt$V ;t%# )
EvgaPascalz2NVIDIA series 10 (Pascal) graphics card from EVGA.zEVGA GTX 1070 FTWzEVGA GTX 1070 FTW DT GamingzEVGA GTX 1070 FTW HybridzEVGA GTX 1070 Ti FTW2zEVGA GTX 1080 FTWc                   s&    ] tR t^tRtRtRtRtRtR# )EvgaPascal.Moder   N    r3      r5   )   r3   )i   r5   )	r   r   r   r   OFFFIXEDRAINBOW	BREATHINGr   r   r   r   Moder1      s    	r   r;   c           	   +  s   <"   \         SV `  ! WW4VWg3/ VB p	V	 FP  w  rpV ! W\        \        V P                  ^ ,          R7      p\
        P                  RV P                  V4       Vx  KR  	  R# 5i)r3   Z	vendor_idZ
product_idr$   z%s identified: %sN)superr,   EVGAEVGA_GTX_1080_FTWr   _LOGGERdebugr   )r   r!   r"   r#   r$   r%   r&   r'   r(   
pre_probedr)   r*   r+   dev	__class__s   &&&&&&&&,     r   probeZEvgaPascal.probe   sr      W&ug(/C;AC
 )3$FeT>O!nnQ/1CMM-s||TBI	 )3s   A-A0c                p   < \         SV `  ! V/ VB  R V P                  9   d   RR.V n        R# R.V n        R# )experimentalr!   Zexperimental_evga_gpuNr=   __init__r    _UNSAFEr   Zargsr(   rD      &*,r   rI   ZEvgaPascal.__init__   9    $)&)T---#%<=DL#9DLr   c                s   V'       g   . # \        V P                  / VB '       g=   \        P                  RV P                  RP                  V P                  4      4       . # V P                  V P                  P                  V P                  V P                  4      4      pRVR3.pVP                  ^ 8  d   V P                  P                  V P                  V P                  4      pV P                  P                  V P                  V P                  4      pV P                  P                  V P                  V P                  4      pVP                  RVR VR VR 2R34       V# zJGet a status report.

Returns a list of `(property, value, unit)` tuples.
z+%s: disabled, requires unsafe features '%s'Z,r;   Z ZColorZ02x)r   rJ   r@   warningr    joinr;   _smbusread_byte_data_address	_REG_MODEr
   _REG_RED
_REG_GREEN	_REG_BLUEappend)r   verboser(   modestatusrgb   &&,     r   
get_statusZEvgaPascal.get_status   s    IT\\4V44OOI ,,chht||.DFIyy33DMM4>>RS4$%!#**4==$--HA**4==$//JA**4==$..IAMM7qgaWQsG$<bABr   c                sJ   \        V P                  RR/VB  \        V4      p V P                  V,          p\        T4      TP                  8  d   \        T RTP                   R24      h\        T4      TP                  8  d0   \        P                  RTP                  4       TRTP                   pT P                  P                  T P                  T P                  TP                  4       T F  w  rgpT P                  P                  T P                  T P                  T4       T P                  P                  T P                  T P                   T4       T P                  P                  T P                  T P"                  T4       K  	  T'       d?    T P                  P                  T P                  T P$                  T P&                  4       R# R#   \         d    \        RT: 24      Rhi ; i  \(         d"   p	\        P                  RT	4        Rp	?	R# Rp	?	ii ; i)	aT  Set the RGB lighting mode and, when applicable, color.

The table bellow summarizes the available channels, modes and their
associated number of required colors.

| Channel  | Mode      | Required colors |
| -------- | --------- | --------------- |
| led      | off       |               0 |
| led      | fixed     |               1 |
| led      | breathing |               1 |
| led      | rainbow   |               0 |

The settings configured on the device are normally volatile, and are
cleared whenever the graphics card is powered down (OS and UEFI power
saving settings can affect when this happens).

It is possible to store them in non-volatile controller memory by
passing `non_volatile=True`.  But as this memory has some unknown yet
limited maximum number of write cycles, volatile settings are
preferable, if the use case allows for them.
errorTinvalid mode: N mode requires  colorstoo many colors, dropping to %dz1expected OSError when writing to _REG_PERSIST: %s)r   rJ   listr;   KeyError
ValueErrorlenr
   r@   rA   rQ   write_byte_datarS   rT   r   rU   rV   rW   _REG_PERSIST_PERSISTZOSError)
r   channelrZ   colorsnon_volatiler(   r\   r]   r^   Zerrs
   &&&&&,    r   	set_colorZEvgaPascal.set_color   s   . 	dll9$9&9f	B99T?D v;---v_T5I5I4J'RSSv;---MM;T=Q=QR1T112F##DMM4>>4::NGA!KK''t}}aHKK''tJKK''t~~qI 
 X++DMM4;L;Ldmm\ #  	B~dX67TA	B*  XQSVWWXs#   G ;G6 G36H"HH"c                    R# zInitialize the device.Nr   r   r(      &,r   
initializeZEvgaPascal.initialize'      r   c                    \        4       hzNot supported by this device.r   r   rm   Zprofiler(      &&&,r   set_speed_profileZEvgaPascal.set_speed_profile+      "$$r   c                rw   rx   r   r   rm   Zdutyr(   rz   r   set_fixed_speedZEvgaPascal.set_fixed_speed/  r|   r   c                rw   rx   r   r   rm   rZ   r   r(      &&&&,r   
set_screenZEvgaPascal.set_screen3  r|   r   rJ   r-   F)&r   r   r   r   r.   rT   rU   rV   rW   rk   rl   r>   r   r   NVIDIA_GTX_1070EVGA_GTX_1070_FTWEVGA_GTX_1070_FTW_DT_GAMINGEVGA_GTX_1070_FTW_HYBRIDNVIDIA_GTX_1070_TIEVGA_GTX_1070_TI_FTW2NVIDIA_GTX_1080r?   r   r    r   r;   r/   rE   rI   r`   rp   ru   r{   r~   r   r   r   __classcell__rD   r      @@r   r0   r0      s     <IHJILHGJ	+-@A	57TU	24NO	24KL	+-@AH y    %83Xj%%% %r   r0   c                   s\  a a ] tR tRt oRt^t^t^t^t^t	^t
]t. R1Ot. ]]R3N]]R3N]]R3N]]R3N]]R3N]]R3N]]R3N]]R	3N]]R
3N]]R3N]]R3N]]R3N] ]!R3N] ]"R3N] ]#R3N] ]$R3N]%]&R3N]'](R3N])]*R3N]+],R3N]-].R3N]-]/R3N]-]0R3N]1]2R3N]3]4R3N]3]5R3N]6]7R3N]8]9R3N]8]:R3N]8];R3N]8]<R3N]8]=R3N]>]?R3N]>]@R3N]A]BR3N]A]CR 3N]D]ER!3N]F]GR"3N]H]IR#3N]J]KR$3NtLR%tM^tN]O ! R& R']P4      4       tQ]RR2V 3R( ll4       tSV 3R) ltTR3R* ltUR3R+ ltVR, tWR- tXR. tYR/ tZR0t[Vt\V ;t]# )4	RogTuringi8  zANVIDIA series 10 (Pascal) or 20 (Turing) graphics card from ASUS.zASUS Strix GTX 1050 OCzASUS Strix GTX 1050 Ti OCzASUS Strix GTX 1060 6GBzASUS Strix GTX 1060 OC 6GBzASUS Strix GTX 1070zASUS Strix GTX 1070 OCzASUS Strix GTX 1070 TizASUS Strix GTX 1070 Ti AdvancedzASUS Strix GTX 1080zASUS Strix GTX 1080 AdvancedzASUS Strix GTX 1080 OCzASUS Strix GTX 1080 TizASUS Strix GTX 1080 Ti OCzASUS Strix GTX 1650 Super OCzASUS Strix GTX 1660 Super OCzASUS Strix GTX 1660 Ti OCz&ASUS Strix RTX 2060 Super Evo AdvancedzASUS Strix RTX 2060 Superz"ASUS Strix RTX 2060 Super AdvancedzASUS Strix RTX 2060 Super OCzASUS Strix RTX 2060 Evo OCzASUS Strix RTX 2060 EvozASUS Strix RTX 2060 OCz"ASUS Strix RTX 2070 Super AdvancedzASUS Strix RTX 2070zASUS Strix RTX 2070 Super OCzASUS Strix RTX 2070 AdvancedzASUS Strix RTX 2070 OCz"ASUS Strix RTX 2080 Super AdvancedzASUS Strix RTX 2080 Super OCzASUS Strix RTX 2080 OCzASUS Strix RTX 2080 TizASUS Strix RTX 2080 Ti OCzASUS TUF RTX 3060 Ti OCi  c                   s*    ] tR tRtRtRtRtRtRtRt	R# )	RogTuring.Modeiy  r   Nr2   r4   )r6   r5   )i   r5   )i   r3   )
r   r   r   r   r7   r8   r:   ZFLASHr9   r   r   r   r   r;   r   y  s    	r   r;   c           	   +  s,  <"   R p	\         SV `  ! WW4VWg3/ VB p
V
 F  w  rpRp\        R/ VB '       dw   V P                   Fe  p^ p^ pVP	                  4         VP                  V^ 4      pVP                  V^!4      pTP                  4        T^,          T,          T	8X  g   Kc  Tp M$	  M!V P                  p\        P                  R4       Vf   K  V ! W\        VVR7      p\        P                  RV P                  W4       Vx  K  	  R#     L; i5i)i  Nz3unsafe features not enabled, using sentinel addressr<   z!%s identified: %s at address %02x)r!   )r=   r,   r   r   ZopenrR   Zclose_SENTINEL_ADDRESSr@   rA   ASUSr   )r   r!   r"   r#   r$   r%   r&   r'   r(   ZASUS_GPU_MAGIC_VALUErB   r)   r*   r+   Zselected_addressZval1Zval2rC   rD   s   &&&&&&&&,         r   rE   ZRogTuring.probe  s      &W&ug(/C;AC
 )3$F#.v.."~~GDDJJL$33GTB$33GTB KKMqy4'+??+2(  .  $'#8#8 ST+%&"24A3<<"6	9 )3s*   AD$D="D$)D;DDDc                rF   )rG   r!   Zexperimental_asus_gpuNrH   rK   rL   r   rI   ZRogTuring.__init__  rM   r   c                s   V'       g   . # \        V P                  / VB '       g=   \        P                  RV P                  RP                  V P                  4      4       . # V P                  P                  V P                  V P                  4      pV P                  P                  V P                  V P                  4      pV P                  P                  V P                  V P                  4      pV P                  P                  V P                  V P                  4      pYEu;8X  d   Tu;8X  d   ^ 8X  d   M M^ pV P                  V4      pRVR3.pVP                  ^ 8  d   VP                  RVR VR VR 2R34       V# rN   )r   rJ   r@   rO   r    rP   rQ   rR   rS   rT   rU   rV   rW   r;   r
   rX   )r   rY   r(   rZ   ZredZgreenZbluer[   r_   r   r`   ZRogTuring.get_status  s3    IT\\4V44OOI ,,chht||.DFI
 {{))$--Hkk((F**4==$//J{{))$--H $4$1$Dyy4$%!#MM7s3ic{4*$ErJKr   c                s   \        V P                  RR/VB  \        V4      p V P                  V,          p\        T4      TP                  8  d   \        T RTP                   R24      h\        T4      TP                  8  d0   \        P                  RTP                  4       TRTP                   pY P                  P                  8X  d   T P                  P                  T P                  T P                  T P                  P                  P                   4       T P                  P                  T P                  T P"                  ^ 4       T P                  P                  T P                  T P$                  ^ 4       T P                  P                  T P                  T P&                  ^ 4       MT P                  P                  T P                  T P                  TP                   4       T F  w  rgpT P                  P                  T P                  T P"                  T4       T P                  P                  T P                  T P$                  T4       T P                  P                  T P                  T P&                  T4       K  	  T'       d>   T P                  P                  T P                  T P(                  T P*                  4       R# R#   \         d    \        RT: 24      Rhi ; i)ax  Set the lighting mode, when applicable, color.

The table bellow summarizes the available channels, modes and their
associated number of required colors.

| Channel  | Mode      | Required colors |
| -------- | --------- | --------------- |
| led      | off       |               0 |
| led      | fixed     |               1 |
| led      | flash     |               1 |
| led      | breathing |               1 |
| led      | rainbow   |               0 |

The settings configured on the device are normally volatile, and are
cleared whenever the graphics card is powered down (OS and UEFI power
saving settings can affect when this happens).

It is possible to store them in non-volatile controller memory by
passing `non_volatile=True`.  But as this memory has some unknown yet
limited maximum number of write cycles, volatile settings are
preferable, if the use case allows for them.

ra   Trb   Nrc   rd   re   )r   rJ   rf   r;   rg   rh   ri   r
   r@   rA   r7   rQ   rj   rS   rT   r8   r   rU   rV   rW   
_REG_APPLY_ASUS_GPU_APPLY_VAL)	r   rm   rZ   rn   ro   r(   r\   r]   r^   s	   &&&&&,   r   rp   ZRogTuring.set_color  s   2 	dll9$9&9
 f	B99T?D v;---v_T5I5I4J'RSSv;---MM;T=Q=QR1T112F99== KK''t~~(,		(=(=?KK''t}}dKKK''tMKK''t~~tLKK''t~~tzzR!a++DMM4==!L++DMM4??AN++DMM4>>1M "
 KK''t(,(@(@B /  	B~dX67TA	Bs   K K/c                rq   rr   r   rs   rt   r   ru   ZRogTuring.initialize  rv   r   c                rw   rx   r   ry   rz   r   r{   ZRogTuring.set_speed_profile  r|   r   c                rw   rx   r   r}   rz   r   r~   ZRogTuring.set_fixed_speed  r|   r   c                rw   rx   r   r   r   r   r   ZRogTuring.set_screen  r|   r   r   )i)   i*   i`   r-   r   )^r   r   r   r   r.   rU   rV   rW   rT   r   Z	_SYNC_REGr   r   r   NVIDIA_GTX_1050ASUS_STRIX_GTX_1050_O2GNVIDIA_GTX_1050_TIASUS_STRIX_GTX_1050_TI_O4GASUS_STRIX_GTX_1050_TI_O4G_2NVIDIA_GTX_1060ASUS_STRIX_GTX_1060_6GASUS_STRIX_GTX_1060_O6Gr   ASUS_STRIX_GTX_1070ASUS_STRIX_GTX_1070_OCr   ASUS_STRIX_GTX_1070_TI_8GASUS_STRIX_GTX_1070_TI_A8Gr   ASUS_STRIX_GTX_1080ASUS_STRIX_GTX_1080_A8GASUS_STRIX_GTX_1080_O8GNVIDIA_GTX_1080_TIASUS_STRIX_GTX_1080_TIASUS_STRIX_GTX_1080_TI_11GASUS_STRIX_GTX_1080_TI_O11GASUS_STRIX_GTX_1080_TI_O11G_A02NVIDIA_GTX_1650SASUS_STRIX_GTX_1650S_OCNVIDIA_GTX_1660SASUS_STRIX_GTX_1660S_O6GNVIDIA_GTX_1660_TIASUS_STRIX_GTX_1660_TI_OCNVIDIA_RTX_2060SASUS_STRIX_RTX_2060S_A8G_EVONVIDIA_RTX_2060S_OCASUS_STRIX_RTX_2060S_8GASUS_STRIX_RTX_2060S_A8GASUS_STRIX_RTX_2060S_O8GNVIDIA_RTX_2060_TU104ASUS_STRIX_RTX_2060_O6G_EVONVIDIA_RTX_2060_TU106ASUS_STRIX_RTX_2060_EVOASUS_STRIX_RTX_2060_O6GNVIDIA_RTX_2070SASUS_STRIX_RTX_2070S_A8G_86FFNVIDIA_RTX_2070S_OCASUS_STRIX_RTX_2070S_8G_8707ASUS_STRIX_RTX_2070S_A8GASUS_STRIX_RTX_2070S_A8G_8706ASUS_STRIX_RTX_2070S_O8GASUS_STRIX_RTX_2070S_O8G_8729NVIDIA_RTX_2070_OCASUS_STRIX_RTX_2070_A8GASUS_STRIX_RTX_2070_O8GNVIDIA_RTX_2080SASUS_STRIX_RTX_2080S_A8GASUS_STRIX_RTX_2080S_O8GNVIDIA_RTX_2080_REV_AASUS_STRIX_RTX_2080_O8GNVIDIA_RTX_2080_TIASUS_STRIX_RTX_2080_TI_11GNVIDIA_RTX_2080_TI_REV_AASUS_STRIX_RTX_2080_TI_OCNVIDIA_RTX_3060_TI_LHRASUS_TUF_RTX_3060_TI_O8G_OCr   r   r   r    r   r;   r/   rE   rI   r`   rp   ru   r{   r~   r   r   r   r   r   r   r   r   r   8  s    KHJIIJIG#J0 
13KL0 
79TU0 
9;VW0 
02KL0 
13OP0 
-/DE0 
02JK0 
68PQ0  
79Z[!0" 
-/DE#0$ 
13QR%0& 
13KL'0( 
35MN)0* 
79QR+0, 
8:UV-0. 
<>YZ/00 
24RS102 
35ST304 
68ST506 
79ab708 
57RS90: 
68\];0< 
68VW=0> 
 ;=YZ?0@ 
 79RSA0B 
 79QRC0D 
8:^_E0F 
:<QRG0H 
68\]I0J 
;=abK0L 
68VWM0N 
;=[\O0P 
46TUQ0R 
46NOS0T 
35YZU0V 
35STW0X 
 79QRY0Z 
79QR[0\ 
"#<>YZ]0^ 
 !<>WX_0Hd y   $ $L%#J;Bz%%% %r   r   )jr.   ZloggingZenumr    Zliquidctl.driver.smbusr   Zliquidctl.errorr   Zliquidctl.utilr   r   Z	getLoggerr   r@   r   r   r   r   r   r   r   r   ZNVIDIA_GTX_1650r   ZNVIDIA_GTX_1660r   r   r   r   r   r   ZNVIDIA_RTX_2070r   r   r   ZNVIDIA_RTX_2080r   r   r   r   ZNVIDIA_RTX_3050ZNVIDIA_RTX_3060ZNVIDIA_RTX_3060_GA104ZNVIDIA_RTX_3060_LHRZNVIDIA_RTX_3060_TIr   ZNVIDIA_RTX_3070ZNVIDIA_RTX_3070_LHRZNVIDIA_RTX_3070_TIZNVIDIA_RTX_3080ZNVIDIA_RTX_3080_12G_LHRZNVIDIA_RTX_3080_LHRZNVIDIA_RTX_3080_TIZNVIDIA_RTX_3090r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r   r   r   r   r?   r   r   r   r0   r   r   r   r   <module>r      sw     . 0 9


H
% 
                !              # %      " #       # $ "(   ! "   ! % !     $ % !  &  & !  &     ! !   # " $   $ !    &' & &- -DQ%. Q%hg%- g%r   