1,修改/kernel/arch/arm/boot/dts/rk3288-box.dts
usb_control {
compatible = "rockchip,rk3288-usb-control";
host_drv_gpio = <&gpio0 GPIO_B6 GPIO_ACTIVE_LOW>;//modify by jiangdou
otg_drv_gpio = <&gpio0 GPIO_B4 GPIO_ACTIVE_LOW>;
++ 3G_VCC_33_POWER = <&gpio7 GPIO_A5 GPIO_ACTIVE_HIGH>;//modify by jiangdou for 3G_POWER
2,修改/kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c
++#define INVALID_GPIO -1 //add for 3G_power by jiangdou
++int power_3g_en = INVALID_GPIO;//add for 3G_power by jiangdou
static int rk_usb_control_probe(struct platform_device *pdev)
{
int gpio, err;
struct device_node *np = pdev->dev.of_node;
int ret = 0;
control_usb =
devm_kzalloc(&pdev->dev, sizeof(*control_usb), GFP_KERNEL);
if (!control_usb) {
dev_err(&pdev->dev, "unable to alloc memory for control usb\n");
ret = -ENOMEM;
goto out;
}
control_usb->chip_id = RK3288_USB_CTLR;
control_usb->remote_wakeup = of_property_read_bool(np,
"rockchip,remote_wakeup");
control_usb->usb_irq_wakeup = of_property_read_bool(np,
"rockchip,usb_irq_wakeup");
INIT_DELAYED_WORK(&control_usb->usb_charger_det_work,
usb_battery_charger_detect_work);
control_usb->host_gpios =
devm_kzalloc(&pdev->dev, sizeof(struct gpio), GFP_KERNEL);
if (!control_usb->host_gpios) {
dev_err(&pdev->dev, "unable to alloc memory for host_gpios\n");
ret = -ENOMEM;
goto out;
}
++/*------------------------------我是分割线----------------------------------*/
++//add for 3G_power by jiangdou start
++ power_3g_en = of_get_named_gpio(np, "3G_VCC_33_POWER", 0);
++ if (!gpio_is_valid(power_3g_en)) {
++ dev_err(&pdev->dev, "invalid host gpio%d\n", power_3g_en);
++ } else {
++ err = devm_gpio_request(&pdev->dev, power_3g_en, "3G_VCC_33_POWER");
++ if (err) {
++ dev_err(&pdev->dev,
++ "failed to request GPIO%d for host_drv\n",
++ power_3g_en);
++ ret = err;
++ //goto out;
++ }
++ gpio_direction_output(power_3g_en, 1);
++ }
++
++//add for 3G_power by jiangdou end
++/*------------------------------我是分割线----------------------------------*/
gpio = of_get_named_gpio(np, "host_drv_gpio", 0);
3..by jiangdou QQ:344283973