openwrt/target/linux/apm821xx/dts/wd-mybooklive.dts
Christian Lamparter a8ad881b83 apm821xx: fix WD MyBook Live DUO USB-Port
where to begin? the USB regulator settings were just
a part of the issue. With them changed, according to
the forum it still failed when a USB device was
connected to the port with:

dwc2 4bff80000.usbotg: dwc2_restore_global_registers: no global registers to restore
dwc2 4bff80000.usbotg: dwc2_exit_partial_power_down: failed to restore registers
dwc2 4bff80000.usbotg: exit partial_power_down failed
dwc2 4bff80000.usbotg: HC died; cleaning up

One clue was found upstream in
commit cc10ce0c51b1 ("usb: dwc2: disable power_down on Amlogic devices")

|Disable power_down by setting the parameter to
|DWC2_POWER_DOWN_PARAM_NONE. This fixes a problem on various Amlogic
|Meson SoCs where USB devices are only recognized when plugged in before
|booting Linux. A hot-plugged USB device was not detected even though the
|device got power (my USB thumb drive for example has an LED which lit
|up).
|[...]

the same method proposed there worked with APM821xx's USB IP-Core.

Link: https://forum.openwrt.org/t/wd-my-book-duo-usb/111926/2
Reported-by: thwe and takimata (openwrt forum)
Fixes: b70d3557e0 ("apm821xx: clean up gpio-hogs")
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
(cherry picked from commit 832b9cbd74)
2021-12-27 13:55:24 +01:00

188 lines
3.2 KiB
Plaintext

// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
* (c) Copyright 2010 Western Digital Technologies, Inc. All Rights Reserved.
*/
/dts-v1/;
#include "apm82181.dtsi"
/ {
compatible = "wd,mybooklive", "amcc,apollo3g";
model = "MyBook Live";
aliases {
serial0 = &UART0;
led-boot = &status;
led-failsafe = &status;
led-running = &status;
led-upgrade = &status;
};
};
&POB0 {
ebc {
nor_flash@0,0 {
status = "okay";
compatible = "amd,s29gl512n", "jedec-probe", "cfi-flash", "mtd-rom";
bank-width = <1>;
reg = <0x00000000 0x00000000 0x00080000>;
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
/* Part of bootrom - Don't use it without a jump */
label = "free";
reg = <0x00000000 0x0001e000>;
};
partition@1e000 {
label = "env";
reg = <0x0001e000 0x00002000>;
};
partition@20000 {
label = "uboot";
reg = <0x00020000 0x00050000>;
};
};
};
GPIO1: gpio@e0000000 {
compatible = "wd,mbl-gpio", "ti,74273";
reg-names = "dat";
reg = <0xe0000000 0x1>;
#gpio-cells = <2>;
gpio-controller;
enable-button {
/* Defined in u-boot as: NOT_NOR
* "enables features other than NOR
* specifically, the buffer at CS2"
* (button).
*
* Note: This option is disabled as
* it prevents the system from being
* rebooted successfully.
*/
gpio-hog;
line-name = "Enable Reset Button, disable NOR";
gpios = <1 GPIO_ACTIVE_HIGH>;
output-low;
};
};
GPIO2: gpio@e0100000 {
compatible = "wd,mbl-gpio", "ti,74244";
reg-names = "dat";
reg = <0xe0100000 0x1>;
#gpio-cells = <2>;
gpio-controller;
no-output;
};
leds {
compatible = "gpio-leds";
failsafe: power-red {
label = "mbl:red:power";
gpios = <&GPIO1 4 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "panic";
};
status: power-green {
label = "mbl:green:power";
gpios = <&GPIO1 5 GPIO_ACTIVE_HIGH>;
};
power-blue {
label = "mbl:blue:power";
gpios = <&GPIO1 6 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "disk-activity";
};
};
keys {
compatible = "gpio-keys-polled";
poll-interval = <60>; /* 3 * 20 = 60ms */
autorepeat;
reset-button {
label = "Reset button";
linux,code = <KEY_RESTART>;
gpios = <&GPIO2 2 GPIO_ACTIVE_LOW>;
};
};
usbpwr: usb-regulator {
compatible = "regulator-fixed";
regulator-name = "Power USB Core";
gpios = <&GPIO1 2 GPIO_ACTIVE_HIGH>;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-boot-on; /* uboot sets this */
enable-active-high;
};
};
&EMAC0 {
status = "okay";
phy-map = <0x2>;
phy-address = <0x1>;
phy-handle = <&phy>;
mdio {
#address-cells = <1>;
#size-cells = <0>;
reset-gpios = <&GPIO1 0 GPIO_ACTIVE_LOW>;
phy: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;
};
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&SATA0 {
status = "okay";
drive0: sata-port@0 {
reg = <0>;
#thermal-sensor-cells = <0>;
};
};
&SATA1 {
status = "okay";
drive1: sata-port@0 {
reg = <0>;
#thermal-sensor-cells = <0>;
};
};
&UART0 {
status = "okay";
};
&USBOTG0 {
status = "okay";
dr_mode = "host";
vbus-supply = <&usbpwr>;
};