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

usb: renesas_usbhs: Use specific struct instead of USBHS_TYPE_* enums



This patch adds a specific struct "usbhs_of_data" to add a new SoC
data easily instead of code basis in the future.

Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: default avatarSimon Horman <horms+renesas@verge.net.au>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4e4feeec
Loading
Loading
Loading
Loading
+65 −47
Original line number Diff line number Diff line
@@ -535,53 +535,92 @@ static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
	return 0;
}

static const struct usbhs_of_data rcar_gen2_data = {
	.platform_callback = &usbhs_rcar2_ops,
	.param = {
		.type = USBHS_TYPE_RCAR_GEN2,
		.has_usb_dmac = 1,
		.pipe_configs = usbhsc_new_pipe,
		.pipe_size = ARRAY_SIZE(usbhsc_new_pipe),
	}
};

static const struct usbhs_of_data rcar_gen3_data = {
	.platform_callback = &usbhs_rcar3_ops,
	.param = {
		.type = USBHS_TYPE_RCAR_GEN3,
		.has_usb_dmac = 1,
		.pipe_configs = usbhsc_new_pipe,
		.pipe_size = ARRAY_SIZE(usbhsc_new_pipe),
	}
};

static const struct usbhs_of_data rcar_gen3_with_pll_data = {
	.platform_callback = &usbhs_rcar3_with_pll_ops,
	.param = {
		.type = USBHS_TYPE_RCAR_GEN3_WITH_PLL,
		.has_usb_dmac = 1,
		.pipe_configs = usbhsc_new_pipe,
		.pipe_size = ARRAY_SIZE(usbhsc_new_pipe),
	}
};

static const struct usbhs_of_data rza1_data = {
	.platform_callback = &usbhs_rza1_ops,
	.param = {
		.type = USBHS_TYPE_RZA1,
		.pipe_configs = usbhsc_new_pipe,
		.pipe_size = ARRAY_SIZE(usbhsc_new_pipe),
	}
};

/*
 *		platform functions
 */
static const struct of_device_id usbhs_of_match[] = {
	{
		.compatible = "renesas,usbhs-r8a774c0",
		.data = (void *)USBHS_TYPE_RCAR_GEN3_WITH_PLL,
		.data = &rcar_gen3_with_pll_data,
	},
	{
		.compatible = "renesas,usbhs-r8a7790",
		.data = (void *)USBHS_TYPE_RCAR_GEN2,
		.data = &rcar_gen2_data,
	},
	{
		.compatible = "renesas,usbhs-r8a7791",
		.data = (void *)USBHS_TYPE_RCAR_GEN2,
		.data = &rcar_gen2_data,
	},
	{
		.compatible = "renesas,usbhs-r8a7794",
		.data = (void *)USBHS_TYPE_RCAR_GEN2,
		.data = &rcar_gen2_data,
	},
	{
		.compatible = "renesas,usbhs-r8a7795",
		.data = (void *)USBHS_TYPE_RCAR_GEN3,
		.data = &rcar_gen3_data,
	},
	{
		.compatible = "renesas,usbhs-r8a7796",
		.data = (void *)USBHS_TYPE_RCAR_GEN3,
		.data = &rcar_gen3_data,
	},
	{
		.compatible = "renesas,usbhs-r8a77990",
		.data = (void *)USBHS_TYPE_RCAR_GEN3_WITH_PLL,
		.data = &rcar_gen3_with_pll_data,
	},
	{
		.compatible = "renesas,usbhs-r8a77995",
		.data = (void *)USBHS_TYPE_RCAR_GEN3_WITH_PLL,
		.data = &rcar_gen3_with_pll_data,
	},
	{
		.compatible = "renesas,rcar-gen2-usbhs",
		.data = (void *)USBHS_TYPE_RCAR_GEN2,
		.data = &rcar_gen2_data,
	},
	{
		.compatible = "renesas,rcar-gen3-usbhs",
		.data = (void *)USBHS_TYPE_RCAR_GEN3,
		.data = &rcar_gen3_data,
	},
	{
		.compatible = "renesas,rza1-usbhs",
		.data = (void *)USBHS_TYPE_RZA1,
		.data = &rza1_data,
	},
	{ },
};
@@ -591,6 +630,7 @@ static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
{
	struct renesas_usbhs_platform_info *info;
	struct renesas_usbhs_driver_param *dparam;
	const struct usbhs_of_data *data;
	u32 tmp;
	int gpio;

@@ -598,8 +638,15 @@ static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
	if (!info)
		return NULL;

	data = of_device_get_match_data(dev);
	if (!data)
		return NULL;

	dparam = &info->driver_param;
	dparam->type = (uintptr_t)of_device_get_match_data(dev);
	memcpy(dparam, &data->param, sizeof(data->param));
	memcpy(&info->platform_callback, data->platform_callback,
	       sizeof(*data->platform_callback));

	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
		dparam->buswait_bwait = tmp;
	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
@@ -607,19 +654,6 @@ static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
	if (gpio > 0)
		dparam->enable_gpio = gpio;

	if (dparam->type == USBHS_TYPE_RCAR_GEN2 ||
	    dparam->type == USBHS_TYPE_RCAR_GEN3 ||
	    dparam->type == USBHS_TYPE_RCAR_GEN3_WITH_PLL) {
		dparam->has_usb_dmac = 1;
		dparam->pipe_configs = usbhsc_new_pipe;
		dparam->pipe_size = ARRAY_SIZE(usbhsc_new_pipe);
	}

	if (dparam->type == USBHS_TYPE_RZA1) {
		dparam->pipe_configs = usbhsc_new_pipe;
		dparam->pipe_size = ARRAY_SIZE(usbhsc_new_pipe);
	}

	return info;
}

@@ -676,20 +710,6 @@ static int usbhs_probe(struct platform_device *pdev)
	       &info->driver_param,
	       sizeof(struct renesas_usbhs_driver_param));

	switch (priv->dparam.type) {
	case USBHS_TYPE_RCAR_GEN2:
		priv->pfunc = usbhs_rcar2_ops;
		break;
	case USBHS_TYPE_RCAR_GEN3:
		priv->pfunc = usbhs_rcar3_ops;
		break;
	case USBHS_TYPE_RCAR_GEN3_WITH_PLL:
		priv->pfunc = usbhs_rcar3_with_pll_ops;
		break;
	case USBHS_TYPE_RZA1:
		priv->pfunc = usbhs_rza1_ops;
		break;
	default:
	if (!info->platform_callback.get_id) {
		dev_err(&pdev->dev, "no platform callbacks");
		return -EINVAL;
@@ -697,8 +717,6 @@ static int usbhs_probe(struct platform_device *pdev)
	memcpy(&priv->pfunc,
	       &info->platform_callback,
	       sizeof(struct renesas_usbhs_platform_callback));
		break;
	}

	/* set driver callback functions for platform */
	dfunc			= &info->driver_callback;
+5 −0
Original line number Diff line number Diff line
@@ -282,6 +282,11 @@ struct usbhs_priv {
	struct clk *clks[2];
};

struct usbhs_of_data {
	const struct renesas_usbhs_platform_callback	*platform_callback;
	const struct renesas_usbhs_driver_param		param;
};

/*
 * common
 */