ハラダです。
(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);
}