Loading Documentation/driver-model/devres.txt +1 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,7 @@ CLOCK devm_clk_get() devm_clk_put() devm_clk_hw_register() devm_of_clk_add_hw_provider() DMA dmam_alloc_coherent() Loading drivers/clk/clk.c +52 −0 Original line number Diff line number Diff line Loading @@ -3275,6 +3275,37 @@ int of_clk_add_hw_provider(struct device_node *np, } EXPORT_SYMBOL_GPL(of_clk_add_hw_provider); static void devm_of_clk_release_provider(struct device *dev, void *res) { of_clk_del_provider(*(struct device_node **)res); } int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data) { struct device_node **ptr, *np; int ret; ptr = devres_alloc(devm_of_clk_release_provider, sizeof(*ptr), GFP_KERNEL); if (!ptr) return -ENOMEM; np = dev->of_node; ret = of_clk_add_hw_provider(np, get, data); if (!ret) { *ptr = np; devres_add(dev, ptr); } else { devres_free(ptr); } return ret; } EXPORT_SYMBOL_GPL(devm_of_clk_add_hw_provider); /** * of_clk_del_provider() - Remove a previously registered clock provider * @np: Device node pointer associated with clock provider Loading @@ -3296,6 +3327,27 @@ void of_clk_del_provider(struct device_node *np) } EXPORT_SYMBOL_GPL(of_clk_del_provider); static int devm_clk_provider_match(struct device *dev, void *res, void *data) { struct device_node **np = res; if (WARN_ON(!np || !*np)) return 0; return *np == data; } void devm_of_clk_del_provider(struct device *dev) { int ret; ret = devres_release(dev, devm_of_clk_release_provider, devm_clk_provider_match, dev->of_node); WARN_ON(ret); } EXPORT_SYMBOL(devm_of_clk_del_provider); static struct clk_hw * __of_clk_get_hw_from_provider(struct of_clk_provider *provider, struct of_phandle_args *clkspec) Loading drivers/clk/qcom/common.c +2 −24 Original line number Diff line number Diff line Loading @@ -111,16 +111,6 @@ qcom_pll_set_fsm_mode(struct regmap *map, u32 reg, u8 bias_count, u8 lock_count) } EXPORT_SYMBOL_GPL(qcom_pll_set_fsm_mode); static void qcom_cc_del_clk_provider(void *data) { of_clk_del_provider(data); } static void qcom_cc_reset_unregister(void *data) { reset_controller_unregister(data); } static void qcom_cc_gdsc_unregister(void *data) { gdsc_unregister(data); Loading Loading @@ -248,13 +238,7 @@ int qcom_cc_really_probe(struct platform_device *pdev, return ret; } ret = of_clk_add_hw_provider(dev->of_node, qcom_cc_clk_hw_get, cc); if (ret) return ret; ret = devm_add_action_or_reset(dev, qcom_cc_del_clk_provider, pdev->dev.of_node); ret = devm_of_clk_add_hw_provider(dev, qcom_cc_clk_hw_get, cc); if (ret) return ret; Loading @@ -266,13 +250,7 @@ int qcom_cc_really_probe(struct platform_device *pdev, reset->regmap = regmap; reset->reset_map = desc->resets; ret = reset_controller_register(&reset->rcdev); if (ret) return ret; ret = devm_add_action_or_reset(dev, qcom_cc_reset_unregister, &reset->rcdev); ret = devm_reset_controller_register(dev, &reset->rcdev); if (ret) return ret; Loading include/linux/clk-provider.h +13 −0 Original line number Diff line number Diff line Loading @@ -815,7 +815,12 @@ int of_clk_add_hw_provider(struct device_node *np, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data); int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data); void of_clk_del_provider(struct device_node *np); void devm_of_clk_del_provider(struct device *dev); struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, void *data); struct clk_hw *of_clk_hw_simple_get(struct of_phandle_args *clkspec, Loading Loading @@ -847,7 +852,15 @@ static inline int of_clk_add_hw_provider(struct device_node *np, { return 0; } static inline int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data) { return 0; } static inline void of_clk_del_provider(struct device_node *np) {} static inline void devm_of_clk_del_provider(struct device *dev) {} static inline struct clk *of_clk_src_simple_get( struct of_phandle_args *clkspec, void *data) { Loading Loading
Documentation/driver-model/devres.txt +1 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,7 @@ CLOCK devm_clk_get() devm_clk_put() devm_clk_hw_register() devm_of_clk_add_hw_provider() DMA dmam_alloc_coherent() Loading
drivers/clk/clk.c +52 −0 Original line number Diff line number Diff line Loading @@ -3275,6 +3275,37 @@ int of_clk_add_hw_provider(struct device_node *np, } EXPORT_SYMBOL_GPL(of_clk_add_hw_provider); static void devm_of_clk_release_provider(struct device *dev, void *res) { of_clk_del_provider(*(struct device_node **)res); } int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data) { struct device_node **ptr, *np; int ret; ptr = devres_alloc(devm_of_clk_release_provider, sizeof(*ptr), GFP_KERNEL); if (!ptr) return -ENOMEM; np = dev->of_node; ret = of_clk_add_hw_provider(np, get, data); if (!ret) { *ptr = np; devres_add(dev, ptr); } else { devres_free(ptr); } return ret; } EXPORT_SYMBOL_GPL(devm_of_clk_add_hw_provider); /** * of_clk_del_provider() - Remove a previously registered clock provider * @np: Device node pointer associated with clock provider Loading @@ -3296,6 +3327,27 @@ void of_clk_del_provider(struct device_node *np) } EXPORT_SYMBOL_GPL(of_clk_del_provider); static int devm_clk_provider_match(struct device *dev, void *res, void *data) { struct device_node **np = res; if (WARN_ON(!np || !*np)) return 0; return *np == data; } void devm_of_clk_del_provider(struct device *dev) { int ret; ret = devres_release(dev, devm_of_clk_release_provider, devm_clk_provider_match, dev->of_node); WARN_ON(ret); } EXPORT_SYMBOL(devm_of_clk_del_provider); static struct clk_hw * __of_clk_get_hw_from_provider(struct of_clk_provider *provider, struct of_phandle_args *clkspec) Loading
drivers/clk/qcom/common.c +2 −24 Original line number Diff line number Diff line Loading @@ -111,16 +111,6 @@ qcom_pll_set_fsm_mode(struct regmap *map, u32 reg, u8 bias_count, u8 lock_count) } EXPORT_SYMBOL_GPL(qcom_pll_set_fsm_mode); static void qcom_cc_del_clk_provider(void *data) { of_clk_del_provider(data); } static void qcom_cc_reset_unregister(void *data) { reset_controller_unregister(data); } static void qcom_cc_gdsc_unregister(void *data) { gdsc_unregister(data); Loading Loading @@ -248,13 +238,7 @@ int qcom_cc_really_probe(struct platform_device *pdev, return ret; } ret = of_clk_add_hw_provider(dev->of_node, qcom_cc_clk_hw_get, cc); if (ret) return ret; ret = devm_add_action_or_reset(dev, qcom_cc_del_clk_provider, pdev->dev.of_node); ret = devm_of_clk_add_hw_provider(dev, qcom_cc_clk_hw_get, cc); if (ret) return ret; Loading @@ -266,13 +250,7 @@ int qcom_cc_really_probe(struct platform_device *pdev, reset->regmap = regmap; reset->reset_map = desc->resets; ret = reset_controller_register(&reset->rcdev); if (ret) return ret; ret = devm_add_action_or_reset(dev, qcom_cc_reset_unregister, &reset->rcdev); ret = devm_reset_controller_register(dev, &reset->rcdev); if (ret) return ret; Loading
include/linux/clk-provider.h +13 −0 Original line number Diff line number Diff line Loading @@ -815,7 +815,12 @@ int of_clk_add_hw_provider(struct device_node *np, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data); int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data); void of_clk_del_provider(struct device_node *np); void devm_of_clk_del_provider(struct device *dev); struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, void *data); struct clk_hw *of_clk_hw_simple_get(struct of_phandle_args *clkspec, Loading Loading @@ -847,7 +852,15 @@ static inline int of_clk_add_hw_provider(struct device_node *np, { return 0; } static inline int devm_of_clk_add_hw_provider(struct device *dev, struct clk_hw *(*get)(struct of_phandle_args *clkspec, void *data), void *data) { return 0; } static inline void of_clk_del_provider(struct device_node *np) {} static inline void devm_of_clk_del_provider(struct device *dev) {} static inline struct clk *of_clk_src_simple_get( struct of_phandle_args *clkspec, void *data) { Loading