From 1d7ed6a0c691726277ea12d63cc075af91936ead Mon Sep 17 00:00:00 2001 From: "huaming.jiang" Date: Tue, 2 Jan 2024 19:45:37 +0800 Subject: [PATCH] lpi4a add wakeup gpio key and usb resume fix Change-Id: I0479ed6cd676af7ad087968e1bb22f2b04e89337 --- arch/riscv/boot/dts/thead/th1520-lpi4a.dtsi | 20 +++++++++++--- drivers/usb/dwc3/dwc3-thead.c | 29 ++++++++++++++++++++- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/arch/riscv/boot/dts/thead/th1520-lpi4a.dtsi b/arch/riscv/boot/dts/thead/th1520-lpi4a.dtsi index 9ad5f25e7..1f6f6c9ad 100644 --- a/arch/riscv/boot/dts/thead/th1520-lpi4a.dtsi +++ b/arch/riscv/boot/dts/thead/th1520-lpi4a.dtsi @@ -247,7 +247,7 @@ regulator-max-microvolt = <1200000>; gpio = <&pcal6408ahk_d 2 1>; enable-active-high; - regulator-always-on; + }; reg_usb_hub_vcc5v: regulator-hub-vcc5v-en { @@ -257,7 +257,7 @@ regulator-max-microvolt = <5000000>; gpio = <&pcal6408ahk_d 3 1>; enable-active-high; - regulator-always-on; + }; wcn_wifi: wireless-wlan { @@ -282,7 +282,7 @@ gpio-keys { compatible = "gpio-keys"; - pinctrl-0 = <&pinctrl_volume>; + pinctrl-0 = <&pinctrl_volume &pinctrl_sleep>; pinctrl-names = "default"; key-volumedown { label = "Volume Down Key"; @@ -296,6 +296,13 @@ debounce-interval = <1>; gpios = <&gpio2_porta 25 0x1>; }; + key-sleep { + label = "Sleep Wake Key"; + wakeup-source; + linux,code = ; + debounce-interval = <1>; + gpios = <&ao_gpio_porta 2 0x1>; + }; }; aon: aon { @@ -382,7 +389,7 @@ regulator-max-microvolt = <3300000>; gpio = <&gpio1_porta 22 1>; enable-active-high; - regulator-always-on; + }; @@ -1182,6 +1189,11 @@ pinctrl_audiopa30: audiopa30 { thead,pins = < FM_AUDIO_PA30 LIGHT_PIN_FUNC_0 0x000 >; }; + pinctrl_sleep: sleep_grp { + thead,pins = < + FM_CPU_JTG_TCLK 0x3 0x238 + >; + }; }; }; diff --git a/drivers/usb/dwc3/dwc3-thead.c b/drivers/usb/dwc3/dwc3-thead.c index 0959b9f57..5f71a0663 100644 --- a/drivers/usb/dwc3/dwc3-thead.c +++ b/drivers/usb/dwc3/dwc3-thead.c @@ -257,10 +257,23 @@ static int dwc3_thead_remove(struct platform_device *pdev) static int dwc3_thead_pm_suspend(struct device *dev) { struct dwc3_thead *thead = dev_get_drvdata(dev); - + int ret; dwc3_thead_assert(thead); clk_bulk_disable(thead->num_clocks, thead->clks); + ret = regulator_disable(thead->vbus); + if (ret) { + dev_err(dev, "failed to disable regulator vbus %d\n", ret); + } + ret = regulator_disable(thead->hub1v2); + if (ret) { + dev_err(dev, "failed to disable regulator hub1v2 %d\n", ret); + } + ret = regulator_disable(thead->hub5v); + + if (ret) { + dev_err(dev, "failed to disable regulator hub1v2 %d\n", ret); + } return 0; } @@ -270,6 +283,20 @@ static int dwc3_thead_pm_resume(struct device *dev) { struct dwc3_thead *thead = dev_get_drvdata(dev); int ret; + dev_info(dev,"%s\n",__func__); + ret = regulator_enable(thead->vbus); + if (ret) { + dev_err(dev, "failed to enable regulator vbus %d\n", ret); + } + ret = regulator_enable(thead->hub1v2); + if (ret) { + dev_err(dev, "failed to enable regulator hub1v2 %d\n", ret); + } + ret = regulator_enable(thead->hub5v); + + if (ret) { + dev_err(dev, "failed to enable regulator hub1v2 %d\n", ret); + } ret = clk_bulk_prepare_enable(thead->num_clocks, thead->clks); if (ret) {