seq_printf(sf, "%sAD_V_CROP:\t\t0x%X\n", prefix, v[2]);
 }
 
-static struct komeda_component_funcs d71_layer_funcs = {
+static const struct komeda_component_funcs d71_layer_funcs = {
        .update         = d71_layer_update,
        .disable        = d71_layer_disable,
        .dump_register  = d71_layer_dump,
        seq_printf(sf, "CU_USER_HIGH:\t\t0x%X\n", v[1]);
 }
 
-static struct komeda_component_funcs d71_compiz_funcs = {
+static const struct komeda_component_funcs d71_compiz_funcs = {
        .update         = d71_compiz_update,
        .disable        = d71_component_disable,
        .dump_register  = d71_compiz_dump,
                seq_printf(sf, "IPS_RGB_YUV_COEFF%u:\t0x%X\n", i, v[i]);
 }
 
-static struct komeda_component_funcs d71_improc_funcs = {
+static const struct komeda_component_funcs d71_improc_funcs = {
        .update         = d71_improc_update,
        .disable        = d71_component_disable,
        .dump_register  = d71_improc_dump,
        seq_printf(sf, "BS_USER:\t\t0x%X\n", v[4]);
 }
 
-static struct komeda_component_funcs d71_timing_ctrlr_funcs = {
+static const struct komeda_component_funcs d71_timing_ctrlr_funcs = {
        .update         = d71_timing_ctrlr_update,
        .disable        = d71_timing_ctrlr_disable,
        .dump_register  = d71_timing_ctrlr_dump,
 
        table->n_formats = ARRAY_SIZE(d71_format_caps_table);
 }
 
-static struct komeda_dev_funcs d71_chip_funcs = {
+static const struct komeda_dev_funcs d71_chip_funcs = {
        .init_format_table = d71_init_fmt_tbl,
        .enum_resources = d71_enum_resources,
        .cleanup        = d71_cleanup,
        .flush          = d71_flush,
 };
 
-struct komeda_dev_funcs *
+const struct komeda_dev_funcs *
 d71_identify(u32 __iomem *reg_base, struct komeda_chip_info *chip)
 {
        chip->arch_id   = malidp_read32(reg_base, GLB_ARCH_ID);
 
        return true;
 }
 
-static struct drm_crtc_helper_funcs komeda_crtc_helper_funcs = {
+static const struct drm_crtc_helper_funcs komeda_crtc_helper_funcs = {
        .atomic_check   = komeda_crtc_atomic_check,
        .atomic_flush   = komeda_crtc_atomic_flush,
        .atomic_enable  = komeda_crtc_atomic_enable,
 
 void komeda_dev_destroy(struct komeda_dev *mdev)
 {
        struct device *dev = mdev->dev;
-       struct komeda_dev_funcs *funcs = mdev->funcs;
+       const struct komeda_dev_funcs *funcs = mdev->funcs;
        int i;
 
        sysfs_remove_group(&dev->kobj, &komeda_sysfs_attr_group);
 
 
 struct komeda_product_data {
        u32 product_id;
-       struct komeda_dev_funcs *(*identify)(u32 __iomem *reg,
+       const struct komeda_dev_funcs *(*identify)(u32 __iomem *reg,
                                             struct komeda_chip_info *info);
 };
 
        struct komeda_pipeline *pipelines[KOMEDA_MAX_PIPELINES];
 
        /** @funcs: chip funcs to access to HW */
-       struct komeda_dev_funcs *funcs;
+       const struct komeda_dev_funcs *funcs;
        /**
         * @chip_data:
         *
        return MALIDP_CORE_ID_PRODUCT_ID(mdev->chip.core_id) == target;
 }
 
-struct komeda_dev_funcs *
+const struct komeda_dev_funcs *
 d71_identify(u32 __iomem *reg, struct komeda_chip_info *chip);
 
 struct komeda_dev *komeda_dev_create(struct device *dev);
 
 /** komeda_pipeline_add - Add a pipeline to &komeda_dev */
 struct komeda_pipeline *
 komeda_pipeline_add(struct komeda_dev *mdev, size_t size,
-                   struct komeda_pipeline_funcs *funcs)
+                   const struct komeda_pipeline_funcs *funcs)
 {
        struct komeda_pipeline *pipe;
 
 struct komeda_component *
 komeda_component_add(struct komeda_pipeline *pipe,
                     size_t comp_sz, u32 id, u32 hw_id,
-                    struct komeda_component_funcs *funcs,
+                    const struct komeda_component_funcs *funcs,
                     u8 max_active_inputs, u32 supported_inputs,
                     u8 max_active_outputs, u32 __iomem *reg,
                     const char *name_fmt, ...)
 
        /**
         * @funcs: chip functions to access HW
         */
-       struct komeda_component_funcs *funcs;
+       const struct komeda_component_funcs *funcs;
 };
 
 /**
        struct komeda_improc *improc;
        /** @ctrlr: timing controller */
        struct komeda_timing_ctrlr *ctrlr;
-       /** @funcs: chip pipeline functions */
-       struct komeda_pipeline_funcs *funcs; /* private pipeline functions */
+       /** @funcs: chip private pipeline functions */
+       const struct komeda_pipeline_funcs *funcs;
 
        /** @of_node: pipeline dt node */
        struct device_node *of_node;
 /* pipeline APIs */
 struct komeda_pipeline *
 komeda_pipeline_add(struct komeda_dev *mdev, size_t size,
-                   struct komeda_pipeline_funcs *funcs);
+                   const struct komeda_pipeline_funcs *funcs);
 void komeda_pipeline_destroy(struct komeda_dev *mdev,
                             struct komeda_pipeline *pipe);
 int komeda_assemble_pipelines(struct komeda_dev *mdev);
 struct komeda_component *
 komeda_component_add(struct komeda_pipeline *pipe,
                     size_t comp_sz, u32 id, u32 hw_id,
-                    struct komeda_component_funcs *funcs,
+                    const struct komeda_component_funcs *funcs,
                     u8 max_active_inputs, u32 supported_inputs,
                     u8 max_active_outputs, u32 __iomem *reg,
                     const char *name_fmt, ...);