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. STM8 工程模版

    在st官网下载STM8固件库 拷贝固件库到工程目录下 再创建两个目录 user:存放用户文件.自己编写的源文件 project:存放工程文件 拷贝stm8s_conf.h到user目录下 AIR 创建 ...

  2. Android NDK 学习之接受Java传入的Int数组

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  3. 【SpringMVC】拦截器

    一.概述 1.1 拦截器的异常场合 1.2 拦截器中的方法 二.示例 2.1 定义两个拦截器 2.2 配置拦截器 2.3 执行顺序 三.拦截器应用 3.1 需求 3.2 用户登陆及退出功能开发 3.3 ...

  4. JAVA笔记整理(一),JAVA介绍

    JAVA语言的版本: J2SE(Java2 Platform Standard Edition,java平台标准版),后更名为:JAVA SE J2EE(Java 2 Platform,Enterpr ...

  5. javascript之ECMAScript:语法的操作标准

    一.如何书写一个javascript代码 javascript代码需要写在javascript标签中才会生效,而javascript标签可以写在任何地方,但考虑到规范化及页面的加载问题,最好是写在bo ...

  6. Django modle基础样版

    定义一个基类模版, from django.db import models class ModelBase(models.Model): """ "" ...

  7. Codeforces Round #510 (Div. 2) C. Array Product

    题目 题意: 给你n个数,有两种操作,操作1是把第i个位置的数删去, 操作2 是把 a[ j ]= a[ i ]* a[ j ],把a[ i ]删去 .n-1个操作以后,只剩1个数,要使这个数最大 . ...

  8. k8s的pod的资源调度

    1.常用的预选策略 2.优选函数 3.节点亲和调度 3.1.节点硬亲和性 3.2.节点软亲和性 4.Pod资源亲和调度 4.1.Pod硬亲和度 4.2.Pod软亲和度 4.3.Pod反亲和度 5.污点 ...

  9. 【python】使用openpyxl解析json并写入excel(xlsx)

    目标: 将json文本解析并存储到excel中 使用python包 openpyx import simplejsonmport codecsimport openpyxl import os # d ...

  10. 0015SpringBoot结合thymeleaf实现点击菜单高亮显示

    1.点击菜单,经过Controller层处理,正常定位到视图页面 2.编写抽象出公共片段的html,根据参数判断是否加高亮样式 3.多个目标页面引用步骤2中抽象出的公共片段,传不同的参数 具体实现如下 ...