lkml.org 
[lkml]   [2023]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 7/8] drm/etnaviv: Add dedicated functions to create and destroy platform device
    Date
    From: Sui Jingfeng <suijingfeng@loongson.cn>

    Also rename the virtual master device as etnaviv_platform_device,
    for better reflection that it is a platform device, not a DRM device.
    Another benefit is that we no longer need to call of_node_put() for three
    different cases, Instead, we only need to call it once.

    Signed-off-by: Sui Jingfeng <suijingfeng@loongson.cn>
    ---
    drivers/gpu/drm/etnaviv/etnaviv_drv.c | 56 +++++++++++++++++++--------
    1 file changed, 39 insertions(+), 17 deletions(-)

    diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
    index 14c2e9690ce1..7d0eeab3e8b7 100644
    --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
    +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
    @@ -655,12 +655,44 @@ static struct platform_driver etnaviv_platform_driver = {
    },
    };

    -static struct platform_device *etnaviv_drm;
    +static struct platform_device *etnaviv_platform_device;

    -static int __init etnaviv_init(void)
    +static int etnaviv_create_platform_device(const char *name,
    + struct platform_device **ppdev)
    {
    struct platform_device *pdev;
    int ret;
    +
    + pdev = platform_device_alloc(name, PLATFORM_DEVID_NONE);
    + if (!pdev)
    + return -ENOMEM;
    +
    + ret = platform_device_add(pdev);
    + if (ret) {
    + platform_device_put(pdev);
    + return ret;
    + }
    +
    + *ppdev = pdev;
    +
    + return 0;
    +}
    +
    +static void etnaviv_destroy_platform_device(struct platform_device **ppdev)
    +{
    + struct platform_device *pdev = *ppdev;
    +
    + if (!pdev)
    + return;
    +
    + platform_device_unregister(pdev);
    +
    + *ppdev = NULL;
    +}
    +
    +static int __init etnaviv_init(void)
    +{
    + int ret;
    struct device_node *np;

    etnaviv_validate_init();
    @@ -680,23 +712,13 @@ static int __init etnaviv_init(void)
    for_each_compatible_node(np, NULL, "vivante,gc") {
    if (!of_device_is_available(np))
    continue;
    + of_node_put(np);

    - pdev = platform_device_alloc("etnaviv", PLATFORM_DEVID_NONE);
    - if (!pdev) {
    - ret = -ENOMEM;
    - of_node_put(np);
    - goto unregister_platform_driver;
    - }
    -
    - ret = platform_device_add(pdev);
    - if (ret) {
    - platform_device_put(pdev);
    - of_node_put(np);
    + ret = etnaviv_create_platform_device("etnaviv",
    + &etnaviv_platform_device);
    + if (ret)
    goto unregister_platform_driver;
    - }

    - etnaviv_drm = pdev;
    - of_node_put(np);
    break;
    }

    @@ -712,7 +734,7 @@ module_init(etnaviv_init);

    static void __exit etnaviv_exit(void)
    {
    - platform_device_unregister(etnaviv_drm);
    + etnaviv_destroy_platform_device(&etnaviv_platform_device);
    platform_driver_unregister(&etnaviv_platform_driver);
    platform_driver_unregister(&etnaviv_gpu_driver);
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-06-23 12:19    [W:6.624 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site