usb: renesas_usbhs: Use renesas_usbhs_platform_info on of_device_id.data

In device tree environment, the previous code allocates
renesas_usbhs_platform_info by using devm_kzalloc() and then copies
usbhs_of_data to the allocated memory. This reason is some values
(e.g. .platform_callback.get_vbus) are overwritten by the driver,
but the of_device_id.data is "const". Now the driver doesn't have
such a code, so this patch uses renesas_usbhs_platform_info on
of_device_id.data.

Note that the previous code set the pdev->dev.platform_data pointer
even if device tree environment, but the value is not used. So,
this patch also remove such a code.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Yoshihiro Shimoda 2019-06-25 14:38:56 +09:00 committed by Greg Kroah-Hartman
parent be0a42a7d6
commit 76eff170bb
9 changed files with 73 additions and 107 deletions

View File

@ -530,128 +530,65 @@ int usbhsc_schedule_notify_hotplug(struct platform_device *pdev)
return 0; return 0;
} }
static const struct usbhs_of_data rcar_gen2_data = {
.platform_callback = &usbhs_rcar2_ops,
.param = {
.has_usb_dmac = 1,
.has_new_pipe_configs = 1,
}
};
static const struct usbhs_of_data rcar_gen3_data = {
.platform_callback = &usbhs_rcar3_ops,
.param = {
.has_usb_dmac = 1,
.multi_clks = 1,
.has_new_pipe_configs = 1,
}
};
static const struct usbhs_of_data rcar_gen3_with_pll_data = {
.platform_callback = &usbhs_rcar3_with_pll_ops,
.param = {
.has_usb_dmac = 1,
.multi_clks = 1,
.has_new_pipe_configs = 1,
}
};
static const struct usbhs_of_data rza1_data = {
.platform_callback = &usbhs_rza1_ops,
.param = {
.has_new_pipe_configs = 1,
}
};
static const struct usbhs_of_data rza2_data = {
.platform_callback = &usbhs_rza2_ops,
.param = {
.has_cnen = 1,
.cfifo_byte_addr = 1,
.has_new_pipe_configs = 1,
}
};
/* /*
* platform functions * platform functions
*/ */
static const struct of_device_id usbhs_of_match[] = { static const struct of_device_id usbhs_of_match[] = {
{ {
.compatible = "renesas,usbhs-r8a774c0", .compatible = "renesas,usbhs-r8a774c0",
.data = &rcar_gen3_with_pll_data, .data = &usbhs_rcar_gen3_with_pll_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a7790", .compatible = "renesas,usbhs-r8a7790",
.data = &rcar_gen2_data, .data = &usbhs_rcar_gen2_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a7791", .compatible = "renesas,usbhs-r8a7791",
.data = &rcar_gen2_data, .data = &usbhs_rcar_gen2_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a7794", .compatible = "renesas,usbhs-r8a7794",
.data = &rcar_gen2_data, .data = &usbhs_rcar_gen2_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a7795", .compatible = "renesas,usbhs-r8a7795",
.data = &rcar_gen3_data, .data = &usbhs_rcar_gen3_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a7796", .compatible = "renesas,usbhs-r8a7796",
.data = &rcar_gen3_data, .data = &usbhs_rcar_gen3_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a77990", .compatible = "renesas,usbhs-r8a77990",
.data = &rcar_gen3_with_pll_data, .data = &usbhs_rcar_gen3_with_pll_plat_info,
}, },
{ {
.compatible = "renesas,usbhs-r8a77995", .compatible = "renesas,usbhs-r8a77995",
.data = &rcar_gen3_with_pll_data, .data = &usbhs_rcar_gen3_with_pll_plat_info,
}, },
{ {
.compatible = "renesas,rcar-gen2-usbhs", .compatible = "renesas,rcar-gen2-usbhs",
.data = &rcar_gen2_data, .data = &usbhs_rcar_gen2_plat_info,
}, },
{ {
.compatible = "renesas,rcar-gen3-usbhs", .compatible = "renesas,rcar-gen3-usbhs",
.data = &rcar_gen3_data, .data = &usbhs_rcar_gen3_plat_info,
}, },
{ {
.compatible = "renesas,rza1-usbhs", .compatible = "renesas,rza1-usbhs",
.data = &rza1_data, .data = &usbhs_rza1_plat_info,
}, },
{ {
.compatible = "renesas,rza2-usbhs", .compatible = "renesas,rza2-usbhs",
.data = &rza2_data, .data = &usbhs_rza2_plat_info,
}, },
{ }, { },
}; };
MODULE_DEVICE_TABLE(of, usbhs_of_match); MODULE_DEVICE_TABLE(of, usbhs_of_match);
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;
info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
if (!info)
return NULL;
data = of_device_get_match_data(dev);
if (!data)
return NULL;
dparam = &info->driver_param;
*dparam = data->param;
info->platform_callback = *data->platform_callback;
return info;
}
static int usbhs_probe(struct platform_device *pdev) static int usbhs_probe(struct platform_device *pdev)
{ {
struct renesas_usbhs_platform_info *info = renesas_usbhs_get_info(pdev); const struct renesas_usbhs_platform_info *info;
struct usbhs_priv *priv; struct usbhs_priv *priv;
struct resource *res, *irq_res; struct resource *res, *irq_res;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
@ -660,7 +597,9 @@ static int usbhs_probe(struct platform_device *pdev)
/* check device node */ /* check device node */
if (dev_of_node(dev)) if (dev_of_node(dev))
info = pdev->dev.platform_data = usbhs_parse_dt(&pdev->dev); info = of_device_get_match_data(dev);
else
info = renesas_usbhs_get_info(pdev);
/* check platform information */ /* check platform information */
if (!info) { if (!info) {

View File

@ -282,11 +282,6 @@ struct usbhs_priv {
struct clk *clks[2]; struct clk *clks[2];
}; };
struct usbhs_of_data {
const struct renesas_usbhs_platform_callback *platform_callback;
const struct renesas_usbhs_driver_param param;
};
/* /*
* common * common
*/ */

View File

@ -63,9 +63,15 @@ static int usbhs_rcar2_power_ctrl(struct platform_device *pdev,
return retval; return retval;
} }
const struct renesas_usbhs_platform_callback usbhs_rcar2_ops = { const struct renesas_usbhs_platform_info usbhs_rcar_gen2_plat_info = {
.hardware_init = usbhs_rcar2_hardware_init, .platform_callback = {
.hardware_exit = usbhs_rcar2_hardware_exit, .hardware_init = usbhs_rcar2_hardware_init,
.power_ctrl = usbhs_rcar2_power_ctrl, .hardware_exit = usbhs_rcar2_hardware_exit,
.get_id = usbhs_get_id_as_gadget, .power_ctrl = usbhs_rcar2_power_ctrl,
.get_id = usbhs_get_id_as_gadget,
},
.driver_param = {
.has_usb_dmac = 1,
.has_new_pipe_configs = 1,
},
}; };

View File

@ -1,5 +1,4 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include "common.h" #include "common.h"
extern const struct renesas_usbhs_platform_callback extern const struct renesas_usbhs_platform_info usbhs_rcar_gen2_plat_info;
usbhs_rcar2_ops;

View File

@ -95,12 +95,26 @@ static int usbhs_rcar3_power_and_pll_ctrl(struct platform_device *pdev,
return 0; return 0;
} }
const struct renesas_usbhs_platform_callback usbhs_rcar3_ops = { const struct renesas_usbhs_platform_info usbhs_rcar_gen3_plat_info = {
.power_ctrl = usbhs_rcar3_power_ctrl, .platform_callback = {
.get_id = usbhs_get_id_as_gadget, .power_ctrl = usbhs_rcar3_power_ctrl,
.get_id = usbhs_get_id_as_gadget,
},
.driver_param = {
.has_usb_dmac = 1,
.multi_clks = 1,
.has_new_pipe_configs = 1,
},
}; };
const struct renesas_usbhs_platform_callback usbhs_rcar3_with_pll_ops = { const struct renesas_usbhs_platform_info usbhs_rcar_gen3_with_pll_plat_info = {
.power_ctrl = usbhs_rcar3_power_and_pll_ctrl, .platform_callback = {
.get_id = usbhs_get_id_as_gadget, .power_ctrl = usbhs_rcar3_power_and_pll_ctrl,
.get_id = usbhs_get_id_as_gadget,
},
.driver_param = {
.has_usb_dmac = 1,
.multi_clks = 1,
.has_new_pipe_configs = 1,
},
}; };

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include "common.h" #include "common.h"
extern const struct renesas_usbhs_platform_callback usbhs_rcar3_ops; extern const struct renesas_usbhs_platform_info usbhs_rcar_gen3_plat_info;
extern const struct renesas_usbhs_platform_callback usbhs_rcar3_with_pll_ops; extern const struct renesas_usbhs_platform_info
usbhs_rcar_gen3_with_pll_plat_info;

View File

@ -41,7 +41,12 @@ static int usbhs_rza1_hardware_init(struct platform_device *pdev)
return 0; return 0;
} }
const struct renesas_usbhs_platform_callback usbhs_rza1_ops = { const struct renesas_usbhs_platform_info usbhs_rza1_plat_info = {
.hardware_init = usbhs_rza1_hardware_init, .platform_callback = {
.get_id = usbhs_get_id_as_gadget, .hardware_init = usbhs_rza1_hardware_init,
.get_id = usbhs_get_id_as_gadget,
},
.driver_param = {
.has_new_pipe_configs = 1,
},
}; };

View File

@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include "common.h" #include "common.h"
extern const struct renesas_usbhs_platform_callback usbhs_rza1_ops; extern const struct renesas_usbhs_platform_info usbhs_rza1_plat_info;
extern const struct renesas_usbhs_platform_callback usbhs_rza2_ops; extern const struct renesas_usbhs_platform_info usbhs_rza2_plat_info;

View File

@ -59,9 +59,16 @@ static int usbhs_rza2_power_ctrl(struct platform_device *pdev,
return retval; return retval;
} }
const struct renesas_usbhs_platform_callback usbhs_rza2_ops = { const struct renesas_usbhs_platform_info usbhs_rza2_plat_info = {
.hardware_init = usbhs_rza2_hardware_init, .platform_callback = {
.hardware_exit = usbhs_rza2_hardware_exit, .hardware_init = usbhs_rza2_hardware_init,
.power_ctrl = usbhs_rza2_power_ctrl, .hardware_exit = usbhs_rza2_hardware_exit,
.get_id = usbhs_get_id_as_gadget, .power_ctrl = usbhs_rza2_power_ctrl,
.get_id = usbhs_get_id_as_gadget,
},
.driver_param = {
.has_cnen = 1,
.cfifo_byte_addr = 1,
.has_new_pipe_configs = 1,
},
}; };