Lines Matching +full:ext +full:- +full:clk +full:- +full:pin

1 // SPDX-License-Identifier: GPL-2.0
6 * Copyright (c) 2013-2014 Texas Instruments, Inc.
12 #include <linux/clk.h>
13 #include <linux/clk-provider.h>
58 ret = palmas_update_bits(cinfo->palmas, PALMAS_RESOURCE_BASE, in palmas_clks_prepare()
59 cinfo->clk_desc->control_reg, in palmas_clks_prepare()
60 cinfo->clk_desc->enable_mask, in palmas_clks_prepare()
61 cinfo->clk_desc->enable_mask); in palmas_clks_prepare()
63 dev_err(cinfo->dev, "Reg 0x%02x update failed, %d\n", in palmas_clks_prepare()
64 cinfo->clk_desc->control_reg, ret); in palmas_clks_prepare()
65 else if (cinfo->clk_desc->delay) in palmas_clks_prepare()
66 udelay(cinfo->clk_desc->delay); in palmas_clks_prepare()
77 * Clock can be disabled through external pin if it is externally in palmas_clks_unprepare()
80 if (cinfo->ext_control_pin) in palmas_clks_unprepare()
83 ret = palmas_update_bits(cinfo->palmas, PALMAS_RESOURCE_BASE, in palmas_clks_unprepare()
84 cinfo->clk_desc->control_reg, in palmas_clks_unprepare()
85 cinfo->clk_desc->enable_mask, 0); in palmas_clks_unprepare()
87 dev_err(cinfo->dev, "Reg 0x%02x update failed, %d\n", in palmas_clks_unprepare()
88 cinfo->clk_desc->control_reg, ret); in palmas_clks_unprepare()
97 if (cinfo->ext_control_pin) in palmas_clks_is_prepared()
100 ret = palmas_read(cinfo->palmas, PALMAS_RESOURCE_BASE, in palmas_clks_is_prepared()
101 cinfo->clk_desc->control_reg, &val); in palmas_clks_is_prepared()
103 dev_err(cinfo->dev, "Reg 0x%02x read failed, %d\n", in palmas_clks_is_prepared()
104 cinfo->clk_desc->control_reg, ret); in palmas_clks_is_prepared()
107 return !!(val & cinfo->clk_desc->enable_mask); in palmas_clks_is_prepared()
156 .compatible = "ti,palmas-clk32kg",
160 .compatible = "ti,palmas-clk32kgaudio",
170 struct device_node *node = pdev->dev.of_node; in palmas_clks_get_clk_data()
174 ret = of_property_read_u32(node, "ti,external-sleep-control", in palmas_clks_get_clk_data()
190 dev_warn(&pdev->dev, "%pOFn: Invalid ext control option: %u\n", in palmas_clks_get_clk_data()
195 cinfo->ext_control_pin = prop; in palmas_clks_get_clk_data()
202 ret = palmas_update_bits(cinfo->palmas, PALMAS_RESOURCE_BASE, in palmas_clks_init_configure()
203 cinfo->clk_desc->control_reg, in palmas_clks_init_configure()
204 cinfo->clk_desc->sleep_mask, 0); in palmas_clks_init_configure()
206 dev_err(cinfo->dev, "Reg 0x%02x update failed, %d\n", in palmas_clks_init_configure()
207 cinfo->clk_desc->control_reg, ret); in palmas_clks_init_configure()
211 if (cinfo->ext_control_pin) { in palmas_clks_init_configure()
212 ret = clk_prepare(cinfo->hw.clk); in palmas_clks_init_configure()
214 dev_err(cinfo->dev, "Clock prep failed, %d\n", ret); in palmas_clks_init_configure()
218 ret = palmas_ext_control_req_config(cinfo->palmas, in palmas_clks_init_configure()
219 cinfo->clk_desc->sleep_reqstr_id, in palmas_clks_init_configure()
220 cinfo->ext_control_pin, true); in palmas_clks_init_configure()
222 dev_err(cinfo->dev, "Ext config for %s failed, %d\n", in palmas_clks_init_configure()
223 cinfo->clk_desc->clk_name, ret); in palmas_clks_init_configure()
224 clk_unprepare(cinfo->hw.clk); in palmas_clks_init_configure()
233 struct palmas *palmas = dev_get_drvdata(pdev->dev.parent); in palmas_clks_probe()
234 struct device_node *node = pdev->dev.of_node; in palmas_clks_probe()
239 match_data = of_device_get_match_data(&pdev->dev); in palmas_clks_probe()
243 cinfo = devm_kzalloc(&pdev->dev, sizeof(*cinfo), GFP_KERNEL); in palmas_clks_probe()
245 return -ENOMEM; in palmas_clks_probe()
250 cinfo->dev = &pdev->dev; in palmas_clks_probe()
251 cinfo->palmas = palmas; in palmas_clks_probe()
253 cinfo->clk_desc = &match_data->desc; in palmas_clks_probe()
254 cinfo->hw.init = &match_data->init; in palmas_clks_probe()
255 ret = devm_clk_hw_register(&pdev->dev, &cinfo->hw); in palmas_clks_probe()
257 dev_err(&pdev->dev, "Fail to register clock %s, %d\n", in palmas_clks_probe()
258 match_data->desc.clk_name, ret); in palmas_clks_probe()
264 dev_err(&pdev->dev, "Clock config failed, %d\n", ret); in palmas_clks_probe()
268 ret = of_clk_add_hw_provider(node, of_clk_hw_simple_get, &cinfo->hw); in palmas_clks_probe()
270 dev_err(&pdev->dev, "Fail to add clock driver, %d\n", ret); in palmas_clks_probe()
276 of_clk_del_provider(pdev->dev.of_node); in palmas_clks_remove()
282 .name = "palmas-clk",
292 MODULE_ALIAS("platform:palmas-clk");