|
@@ -191,6 +191,22 @@ int qcom_cc_register_sleep_clk(struct device *dev)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(qcom_cc_register_sleep_clk);
|
|
|
|
|
|
+/* Drop 'protected-clocks' from the list of clocks to register */
|
|
|
+static void qcom_cc_drop_protected(struct device *dev, struct qcom_cc *cc)
|
|
|
+{
|
|
|
+ struct device_node *np = dev->of_node;
|
|
|
+ struct property *prop;
|
|
|
+ const __be32 *p;
|
|
|
+ u32 i;
|
|
|
+
|
|
|
+ of_property_for_each_u32(np, "protected-clocks", prop, p, i) {
|
|
|
+ if (i >= cc->num_rclks)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ cc->rclks[i] = NULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static struct clk_hw *qcom_cc_clk_hw_get(struct of_phandle_args *clkspec,
|
|
|
void *data)
|
|
|
{
|
|
@@ -251,6 +267,8 @@ int qcom_cc_really_probe(struct platform_device *pdev,
|
|
|
cc->rclks = rclks;
|
|
|
cc->num_rclks = num_clks;
|
|
|
|
|
|
+ qcom_cc_drop_protected(dev, cc);
|
|
|
+
|
|
|
for (i = 0; i < num_clks; i++) {
|
|
|
if (!rclks[i])
|
|
|
continue;
|