Subject: [PATCH] [acpi ec] Add basic init - Add e_uid, e_gpe_bit, and e_global_lock fields to struct acpi_ec - Get those values from namespace in ec_init() - Call that from ec_add() Signed-off-by: Patrick Mochel --- drivers/acpi/drivers/ec/device.c | 32 ++++++++++++++++++++++++++++++++ drivers/acpi/drivers/ec/driver.c | 10 ++++++++-- drivers/acpi/drivers/ec/ec.h | 5 +++++ 3 files changed, 45 insertions(+), 2 deletions(-) applies-to: 97f8ab424ade1a64c008c11432835a328e7eb902 634a02684317ffb74c2f427cb1eda1c198ca31e5 diff --git a/drivers/acpi/drivers/ec/device.c b/drivers/acpi/drivers/ec/device.c index b1a3a02..732f751 100644 --- a/drivers/acpi/drivers/ec/device.c +++ b/drivers/acpi/drivers/ec/device.c @@ -13,3 +13,35 @@ #include "ec.h" + +static unsigned long get_int(struct acpi_ec * ae, char * obj, unsigned long * val) +{ + acpi_status status; + + status = acpi_evaluate_integer(ae->e_ad->acpi_device->handle, obj, + NULL, val); + return ACPI_SUCCESS(status) ? 0 : -ENODEV; +} + +int ec_init(struct acpi_ec * ae) +{ + int ret; + + /* + * Use the global lock for all EC transactions? + */ + get_int(ae, "_GLK", &ae->e_global_lock); + + get_int(ae, "_UID", &ae->e_uid); + + /* + * Get GPE bit assignment (EC events). + * + * TODO: Add support for _GPE returning a package + */ + ret = get_int(ae, "_GPE", &ae->e_gpe_bit); + if (ret) + err("Obtaining GPE bit assignment"); + + return ret; +} diff --git a/drivers/acpi/drivers/ec/driver.c b/drivers/acpi/drivers/ec/driver.c index 62d35c9..d1c5b8a 100644 --- a/drivers/acpi/drivers/ec/driver.c +++ b/drivers/acpi/drivers/ec/driver.c @@ -26,10 +26,16 @@ static int ec_add(struct acpi_dev * ad) ae->e_ad = ad; + ret = ec_init(ae); + if (ret) { + kfree(ae); + return ret; + } + dev_set_drvdata(&ad->dev, ae); - printk(KERN_INFO PREFIX "ec [%s]\n", - acpi_dev_bid(ad)); + printk(KERN_INFO PREFIX "ec [%s] (gpe %ld)\n", + acpi_dev_bid(ad), ae->e_gpe_bit); return ret; } diff --git a/drivers/acpi/drivers/ec/ec.h b/drivers/acpi/drivers/ec/ec.h index 5ae6d73..247fa98 100644 --- a/drivers/acpi/drivers/ec/ec.h +++ b/drivers/acpi/drivers/ec/ec.h @@ -17,5 +17,10 @@ ACPI_MODULE_NAME("acpi_ec"); struct acpi_ec { struct acpi_dev * e_ad; + + unsigned long e_uid; + unsigned long e_gpe_bit; + unsigned long e_global_lock; }; +extern int ec_init(struct acpi_ec * ec); --- 0.99.9.GIT