|
|
@@ -17,7 +17,6 @@
|
|
|
*/
|
|
|
|
|
|
#include <linux/clk.h>
|
|
|
-#include <linux/clk/tegra.h>
|
|
|
#include <linux/dma-mapping.h>
|
|
|
#include <linux/err.h>
|
|
|
#include <linux/gpio.h>
|
|
|
@@ -29,6 +28,7 @@
|
|
|
#include <linux/of_gpio.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/pm_runtime.h>
|
|
|
+#include <linux/reset.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/usb/ehci_def.h>
|
|
|
#include <linux/usb/tegra_usb_phy.h>
|
|
|
@@ -62,6 +62,7 @@ static int (*orig_hub_control)(struct usb_hcd *hcd,
|
|
|
struct tegra_ehci_hcd {
|
|
|
struct tegra_usb_phy *phy;
|
|
|
struct clk *clk;
|
|
|
+ struct reset_control *rst;
|
|
|
int port_resuming;
|
|
|
bool needs_double_reset;
|
|
|
enum tegra_usb_phy_port_speed port_speed;
|
|
|
@@ -385,13 +386,20 @@ static int tegra_ehci_probe(struct platform_device *pdev)
|
|
|
goto cleanup_hcd_create;
|
|
|
}
|
|
|
|
|
|
+ tegra->rst = devm_reset_control_get(&pdev->dev, "usb");
|
|
|
+ if (IS_ERR(tegra->rst)) {
|
|
|
+ dev_err(&pdev->dev, "Can't get ehci reset\n");
|
|
|
+ err = PTR_ERR(tegra->rst);
|
|
|
+ goto cleanup_hcd_create;
|
|
|
+ }
|
|
|
+
|
|
|
err = clk_prepare_enable(tegra->clk);
|
|
|
if (err)
|
|
|
goto cleanup_hcd_create;
|
|
|
|
|
|
- tegra_periph_reset_assert(tegra->clk);
|
|
|
+ reset_control_assert(tegra->rst);
|
|
|
udelay(1);
|
|
|
- tegra_periph_reset_deassert(tegra->clk);
|
|
|
+ reset_control_deassert(tegra->rst);
|
|
|
|
|
|
u_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "nvidia,phy", 0);
|
|
|
if (IS_ERR(u_phy)) {
|