static void acpi_thermal_notify(struct acpi_device *device, u32 event) { struct acpi_thermal *tz = acpi_driver_data(device); if (!tz) return; switch (event) { case ACPI_THERMAL_NOTIFY_TEMPERATURE: acpi_thermal_check(tz); break; case ACPI_THERMAL_NOTIFY_THRESHOLDS: acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_THRESHOLDS); acpi_thermal_check(tz); acpi_bus_generate_proc_event(device, event, 0); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; case ACPI_THERMAL_NOTIFY_DEVICES: acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_DEVICES); acpi_thermal_check(tz); acpi_bus_generate_proc_event(device, event, 0); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Unsupported event [0x%x]\n", event)); break; } }
/* * ACPI driver */ static void asus_acpi_notify(struct acpi_device *device, u32 event) { struct asus_laptop *asus = acpi_driver_data(device); u16 count; /* * We need to tell the backlight device when the backlight power is * switched */ if (event == ATKD_LCD_ON) lcd_blank(asus, FB_BLANK_UNBLANK); else if (event == ATKD_LCD_OFF) lcd_blank(asus, FB_BLANK_POWERDOWN); /* TODO Find a better way to handle events count. */ count = asus->event_count[event % 128]++; acpi_bus_generate_proc_event(asus->device, event, count); acpi_bus_generate_netlink_event(asus->device->pnp.device_class, dev_name(&asus->device->dev), event, count); /* Brightness events are special */ if (event >= ATKD_BR_MIN && event <= ATKD_BR_MAX) { /* Ignore them completely if the acpi video driver is used */ if (asus->backlight_device != NULL) { /* Update the backlight device. */ asus_backlight_notify(asus); } return ; } asus_input_notify(asus, event); }
static void asus_acpi_notify(struct acpi_device *device, u32 event) { struct asus_laptop *asus = acpi_driver_data(device); u16 count; count = asus->event_count[event % 128]++; acpi_bus_generate_proc_event(asus->device, event, count); acpi_bus_generate_netlink_event(asus->device->pnp.device_class, dev_name(&asus->device->dev), event, count); if (event >= ATKD_BR_MIN && event <= ATKD_BR_MAX) { if (asus->backlight_device != NULL) { asus_backlight_notify(asus); } return ; } if (asus->pega_accel_poll && event == 0xEA) { kobject_uevent(&asus->pega_accel_poll->input->dev.kobj, KOBJ_CHANGE); return ; } asus_input_notify(asus, event); }
/* * ACPI driver */ static void asus_acpi_notify(struct acpi_device *device, u32 event) { struct asus_laptop *asus = acpi_driver_data(device); u16 count; /* TODO Find a better way to handle events count. */ count = asus->event_count[event % 128]++; acpi_bus_generate_proc_event(asus->device, event, count); acpi_bus_generate_netlink_event(asus->device->pnp.device_class, dev_name(&asus->device->dev), event, count); /* Brightness events are special */ if (event >= ATKD_BR_MIN && event <= ATKD_BR_MAX) { /* Ignore them completely if the acpi video driver is used */ if (asus->backlight_device != NULL) { /* Update the backlight device. */ asus_backlight_notify(asus); } return ; } /* Accelerometer "coarse orientation change" event */ if (asus->pega_accel_poll && event == 0xEA) { kobject_uevent(&asus->pega_accel_poll->input->dev.kobj, KOBJ_CHANGE); return ; } asus_input_notify(asus, event); }
static void acpi_processor_notify(acpi_handle handle, u32 event, void *data) { struct acpi_device *device = data; struct acpi_processor *pr; int saved; if (device->handle != handle) return; pr = acpi_driver_data(device); if (!pr) return; switch (event) { case ACPI_PROCESSOR_NOTIFY_PERFORMANCE: saved = pr->performance_platform_limit; acpi_processor_ppc_has_changed(pr, 1); if (saved == pr->performance_platform_limit) break; acpi_bus_generate_proc_event(device, event, pr->performance_platform_limit); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, pr->performance_platform_limit); break; case ACPI_PROCESSOR_NOTIFY_POWER: acpi_processor_cst_has_changed(pr); acpi_bus_generate_proc_event(device, event, 0); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; case ACPI_PROCESSOR_NOTIFY_THROTTLING: acpi_processor_tstate_has_changed(pr); acpi_bus_generate_proc_event(device, event, 0); acpi_bus_generate_netlink_event(device->pnp.device_class, dev_name(&device->dev), event, 0); break; default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Unsupported event [0x%x]\n", event)); break; } return; }
static int thermal_notify(struct thermal_zone_device *thermal, int trip, enum thermal_trip_type trip_type) { u8 type = 0; struct acpi_thermal *tz = thermal->devdata; if (trip_type == THERMAL_TRIP_CRITICAL) type = ACPI_THERMAL_NOTIFY_CRITICAL; else if (trip_type == THERMAL_TRIP_HOT) type = ACPI_THERMAL_NOTIFY_HOT; else return 0; acpi_bus_generate_proc_event(tz->device, type, 1); acpi_bus_generate_netlink_event(tz->device->pnp.device_class, dev_name(&tz->device->dev), type, 1); if (trip_type == THERMAL_TRIP_CRITICAL && nocrt) return 1; return 0; }