hw = lgm_clk_register_fixed_factor(ctx, list);
                        break;
                case CLK_TYPE_GATE:
-                       hw = lgm_clk_register_gate(ctx, list);
+                       if (list->gate_flags & GATE_CLK_HW) {
+                               hw = lgm_clk_register_gate(ctx, list);
+                       } else {
+                               /*
+                                * GATE_CLKs can be controlled either from
+                                * CGU clk driver i.e. this driver or directly
+                                * from power management driver/daemon. It is
+                                * dependent on the power policy/profile requirements
+                                * of the end product. To override control of gate
+                                * clks from this driver, provide NULL for this index
+                                * of gate clk provider.
+                                */
+                               hw = NULL;
+                       }
                        break;
+
                default:
                        dev_err(ctx->dev, "invalid clk type\n");
                        return -EINVAL;
 
 /* clock flags definition */
 #define CLOCK_FLAG_VAL_INIT    BIT(16)
 #define MUX_CLK_SW             BIT(17)
+#define GATE_CLK_HW            BIT(18)
 
 #define LGM_MUX(_id, _name, _pdata, _f, _reg,          \
                _shift, _width, _cf, _v)                \