lkml.org 
[lkml]   [2022]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/6] drm/ingenic: Make IPU driver its own module
    Date
    Instead of building the IPU driver code into the ingenic-drm driver,
    create a ingenic-ipu driver.

    Signed-off-by: Paul Cercueil <paul@crapouillou.net>
    ---
    drivers/gpu/drm/ingenic/Kconfig | 2 +-
    drivers/gpu/drm/ingenic/Makefile | 2 +-
    drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 33 +++++------------------
    drivers/gpu/drm/ingenic/ingenic-drm.h | 3 ---
    drivers/gpu/drm/ingenic/ingenic-ipu.c | 6 ++++-
    5 files changed, 14 insertions(+), 32 deletions(-)

    diff --git a/drivers/gpu/drm/ingenic/Kconfig b/drivers/gpu/drm/ingenic/Kconfig
    index 090830bcbde7..daa1aa81b46b 100644
    --- a/drivers/gpu/drm/ingenic/Kconfig
    +++ b/drivers/gpu/drm/ingenic/Kconfig
    @@ -18,7 +18,7 @@ config DRM_INGENIC
    if DRM_INGENIC

    config DRM_INGENIC_IPU
    - bool "IPU support for Ingenic SoCs"
    + tristate "IPU support for Ingenic SoCs"
    help
    Choose this option to enable support for the IPU found in Ingenic SoCs.

    diff --git a/drivers/gpu/drm/ingenic/Makefile b/drivers/gpu/drm/ingenic/Makefile
    index f10cc1c5a5f2..e650d4ec895b 100644
    --- a/drivers/gpu/drm/ingenic/Makefile
    +++ b/drivers/gpu/drm/ingenic/Makefile
    @@ -1,4 +1,4 @@
    obj-$(CONFIG_DRM_INGENIC) += ingenic-drm.o
    ingenic-drm-y = ingenic-drm-drv.o
    -ingenic-drm-$(CONFIG_DRM_INGENIC_IPU) += ingenic-ipu.o
    +obj-$(CONFIG_DRM_INGENIC_IPU) += ingenic-ipu.o
    obj-$(CONFIG_DRM_INGENIC_DW_HDMI) += ingenic-dw-hdmi.o
    diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
    index 78d0b035e2d7..98ff038d95d6 100644
    --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
    +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
    @@ -550,6 +550,7 @@ void ingenic_drm_plane_disable(struct device *dev, struct drm_plane *plane)
    regmap_clear_bits(priv->map, JZ_REG_LCD_OSDC, en_bit);
    }
    }
    +EXPORT_SYMBOL_GPL(ingenic_drm_plane_disable);

    static void ingenic_drm_plane_atomic_disable(struct drm_plane *plane,
    struct drm_atomic_state *state)
    @@ -633,6 +634,7 @@ void ingenic_drm_plane_config(struct device *dev,
    state->crtc_h << JZ_LCD_SIZE01_HEIGHT_LSB);
    }
    }
    +EXPORT_SYMBOL_GPL(ingenic_drm_plane_config);

    bool ingenic_drm_map_noncoherent(const struct device *dev)
    {
    @@ -640,6 +642,7 @@ bool ingenic_drm_map_noncoherent(const struct device *dev)

    return priv->soc_info->map_noncoherent;
    }
    +EXPORT_SYMBOL_GPL(ingenic_drm_map_noncoherent);

    static void ingenic_drm_update_palette(struct ingenic_drm *priv,
    const struct drm_color_lut *lut)
    @@ -1438,6 +1441,9 @@ static int ingenic_drm_probe(struct platform_device *pdev)
    struct component_match *match = NULL;
    struct device_node *np;

    + if (drm_firmware_drivers_only())
    + return -ENODEV;
    +
    if (!IS_ENABLED(CONFIG_DRM_INGENIC_IPU))
    return ingenic_drm_bind(dev, false);

    @@ -1615,32 +1621,7 @@ static struct platform_driver ingenic_drm_driver = {
    .probe = ingenic_drm_probe,
    .remove = ingenic_drm_remove,
    };
    -
    -static int ingenic_drm_init(void)
    -{
    - int err;
    -
    - if (drm_firmware_drivers_only())
    - return -ENODEV;
    -
    - if (IS_ENABLED(CONFIG_DRM_INGENIC_IPU)) {
    - err = platform_driver_register(ingenic_ipu_driver_ptr);
    - if (err)
    - return err;
    - }
    -
    - return platform_driver_register(&ingenic_drm_driver);
    -}
    -module_init(ingenic_drm_init);
    -
    -static void ingenic_drm_exit(void)
    -{
    - platform_driver_unregister(&ingenic_drm_driver);
    -
    - if (IS_ENABLED(CONFIG_DRM_INGENIC_IPU))
    - platform_driver_unregister(ingenic_ipu_driver_ptr);
    -}
    -module_exit(ingenic_drm_exit);
    +module_platform_driver(ingenic_drm_driver);

    MODULE_AUTHOR("Paul Cercueil <paul@crapouillou.net>");
    MODULE_DESCRIPTION("DRM driver for the Ingenic SoCs\n");
    diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.h b/drivers/gpu/drm/ingenic/ingenic-drm.h
    index e5bd007ea93d..9b89929b81bc 100644
    --- a/drivers/gpu/drm/ingenic/ingenic-drm.h
    +++ b/drivers/gpu/drm/ingenic/ingenic-drm.h
    @@ -220,13 +220,10 @@
    struct device;
    struct drm_plane;
    struct drm_plane_state;
    -struct platform_driver;

    void ingenic_drm_plane_config(struct device *dev,
    struct drm_plane *plane, u32 fourcc);
    void ingenic_drm_plane_disable(struct device *dev, struct drm_plane *plane);
    bool ingenic_drm_map_noncoherent(const struct device *dev);

    -extern struct platform_driver *ingenic_ipu_driver_ptr;
    -
    #endif /* DRIVERS_GPU_DRM_INGENIC_INGENIC_DRM_H */
    diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c
    index d13f58ad4769..fb62c27819ea 100644
    --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c
    +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c
    @@ -15,6 +15,7 @@
    #include <linux/module.h>
    #include <linux/of.h>
    #include <linux/of_device.h>
    +#include <linux/platform_device.h>
    #include <linux/regmap.h>
    #include <linux/time.h>

    @@ -995,5 +996,8 @@ static struct platform_driver ingenic_ipu_driver = {
    .probe = ingenic_ipu_probe,
    .remove = ingenic_ipu_remove,
    };
    +module_platform_driver(ingenic_ipu_driver);

    -struct platform_driver *ingenic_ipu_driver_ptr = &ingenic_ipu_driver;
    +MODULE_AUTHOR("Paul Cercueil <paul@crapouillou.net>");
    +MODULE_DESCRIPTION("DRM driver for the IPU of Ingenic SoCs\n");
    +MODULE_LICENSE("GPL");
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-07-08 22:55    [W:2.811 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site