Lines Matching +full:clock +full:- +full:name
2 * Copyright (C) 2013 - 2014 Texas Instruments Incorporated - http://www.ti.com
12 * Gpio controlled clock implementation
15 #include <linux/clk-provider.h>
25 * DOC: basic gpio gated clock which can be enabled and disabled
27 * Traits of this clock:
28 * prepare - clk_(un)prepare only ensures parent is (un)prepared
29 * enable - clk_enable and clk_disable are functional & control gpio
30 * rate - inherits rate from parent. No clk_set_rate support
31 * parent - fixed parent. No clk_set_parent support
38 gpiod_set_value(clk->gpiod, 1); in clk_gpio_gate_enable()
47 gpiod_set_value(clk->gpiod, 0); in clk_gpio_gate_disable()
54 return gpiod_get_value(clk->gpiod); in clk_gpio_gate_is_enabled()
65 * DOC: basic clock multiplexer which can be controlled with a gpio output
66 * Traits of this clock:
67 * prepare - clk_prepare only ensures that parents are prepared
68 * rate - rate is only affected by parent switching. No clk_set_rate support
69 * parent - parent is adjustable through clk_set_parent
76 return gpiod_get_value_cansleep(clk->gpiod); in clk_gpio_mux_get_parent()
83 gpiod_set_value_cansleep(clk->gpiod, index); in clk_gpio_mux_set_parent()
95 static struct clk_hw *clk_register_gpio(struct device *dev, const char *name, in clk_register_gpio() argument
110 return ERR_PTR(-ENOMEM); in clk_register_gpio()
112 init.name = name; in clk_register_gpio()
118 clk_gpio->gpiod = gpiod; in clk_register_gpio()
119 clk_gpio->hw.init = &init; in clk_register_gpio()
121 hw = &clk_gpio->hw; in clk_register_gpio()
138 * clk_hw_register_gpio_gate - register a gpio clock gate with the clock
140 * @dev: device that is registering this clock
141 * @name: name of this clock
142 * @parent_name: name of this clock's parent
143 * @gpiod: gpio descriptor to gate this clock
144 * @flags: clock flags
146 struct clk_hw *clk_hw_register_gpio_gate(struct device *dev, const char *name, in clk_hw_register_gpio_gate() argument
150 return clk_register_gpio(dev, name, in clk_hw_register_gpio_gate()
157 struct clk *clk_register_gpio_gate(struct device *dev, const char *name, in clk_register_gpio_gate() argument
163 hw = clk_hw_register_gpio_gate(dev, name, parent_name, gpiod, flags); in clk_register_gpio_gate()
166 return hw->clk; in clk_register_gpio_gate()
171 * clk_hw_register_gpio_mux - register a gpio clock mux with the clock framework
172 * @dev: device that is registering this clock
173 * @name: name of this clock
174 * @parent_names: names of this clock's parents
176 * @gpiod: gpio descriptor to gate this clock
177 * @flags: clock flags
179 struct clk_hw *clk_hw_register_gpio_mux(struct device *dev, const char *name, in clk_hw_register_gpio_mux() argument
184 pr_err("mux-clock %s must have 2 parents\n", name); in clk_hw_register_gpio_mux()
185 return ERR_PTR(-EINVAL); in clk_hw_register_gpio_mux()
188 return clk_register_gpio(dev, name, parent_names, num_parents, in clk_hw_register_gpio_mux()
193 struct clk *clk_register_gpio_mux(struct device *dev, const char *name, in clk_register_gpio_mux() argument
199 hw = clk_hw_register_gpio_mux(dev, name, parent_names, num_parents, in clk_register_gpio_mux()
203 return hw->clk; in clk_register_gpio_mux()
209 struct device_node *node = pdev->dev.of_node; in gpio_clk_driver_probe()
219 parent_names = devm_kcalloc(&pdev->dev, num_parents, in gpio_clk_driver_probe()
222 return -ENOMEM; in gpio_clk_driver_probe()
229 is_mux = of_device_is_compatible(node, "gpio-mux-clock"); in gpio_clk_driver_probe()
232 gpiod = devm_gpiod_get(&pdev->dev, gpio_name, GPIOD_OUT_LOW); in gpio_clk_driver_probe()
235 if (ret == -EPROBE_DEFER) in gpio_clk_driver_probe()
237 node->name, __func__); in gpio_clk_driver_probe()
240 node->name, __func__, in gpio_clk_driver_probe()
246 clk = clk_register_gpio_mux(&pdev->dev, node->name, in gpio_clk_driver_probe()
249 clk = clk_register_gpio_gate(&pdev->dev, node->name, in gpio_clk_driver_probe()
259 { .compatible = "gpio-mux-clock" },
260 { .compatible = "gpio-gate-clock" },
267 .name = "gpio-clk",