OK6410下的SPI驱动是可以用的,但是飞凌把它作为其它用途了,我们修改一些代码才能在/dev目录下创建SPI的设备节点文件
Step1:打开arch/arm/mach_s3c64XX/mach_mini6410.c
增加如下代码:
点击(此处)折叠或打开
- static void cs_set_level(unsigned line_id, int lvl) {
- gpio_direction_output(line_id, lvl);
- }
- static struct s3c64xx_spi_csinfo s3c64xx_spi0_csinfo = {
- .fb_delay=100,
- .line=S3C64XX_GPC(3),
- .set_level=cs_set_level,
- };
- static struct spi_board_info s3c6410_spi0_board[] = {
- [0] = {
- .modalias = "spidev",
- .bus_num= 0,
- .chip_select= 0,
- .irq =IRQ_SPI0,
- .max_speed_hz= 500*1000,
- .mode=SPI_MODE_0,
- .controller_data=&s3c64xx_spi0_csinfo,
- },
- };
- static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {
- .fb_delay=100,
- .line=S3C64XX_GPC(7),
- .set_level=cs_set_level,
- };
- static struct spi_board_info s3c6410_spi1_board[] = {
- [0] = {
- .modalias = "spidev",
- .bus_num= 1,
- .chip_select= 0,
- .irq = IRQ_SPI1,
- .max_speed_hz = 500*1000,
- .mode=SPI_MODE_0,
- .controller_data=&s3c64xx_spi1_csinfo,
- },
- };
在函数 XX6410_machine_init中添加:
点击(此处)折叠或打开
- spi_register_board_info(s3c6410_spi0_board, ARRAY_SIZE(s3c6410_spi0_board));
- spi_register_board_info(s3c6410_spi1_board, ARRAY_SIZE(s3c6410_spi1_board));
Step3:测试spi口
使用Linux源码包下的linux/Documentation/spi/spidev_test.c 程序来检测
# gedit spidev_test.c 修改 spidev1.1 为 spidev1.0
# arm-linux-gcc spidev_test.c -o spi
将编译好的程序下到板子上