Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314653
  • 博文数量: 63
  • 博客积分: 2018
  • 博客等级: 大尉
  • 技术积分: 694
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-23 16:34
文章存档

2010年(63)

我的朋友

分类: LINUX

2010-04-17 10:31:36

我们的SEP4020 spi总线驱动在Linux-2.6.27内核中实现,内核里的测试程序spidev_test.c(位于Linux/documentation/spi)经交叉编译(交叉编译的操作:进入到Linux/documentation/spi 目录下[root@localhost spi]#arm-linux-gcc-I/linux-2.6.27/include spidev_test.c)后生成a.out可执行程序,测试显示数据能够正确传输。

以下是是具体的步骤:

 

  spi总线驱动需要处理以下的文件:

1spi_sep4020.c(位于linux/driver/spi目录下)

   sep4020 spi驱动的核心,并非核心层的核心,我们的spi驱动的具体实现就依靠它了。

2regs-spi.h(位于linux/include/asm/arch-sep4020目录下)

   里面针对sep4020的spi定义了相应的处理宏,调试阶段也可以直接操作寄存器。

3spi.h(位于linux/ arch/arm/mach-sep4020/include/mach/spi.h) 是里面定义了sep4020_spi_info结构体。

44020.c(位于linux/ arch/arm/mach-sep4020目录下),里面要注册spi platform,并有spi一些信息。

5clock.c(位于linux/ arch/arm/mach-sep4020目录下),里面需要增加spi模块的时钟支持。

6mm.c(位于linux/ arch/arm/mach-sep4020目录下) ,用静态地址映射。

7hardware.h(位于linux/ arch/arm/mach-sep4020/include/mach),里面是4020的许多信息了,这里已经设好了,到0718需要设置的。

 

 

第一步:把spi_sep4020.cregs-spi.hspi.h 放到对应的文件夹下 。

 

第二步:添加spi总线驱动到内核 。

进入到linux/driver/spi目录下,打开makefile kconfig文件,

kconfig(第167行)中添加如下内容:

config SPI_SEP4020

      tristate "Prochip SEP4020 series SPI"

  depends on ARCH_SEP4020 && EXPERIMENTAL

select SPI_BITBANG

  help

    SPI driver for Prochip SEP4020 series ARM SoCs

makefile(第29行)添加如下内容:

obj-$(CONFIG_SPI_SEP4020)         += spi_sep4020.o

进入终端,

[root@localhost ~]# cd /linux-2.6.27

[root@localhost linux-2.6.27]# make menuconfig

进入Device Drivers  --->  SPI support  ---> 

spi support 编进内核(y, [*] SPI support,并进入spi support

-> Device Drivers

--- SPI support                                                 

    [*]   Debug support for SPI drivers                             

          *** SPI Master Controller Drivers ***                     

    -*-   Bitbanging SPI master                                     

    <*>   Prochip SEP4020 series SPI                                 

            *** SPI Protocol Masters ***                              

    < >   SPI EEPROMs from most vendors                              

    <*>   User mode SPI device driver support                       

    < >   Infineon TLE62X0 (for power switching)

设置完成保存。

 

 第三步:修改linux/ arch/arm/mach-sep4020目录下的4020.c 。

 增加:

   #include

   #include

   #include

   #include

 

 static struct spi_board_info sep4020_spi_board[] = {

        [0] = {

                .modalias = "spidev",

                .bus_num        = 0, 

                .chip_select        = 0,

                .irq = INTSRC_EXTINT9,

                .max_speed_hz         = 500*1000,

        },

};

 

static struct sep4020_spi_info sep4020_spi_platdata = {

        .pin_cs = SEP4020_GPD2_DATA,

        .num_cs = 1,

        .bus_num = 0,

};

 

 

 

static struct resource sep_spi_resource[] = {

       [0] = {

              .start = SSI_BASE_V,

              .end   = SSI_BASE_V + SZ_4K - 1,

              .flags = IORESOURCE_MEM,

       },

       [1] = {

              .start = INTSRC_SSI,

              .end   = INTSRC_SSI,

              .flags = IORESOURCE_IRQ,

       }

 

};

 

static u64 sep_device_spi_dmamask = 0xffffffffUL;

 

struct platform_device sep_device_spi = {

       .name              = "sep4020-spi",

       .id            = 0,

       .num_resources     = ARRAY_SIZE(sep_spi_resource),

       .resource         = sep_spi_resource,

        .dev              = {

                .dma_mask = &sep_device_spi_dmamask,

                .coherent_dma_mask = 0xffffffffUL,

                                    .platform_data = &sep4020_spi_platdata,

        }

};

EXPORT_SYMBOL(sep_device_spi);

/* --------------------------------------------------------------------*/

 

 

static struct platform_device *devices[] __initdata中添加  &sep_device_spi,

 

 void __init sep4020_init(void) 函数中添加

 sep_device_spi.dev.platform_data= &sep4020_spi_platdata;

spi_register_board_info(sep4020_spi_board, ARRAY_SIZE(sep4020_spi_board));

 

 

第四步:

 sep4020_spi.cregs_spi.c中设置相应的寄存器,编译通过。

 

运行a.out就可以测试驱动。

 

阅读(2425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~