ハラダです。 (2009年03月21日 00:05), HARADA Kazutaka さんは書きました: > 調べてみたところ、以下の URI の patch が backport 用に使える > んじゃない?みたいな記述を見かけたのですが、Seed の 2.6.27 には > 使えるんでしょうか?(良くわからないもので…) すいません。これ↑けっこう寝ぼけたことを書いていたようで、 kernel-2.6-vl.spec を読んだら、 # panasonic-laptop Patch4010: linux-2.6-panasonic-laptop-0.94.patch として既に去年の12月に patch を追加してもらえてたんですね。 失礼しました。 で、latest stable の 2.6.29.4 の panasonic-laptop.c と 上記 patch を見比べてみたところ微妙に修正が入っている ようだったので、これとの差分を取って Patch4011 として 追加して kernel をビルドしてみたところ、問題なく modprobe で module を load でき、また Fn + F1/F2 でのバックライトの 輝度変更や Fn + F5/F6 でのボリューム変更が機能することが 確認できました。 patch を添付しておきますので、問題なければ次の kernel の 更新時に反映してもらえると助かります。 # さっき気づいたのですが、ボリューム変更の方は何故か半分より # 下に下がらないようです。うーん…。 -- -------------------------------------- Kazutaka HARADA e-mail:kazutaka@xxxxxxxxxxxxxxxx --------------------------------------
--- linux-2.6.27/drivers/misc/panasonic-laptop.c.orig 2009-05-22 14:35:54.000000000 +0900 +++ linux-2.6.27/drivers/misc/panasonic-laptop.c 2009-03-24 08:12:14.000000000 +0900 @@ -116,7 +116,6 @@ * */ -#include <linux/version.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> @@ -242,8 +241,6 @@ }; acpi_status status = AE_OK; - ACPI_FUNCTION_TRACE("acpi_pcc_write_sset"); - status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SSET, ¶ms, NULL); @@ -252,11 +249,9 @@ static inline int acpi_pcc_get_sqty(struct acpi_device *device) { - unsigned long s; + unsigned long long s; acpi_status status; - ACPI_FUNCTION_TRACE("acpi_pcc_get_sqty"); - status = acpi_evaluate_integer(device->handle, METHOD_HKEY_SQTY, NULL, &s); if (ACPI_SUCCESS(status)) @@ -275,8 +270,6 @@ union acpi_object *hkey = NULL; int i; - ACPI_FUNCTION_TRACE("acpi_pcc_retrieve_biosdata"); - status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SINF, 0, &buffer); if (ACPI_FAILURE(status)) { @@ -500,9 +493,7 @@ struct input_dev *hotk_input_dev = pcc->input_dev; int rc; int key_code, hkey_num; - unsigned long result; - - ACPI_FUNCTION_TRACE("acpi_pcc_generate_keyinput"); + unsigned long long result; rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY, NULL, &result); @@ -516,7 +507,7 @@ hkey_num = result & 0xf; - if (hkey_num < 0 || hkey_num > ARRAY_SIZE(pcc->keymap)) { + if (hkey_num < 0 || hkey_num >= ARRAY_SIZE(pcc->keymap)) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "hotkey number out of range: %d\n", hkey_num)); @@ -539,8 +530,6 @@ { struct pcc_acpi *pcc = (struct pcc_acpi *) data; - ACPI_FUNCTION_TRACE("acpi_pcc_hotkey_notify"); - switch (event) { case HKEY_NOTIFY: acpi_pcc_generate_keyinput(pcc); @@ -555,8 +544,6 @@ { int i, rc; - ACPI_FUNCTION_TRACE("acpi_pcc_init_input"); - pcc->input_dev = input_allocate_device(); if (!pcc->input_dev) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, @@ -598,8 +585,6 @@ struct pcc_acpi *pcc = acpi_driver_data(device); acpi_status status = AE_OK; - ACPI_FUNCTION_TRACE("acpi_pcc_hotkey_resume"); - if (device == NULL || pcc == NULL) return -EINVAL; @@ -617,8 +602,6 @@ struct pcc_acpi *pcc; int num_sifr, result; - ACPI_FUNCTION_TRACE("acpi_pcc_hotkey_add"); - if (!device) return -EINVAL; @@ -645,7 +628,7 @@ pcc->device = device; pcc->handle = device->handle; pcc->num_sifr = num_sifr; - acpi_driver_data(device) = pcc; + device->driver_data = pcc; strcpy(acpi_device_name(device), ACPI_PCC_DEVICE_NAME); strcpy(acpi_device_class(device), ACPI_PCC_CLASS); @@ -715,8 +698,6 @@ { int result = 0; - ACPI_FUNCTION_TRACE("acpi_pcc_init"); - if (acpi_disabled) return -ENODEV; @@ -734,8 +715,6 @@ { struct pcc_acpi *pcc = acpi_driver_data(device); - ACPI_FUNCTION_TRACE("acpi_pcc_hotkey_remove"); - if (!device || !pcc) return -EINVAL; @@ -758,8 +737,6 @@ static void __exit acpi_pcc_exit(void) { - ACPI_FUNCTION_TRACE("acpi_pcc_exit"); - acpi_bus_unregister_driver(&acpi_pcc_driver); }