Lines Matching refs:clk

29 	struct v4l2_clk *clk;  in v4l2_clk_find()  local
31 list_for_each_entry(clk, &clk_list, list) in v4l2_clk_find()
32 if (!strcmp(dev_id, clk->dev_id)) in v4l2_clk_find()
33 return clk; in v4l2_clk_find()
40 struct v4l2_clk *clk; in v4l2_clk_get() local
41 struct clk *ccf_clk = clk_get(dev, id); in v4l2_clk_get()
47 clk = kzalloc(sizeof(*clk), GFP_KERNEL); in v4l2_clk_get()
48 if (!clk) { in v4l2_clk_get()
52 clk->clk = ccf_clk; in v4l2_clk_get()
54 return clk; in v4l2_clk_get()
58 clk = v4l2_clk_find(dev_name(dev)); in v4l2_clk_get()
60 if (!IS_ERR(clk)) in v4l2_clk_get()
61 atomic_inc(&clk->use_count); in v4l2_clk_get()
64 return clk; in v4l2_clk_get()
68 void v4l2_clk_put(struct v4l2_clk *clk) in v4l2_clk_put() argument
72 if (IS_ERR(clk)) in v4l2_clk_put()
75 if (clk->clk) { in v4l2_clk_put()
76 clk_put(clk->clk); in v4l2_clk_put()
77 kfree(clk); in v4l2_clk_put()
84 if (tmp == clk) in v4l2_clk_put()
85 atomic_dec(&clk->use_count); in v4l2_clk_put()
91 static int v4l2_clk_lock_driver(struct v4l2_clk *clk) in v4l2_clk_lock_driver() argument
99 if (tmp == clk) { in v4l2_clk_lock_driver()
100 ret = !try_module_get(clk->ops->owner); in v4l2_clk_lock_driver()
111 static void v4l2_clk_unlock_driver(struct v4l2_clk *clk) in v4l2_clk_unlock_driver() argument
113 module_put(clk->ops->owner); in v4l2_clk_unlock_driver()
116 int v4l2_clk_enable(struct v4l2_clk *clk) in v4l2_clk_enable() argument
120 if (clk->clk) in v4l2_clk_enable()
121 return clk_prepare_enable(clk->clk); in v4l2_clk_enable()
123 ret = v4l2_clk_lock_driver(clk); in v4l2_clk_enable()
127 mutex_lock(&clk->lock); in v4l2_clk_enable()
129 if (++clk->enable == 1 && clk->ops->enable) { in v4l2_clk_enable()
130 ret = clk->ops->enable(clk); in v4l2_clk_enable()
132 clk->enable--; in v4l2_clk_enable()
135 mutex_unlock(&clk->lock); in v4l2_clk_enable()
145 void v4l2_clk_disable(struct v4l2_clk *clk) in v4l2_clk_disable() argument
149 if (clk->clk) in v4l2_clk_disable()
150 return clk_disable_unprepare(clk->clk); in v4l2_clk_disable()
152 mutex_lock(&clk->lock); in v4l2_clk_disable()
154 enable = --clk->enable; in v4l2_clk_disable()
156 clk->dev_id)) in v4l2_clk_disable()
157 clk->enable++; in v4l2_clk_disable()
158 else if (!enable && clk->ops->disable) in v4l2_clk_disable()
159 clk->ops->disable(clk); in v4l2_clk_disable()
161 mutex_unlock(&clk->lock); in v4l2_clk_disable()
163 v4l2_clk_unlock_driver(clk); in v4l2_clk_disable()
167 unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk) in v4l2_clk_get_rate() argument
171 if (clk->clk) in v4l2_clk_get_rate()
172 return clk_get_rate(clk->clk); in v4l2_clk_get_rate()
174 ret = v4l2_clk_lock_driver(clk); in v4l2_clk_get_rate()
178 mutex_lock(&clk->lock); in v4l2_clk_get_rate()
179 if (!clk->ops->get_rate) in v4l2_clk_get_rate()
182 ret = clk->ops->get_rate(clk); in v4l2_clk_get_rate()
183 mutex_unlock(&clk->lock); in v4l2_clk_get_rate()
185 v4l2_clk_unlock_driver(clk); in v4l2_clk_get_rate()
191 int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate) in v4l2_clk_set_rate() argument
195 if (clk->clk) { in v4l2_clk_set_rate()
196 long r = clk_round_rate(clk->clk, rate); in v4l2_clk_set_rate()
199 return clk_set_rate(clk->clk, r); in v4l2_clk_set_rate()
202 ret = v4l2_clk_lock_driver(clk); in v4l2_clk_set_rate()
207 mutex_lock(&clk->lock); in v4l2_clk_set_rate()
208 if (!clk->ops->set_rate) in v4l2_clk_set_rate()
211 ret = clk->ops->set_rate(clk, rate); in v4l2_clk_set_rate()
212 mutex_unlock(&clk->lock); in v4l2_clk_set_rate()
214 v4l2_clk_unlock_driver(clk); in v4l2_clk_set_rate()
224 struct v4l2_clk *clk; in v4l2_clk_register() local
230 clk = kzalloc(sizeof(struct v4l2_clk), GFP_KERNEL); in v4l2_clk_register()
231 if (!clk) in v4l2_clk_register()
234 clk->dev_id = kstrdup(dev_id, GFP_KERNEL); in v4l2_clk_register()
235 if (!clk->dev_id) { in v4l2_clk_register()
239 clk->ops = ops; in v4l2_clk_register()
240 clk->priv = priv; in v4l2_clk_register()
241 atomic_set(&clk->use_count, 0); in v4l2_clk_register()
242 mutex_init(&clk->lock); in v4l2_clk_register()
250 list_add_tail(&clk->list, &clk_list); in v4l2_clk_register()
253 return clk; in v4l2_clk_register()
257 kfree(clk->dev_id); in v4l2_clk_register()
258 kfree(clk); in v4l2_clk_register()
263 void v4l2_clk_unregister(struct v4l2_clk *clk) in v4l2_clk_unregister() argument
265 if (WARN(atomic_read(&clk->use_count), in v4l2_clk_unregister()
267 __func__, clk->dev_id)) in v4l2_clk_unregister()
271 list_del(&clk->list); in v4l2_clk_unregister()
274 kfree(clk->dev_id); in v4l2_clk_unregister()
275 kfree(clk); in v4l2_clk_unregister()
284 static unsigned long fixed_get_rate(struct v4l2_clk *clk) in fixed_get_rate() argument
286 struct v4l2_clk_fixed *priv = clk->priv; in fixed_get_rate()
293 struct v4l2_clk *clk; in __v4l2_clk_register_fixed() local
303 clk = v4l2_clk_register(&priv->ops, dev_id, priv); in __v4l2_clk_register_fixed()
304 if (IS_ERR(clk)) in __v4l2_clk_register_fixed()
307 return clk; in __v4l2_clk_register_fixed()
311 void v4l2_clk_unregister_fixed(struct v4l2_clk *clk) in v4l2_clk_unregister_fixed() argument
313 kfree(clk->priv); in v4l2_clk_unregister_fixed()
314 v4l2_clk_unregister(clk); in v4l2_clk_unregister_fixed()