Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 974203c0 authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Felipe Balbi
Browse files

usb: gadget: udc: renesas_usb3: add support for R-Car H3 ES2.0



This patch adds support for R-Car H3 ES2.0. Since this SoC revision
doesn't need workaround for vbus detection and number of ramif is
increased. So, this driver uses soc_device_match() to detect it.

Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 43ba968b
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <linux/pm_runtime.h>
#include <linux/sizes.h>
#include <linux/slab.h>
#include <linux/sys_soc.h>
#include <linux/uaccess.h>
#include <linux/usb/ch9.h>
#include <linux/usb/gadget.h>
@@ -2493,22 +2494,36 @@ static void renesas_usb3_init_ram(struct renesas_usb3 *usb3, struct device *dev,
	}
}

static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795 = {
static const struct renesas_usb3_priv renesas_usb3_priv_r8a7795_es1 = {
	.ramsize_per_ramif = SZ_16K,
	.num_ramif = 2,
	.ramsize_per_pipe = SZ_4K,
	.workaround_for_vbus = true,
};

static const struct renesas_usb3_priv renesas_usb3_priv_gen3 = {
	.ramsize_per_ramif = SZ_16K,
	.num_ramif = 4,
	.ramsize_per_pipe = SZ_4K,
};

static const struct of_device_id usb3_of_match[] = {
	{
		.compatible = "renesas,r8a7795-usb3-peri",
		.data = &renesas_usb3_priv_r8a7795,
		.data = &renesas_usb3_priv_gen3,
	},
	{ },
};
MODULE_DEVICE_TABLE(of, usb3_of_match);

static const struct soc_device_attribute renesas_usb3_quirks_match[] = {
	{
		.soc_id = "r8a7795", .revision = "ES1.*",
		.data = &renesas_usb3_priv_r8a7795_es1,
	},
	{ /* sentinel */ },
};

static const unsigned int renesas_usb3_cable[] = {
	EXTCON_USB,
	EXTCON_USB_HOST,
@@ -2522,10 +2537,16 @@ static int renesas_usb3_probe(struct platform_device *pdev)
	const struct of_device_id *match;
	int irq, ret;
	const struct renesas_usb3_priv *priv;
	const struct soc_device_attribute *attr;

	match = of_match_node(usb3_of_match, pdev->dev.of_node);
	if (!match)
		return -ENODEV;

	attr = soc_device_match(renesas_usb3_quirks_match);
	if (attr)
		priv = attr->data;
	else
		priv = match->data;

	irq = platform_get_irq(pdev, 0);