各位朋友最近在做spi接口的wifi驱动的移植;
平台环境:
目标板内核:linux-2.6.32.2
硬件平台:mini2440
在注册wifi驱动时首先要保证spi接口能用,我的wifi驱动直接调用的是内核的spi接口,但是在注册spi接口初始化的时候出现问题,
从机wifi模块收到的数据都是0xff,正常的应该是0x58才对,现在不知道问题是什么引起的。应为我的2440没有现成spi驱动,所以需要
先移植spi驱动到2440上,下面是我将移植的过程贴一下请大侠们看看是不是移植出现了问题:
首先修改arch/arm/mach-s3c2440/mach-mini2440.c文件
在include头文件代码行之后增加如下代码
#include <linux/spi/spi.h>
#include <mach/spi.h>
static struct spi_board_info s3c2410_spi0_board[] = {
[0] = {
.modalias = "rsi_wlan", //这是我驱动的名字
.bus_num = 0,
.chip_select = 0,
.irq = IRQ_SPI0, //这个地方我不是很清楚是怎么确定使用哪个中断号的,我给设置成spi0的中断号,有朋友知道的可以说说
.max_speed_hz = 500*1000,
},
};
static struct s3c2410_spi_info s3c2410_spi0_platdata = {
.pin_cs = S3C2410_GPG(2),
.num_cs = 1, //这个看了好多资料都是设为1,但都没有说为什么,难道是cs的个数
.bus_num = 0,
};
然后在函数__initmini2440_machine_init的开头增加下列代码
s3c_device_spi0.dev.platform_data=&s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board,ARRAY_SIZE(s3c2410_spi0_board));
在mini2440_devices数组的最后中添加
&s3c_device_spi0,
以上是参考网上的一篇文章修改的,现在也能正确的调用驱动的probe函数。文章里还做了下面的修改,我不知道为什么所以下面的修改我还没有做。下面我也把
这部分贴出来了,有理解的朋友可以指点一下。谢谢
2.修改drivers/spi/spi_s3c24xx.c文件
在文件开头增加下列代码
#include <mach/regs-gpio.h>
在s3c24xx_spi_initialsetup函数结尾增加下列代码
// add by shiguang
s3c2410_gpio_cfgpin(hw->pdata->pin_cs,S3C2410_GPIO_OUTPUT); //这个地方好像是配置片选作为输出的
下面三行就不明白是什么意思,而且0x8B、0x8C、0x8D这是代表什么
s3c2410_gpio_cfgpin(0x8B, S3C2410_GPIO_SFN2);
s3c2410_gpio_cfgpin(0x8C, S3C2410_GPIO_SFN2);
s3c2410_gpio_cfgpin(0x8D, S3C2410_GPIO_SFN2);
我的spi移植就改了这些,不知道做过的朋友是否能给点建议呢。是否修改的有问题呢
http://blog.csdn.net/forch/article/details/6837268这是参考的文章