学习Linux下s3c2440的USB鼠标驱动笔记

发布者:Qingliu2022最新更新时间:2024-07-23 来源: cnblogs关键字:Linux  s3c2440 手机看文章 扫描二维码
随时随地手机看文章

133     // set_bit(BTN_MIDDLE, uk_dev->keybit); 

134 

135     // set_bit(REL_X,uk_dev->keybit);

136     // set_bit(REL_Y,uk_dev->keybit);

137     // set_bit(REL_WHEEL,uk_dev->keybit);

138     

139      uk_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);

140      uk_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);

141      uk_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y);

142      uk_dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA);

143      uk_dev->relbit[0] |= BIT(REL_WHEEL);

144 

145     /* c. 注册 */

146     input_register_device(uk_dev);

147     

148     /* d. 硬件相关操作 */

149     /* 数据传输3要素: 源,目的,长度 */

150     /* 源: USB设备的某个端点 */

151     pipe = usb_rcvintpipe(dev,endpoint->bEndpointAddress);

152     /* 长度: */

153     len =  endpoint->wMaxPacketSize;

154     /* 目的: */

155     usb_buf = usb_buffer_alloc(dev,len,GFP_ATOMIC,&usb_data_dma);

156     /* 使用'3要素' */

157     /* 分配usb request block */

158     uk_urb = usb_alloc_urb(0, GFP_KERNEL);

159 

160     /* 使用'3要素设置urb' */

161     usb_fill_int_urb(uk_urb, dev, pipe,usb_buf,len,usb_mouse_irq, NULL, endpoint->bInterval);

162     uk_urb->transfer_dma = usb_data_dma;

163     uk_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;

164 

165     /* 使用URB */

166     usb_submit_urb(uk_urb, GFP_KERNEL);

167 

168 

169     printk('found usbmouse!n');

170 

171     printk('bcdUSB = %xn', dev->descriptor.bcdUSB);

172     printk('VID    = 0x%xn', dev->descriptor.idVendor);

173     printk('PID    = 0x%xn', dev->descriptor.idProduct);

174 

175     return 0;

176 }

177 

178 static void usbmouse_key_disconnect(struct usb_interface *interface)

179 {

180     struct usb_device *dev = interface_to_usbdev(interface);

181 

182     printk('usbmouse_key_disconnectn');

183     input_unregister_device(uk_dev);

184     input_free_device(uk_dev);    

185     usb_buffer_free(dev,len,usb_buf,usb_data_dma);

186     usb_kill_urb(uk_urb);

187     usb_free_urb(uk_urb);

188 

189 }

190 

191 MODULE_DEVICE_TABLE (usb, usbmouse_key_table);

192 

193  /*usbmouse_key_probe  usbmouse_key_disconnect  函数指针

194   *当设备与在id_table 中变量信息匹配时,此函数被调用

195   */

196 static struct usb_driver usbmouse_key_driver = {

197     .name =        'usbmouse_key',

198     .probe =    usbmouse_key_probe,             

199     .disconnect =    usbmouse_key_disconnect,

200     .id_table =    usbmouse_key_table,

201 

202 };

203 

204 /*

205  *USB骨架  最基本的usb驱动模板

206  */

207 static int __init usb_usbmouse_key_init(void)

208 {

209     int result;

210 

211     printk('usb_usbmouse_key_initn');

212 

213     /* register this driver with the USB subsystem */

214     result = usb_register(&usbmouse_key_driver);

215     if (result)

216         err('usb_register failed. Error number %d', result);

217 

218     return result;

219 }

220 

221 static void __exit usb_usbmouse_key_exit(void)

222 {

223     printk('usb_usbmouse_key_exitn');

224     /* deregister this driver with the USB subsystem */

225     usb_deregister(&usbmouse_key_driver);

226 }

227 

228 module_init(usb_usbmouse_key_init);

229 module_exit(usb_usbmouse_key_exit);

230 MODULE_LICENSE('GPL');


[1] [2]
关键字:Linux  s3c2440 引用地址:学习Linux下s3c2440的USB鼠标驱动笔记

上一篇:s3c2440的IIS的控制模块
下一篇:s3c2440启动代码学习笔记

推荐阅读最新更新时间:2026-02-21 21:55

linux2.6.32 内核移植s3c2440 - DM9000网卡驱动移植
参考: http://caiming1987612.blog.163.com/blog/static/118556676200961752714307/ http://blog.chinaunix.net/u1/34474/showart_401078.html http://hi.baidu.com/%D3%F3%C4%E0%C4%EA%B8%E2/blog/item/6256fea7bfceac98d0435819.html 时序图和引脚连接 :http://blog.chinaunix.net/u1/57901/showart_2023852.html (一)打开arch/arm/mach-s3c2440/mach-test
[单片机]
LinuxS3C2440 RTC实时时钟驱动配置与修改
Linux下对S3C2440 RTC的支持非常完善,我们只需要做简单的修改,即可使用RTC 1、vi arch/arm/mach-s3c2440/mach-smdk2440.c static struct platform_device *smdk2440_devices __initdata = { &s3c_device_usb, &s3c_device_lcd, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &s3c_device_rtc, //这里我们添加上RTC平台设备,默认是没添加的 }; 2、make zImage 3、使用与测试 L
[单片机]
ARM Linux S3C2440之ADC驱动实现
硬件描述: S3c2440有一个10-bit的CMOS ADC 模数转换器,支持8个模拟通道输入,10位的分辨率,最高速度可达500KSPS(500 千次/每秒)。 从图中可知:模拟ADC,包含了2部分功能,一部分是触屏功能,另一部分就是普通ADC功能,分别可以产生INT_TC和INT_ADC 两个中断。8个AIN模拟输入(A ,YM,YP,XM,XP)通过一个8路模拟开关MUX进行通道片选。 ADC模块共有20个寄存器。对于普通ADC转换,使用ADCCON 和 ADCDAT0即可完成控制。ADCCON用于控制设置,ADCDAT0保存了转换结果。 驱动程序ADC_DEV.ko: #include linux/err
[单片机]
ARM <font color='red'>Linux</font> <font color='red'>S3C2440</font>之ADC<font color='red'>驱动</font>实现
ARM Linux S3C2440 之时钟分析
S3c2440 时钟 & 电源管理时钟由三部分组成: Clock control ,USB control, 和 Power control Clock control 部分可以产生时钟FCLK,提供ARM内核,HCLK 提供 AHB 总线外设,还有 PLCK APB 总线外设。 s3c2440 有两个内置的PLLS 锁相环,一个提供给 FCLK,HCLK,和PCLK,另一个提供给USB时钟(48MHZ)。Clock control 可以不使用PLL,而降低的时钟,通过软件设置,时能各中种外设,从而可以降低功耗。 Power control部分,用于电能管理,有四种工作模式:Normal mode, Slow mode, Idl
[单片机]
ARM Linux S3C2440 之中断分析
硬件篇: S3C2440 是arm920T架构,先温习一下s3c2440中的中断控制器原理和相关硬件构架。 中断控制器(InterruptControler): S3c2440A的中断控制器有60个中断源,如DMA中断,UART中断,IIC中断等,60个中断源在寄存器中用相应的位来表示。当有多个中断要求到来时,经过仲裁过程后,中断控制器向CPU请求FIQ或者IRQ中断。仲裁过程根据硬件中的优先级模块来决定,其结果最后写进中断未决(intterrupt pending)寄存器中,通过中断未决寄存器的值可以清楚哪个中断发生了。 S3c2440中断控制器流程图: 挂起 中断模式(InterruptMode): ARM920T(CPU)
[单片机]
ARM <font color='red'>Linux</font> <font color='red'>S3C2440</font> 之中断分析
2440串口linux编程,s3c2440的串口控制
在配置完s3c2440的系统时钟后,我们来控制串口.之所以将串口放在这么靠前,是因为串口会给我们带来更多的信息.在没有串口的时候,uboot启动阶段只能靠led来显示一些信息.那么有了串口,debug就方便很多了.在工作中,一般情况下,很少有机会用jtag口加上昂贵的codeviser工具进行debug,也很少用gdb进行远程debug的,用的最多的还是打开debug的define来分析确定问题. 还是从s3c2440的datasheet开始: s3c2440A的UART提供3个独立的异步串行IO口,每一个都支持中断和DMA.换句话来说,UART可以产生中断请求或DMA请求来在CPU和UART之间传输数据.UART在系统时钟下
[单片机]
2440串口<font color='red'>linux</font>编程,<font color='red'>s3c2440</font>的串口控制
嵌入式linux开发 (十三) FLASH(3) s3c2440外扩NAND FLASH
- JZ2440 S3C2440 ARM920T -内置 Steppingstone (4K-Byte SRAM) 无rom -外扩 MX29LV160DBTI:2MB,并口 NOR FLASH K9F2G08U0C: 256MB,NAND FLASH soc The S3C2440A is developed with ARM920T core, 0.13um CMOS standard cells and a memory complier. The ARM920T implements MMU, AMBA BUS, and Harvard cache architecture with sep
[单片机]
嵌入式linux开发 (九) RAM(3) s3c2440外扩sdram
- JZ2440 S3C2440 ARM920T -内置 Steppingstone (4K-Byte SRAM) 无rom -外扩 EM63A165TS-6G:32MB/片,SDRAM,共两片 soc The S3C2440A is developed with ARM920T core, 0.13um CMOS standard cells and a memory complier. The ARM920T implements MMU, AMBA BUS, and Harvard cache architecture with separate 16KB instruction and 16KB
[单片机]
嵌入式<font color='red'>linux</font>开发 (九) RAM(3) <font color='red'>s3c2440</font>外扩sdram
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved