+
     Gi  c                   s    ^RI Ht ^RI5 ^ RIt^ RIHt ^ RIt^ RIt^ RI	t	]P                  P                  4       t ! R R]P                  4      tR# )i   )base)Z*N)commandsc                   s   a a ] tR t^t oRtV 3R ltR tR t]R 4       t	R t
R tR tRR	 lt]! R
RR7      R 4       t]! R
4      RR l4       t]! RRR7      R 4       t]! R4      RR l4       tRtVtV ;t# )VideoPluginaJ  
Sets various power saving features on video cards.
Radeon cards are supported.
The powersave level can be specified
by using the [option]`radeon_powersave` option. Supported values are:

* `default`
* `auto`
* `low`
* `mid`
* `high`
* `dynpm`
* `dpm-battery`
* `dpm-balanced`
* `dpm-perfomance`

For additional detail, see
link:https://www.x.org/wiki/RadeonFeature/#kmspowermanagementoptions[KMS Power Management Options].

NOTE: This plug-in is experimental and the option might change in future releases.

.Setting powersave level for the Radeon video card to high
====
----
[video]
radeon_powersave=high
----
====

Mobile hardware with amdgpu driven eDP panels can be configured
with the [option]`panel_power_savings` option.
This accepts a value range from 0 to 4, where 4 is the highest power savings
but will trade off color accuracy.
c                s0   < \         \        V `
  ! V/ VB  R # N)Zsuperr   __init__)selfZargsZkwargs	__class__s   &*,?/usr/lib/python3.14/site-packages/tuned/plugins/plugin_video.pyr   ZVideoPlugin.__init__/   s    T#T4V4    c                s   R V n         \        4       V n        \        4       V n        V P                  P                  R4      P                  R4       Fy  pV P                  VP                  4      pV FU  p\        P                  P                  W#,          4      '       g   K0  V P                  P                  VP                  4       KW  	  K{  	  \        4       V n        R# )Tdrmzcard*-*N)_devices_supportedZset_free_devices_assigned_devices_hardware_inventoryZget_devicesZmatch_sys_name_filesZsys_nameospathexistsZaddr   _cmd)r   deviceZattrsZattrs   &   r   _init_devicesZVideoPlugin._init_devices2   s     $u$5$ ((44U;JJ9Uf;;v'5t	ww~~ek""	FOO,  V
 j$)r   c                sb    V Uu. uF  q P                   P                  R V4      NK   	  up# u upi )r	   )r   Z
get_device)r   ZdevicesZxs   && r   _get_device_objectsZVideoPlugin._get_device_objects?   s+    AH	IA
"
"
-
-eQ
7	II	Is   $,c                s    R RRR/# )radeon_powersaveNpanel_power_savings )r   s   &r   _get_config_optionsZVideoPlugin._get_config_optionsB   s     $
 r   c                s"    R Vn         RVn        R# )FTN)Z_has_dynamic_tuningZ_has_static_tuningr   instance   &&r   _instance_initZVideoPlugin._instance_initI   s    !&( $(r   c                s    R # r   r   r   r   r   _instance_cleanupZVideoPlugin._instance_cleanupM   s    r   c           	     sN    R RV,          RRV,          RRV,          RRV,          /# )methodz%/sys/class/drm/%s/device/power_methodprofilez&/sys/class/drm/%s/device/power_profile	dpm_statez(/sys/class/drm/%s/device/power_dpm_stater   z,/sys/class/drm/%s/amdgpu/panel_power_savingsr   )r   r   r   r   r   ZVideoPlugin._filesP   s8    5>6?:VCH6Q	
 r   c                s   \         P                  P                  V P                  V4      R,          4      '       g   R# \	        V P                  W4      4      pWR8X  d    \        P                  RV: RV: 24       V# \        P                  V: RV: 24       V'       g9   V P                  P                  V P                  V4      R,          V4      '       d   V# R# )zTApply the target value to the panel_power_savings file if it doesn't already have itr   Nzpanel_power_savings for z	 already z panel_power_savings -> )
r   r   r   r   int_get_panel_power_savingslogZinfor   write_to_file)r   r   Ztargetr   simZcurrents   &&&&& r   apply_panel_power_saving_targetZ+VideoPlugin.apply_panel_power_saving_targetX   s     
F+,AB	C	C
 --f?@'88/5v> = ((VV<=DII##DKK$78M$NPVWW
=	r   r   T)Z
per_devicec                s   V P                  V4      p\        \        P                  ! R RV4      4      P	                  4       p\
        P                  P                  VR,          4      '       g'   V'       g   \        P                  RV,          4       R# V EF  pVR9   d   V'       g   V P                  P                  VR,          RV'       d   \        P                  .MRR7      '       dK   V P                  P                  VR,          TV'       d   \        P                  .MRR7      '       d   Vu # K  K  K  VR8X  dT   V'       gJ   V P                  P                  VR,          RV'       d   \        P                  .MRR7      '       d    R# K  K  VR9   d   V'       g   V\        R	4      R p	V P                  P                  VR,          R
V'       d   \        P                  .MRR7      '       dL   V P                  P                  VR,          T	V'       d   \        P                  .MRR7      '       d   Vu # EK  EK  EK  V'       g   \        P                  R4        R# 	  R# )z#(\s*:\s*)|(\s+)|(\s*;\s*)|(\s*,\s*)Z r   )radeon_powersave is not supported on '%s'Nr    FZno_errordynpmdpm-dpmr!   z$Invalid option for radeon_powersave.)ZdefaultZautoZlowZmidZhigh)zdpm-batteryzdpm-balancedzdpm-performance)r   ZstrreZsubZsplitr   r   r   r$   debugr   r%   errnoZENOENTZlenwarning)
r   valuer   r   r&   remove	sys_filesZvaZvZstates
   &&&&&&    r   _set_radeon_powersaveZ!VideoPlugin._set_radeon_powersavem   s   kk&!)
2668#uEFLLN"		(+	,	,
II9FBCa44		 	 8!4i#)%,,u 
! 
6 
6
iii	2A$*5<<.  7 77
6  	
W		 	 8!4g#)%,,u 
! 
6 
6
6 
 	
??s6{|_U		 	 8!4e#)%,,u 
! 
6 
6
iii4e$*5<<.  7 77
6  [[783 4 
r   c                s   V P                  V4      p\        P                  P                  VR ,          4      '       g   \        P                  RV,          4       R# V P                  P                  VR ,          VR7      P                  4       pVR8X  d1   V P                  P                  VR,          4      P                  4       # VR8X  d   V# VR8X  d8   RV P                  P                  VR,          4      P                  4       ,           # R# )	r   r(   Nr)   r    r*   r,   r+   r!   )	r   r   r   r   r$   r.   r   	read_filestrip)r   r   r   ignore_missingr3   r   s   &&&&  r   _get_radeon_powersaveZ!VideoPlugin._get_radeon_powersave   s    kk&!)		(+	,	,9986AB
99y2^LRRT&y
))

i	2
3
9
9
;;
=
499&&y'=>DDF
FF
r   r   c                s     \        V^
4      pT\	        ^ ^4      9   d   T P                  Y!Y44      # \        P                  RT,          4       R#   \         d!    \        P                  RT,          4        R# i ; i)z!Set the panel_power_savings valuez(Invalid value %s for panel_power_savingsN)r"   Z
ValueErrorr$   r0   Zranger'   )r   r1   r   r   r&   r2   s   &&&&&&r   _set_panel_power_savingsZ$VideoPlugin._set_panel_power_savings   sp    ub>5 eAqk

.
.vh
LL;;9EAB	 
 ;;9EAB
s   A 'A:9A:c                s8   \         P                  P                  V P                  V4      R,          4      '       g   \        P                  RV,          4       R# V P                  V4      R,          pV P                  P                  WCR7      P                  4       # )z)Get the current panel_power_savings valuer   z,panel_power_savings is not supported on '%s'Nr)   )	r   r   r   r   r$   r.   r   r5   r6   )r   r   r   r7   Zfnames   &&&& r   r#   Z$VideoPlugin._get_panel_power_savings   sp     
F+,AB	C	C99;fDE

++f
3
4%			U		<	B	B	DDr   )r   r   r
   r   )F)Z__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__r   r   r   Zclassmethodr   r   r   r   r'   Zcommand_setr4   Zcommand_getr8   r9   r#   Z__static_attributes__Z__classdictcell__Z__classcell__)r   Z__classdict__s   @@r   r   r      s     !F5J  %*  T2! 3!F  ! " #5 6 #$E %E Er   r   )Z r    Z
decoratorsZ
tuned.logsZtunedZtuned.utils.commandsr   r   r/   r-   ZlogsZgetr$   ZPluginr   r   r   r   <module>r:      s>       ) 	  	jjnnkE$++ kEr   