HAL

Comment 93 for bug 277589

Revision history for this message
Alex (alex-khv) wrote : Re: sony brighness on a geforce series older than 8 (nvclock works fine)

@Steve,
You are absolutely right on all your points.
I have 2 related to the bug udi:

1) Nvidia card pci
udi = '/org/freedesktop/Hal/devices/pci_10de_1d8'
  info.linux.driver = 'nvidia' (string)
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_27a1' (string)
  info.product = 'G72M [GeForce Go 7400]' (string)
  info.subsystem = 'pci' (string)
  info.udi = '/org/freedesktop/Hal/devices/pci_10de_1d8' (string)
  info.vendor = 'nVidia Corporation' (string)
  linux.hotplug_type = 2 (0x2) (int)
  linux.subsystem = 'pci' (string)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0' (string)
  pci.device_class = 3 (0x3) (int)
  pci.device_protocol = 0 (0x0) (int)
  pci.device_subclass = 0 (0x0) (int)
  pci.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0' (string)
  pci.product = 'G72M [GeForce Go 7400]' (string)
  pci.product_id = 472 (0x1d8) (int)
  pci.subsys_product_id = 33263 (0x81ef) (int)
  pci.subsys_vendor = 'Sony Corporation' (string)
  pci.subsys_vendor_id = 4173 (0x104d) (int)
  pci.vendor = 'nVidia Corporation' (string)
  pci.vendor_id = 4318 (0x10de) (int)

2) the backlight
udi = '/org/freedesktop/Hal/devices/computer_backlight'
  info.capabilities = {'laptop_panel'} (string list)
  info.category = 'laptop_panel' (string)
  info.interfaces = {'org.freedesktop.Hal.Device.LaptopPanel'} (string list)
  info.parent = '/org/freedesktop/Hal/devices/computer' (string)
  info.product = 'Generic Backlight Device' (string)
  info.subsystem = 'backlight' (string)
  info.udi = '/org/freedesktop/Hal/devices/computer_backlight' (string)
  laptop_panel.access_method = 'sony-nvidia' (string)
  laptop_panel.num_levels = 18 (0x12) (int)
  linux.hotplug_type = 2 (0x2) (int)
  linux.subsystem = 'backlight' (string)
  org.freedesktop.Hal.Device.LaptopPanel.method_argnames = {'brightness_value', ''} (string list)
  org.freedesktop.Hal.Device.LaptopPanel.method_execpaths = {'hal-system-lcd-set-brightness', 'hal-system-lcd-get-brightness'} (string list)
  org.freedesktop.Hal.Device.LaptopPanel.method_names = {'SetBrightness', 'GetBrightness'} (string list)
  org.freedesktop.Hal.Device.LaptopPanel.method_signatures = {'i', ''} (string list)

The first one (nvidia pci) is used in 10-sony-laptop-brightness.fdi to match the video card by its primary_video.product.
The second one (the backlight) is used in 10-laptop-panel-mgmt-policy.fdi to add necessary config.
In the latter fdi the following matching rules are used:

<match key="info.category" string="laptop_panel">
<match key="laptop_panel.access_method" compare_ne="custom">
<match key="linux.sysfs_path" exists="false">

According to the rules it should match the second udi (the backlight),and as the udi does not contain "linux.sysfs_path" then necessary attributes should be added. But on my (and most likely benste's) config it does not. May be there is a bug in the process of rules being applied? But if I change the last matching rule to

<match key="linux.sysfs_path" exists="true">

it works!

Why do we need to check if "linux.sysfs_path" exists to apply the config? Can we check for "laptop_panel.access_method"=sony-nvidia, as we make this assingment in 10-sony-laptop-brightness.fdi?

I guess the rule should look like this (I am not an expert, but the complete beginner):

<match key="laptop_panel.access_method" string="sony-nvidia">

Your thoughts?

P.S.
I've just checked the above rule. It does not work. But the following
<match key="laptop_panel.access_method" exists="true">
works!