Subject: [PATCH] [acpi button] Add new-school base for button driver - Create drivers/acpi/drivers/button/ - Declare and register driver for Power, Sleep and Lid devices - Declare empty event, proc, and sysfs interfaces Signed-off-by: Patrick Mochel --- drivers/acpi/drivers/button/Kconfig | 11 ++++++ drivers/acpi/drivers/button/Makefile | 6 +++ drivers/acpi/drivers/button/button.h | 24 ++++++++++++++ drivers/acpi/drivers/button/driver.c | 59 ++++++++++++++++++++++++++++++++++ drivers/acpi/drivers/button/event.c | 12 +++++++ drivers/acpi/drivers/button/proc.c | 12 +++++++ drivers/acpi/drivers/button/sysfs.c | 12 +++++++ 7 files changed, 136 insertions(+), 0 deletions(-) create mode 100644 drivers/acpi/drivers/button/Kconfig create mode 100644 drivers/acpi/drivers/button/Makefile create mode 100644 drivers/acpi/drivers/button/button.h create mode 100644 drivers/acpi/drivers/button/driver.c create mode 100644 drivers/acpi/drivers/button/event.c create mode 100644 drivers/acpi/drivers/button/proc.c create mode 100644 drivers/acpi/drivers/button/sysfs.c applies-to: 1ddd95791e18232633b36b568eb788cae22914f8 31e9ea715780fe146aedf469966e1153e89761a9 diff --git a/drivers/acpi/drivers/button/Kconfig b/drivers/acpi/drivers/button/Kconfig new file mode 100644 index 0000000..a0a992d --- /dev/null +++ b/drivers/acpi/drivers/button/Kconfig @@ -0,0 +1,11 @@ + +config ACPI_BUTTON + tristate "Button" + depends ACPI_DM + default y + help + This driver handles events on the power, sleep and lid buttons. + A daemon reads /proc/acpi/event and perform user-defined actions + such as shutting down the system. This is necessary for + software controlled poweroff. + diff --git a/drivers/acpi/drivers/button/Makefile b/drivers/acpi/drivers/button/Makefile new file mode 100644 index 0000000..89aecbf --- /dev/null +++ b/drivers/acpi/drivers/button/Makefile @@ -0,0 +1,6 @@ +obj-$(CONFIG_ACPI_BUTTON) += button.o + +button-objs := driver.o event.o + +button-$(CONFIG_ACPI_DM_PROC) += proc.o +button-$(CONFIG_ACPI_DM_SYSFS) += sysfs.o diff --git a/drivers/acpi/drivers/button/button.h b/drivers/acpi/drivers/button/button.h new file mode 100644 index 0000000..a35d51c --- /dev/null +++ b/drivers/acpi/drivers/button/button.h @@ -0,0 +1,24 @@ + + +#ifdef DEBUG +#define dbg(fmt, ...) printk(PREFIX "button: " fmt "\n", ## __VA_ARGS__) +#else +#define dbg(fmt, ...) +#endif + +#define err(fmt, ...) printk(KERN_ERR PREFIX "button: " fmt "\n", ## __VA_ARGS__) + +#define _COMPONENT ACPI_BUTTON_COMPONENT +ACPI_MODULE_NAME("acpi_button"); + +#define ACPI_BUTTON_HID_POWER "PNP0C0C" +#define ACPI_BUTTON_HID_SLEEP "PNP0C0E" +#define ACPI_BUTTON_HID_LID "PNP0C0D" + + +struct acpi_button { + const char * b_type; + struct acpi_dev * b_ad; + struct acpi_button_ops * b_ops; + unsigned int b_count; +}; diff --git a/drivers/acpi/drivers/button/driver.c b/drivers/acpi/drivers/button/driver.c new file mode 100644 index 0000000..dc891d6 --- /dev/null +++ b/drivers/acpi/drivers/button/driver.c @@ -0,0 +1,59 @@ +/* + * drivers/acpi/drivers/button.c - ACPI Button Driver + * + * Copyright (C) 2006 Patrick Mochel + * + * Based on drivers/acpi/button.c, which was + * + * acpi_button.c - ACPI Button Driver ($Revision: 30 $) + * + * Copyright (C) 2001, 2002 Andy Grover + * Copyright (C) 2001, 2002 Paul Diefenbaugh + * + * This file is released under the GPLv2. + * + */ + +#include +#include "button.h" + + + +static int button_add(struct acpi_dev * ad) +{ + struct acpi_button * ab; + + ab = kzalloc(sizeof(struct acpi_button), GFP_KERNEL); + if (!ab) + return -ENOMEM; + + ab->b_ad = ad; + + dev_set_drvdata(&ad->dev, ab); + + return 0; +} + +static int button_remove(struct acpi_dev * ad) +{ + struct acpi_button * ab = dev_get_drvdata(&ad->dev); + + dev_set_drvdata(&ad->dev, NULL); + kfree(ab); + return 0; +} + +acpi_no_start(button); +acpi_no_stop(button); +acpi_no_shutdown(button); +acpi_no_suspend(button); +acpi_no_resume(button); + +declare_acpi_driver(button, + ACPI_BUTTON_HID_POWER, + ACPI_BUTTON_HID_SLEEP, + ACPI_BUTTON_HID_LID); + +MODULE_AUTHOR("Patrick Mochel"); +MODULE_DESCRIPTION("ACPI Button Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/acpi/drivers/button/event.c b/drivers/acpi/drivers/button/event.c new file mode 100644 index 0000000..13139a9 --- /dev/null +++ b/drivers/acpi/drivers/button/event.c @@ -0,0 +1,12 @@ +/** + * drivers/acpi/drivers/button/event.c - button event interface + * + * Copyright (C) 2005 Patrick Mochel + * + * This file is released under the GPLv2 + */ + +#include +#include "button.h" + +acpi_device_event_none(button); diff --git a/drivers/acpi/drivers/button/proc.c b/drivers/acpi/drivers/button/proc.c new file mode 100644 index 0000000..6bdc7b6 --- /dev/null +++ b/drivers/acpi/drivers/button/proc.c @@ -0,0 +1,12 @@ +/** + * drivers/acpi/drivers/button/proc.c - button proc FS interface + * + * Copyright (C) 2005 Patrick Mochel + * + * This file is released under the GPLv2 + */ + +#include +#include "button.h" + +acpi_driver_proc_none(button); diff --git a/drivers/acpi/drivers/button/sysfs.c b/drivers/acpi/drivers/button/sysfs.c new file mode 100644 index 0000000..16ed528 --- /dev/null +++ b/drivers/acpi/drivers/button/sysfs.c @@ -0,0 +1,12 @@ +/** + * drivers/acpi/drivers/button/sysfs.c - button sysfs interface + * + * Copyright (C) 2005 Patrick Mochel + * + * This file is released under the GPLv2 + */ + +#include +#include "button.h" + +acpi_driver_sysfs_none(button); --- 0.99.9.GIT