Commit f181dbb4 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Greg Kroah-Hartman
Browse files

usb: renesas_usbhs: Add reset_control



R-Car Gen3 needs to deassert resets of both host and peripheral.
Since [eo]hci-platform is possible to assert the reset(s) when
the probing failed, renesas_usbhs driver doesn't work correctly
regardless of finished probing. To fix this issue, this patch adds
reset_control on this renesas_usbhs driver.

Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c29e2404
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <linux/pm_runtime.h>
#include <linux/reset.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
#include "common.h"
@@ -574,6 +575,10 @@ static int usbhs_probe(struct platform_device *pdev)
			return PTR_ERR(priv->edev);
	}

	priv->rsts = devm_reset_control_array_get_optional_shared(&pdev->dev);
	if (IS_ERR(priv->rsts))
		return PTR_ERR(priv->rsts);

	/*
	 * care platform info
	 */
@@ -658,6 +663,10 @@ static int usbhs_probe(struct platform_device *pdev)
	/* dev_set_drvdata should be called after usbhs_mod_init */
	platform_set_drvdata(pdev, priv);

	ret = reset_control_deassert(priv->rsts);
	if (ret)
		goto probe_fail_rst;

	/*
	 * deviece reset here because
	 * USB device might be used in boot loader.
@@ -711,6 +720,8 @@ static int usbhs_probe(struct platform_device *pdev)
	return ret;

probe_end_mod_exit:
	reset_control_assert(priv->rsts);
probe_fail_rst:
	usbhs_mod_remove(priv);
probe_end_fifo_exit:
	usbhs_fifo_remove(priv);
@@ -739,6 +750,7 @@ static int usbhs_remove(struct platform_device *pdev)
	pm_runtime_disable(&pdev->dev);

	usbhs_platform_call(priv, hardware_exit, pdev);
	reset_control_assert(priv->rsts);
	usbhs_mod_remove(priv);
	usbhs_fifo_remove(priv);
	usbhs_pipe_remove(priv);
+2 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@

#include <linux/extcon.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#include <linux/usb/renesas_usbhs.h>

struct usbhs_priv;
@@ -277,6 +278,7 @@ struct usbhs_priv {
	struct usbhs_fifo_info fifo_info;

	struct phy *phy;
	struct reset_control *rsts;
};

/*