CPU:RK3288

系统:Android 5.1

主板外接 USB 接口的外设,经常会出现丢数的现象,这种问题在很多 USB 接口的外设上都遇到过,例如:USB读卡器、USB扫描枪等

有一个共同点是外设在系统中作为一个键盘设备,相当于键盘输入。

直接上RK提供的补丁,此补丁优化很大,但是没有根本解决问题,偶尔还会出现丢数

diff --git a/kernel/drivers/irqchip/irq-gic.c b/kernel/drivers/irqchip/irq-gic.c
old mode
new mode
index ce24a7e..458edaa
--- a/kernel/drivers/irqchip/irq-gic.c
+++ b/kernel/drivers/irqchip/irq-gic.c
@@ -, +, @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
bit = gic_cpu_map[cpu] << shift;
val = readl_relaxed(reg) & ~mask;
writel_relaxed(val | bit, reg);
+ if((gic_irq(d)!=) && (gic_irq(d)!=))
+ writel_relaxed(val | bit, reg);
raw_spin_unlock(&irq_controller_lock); return IRQ_SET_MASK_OK;
@@ -, +, @@ static void __init gic_dist_init(struct gic_chip_data *gic)
for (i = ; i < gic_irqs; i += )
writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * / ); + writel_relaxed(0x01010f01, base + GIC_DIST_TARGET + 0x38);
+ writel_relaxed(0xa0a090a0, base + GIC_DIST_PRI + 0x38);
+ writel_relaxed(0x0f010101, base + GIC_DIST_TARGET + 0x34);
+ writel_relaxed(0x90a0a0a0, base + GIC_DIST_PRI + 0x34);
+
gic_dist_config(base, gic_irqs, NULL); #ifdef CONFIG_FIQ_DEBUGGER
diff --git a/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h b/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h
old mode
new mode
index 46f1da3..7b75033
--- a/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h
+++ b/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h
@@ -, +, @@ struct { \
(head)->cqh_last = (elm); \
} while () +#define DWC_CIRCLEQ_INSERT_COM(head, listelm, elm, field, com) do { \
+ DWC_CIRCLEQ_FOREACH(listelm, head, field) { \
+ if ((elm)->com < (listelm)->com) { \
+ DWC_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field); \
+ break; \
+ } else \
+ continue; \
+ } \
+ if (DWC_CIRCLEQ_PREV(listelm, field) != elm) \
+ DWC_CIRCLEQ_INSERT_TAIL(head, elm, field); \
+} while ()
+
#define DWC_CIRCLEQ_REMOVE(head, elm, field) do { \
if ((elm)->field.cqe_next == DWC_CIRCLEQ_END(head)) \
(head)->cqh_last = (elm)->field.cqe_prev; \
diff --git a/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c b/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c
old mode
new mode
index 0e05b13..a1a067f
--- a/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c
+++ b/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c
@@ -, +, @@ static void release_channel(dwc_otg_hcd_t *hcd,
dwc_otg_transaction_type_e tr_type;
int free_qtd;
int continue_trans = ;
+ dwc_hc_t *hc_tmp = NULL; DWC_DEBUGPL(DBG_HCDV, " %s: channel %d, halt_status %d\n",
__func__, hc->hc_num, halt_status);
@@ -, +, @@ cleanup:
* there's no need to clear the Channel Halted interrupt separately.
*/
dwc_otg_hc_cleanup(hcd->core_if, hc);
- DWC_CIRCLEQ_INSERT_TAIL(&hcd->free_hc_list, hc, hc_list_entry);
+ DWC_CIRCLEQ_INSERT_COM(&hcd->free_hc_list, hc_tmp, hc, hc_list_entry, hc_num); switch (hc->ep_type) {
case DWC_OTG_EP_TYPE_CONTROL:

[RK3288] 外接USB设备出现丢数的更多相关文章

  1. C#:USB设备枚举 --转自CSDN作者:Splash

    (一)DeviceIoControl的PInvoke /* ---------------------------------------------------------- 文件名称:Device ...

  2. C# 实现自定义的USB设备与上位机进行通信(上位机部分)

    因为以前没用过USB,对USB也不了解,于是上网查了很多资料,不过网上的资料都是零零散散,不清不楚的,于是我自己总结了一下,下面几个链接是网上这么多零散资料里,我觉得比较有参考意义的. USB设备连接 ...

  3. Ubuntu/Windows下利用“HIDAPI”库函数实现与Hid类USB设备通信

    一.背景: 最近在做的一个项目需要使用USB传递数据,对USB理解不是很深,USB的系统驱动编写则更是天方 夜谭,因此将设备配置成HID类设备成为了首选.其最大的好处在于,LINUX/Windows系 ...

  4. usb设备驱动描述,王明学learn

    usb设备驱动 本章主要内容包含以下:USB总线介绍,USB协议分析,USB系统架构 一.USB总线介绍 1.1USB发展史 USB(Universal Serial Bus)通用串行总线,是一种外部 ...

  5. USB协议-USB设备的枚举过程

    USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. ...

  6. USB设备的基本概念

    在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的.一个USB设备由3个功能模块组成:USB总线接口.USB逻辑设 ...

  7. Linux usb子系统(二):USB设备驱动usb-skeleton.c

    usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动.两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备. 下面转载的一篇分析u ...

  8. USB系列之二:读取USB设备的描述符

    在前面的文章中,我们已经给出了USB协议的链接地址,从这篇文章起,我们会涉及到许多USB 1.1的内容,我们的指导思想是先从熟悉USB 1.1协议入手,先使用现成的HCD和USBD,直接面对客户端驱动 ...

  9. 厂商自定义USB设备固件程序及特性

    通过前面的学习,大家应该对USB固件程序结构有了比较深的认识,现在再来详细说说固件里决定设备识别成厂商自定义USB设备的地方有哪些,或者说厂商自定义USB设备的固件特性有哪些. 之前不止一次说过学习U ...

随机推荐

  1. nginx的proxy模块详解以及参数

    文章来源 运维公会:nginx的proxy模块详解以及参数 使用nginx配置代理的时候,肯定是要用到http_proxy模块.这个模块也是在安装nginx的时候默认安装.它的作用就是将请求转发到相应 ...

  2. Android笔记(四) Activity之间的数据传递

    我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...

  3. JVM系列三:内存分配与回收策略

    内存分配策略 1.对象优先分配在新生代Eden区 多数情况下,对象分配在新生代的Eden,若Eden区域内存不够,则引发一次Minor GC 2.大对象直接进入老年代 大对象直接分配在老年代,避免新生 ...

  4. Lorenzo Von Matterhorn(map的用法)

    http://www.cnblogs.com/a2985812043/p/7224574.html 解法:这是网上看到的 因为要计算u->v的权值之和,我们可以把权值放在v中,由于题目中给定的u ...

  5. Aure Event Hubs小白完全入门指南

    refer to https://www.cnblogs.com/mysunnytime/p/11634815.html?from=groupmessage&isappinstalled=0 ...

  6. 2019-2020-1 20199301《Linux内核原理与分析》第二周作业

    第二周Linux学习笔记 文件打包与解压缩 tar工具打包 tar的解压和压缩都是同一个命令,只需参数不同,使用较方便. 创建一个包时文件名必须紧跟在 -f 之后,解包一个文件(-x参数)到指定路径的 ...

  7. Git报错:Permission denied (publickey)

    Git在克隆的时候报错.Permission denied (publickey). 报错 Permission denied (publickey) 具体如下: 原因:没有将自己的电脑的SSH ke ...

  8. Selenium常用API的使用java语言之7-控制浏览器操作

    (六)控制浏览器操作 1.控制浏览器窗口大小 有时候我们希望能以某种浏览器尺寸找开,访问的页面在这种尺寸下运行.例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估 ...

  9. 阿里云轻量级服务器和NGINX部署Django项目

    部署条件: 1.一台阿里云服务器(本人的是CentOS系统的服务器) 2.已经构建好的项目 3.服务器上安装并配置Nginx 首先第一步:在服务器上安装并配置Nginx 进入服务器 $ ssh roo ...

  10. BZOJ1257: [CQOI2007]余数之和——整除分块

    题意 求 $\sum _{i=1}^n k \ mod \ i$($1\leq n,k\leq 10^9$). 分析 数据范围这么大 $O(n)$ 的复杂度也挺不住啊 根据取模的意义,$k \ mod ...