pcc-acpiが使えなくなったと思ったら。¶
Let’s noteのファンクションキーを使えるようにするための、pcc-acpiだが、先日、kernel 2.6.22.6にした時、makeは普通にできるのに、kernel moduleロードで失敗する、という問題にぶち当たっていた。一昨日、kernel 2.6.22.9にしたので、再度やってみたら、今度はmakeでwarningが出まくった。
~/pcc-acpi-0.8.4$ make
make -C /lib/modules/2.6.22.9/build SUBDIRS=/home/hoge/pcc-acpi-0.8.4 modules
make[1]: ディレクトリ `/home/hoge/kernel/linux-2.6.22' に入ります
CC [M] /home/hoge/pcc-acpi-0.8.4/pcc_acpi.o
/home/hoge/pcc-acpi-0.8.4/pcc_acpi.c:163: warning: initialization from incompatible pointer type
/home/hoge/pcc-acpi-0.8.4/pcc_acpi.c: In function ‘acpi_pcc_retrieve_biosdata’:
/home/hoge/pcc-acpi-0.8.4/pcc_acpi.c:261: warning: implicit declaration of function ‘acpi_os_free’
Building modules, stage 2.
MODPOST 1 modules
WARNING: /home/hoge/pcc-acpi-0.8.4/pcc_acpi.o(.text+0x73c): Section mismatch: reference to .init.text: (between 'acpi_pcc_hotkey_add' and 'acpi_pcc_dc_brightness_open_fs')
WARNING: /home/hoge/pcc-acpi-0.8.4/pcc_acpi.o(.text+0x751): Section mismatch: reference to .init.text: (between 'acpi_pcc_hotkey_add' and 'acpi_pcc_dc_brightness_open_fs')
WARNING: /home/hoge/pcc-acpi-0.8.4/pcc_acpi.o(.text+0x4ae): Section mismatch: reference to .exit.text: (between 'acpi_pcc_hotkey_remove' and 'acpi_pcc_hotkey_notify')
WARNING: /home/hoge/pcc-acpi-0.8.4/pcc_acpi.o(.text+0x4bf): Section mismatch: reference to .exit.text: (between 'acpi_pcc_hotkey_remove' and 'acpi_pcc_hotkey_notify')
WARNING: "acpi_os_free" [/home/hoge/pcc-acpi-0.8.4/pcc_acpi.ko] undefined!
CC /home/hoge/pcc-acpi-0.8.4/pcc_acpi.mod.o
LD [M] /home/hoge/pcc-acpi-0.8.4/pcc_acpi.ko
make[1]: ディレクトリ `/home/hoge/kernel/linux-2.6.22' から出ます
pcc_acpi.cの163行目と261行目ですか。
163 .resume = acpi_pcc_hotkey_resume,
261 acpi_os_free(buffer.pointer);
まぁ、間違いなくkernelを上げたことによるのが原因だろうと思って、久々に pcc-acpiの開発元のページ を見てみた。最新版は0.8.4じゃなくて、0.9が出てました…。で、やってみたら、あー、無事できました。
0.8.4と0.9のpcc-acpi.cをdiffってみたらやっぱり。
$ diff -c pcc-acpi-0.8.4/pcc_acpi.c pcc-acpi-0.9/pcc_acpi.c
*** pcc-acpi-0.8.4/pcc_acpi.c 2006-05-30 00:17:10.000000000 +0900
--- pcc-acpi-0.9/pcc_acpi.c 2006-11-21 16:38:41.000000000 +0900
***************
~中略~
*** 142,165 ****
ENV_STATEs: Normal temp=0x01, High temp=0x81, N/A=0x00
*/
enum SINF_BITS { SINF_NUM_BATTERIES = 0,
! SINF_LCD_TYPE, SINF_AC_MAX_BRIGHT,
! SINF_AC_MIN_BRIGHT, SINF_AC_CUR_BRIGHT, SINF_DC_MAX_BRIGHT,
! SINF_DC_MIN_BRIGHT, SINF_DC_CUR_BRIGHT, SINF_MUTE,
! SINF_RESERVED, SINF_ENV_STATE,
SINF_STICKY_KEY = 0x80,
};
! static int __devinit acpi_pcc_hotkey_add (struct acpi_device *device);
! static int __devexit acpi_pcc_hotkey_remove (struct acpi_device *device, int type);
static int acpi_pcc_hotkey_resume(struct acpi_device *device, int state);
static struct acpi_driver acpi_pcc_driver = {
.name = ACPI_PCC_DRIVER_NAME,
.class = ACPI_PCC_CLASS,
.ids = HKEY_HID,
.ops = {
.add = acpi_pcc_hotkey_add,
! .remove = __devexit_p(acpi_pcc_hotkey_remove),
.resume = acpi_pcc_hotkey_resume,
},
};
~中略~
*** 258,264 ****
sinf[hkey->package.count] = -1;
end:
! acpi_os_free(buffer.pointer);
return_VALUE(status == AE_OK);
}
~以下略~
Mainlineにマージしてほしいなぁ…。