static bool asus_resume(device_t self PMF_FN_ARGS) { asus_softc_t *sc = device_private(self); ACPI_STATUS rv; ACPI_OBJECT param; ACPI_OBJECT_LIST params; ACPI_BUFFER ret; asus_init(self); /* restore previous display brightness */ ret.Pointer = NULL; ret.Length = ACPI_ALLOCATE_BUFFER; param.Type = ACPI_TYPE_INTEGER; param.Integer.Value = sc->sc_brightness; params.Pointer = ¶m; params.Count = 1; rv = AcpiEvaluateObject(sc->sc_node->ad_handle, ASUS_METHOD_PBLS, ¶ms, &ret); if (ACPI_FAILURE(rv)) aprint_error_dev(self, "couldn't evaluate PBLS: %s\n", AcpiFormatException(rv)); return true; }
static void asus_attach(device_t parent, device_t self, void *opaque) { asus_softc_t *sc = device_private(self); struct acpi_attach_args *aa = opaque; ACPI_STATUS rv; sc->sc_node = aa->aa_node; sc->sc_dev = self; aprint_naive("\n"); aprint_normal("\n"); asus_init(self); sc->sc_smpsw_valid = true; sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE].smpsw_name = PSWITCH_HK_DISPLAY_CYCLE; sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE].smpsw_type = PSWITCH_TYPE_HOTKEY; if (sysmon_pswitch_register(&sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE])) { aprint_error_dev(self, "couldn't register with sysmon\n"); sc->sc_smpsw_valid = false; } rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle, ACPI_ALL_NOTIFY, asus_notify_handler, sc); if (ACPI_FAILURE(rv)) aprint_error_dev(self, "couldn't install notify handler: %s\n", AcpiFormatException(rv)); if (!pmf_device_register(self, asus_suspend, asus_resume)) aprint_error_dev(self, "couldn't establish power handler\n"); }
static void asus_attach(device_t parent, device_t self, void *opaque) { struct asus_softc *sc = device_private(self); struct acpi_attach_args *aa = opaque; sc->sc_dev = self; sc->sc_node = aa->aa_node; aprint_naive("\n"); aprint_normal("\n"); asus_init(self); asus_sysctl_setup(sc); sc->sc_smpsw_valid = true; sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE].smpsw_name = PSWITCH_HK_DISPLAY_CYCLE; sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE].smpsw_type = PSWITCH_TYPE_HOTKEY; if (sysmon_pswitch_register(&sc->sc_smpsw[ASUS_PSW_DISPLAY_CYCLE])) { aprint_error_dev(self, "couldn't register with sysmon\n"); sc->sc_smpsw_valid = false; } if (asus_get_fan_speed(sc, NULL) == false) goto out; sc->sc_sme = sysmon_envsys_create(); strcpy(sc->sc_sensor[ASUS_SENSOR_FAN].desc, "fan"); sc->sc_sensor[ASUS_SENSOR_FAN].units = ENVSYS_SFANRPM; sc->sc_sensor[ASUS_SENSOR_FAN].state = ENVSYS_SINVALID; sysmon_envsys_sensor_attach(sc->sc_sme, &sc->sc_sensor[ASUS_SENSOR_FAN]); sc->sc_sme->sme_name = device_xname(self); sc->sc_sme->sme_cookie = sc; sc->sc_sme->sme_refresh = asus_sensors_refresh; sc->sc_sme->sme_flags = SME_POLL_ONLY; if (sysmon_envsys_register(sc->sc_sme)) { aprint_error_dev(self, "couldn't register with envsys\n"); sysmon_envsys_destroy(sc->sc_sme); sc->sc_sme = NULL; } out: (void)pmf_device_register(self, asus_suspend, asus_resume); (void)acpi_register_notify(sc->sc_node, asus_notify_handler); }
static bool asus_resume(device_t self, const pmf_qual_t *qual) { struct asus_softc *sc = device_private(self); ACPI_STATUS rv; asus_init(self); if (sc->sc_brightness < 0) return true; /* Restore previous display brightness. */ rv = acpi_eval_set_integer(sc->sc_node->ad_handle, ASUS_METHOD_PBLS, sc->sc_brightness); if (ACPI_FAILURE(rv)) aprint_error_dev(self, "couldn't evaluate PBLS: %s\n", AcpiFormatException(rv)); return true; }