devinfo_acpi.c revision 076d97abc78bcba2f2216859fe2c6913cc7aff32
7b840e52d558c34b70cbcde044d8d79852d169d2phitran/***************************************************************************
7b840e52d558c34b70cbcde044d8d79852d169d2phitran * devinfo_acpi : acpi devices
d2ec54f7875f7e05edd56195adbeb593c947763fphitran * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
7b840e52d558c34b70cbcde044d8d79852d169d2phitran * Use is subject to license terms.
7b840e52d558c34b70cbcde044d8d79852d169d2phitran * Licensed under the Academic Free License version 2.1
7b840e52d558c34b70cbcde044d8d79852d169d2phitran **************************************************************************/
7b840e52d558c34b70cbcde044d8d79852d169d2phitran#include "../osspec.h"
7b840e52d558c34b70cbcde044d8d79852d169d2phitran#include "../logger.h"
7b840e52d558c34b70cbcde044d8d79852d169d2phitran#include "../hald.h"
7b840e52d558c34b70cbcde044d8d79852d169d2phitran#include "../util.h"
7b840e52d558c34b70cbcde044d8d79852d169d2phitranstatic HalDevice *devinfo_acpi_add(HalDevice *, di_node_t, char *, char *);
d2ec54f7875f7e05edd56195adbeb593c947763fphitranstatic HalDevice *devinfo_power_button_add(HalDevice *parent, di_node_t node,
d2ec54f7875f7e05edd56195adbeb593c947763fphitranstatic void devinfo_battery_rescan_probing_done(HalDevice *d, guint32 exit_type,
d2ec54f7875f7e05edd56195adbeb593c947763fphitran gint return_code, char **error, gpointer userdata1, gpointer userdata2);
7b840e52d558c34b70cbcde044d8d79852d169d2phitrandevinfo_acpi_add(HalDevice *parent, di_node_t node, char *devfs_path,
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if ((driver_name == NULL) || (strcmp(driver_name, "acpi_drv") != 0)) {
7b840e52d558c34b70cbcde044d8d79852d169d2phitran if ((computer = hal_device_store_find(hald_get_gdl(),
7b840e52d558c34b70cbcde044d8d79852d169d2phitran devinfo_set_default_properties(d, parent, node, devfs_path);
59066d3c46818a42896f327c78359187de55245bphitran devinfo_add_enqueue(d, devfs_path, &devinfo_acpi_handler);
7b840e52d558c34b70cbcde044d8d79852d169d2phitran if ((devlink_hdl = di_devlink_init(NULL, 0)) == NULL) {
7b840e52d558c34b70cbcde044d8d79852d169d2phitran return (d);
7b840e52d558c34b70cbcde044d8d79852d169d2phitran while ((minor = di_minor_next(node, minor)) != DI_MINOR_NIL) {
7b840e52d558c34b70cbcde044d8d79852d169d2phitran ((minor_path = di_devfs_minor_path(minor)) == NULL)) {
7b840e52d558c34b70cbcde044d8d79852d169d2phitran if (hal_device_store_match_key_value_string(hald_get_gdl(),
7b840e52d558c34b70cbcde044d8d79852d169d2phitran return (d);
59066d3c46818a42896f327c78359187de55245bphitrandevinfo_acpi_add_minor(HalDevice *parent, di_node_t node, char *minor_path,
7b840e52d558c34b70cbcde044d8d79852d169d2phitran devinfo_set_default_properties(d, parent, node, minor_path);
59066d3c46818a42896f327c78359187de55245bphitran devinfo_add_enqueue(d, minor_path, &devinfo_acpi_handler);
d2ec54f7875f7e05edd56195adbeb593c947763fphitrandevinfo_power_button_add(HalDevice *parent, di_node_t node, char *devfs_path,
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if ((driver_name == NULL) || (strcmp(driver_name, "power") != 0)) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran devinfo_set_default_properties(d, parent, node, devfs_path);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran hal_device_property_set_bool(d, "button.has_state", FALSE);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran hal_device_property_set_string(d, "info.category", "input");
d2ec54f7875f7e05edd56195adbeb593c947763fphitran hal_device_property_set_string(d, "button.type", "power");
d2ec54f7875f7e05edd56195adbeb593c947763fphitran hal_device_property_set_string(d, "info.product", "Power Button");
d2ec54f7875f7e05edd56195adbeb593c947763fphitran devinfo_add_enqueue(d, devfs_path, &devinfo_power_button_handler);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (d);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran d = hal_device_store_match_key_value_string (store, "button.type",
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if (d != NULL) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran device_send_signal_condition(d, "ButtonPressed", "power");
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if (strcmp(subclass, ESC_PWRCTL_BRIGHTNESS_UP) == 0) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran "brightness-up");
d2ec54f7875f7e05edd56195adbeb593c947763fphitran "brightness-down");
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Trandevinfo_battery_rescan(char *parent_devfs_path, gchar *udi)
7b840e52d558c34b70cbcde044d8d79852d169d2phitran if (d == NULL) {
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Tran DEVINFO_PROBE_ACPI_TIMEOUT, devinfo_battery_rescan_probing_done,
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if (d == NULL) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran hal_device_property_set_bool(d, "button.state.value",
d2ec54f7875f7e05edd56195adbeb593c947763fphitran device_send_signal_condition(d, "ButtonPressed", "lid");
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Tran if (hal_device_property_get_bool(d, "button.workaround")) {
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Tran /* Set lid state to open for workaround */
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Tran hal_device_property_set_bool(d, "button.state.value", FALSE);
7b840e52d558c34b70cbcde044d8d79852d169d2phitrandevinfo_battery_rescan_probing_done(HalDevice *d, guint32 exit_type,
7b840e52d558c34b70cbcde044d8d79852d169d2phitran gint return_code, char **error, gpointer userdata1, gpointer userdata2)
7b840e52d558c34b70cbcde044d8d79852d169d2phitran /* hald_runner_run() requires this function since cannot pass NULL */
076d97abc78bcba2f2216859fe2c6913cc7aff32Phi Tran *timeout = DEVINFO_PROBE_ACPI_TIMEOUT; /* 30 second timeout */
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return ("hald-probe-acpi");