注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

deisp的博客

 
 
 

日志

 
 

GEC2410 CS8900驱动添加  

2008-05-27 11:11:08|  分类: 驱动移植 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Gec2410开发板的网络接口芯片是CS8900,不过在linux-2.6.14.1的内核中还没有支持,。其实在网上可以找到针对这个网络接口的驱动程序。

下面主要介绍怎么把写好的网络驱动添加到内核源码中。

CS8900的驱动源文件:cirrus.h cirrus.c

 

步骤如下:

1 复制源文件到内核源码的drivers/net/目录

cp cirrus.h drivers/net/

cp cirrus.c drivers/net/

 

2 修改drivers/net/目录下的KconfigMakefile文件

vi Kconfig

添加如下:

config CIRRUS

       tristate "CS8900 Ethernet support by tan"

       depends on ARM

       ---help---

         Support for cs8900

 

vi Makefile

添加如下:

obj-$(CONFIG_CIRRUS) += cirrus.o

 

4 加入CS8900A在内存中的起始位置

vi linux/include/asm-arm/arch-s3c2410/map.h

添加如下:

/* CS8900 */

#define S3C24X0_VA_CS8900 0xE0000000

#define S3C24X0_PA_CS8900 0x19000000

 

3 加入cs8900A的物理地址到虚拟地址的映射

 

vi arch/arm/mach-s3c2410/mach-smdk2410.c

添加内容如下:

static struct map_desc smdk2410_iodesc[] __initdata = {

   /* nothing here yet */

{S3C2410_VA_CS8900,S3C2410_PA_CS8900,SZ_1M,MT_DEVICE}

 }

 

 

 

Lcd驱动添加

 

vi arch/arm/mach-s3c2410/mach-smdk2410.c

 

#include <asm/arch/fb.h>

 

static struct s3c2410fb_mach_info smdk2410_lcd_platdata = {

       .fixed_syncs=0,

       .width= 240,

       .height= 320,

       .xres = {

              .defval= 240,

              .min= 240,

              .max= 240,

       },

       .yres = {

              .defval= 320,

              .min= 320,

              .max= 320,

       },

       .bpp = {

              .defval= 16,

              .min= 16,

              .max= 16,

       },

       .regs = {

              .lcdcon1=(7<<8)|(3<<5)|(12<<1),

              .lcdcon2=(2<<24)|(319<<14)|(2<<6)|(4),

              .lcdcon3=(8<<19)|(239<<8)|(8),

              .lcdcon4=(13<<8)|(6),

              .lcdcon5=(1<<11)|(0<<9)|(0<<8)|(0<<6)|(1),

       },

       .gpcup= 0xFFFFFFFF,

       .gpcup_mask= 0xFFFFFFFF,

       .gpccon= 0xaaaaaaaa,

       .gpccon_mask= 0xFFFFFFFF,

       .gpdup= 0xFFFFFFFF,

       .gpdup_mask= 0xFFFFFFFF,

       .gpdcon= 0xaaaaaaaa,

       .gpdcon_mask= 0,

       .lpcsel= 0x00,

};

smdk2410_map_io函数中加入了
set_s3c2410fb_info(&smdk2410_lcd_platdata);

 

 

 

 

 

TouchScreen驱动添加

源文件

s3c2410_ts.h

s3c2410_ts.c

 

cp s3c2410_ts.h include/asm-arm/

cp s3c2410_ts.c drivers/char/

 

修改drivers/char/目录下的KconfigMakefile文件。

添加ts驱动选项:

Makefile

 

1043 +obj-$(CONFIG_S3C2410_TS)       +=s3c2410ts.o

 

Kconfig

config S4C2410_RTC选项下添加:

choice

       prompt "s3c2410 touchscreen"

       default S3C2410_TS

       depends on ARCH_S3C2410

      

       config S3C2410_TS

       tristate "normal touchscreeen "

      

       config S3C2410_TS_ADS

       tristate "touchscreen ads"

endchoic

 

.

 

 

修改arch/arm/mach-s3c2410下的四个文件:

devs.h

devs.c

mach-smdk2410.c

s3c2410.c

 

1 devs.h

添加如下:

extern struct platform_device s3c_device_ts;

 

2 devs.c

添加如下:

#include <asm/arch/s3c2410_ts.h>

……….

/* Touchscreen */

static struct s3c2410_ts_mach_info s3c2410ts_info;

 

void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)

{

       memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));

}

EXPORT_SYMBOL(set_s3c2410ts_info);

 

struct platform_device s3c_device_ts = {

       .name               = "s3c2410-ts",

       .id             = -1,

       .dev              = {

             .platform_data   = &s3c2410ts_info,

       }

};

EXPORT_SYMBOL(s3c_device_ts);

 

/* USB Device (Gadget)*/

 

 

 

3 mach-smdk2410.c

添加如下:

#include <asm/arch/s3c2410_ts.h>

…….

//ts fla

static struct s3c2410_ts_mach_info gec2410_ts __initdata = {

     .delay = 10000,

     .presc = 49,

     .oversampling_shift = 2,

}

 

static struct platform_device *smdk2410_devices[] __initdata = {

       &s3c_device_usb,

       &s3c_device_lcd,

       &s3c_device_wdt,

       &s3c_device_i2c,

       &s3c_device_iis,

       &s3c_device_nand,

    &s3c_device_ts, //add here

};

 

void __init smdk2410_map_io(void)

{

       s3c24xx_init_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc));

       s3c24xx_init_clocks(0);

       s3c24xx_init_uarts(smdk2410_uartcfgs, ARRAY_SIZE(smdk2410_uartcfgs));

       s3c24xx_set_board(&smdk2410_board);

       set_s3c2410fb_info(&smdk2410_lcd_platdata);

       set_s3c2410ts_info(&gec2410_ts);

  评论这张
 
阅读(379)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017