Package: hal
Version: 0.5.7-2
Severity: wishlist
Tags: patch
spicctrl is the tool to use /dev/sonypi to get informations and set some
values on the controller in Sony Vaio laptops (and probably desktops as
well). It is useful to set the LCD panel brightness without needing the
recent sony-acpi patch, which don't work on all Vaio models, anyway.
Therefore, it'd be useful if hal would implement abstraction for using
this tool.
Attached here is a patch stolen from
https://bugs.freedesktop.org/show_bug.cgi?id=6729 and adapted so that it
applies flawlessly on 0.5.7.
Please apply this patch, it's useful to Vaio users.
Note the original patch fixes another issue about the maximum value
accepted by the script. I didn't include this one.
Cheers
Mike
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.16-2-686
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Versions of packages hal depends on:
ii adduser 3.87 Add and remove users and groups
ii dbus 0.62-3 simple interprocess messaging syst
ii libc6 2.3.6-15 GNU C Library: Shared libraries
ii libdbus-1-2 0.62-3 simple interprocess messaging syst
ii libdbus-glib-1-2 0.62-3 simple interprocess messaging syst
ii libexpat1 1.95.8-3.2 XML parsing C library - runtime li
ii libglib2.0-0 2.10.3-1 The GLib library of C routines
ii libhal1 0.5.7-2.1 Hardware Abstraction Layer - share
ii libusb-0.1-4 2:0.1.12-2 userspace USB programming library
ii lsb-base 3.1-10 Linux Standard Base 3.1 init scrip
ii pciutils 1:2.2.1-2 Linux PCI Utilities
ii udev 0.093-1 /dev/ and hotplug management daemo
ii usbutils 0.72-4 USB console utilities
hal recommends no packages.
-- no debconf information
--- hal-0.5.7/hald/linux2/acpi.c 26 Apr 2006 21:51:20 -0000
+++ hal-0.5.7/hald/linux2/acpi.c 27 Apr 2006 21:25:53 -0000
@@ -48,6 +48,7 @@
ACPI_TYPE_PANASONIC_DISPLAY,
ACPI_TYPE_SONY_DISPLAY,
ACPI_TYPE_OMNIBOOK_DISPLAY,
+ ACPI_TYPE_SONYPI_DISPLAY,
ACPI_TYPE_BUTTON
};
@@ -766,6 +767,10 @@
type = "omnibook";
desc = "Omnibook LCD Panel";
br_levels = 8;
+ } else if (acpi_type == ACPI_TYPE_SONYPI_DISPLAY) {
+ type = "sonypi";
+ desc = "Sony LCD Panel";
+ br_levels = 256;
} else {
type = "unknown";
desc = "Unknown LCD Panel";
@@ -919,6 +924,49 @@
acpi_synthesize_item (path, method);
}
+static int sonypi_irq_list[] = { 11, 10, 9, 6, 5 };
+
+/** Synthesizes a sonypi object.
+ */
+static void
+acpi_synthesize_sonypi_display (void)
+{
+ HotplugEvent *hotplug_event;
+ gboolean found = FALSE;
+ guint i;
+ gchar *path;
+
+ HAL_INFO (("Processing sonypi display"));
+
+ /* Check that we don't support brightness change through ACPI,
+ * for type3 VAIOs */
+ if (g_file_test ("/proc/acpi/sony/brightness", G_FILE_TEST_EXISTS))
+ return;
+
+ /* Find the sonypi device, this doesn't work
+ * if the sonypi device doesn't have an IRQ, sorry */
+ for (i = 0; i < G_N_ELEMENTS (sonypi_irq_list); i++) {
+ path = g_strdup_printf ("/proc/irq/%d/sonypi", sonypi_irq_list[i]);
+ if (g_file_test (path, G_FILE_TEST_IS_DIR)) {
+ found = TRUE;
+ break;
+ }
+ g_free (path);
+ }
+
+ if (!found)
+ return;
+
+ hotplug_event = g_new0 (HotplugEvent, 1);
+ hotplug_event->action = HOTPLUG_ACTION_ADD;
+ hotplug_event->type = HOTPLUG_EVENT_ACPI;
+ g_strlcpy (hotplug_event->acpi.acpi_path, path, sizeof (hotplug_event->acpi.acpi_path));
+ hotplug_event->acpi.acpi_type = ACPI_TYPE_SONYPI_DISPLAY;
+ hotplug_event_enqueue (hotplug_event);
+
+ g_free (path);
+}
+
/** Scan the data structures exported by the kernel and add hotplug
* events for adding ACPI objects.
*
@@ -981,8 +1029,10 @@
acpi_synthesize_display ("acpi/pcc", "brightness", ACPI_TYPE_PANASONIC_DISPLAY);
acpi_synthesize_display ("acpi/ibm", "brightness", ACPI_TYPE_IBM_DISPLAY);
acpi_synthesize_display ("acpi/sony", "brightness", ACPI_TYPE_SONY_DISPLAY);
- /* onmibook does not live under acpi GNOME#331458 */
+ /* omnibook does not live under acpi GNOME#331458 */
acpi_synthesize_display ("omnibook", "lcd", ACPI_TYPE_OMNIBOOK_DISPLAY);
+ /* sonypi doesn't have an acpi object fd.o#6729 */
+ acpi_synthesize_sonypi_display ();
/* setup timer for things that we need to poll */
g_timeout_add (ACPI_POLL_INTERVAL,
@@ -1105,6 +1155,14 @@
.remove = acpi_generic_remove
};
+static ACPIDevHandler acpidev_handler_laptop_panel_sonypi = {
+ .acpi_type = ACPI_TYPE_SONYPI_DISPLAY,
+ .add = acpi_generic_add,
+ .compute_udi = acpi_generic_compute_udi,
+ .refresh = laptop_panel_refresh,
+ .remove = acpi_generic_remove
+};
+
static ACPIDevHandler acpidev_handler_button = {
.acpi_type = ACPI_TYPE_BUTTON,
.add = acpi_generic_add,
@@ -1133,6 +1191,7 @@
&acpidev_handler_laptop_panel_asus,
&acpidev_handler_laptop_panel_sony,
&acpidev_handler_laptop_panel_omnibook,
+ &acpidev_handler_laptop_panel_sonypi,
NULL
};
--- hal-0.5.7/tools/hal-system-lcd-get-brightness 18 Feb 2006 23:11:23 -0000 1.7
+++ hal-0.5.7/tools/hal-system-lcd-get-brightness 26 Apr 2006 21:51:20 -0000
@@ -58,6 +58,17 @@ elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_ME
# cat /proc/omnibook/lcd
# LCD brightness: 7
value="`cat $HAL_PROP_LINUX_ACPI_PATH | awk '{print $3;}'`"
+elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" == "sonypi" ]; then
+ # spicctrl -B
+ # 70
+ # 0..255
+ value="`/usr/bin/spicctrl -B`"
+ RETVAL=$?
+ if [ $RETVAL != 0 ]; then
+ echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
+ exit 1;
+ fi
+ exit ${value}
else
echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
echo "No ACPI method found" >&2
--- hal-0.5.7/tools/hal-system-lcd-set-brightness 10 Mar 2006 19:45:27 -0000 1.8
+++ hal-0.5.7/tools/hal-system-lcd-set-brightness 26 Apr 2006 21:51:20 -0000
@@ -27,9 +27,10 @@ if [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METH
exit 0
fi
-# Check for file existance and that it's writable
-if [ ! -w "$HAL_PROP_LINUX_ACPI_PATH" ]; then
+# Check for file existance and that it's writable and that we don't have a sonypi
+# access method
+if [ ! -w "$HAL_PROP_LINUX_ACPI_PATH" -a "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" != "sonypi" ]; then
echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
echo "$1 not writable!" >&2
exit 1
fi
@@ -64,6 +65,9 @@ elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_ME
# echo "{0..7}" > /proc/omnibook/lcd
# http://bugzilla.gnome.org/show_bug.cgi?id=331458
echo "$value" > $HAL_PROP_LINUX_ACPI_PATH
+elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" == "sonypi" ]; then
+ # spicctrl -b "{0..255}"
+ /usr/bin/spicctrl -b ${value}
else
echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
echo "No ACPI method found" >&2