rk3288 reload使用usb host2的问题

rk3288 reload中USB HOST2是接的HUB。改了一下,USB HOST2没有接HUB,而是跟USB HOST1一样直接用。想着可以直接接USB键盘、鼠标、摄像头等。
软件需要在哪里改设置能让USB HOST2工作起来?
现在的默认软件配置下在USB HOST2插上鼠标后,
dmesg中会有:rk_ehci_hcd_enable,enable host controller. 但鼠标是不工作的

试一下以下修改能不能实现:
kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts | 3 +±
kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c | 27 ++++++++++++++++±–
2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts b/kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts
index 59ef1f0..fc2ca54 100644
— a/kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts
+++ b/kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts
@@ -171,7 +171,8 @@
usb_control {
compatible = “rockchip,rk3288-usb-control”;

  •   host_drv_gpio = <&gpio0 GPIO_B6 GPIO_ACTIVE_LOW>;
    
  •   host1_drv_gpio = <&gpio0 GPIO_B6 GPIO_ACTIVE_HIGH>;
    
  •            host2_drv_gpio = <&gpio0 GPIO_B5 GPIO_ACTIVE_HIGH>;
      otg_drv_gpio = <&gpio0 GPIO_B4 GPIO_ACTIVE_LOW>;
    
      rockchip,remote_wakeup;
    

diff --git a/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c b/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
index 48926cb..cdbba1d 100755
— a/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
+++ b/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
@@ -1004,22 +1004,41 @@ static int rk_usb_control_probe(struct platform_device *pdev)
goto out;
}

  • gpio = of_get_named_gpio(np, “host_drv_gpio”, 0);
  • gpio = of_get_named_gpio(np, “host1_drv_gpio”, 0);
    control_usb->host_gpios->gpio = gpio;

    if (!gpio_is_valid(gpio)) {

  •   dev_err(&pdev->dev, "invalid host gpio%d\n", gpio);
    
  •   dev_err(&pdev->dev, "invalid host1 gpio%d\n", gpio);
    
    } else {
  •   err = devm_gpio_request(&pdev->dev, gpio, "host_drv_gpio");
    
  •   err = devm_gpio_request(&pdev->dev, gpio, "host1_drv_gpio");
      if (err) {
      	dev_err(&pdev->dev,
    
  •   		"failed to request GPIO%d for host_drv\n",
    
  •   		"failed to request GPIO%d for host1_drv\n",
      		gpio);
      	ret = err;
      	goto out;
      }
      gpio_direction_output(control_usb->host_gpios->gpio, 1);
    
    }
  • gpio = of_get_named_gpio(np, “host2_drv_gpio”, 0);
  • control_usb->host_gpios->gpio = gpio;
  • if (!gpio_is_valid(gpio)) {
  •   dev_err(&pdev->dev, "invalid host2 gpio%d\n", gpio);
    
  • } else {
  •   err = devm_gpio_request(&pdev->dev, gpio, "host2_drv_gpio");
    
  •   if (err) {
    
  •   	dev_err(&pdev->dev,
    
  •   		"failed to request GPIO%d for host2_drv\n",
    
  •   		gpio);
    
  •   	ret = err;
    
  •   	goto out;
    
  •   }
    
  •   gpio_direction_output(control_usb->host_gpios->gpio, 1);
    
  • }
control_usb->otg_gpios =
    devm_kzalloc(&pdev->dev, sizeof(struct gpio), GFP_KERNEL);

Mr.Lee 发表于 2017-9-4 15:25
试一下以下修改能不能实现:
kernel/arch/arm/boot/dts/firefly-rk3288-reload.dts | 3 +±
kernel/d …

您好,我按照您说的进行了修改,运行效果跟修改之前一样,USB HOST1插上鼠标可以正常识别并工作,但USB HOST2则在插上时dmesg提示:EHCI: rk_ehci_hcd_enable, enable host controller。其它的没有

查看一下是否有拉高引脚:
cat sys/kernel/debug/gpio:
gpio-13 (host2_drv_gpio ) out hi
gpio-14 (host1_drv_gpio ) out hi
还有就是硬件修改有没有正确。

本帖最后由 r123qq 于 2017-9-5 09:50 编辑

Mr.Lee 发表于 2017-9-5 09:11
查看一下是否有拉高引脚:
cat sys/kernel/debug/gpio:
gpio-13 (host2_drv_gpio ) out hi

我的USB HOST 1,2的供电开关是用同一个&gpio0 GPIO_B6,高有效。 我不太明白您让我修改的是有什么作用? 主要还是不太明白USB这一块的驱动的配置及用到的文件。&gpio0 GPIO_B6确认是拉高的。
您让我加的host1_drv_gpio,host2_drv_gpio好象就是申请IO并可以给它上电。
因为我的USB HOST1,2共用&gpio0 GPIO_B6,所以只要对它操作,USB HOST2应该也上电了。
所以USB HOST2的ECHI enable能看到

rk3288 reload中USB HOST2是接的HUB。改了一下,USB HOST2没有接HUB,而是跟USB HOST1一样直接用。

确认一下,host2和host1是接同一个引脚,host2没有接HUB,host1接HUB?

Mr.Lee 发表于 2017-9-5 09:46
确认一下,host2和host1是接同一个引脚,host2没有接HUB,host1接HUB?

host1,2都没有接HUB

host1,2都没有接HUB

现在就是host2完全不能用了?试一下以下修改:
diff --git a/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c b/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
index cdbba1d..655290e 100755
— a/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
+++ b/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
@@ -480,7 +480,7 @@ static void rk_ehci_hw_init(void)
* host0 PLL blocks remain powered.
*/
control_usb->grf_uoc1_base->CON0 = (1 << 16) | 0;

  •   control_usb->grf_uoc1_base->CON0 = 0x08000000;
      /* DRV_VBUS GPIO init */
      if (gpio_is_valid(control_usb->host_gpios->gpio)) {
              if (!gpio_get_value(control_usb->host_gpios->gpio))
    

本帖最后由 r123qq 于 2017-9-5 10:40 编辑

Mr.Lee 发表于 2017-9-5 10:12
现在就是host2完全不能用了?试一下以下修改:
diff --git a/kernel/drivers/usb/dwc_otg_310/usbdev_rk …

您好,按您的修改了,还是跟以前一样,
usb host2插上鼠标后,
dmesg中会出现消息: EHCI: rk_ehci_hcd_enable, enable host controller
但没有认到鼠标。
usb host2在插上鼠标后,会有消息提示。应该usb host2硬件是正常工作的。
但是不是软件上没把它配成host接口在用啊?
在RK3288,dtsi中关于usb2是如下所示:
usb2: usb@ff500000 {
compatible = “rockchip,rk3288_rk_ehci_host”;
reg = <0xff500000 0x20000>;
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk_gates13 5>, <&clk_gates7 6>;
clock-names = “clk_usbphy2”, “hclk_usb2”;
resets = <&reset RK3288_SOFT_RST_USBHOST0_H>, <&reset RK3288_SOFT_RST_USBHOST0PHY>,
<&reset RK3288_SOFT_RST_USBHOST0C>, <&reset RK3288_SOFT_RST_USB_HOST0>;
reset-names = “ehci_ahb”, “ehci_phy”, “ehci_controller”, “ehci”;
};

好象本来就配的是EHCI,所以它认到的也是EHCI.
说一下我这边的硬件配置,使用rk3288 reload核心板,自己扩展的底板。只用到了3个USB, USB0 OTG,USB1 HOST, USB2 HOST.
跟参考电路图不一样的是USB HOST2,在参考电路图中,它是连接了一个USB HUB,我这边没有,连接方式跟USB1 HOST一样。
USB1,2共用一个驱动管脚&gpio0 GPIO_B6。
现在USB1工作正常,但USB2则不象一个HOST一样工作,插上鼠标后,能看到EHCI ENABLE之类的字样。但认不到鼠标

r123qq 发表于 2017-9-5 10:32
您好,按您的修改了,还是跟以前一样,
usb host2插上鼠标后,
dmesg中会出现消息: EHCI: rk_ehci_hcd …

底板的原理图能不能提供一下?发我邮箱:lzs@t-chip.com.cn

Mr.Lee 发表于 2017-9-5 10:42
底板的原理图能不能提供一下?发我邮箱:

已发您邮箱,请查收,多谢。

请硬件上先确定VCC_HOST_5V和VCC_HOST_5V_A电压是否正常,还有硬件其他是否正常,同时软件上是否已经同步最新SDK

r123qq 发表于 2017-9-5 11:09
已发您邮箱,请查收,多谢。

您好!我也遇到该问题,请问你解决了吗?麻烦分享补丁

device not accepting address 6, error -71 我的usb host2 插鼠标也是不行,U盘也是不行

本帖最后由 ziven 于 2017-9-12 00:16 编辑

70.504835] vcodec_service: ff9a0000.vpu_service: power off…
[ 70.504943] vcodec_service: done
[ 72.495213] vcodec_service: ff9a0000.vpu_service: power on
[ 73.653960] dwc_otg_hcd_enable, enable host controller
[ 73.757622] Using Buffer DMA mode
[ 73.757650] Periodic Transfer Interrupt Enhancement - disabled
[ 73.757661] Multiprocessor Interrupt Enhancement - disabled
[ 73.757671] OTG VER PARAM: 0, OTG VER FLAG: 0
[ 73.757680] ^^^^^^^^^^^^^^^^^^Host Mode
[ 73.801062] Init: Power Port (0)
[ 74.096620] Indeed it is in host mode hprt0 = 00041901
[ 74.273674] usb 3-1: new low-speed USB device number 6 using usb20_host
[ 74.276113] Indeed it is in host mode hprt0 = 00041901
[ 74.450902] usb 3-1: device descriptor read/64, error -71
[ 74.560168] Indeed it is in host mode hprt0 = 00041901
[ 74.735949] usb 3-1: device descriptor read/64, error -71
[ 74.844656] Indeed it is in host mode hprt0 = 00041901
[ 75.021604] usb 3-1: new low-speed USB device number 7 using usb20_host
[ 75.023494] Indeed it is in host mode hprt0 = 00041901
[ 75.198636] usb 3-1: device descriptor read/64, error -71
[ 75.308667] Indeed it is in host mode hprt0 = 00041901
[ 75.483930] usb 3-1: device descriptor read/64, error -71
[ 75.591945] Indeed it is in host mode hprt0 = 00041901
[ 75.769259] usb 3-1: new low-speed USB device number 8 using usb20_host
[ 76.182314] usb 3-1: device not accepting address 8, error -71
[ 76.182419] Indeed it is in host mode hprt0 = 00041901
[ 76.359732] usb 3-1: new low-speed USB device number 9 using usb20_host
[ 76.772992] usb 3-1: device not accepting address 9, error -71
[ 76.773262] hub 3-0:1.0: unable to enumerate USB device on port 1

我这边也是这个现象一模一样,直接拉出了usb_host1的脚,没有接hub,现在接上面什么设备都没有。
只有打印,rk_ehci_hcd_enable,enable host controller.。
虽然是挖坟贴,但是很希望有谁解决了分享下。