rk3399调试usb支持u盘鼠标等

RK 的芯片内置多个 USB 控制器,不同控制器互相独立,RK3399 就有两个 usb2.0 HOST(EHCI&OHCI)、一个 USB HSCI (EHCI)、两个 USB2.0/3.0 OTG(DWC3/XHCI)

看 dlt3399 开发板有

一路 USB3.0 host  USB2.0 hub  usb2.0 host  type-c3.0

可以知道 USB供电 需要 额外 配置的脚:

VCC5V0_HOST_EN

TYPE-C 的除了I2C 和 type-c相关接口, 也还有个5V使能脚  VCC5V0_TYPEC0_EN

Kernel 配置,参考 rockchip_defconfig 里面是RK已经默认的配置,直接导入或者对比添加进去即可,当然我们的代码里面已经有添加的,大家看看 rockchip_defconfig 即可

使用 make ARCH=arm64 rockchip_defconfig

即可导入默认配置

使用默认配置之后,我们可以直接插鼠标看看鼠标灯能不能亮!

基本配置对了、驱动没动RK原厂的、再就是供电有了就可以使用RK 的USB功能了!

修改 Host 使能脚 为 GPIO1_C4

vcc5v0_host: vcc5v0-host-regulator {

        compatible = "regulator-fixed";

        enable-active-high;  // 说明GPIO 拉高就使能供电

        gpio = <&gpio4 25 GPIO_ACTIVE_HIGH>; // 我们的使能脚

        pinctrl-names = "default";

        pinctrl-0 = <&host_vbus_drv>;// 这里面使用的 pinctrl 中节点名称

        regulator-name = "vcc5v0_host";

        regulator-always-on;

        regulator-boot-on;

        regulator-min-microvolt = <5000000>;

        regulator-max-microvolt = <5000000>;

};

可以看到,RK3399 使用的是 regulator 的配置方法进行 HOST vbus 的配置的,也就是通过电源管理方法来控制 我们 usb 的电源供给,还有一种就是配置成 GPIO 形式,直接在驱动中控制GPIO。

继续回到上面,可以知道,这是一个 rk配置 vbus-host的 regulator的配置实例,

我们搜索 host_vbus_drv pintrl 名字中也要修改成我们使用到的 使能脚

usb2 {

        host_vbus_drv: host-vbus-drv {

        rockchip,pins =

                <4 25 RK_FUNC_GPIO &pcfg_pull_none>;

        };

};

同样的,我们也应修改 TYPE-C的使能脚,我们现在能使用 TYPE-C 是因为我们直接接电脑,有供电,要是没有连接电脑,使用 TYPE-C OTG 来使用鼠标、读取U盘也是不行的,发现鼠标灯都没亮的!

&i2c4 {

        status = "okay";

        i2c-scl-rising-time-ns = <475>;

        i2c-scl-falling-time-ns = <26>;

        fusb0: fusb30x@22 {

               compatible = "fairchild,fusb302";

                reg = <0x22>;

                pinctrl-names = "default";

                pinctrl-0 = <&fusb0_int>;// 同样也要修改 pintrl

                int-n-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;

                vbus-5v-gpios = <&gpio4 26 GPIO_ACTIVE_HIGH>;

                status = "okay";

        };

};

修改 pintrl

fusb30x {

        fusb0_int: fusb0-int {

                rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;

        };

};

编译、烧写,发现鼠标灯亮了,移动看操作

接U盘,也有识别,

要是不能识别,可以通过 Lsusb 查看设备,看看是不是 kernel已经识别到,或者直接通过串口log 来看,然后就可以定位是 android层识别不到问题导致的,这个我们现在流程都是可以的!

然后使用下 鼠标右键,不能返回,

frameworks/native/services/inputflinger/InputReader.cpp -----------

old mode 100644

new mode 100755

index ef09daa..7225f89

@@ -1208,11 +1208,13 @@ uint32_t CursorButtonAccumulator::getButtonState() const {

     }

     if (mBtnRight) {

        //$_rochchips_$_modify_by_huangjc make sure mouse BtnRight for product

+/*    

         char *mIsBox = new char[PROPERTY_VALUE_MAX];

         property_get("ro.target.product", mIsBox, "tablet");

         if(strcmp(mIsBox, "tablet")==0)

          result |= AMOTION_EVENT_BUTTON_SECONDARY;

         else

+ */

我们看下我们使用的驱动可以通过 搜索 compatible 名字来找匹配驱动,因为这个名字是唯一的使 dts 和 驱动进行匹配的

Fusb302.c (drivers\mfd):  这个是 TYPE-C 芯片的驱动

Fixed.c (drivers\regulator): { .compatible = "regulator-fixed", },

这是 我们usb 的电源管理驱动

usb相关的PHY 驱动在

Driver/phy 下面

usb的控制驱动就是

Driver/usb 下面

其中 dwc3 dwc2 就是 OTG3.0 OTG2.0 的   HOST 就是 对应的 host驱动!

继续看下 dts 中对 Usb 配置都是全部OKAY的

&tcphy0 {

        extcon = <&fusb0>;

        status = "okay";

};

&tcphy1 {

        status = "okay";

};

&u2phy0 {

        status = "okay";

        extcon = <&fusb0>;

        u2phy0_otg: otg-port {

                status = "okay";

        };

        u2phy0_host: host-port {

                phy-supply = <&vcc5v0_host>;

                status = "okay";

        };

};

&u2phy1 {

        status = "okay";

        u2phy1_otg: otg-port {

                status = "okay";

        };

        u2phy1_host: host-port {

                phy-supply = <&vcc5v0_host>;

                status = "okay";

        };

};

&usbdrd3_0 {

        status = "okay";

        extcon = <&fusb0>;

};

&usbdrd3_1 {

        status = "okay";

};

&usbdrd_dwc3_0 {

        dr_mode = "otg";

        status = "okay";

};

&usbdrd_dwc3_1 {

        status = "okay";

        dr_mode = "host";

};

&usb_host0_ehci {

        status = "okay";

};

&usb_host0_ohci {

        status = "okay";

};

&usb_host1_ehci {

        status = "okay";

};

&usb_host1_ohci {

        status = "okay";

};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣敢飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值