热门内容

公众号"MAKE1"

获取行业最新资讯

请扫码添加

专业客服企业微信

高通平台Android手机驱动层添加usb otg功能

简介

高通平台Android手机驱动层添加usb otg功能,以MSM8916为例

.../arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts | 11 ++++++++-

.../android/kernel/drivers/usb/phy/phy-msm-usb.c | 24 ++++++++++++++++----

2 files changed, 29 insertions(+), 6 deletions(-)

mode change 100644 => 100755 src/LINUX/android/kernel/drivers/usb/phy/phy-msm-usb.c

 

diff --git a/src/LINUX/android/kernel/arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts b/src/LINUX/android/kernel/arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts

index 076bfef..c6e8158 100755

--- a/src/LINUX/android/kernel/arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts

+++ b/src/LINUX/android/kernel/arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts

@@ -38,7 +38,7 @@

&pm8916_chg {

status = "ok";

//qcom,use-external-charger;

- qcom,charging-disabled;

+ //qcom,charging-disabled;

};

&pm8916_bms {

@@ -46,3 +46,12 @@

//qcom,disable-bms;

};

+

+&usb_otg {

+ qcom,hsusb-otg-mode = <3>;

+ qcom,usbid-gpio = <&msm_gpio 110 0>;

+ pinctrl-names = "default";

+ pinctrl-0 = <&usbid_default>;

+ qcom,hsusb-otg-otg-control = <3>;

+ qcom,hsusb-otg-default-mode = <1>;

+};

No newline at end of file

diff --git a/src/LINUX/android/kernel/drivers/usb/phy/phy-msm-usb.c b/src/LINUX/android/kernel/drivers/usb/phy/phy-msm-usb.c

old mode 100644

new mode 100755

index a18e4df..2fead87

--- a/src/LINUX/android/kernel/drivers/usb/phy/phy-msm-usb.c

+++ b/src/LINUX/android/kernel/drivers/usb/phy/phy-msm-usb.c

@@ -105,7 +105,7 @@ static bool mhl_det_in_progress;

static struct regulator *hsusb_3p3;

static struct regulator *hsusb_1p8;

static struct regulator *hsusb_vdd;

-static struct regulator *vbus_otg;

+//static struct regulator *vbus_otg; //del by Beyond for 5V vbus

static struct regulator *mhl_usb_hs_switch;

static struct power_supply *psy;

@@ -1628,12 +1628,13 @@ out:

static void msm_hsusb_vbus_power(struct msm_otg *motg, bool on)

{

- int ret;

+ //int ret; //del by Beyond for 5V vbus start

static bool vbus_is_on;

if (vbus_is_on == on)

return;

+/* //del by Beyond for 5V vbus start

if (motg->pdata->vbus_power) {

ret = motg->pdata->vbus_power(on);

if (!ret)

@@ -1645,7 +1646,7 @@ static void msm_hsusb_vbus_power(struct msm_otg *motg, bool on)

pr_err("vbus_otg is NULL.");

return;

}

-

+*/ //del by Beyond for 5V vbus end

/*

* if entering host mode tell the charger to not draw any current

* from usb before turning on the boost.

@@ -1654,18 +1655,26 @@ static void msm_hsusb_vbus_power(struct msm_otg *motg, bool on)

*/

if (on) {

msm_otg_notify_host_mode(motg, on);

+

+/* //del by Beyond start

ret = regulator_enable(vbus_otg);

if (ret) {

pr_err("unable to enable vbus_otgn");

return;

}

+*/ //del by Beyond end

+

vbus_is_on = true;

} else {

+

+/* //del by Beyond start

ret = regulator_disable(vbus_otg);

if (ret) {

pr_err("unable to disable vbus_otgn");

return;

}

+*/ //del by Beyond end

+

msm_otg_notify_host_mode(motg, on);

vbus_is_on = false;

}

@@ -1684,7 +1693,7 @@ static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)

dev_info(otg->phy->dev, "Host mode is not supportedn");

return -ENODEV;

}

-

+/* //del by Beyond start for 5V vbus

if (!motg->pdata->vbus_power && host) {

vbus_otg = devm_regulator_get(motg->phy.dev, "vbus_otg");

if (IS_ERR(vbus_otg)) {

@@ -1692,7 +1701,7 @@ static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)

return PTR_ERR(vbus_otg);

}

}

-

+*/ //del by Beyond end for 5V vbus

if (!host) {

if (otg->phy->state == OTG_STATE_A_HOST) {

pm_runtime_get_sync(otg->phy->dev);

@@ -2603,6 +2612,11 @@ static void msm_otg_init_sm(struct msm_otg *motg)

set_bit(ID, &motg->inputs);

else

clear_bit(ID, &motg->inputs);

+ } else if (motg->ext_id_irq) {

+ if (gpio_get_value(pdata->usb_id_gpio))

+ set_bit(ID, &motg->inputs);

+ else

+ clear_bit(ID, &motg->inputs);

}

/*

* VBUS initial state is reported after PMIC

--

 

 

 

 

 

插USB时自动切换otg模式和充电模式:

修改如下:

b/src/LINUX/android/kernel/arch/arm/boot/dts/qcom/msm8916-qrd-skui.dts

&usb_otg {

qcom,hsusb-otg-mode = <3>;

qcom,usbid-gpio = <&msm_gpio 110 0>;

pinctrl-names = "default";

pinctrl-0 = <&usbid_default>;

qcom,hsusb-otg-otg-control = <2>;

};

0
 条评论
相关内容推荐