Lines Matching +full:power +full:- +full:button
2 * button.c - ACPI Button Driver
21 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
39 #define ACPI_BUTTON_CLASS "button"
45 #define ACPI_BUTTON_SUBCLASS_POWER "power"
47 #define ACPI_BUTTON_DEVICE_NAME_POWER "Power Button"
52 #define ACPI_BUTTON_DEVICE_NAME_SLEEP "Sleep Button"
61 ACPI_MODULE_NAME("button");
64 MODULE_DESCRIPTION("ACPI Button Driver");
83 .name = "button",
105 /* --------------------------------------------------------------------------
107 -------------------------------------------------------------------------- */
114 struct acpi_device *device = seq->private; in acpi_button_state_seq_show()
118 status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state); in acpi_button_state_seq_show()
127 return single_open(file, acpi_button_state_seq_show, PDE(inode)->data); in acpi_button_state_open_fs()
140 struct acpi_button *button = acpi_driver_data(device); in acpi_button_add_fs() local
145 if (button->type != ACPI_BUTTON_TYPE_LID) in acpi_button_add_fs()
150 return -EEXIST; in acpi_button_add_fs()
153 /* create /proc/acpi/button */ in acpi_button_add_fs()
156 return -ENODEV; in acpi_button_add_fs()
158 /* create /proc/acpi/button/lid */ in acpi_button_add_fs()
161 ret = -ENODEV; in acpi_button_add_fs()
165 /* create /proc/acpi/button/lid/LID/ */ in acpi_button_add_fs()
168 ret = -ENODEV; in acpi_button_add_fs()
172 /* create /proc/acpi/button/lid/LID/state */ in acpi_button_add_fs()
177 ret = -ENODEV; in acpi_button_add_fs()
197 struct acpi_button *button = acpi_driver_data(device); in acpi_button_remove_fs() local
199 if (button->type != ACPI_BUTTON_TYPE_LID) in acpi_button_remove_fs()
213 /* --------------------------------------------------------------------------
215 -------------------------------------------------------------------------- */
234 return -ENODEV; in acpi_lid_open()
236 status = acpi_evaluate_integer(lid_device->handle, "_LID", NULL, in acpi_lid_open()
239 return -ENODEV; in acpi_lid_open()
247 struct acpi_button *button = acpi_driver_data(device); in acpi_lid_send_state() local
252 status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state); in acpi_lid_send_state()
254 return -ENODEV; in acpi_lid_send_state()
257 input_report_switch(button->input, SW_LID, !state); in acpi_lid_send_state()
258 input_sync(button->input); in acpi_lid_send_state()
261 pm_wakeup_event(&device->dev, 0); in acpi_lid_send_state()
279 struct acpi_button *button = acpi_driver_data(device); in acpi_button_notify() local
287 input = button->input; in acpi_button_notify()
288 if (button->type == ACPI_BUTTON_TYPE_LID) { in acpi_button_notify()
291 int keycode = test_bit(KEY_SLEEP, input->keybit) ? in acpi_button_notify()
299 pm_wakeup_event(&device->dev, 0); in acpi_button_notify()
302 acpi_bus_generate_proc_event(device, event, ++button->pushed); in acpi_button_notify()
313 struct acpi_button *button = acpi_driver_data(device); in acpi_button_resume() local
315 if (button->type == ACPI_BUTTON_TYPE_LID) in acpi_button_resume()
322 struct acpi_button *button; in acpi_button_add() local
328 button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL); in acpi_button_add()
329 if (!button) in acpi_button_add()
330 return -ENOMEM; in acpi_button_add()
332 device->driver_data = button; in acpi_button_add()
334 button->input = input = input_allocate_device(); in acpi_button_add()
336 error = -ENOMEM; in acpi_button_add()
345 button->type = ACPI_BUTTON_TYPE_POWER; in acpi_button_add()
351 button->type = ACPI_BUTTON_TYPE_SLEEP; in acpi_button_add()
356 button->type = ACPI_BUTTON_TYPE_LID; in acpi_button_add()
362 error = -ENODEV; in acpi_button_add()
370 snprintf(button->phys, sizeof(button->phys), "%s/button/input0", hid); in acpi_button_add()
372 input->name = name; in acpi_button_add()
373 input->phys = button->phys; in acpi_button_add()
374 input->id.bustype = BUS_HOST; in acpi_button_add()
375 input->id.product = button->type; in acpi_button_add()
376 input->dev.parent = &device->dev; in acpi_button_add()
378 switch (button->type) { in acpi_button_add()
380 input->evbit[0] = BIT_MASK(EV_KEY); in acpi_button_add()
381 set_bit(KEY_POWER, input->keybit); in acpi_button_add()
385 input->evbit[0] = BIT_MASK(EV_KEY); in acpi_button_add()
386 set_bit(KEY_SLEEP, input->keybit); in acpi_button_add()
390 input->evbit[0] = BIT_MASK(EV_SW); in acpi_button_add()
391 set_bit(SW_LID, input->swbit); in acpi_button_add()
398 if (button->type == ACPI_BUTTON_TYPE_LID) { in acpi_button_add()
407 if (device->wakeup.flags.valid) { in acpi_button_add()
408 /* Button's GPE is run-wake GPE */ in acpi_button_add()
409 acpi_enable_gpe(device->wakeup.gpe_device, in acpi_button_add()
410 device->wakeup.gpe_number); in acpi_button_add()
411 if (!device_may_wakeup(&device->dev)) { in acpi_button_add()
412 device_set_wakeup_enable(&device->dev, true); in acpi_button_add()
413 button->wakeup_enabled = true; in acpi_button_add()
425 kfree(button); in acpi_button_add()
431 struct acpi_button *button = acpi_driver_data(device); in acpi_button_remove() local
433 if (device->wakeup.flags.valid) { in acpi_button_remove()
434 acpi_disable_gpe(device->wakeup.gpe_device, in acpi_button_remove()
435 device->wakeup.gpe_number); in acpi_button_remove()
436 if (button->wakeup_enabled) in acpi_button_remove()
437 device_set_wakeup_enable(&device->dev, false); in acpi_button_remove()
441 input_unregister_device(button->input); in acpi_button_remove()
442 kfree(button); in acpi_button_remove()