在移植mini2440的驅動到2.6.31的時候,編譯提示S3C2410_GPB5、S3C2410_GPB5_OUTPUT等類似的定義缺失。遂在內核中相關的部分arch/arm/mach-2410/include/mach中的頭文件尋覓了一番,果然沒有這些定義。而在2.6.29中是有這些定義的。
仔細看了一下,發現原來是新版本中采用了新的方式實現這兩類定義。
1、引用端口的定義,舊版本直接通過S3C2410_GPmn來定義端口GPIOm的第n個引腳,比如GOIOB的第5個引腳引用為S3C2410_GPB5。在新版本中改為采用S3C2410_GPm(n)的方式,比如GPIOB的第5個引腳就改為S3C2410_GPB(5)。這裡的S3C2410_GPm(n)函數在arch/arm/march-2410/include/mach/gpio-nrs.h中定義,共有S3C2410_GPA()~S3C2410_GPH()八組。
2、端口功能配置,比如端口的復用功能、輸出或輸入。在舊版本中采用的是"S3C2410_GPB_功能"的方式定義,比如S3C2410_GPB5_OUTP,直接把功能加在後面。而新版本中采用了一個宏函數S3C2410_gpio_cfgpin(端口引用, 功能),比如S3C2410_gpio_cfgpin(S3C2410_GPB(5),S3C2410_GPIO_OUTPUT)。關於端口功能的定義可以在arch/arm/march-2410/include/mach/regs-gpio.h中找到,復用功能的定義沒有變化,增加了輸入輸出的定義S3C2410_GPIO_INPUT、S3C2410_GPIO_OUTPUT。以前的直接用宏定義配置,現在變成了需要用函數S3C2410_gpio_cfgpin來實現。這個函數的原型參見arch/arm/march-2410/include/mach/gpio-fns.h。