aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2015-01-31 18:21:32 -0500
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-04-02 17:32:53 -0400
commita37462b919e1368ea3cf4bb0cbdb00ca8e76959c (patch)
treef465fdcbd11932aea65a3616fb0c5c55acb8d197 /drivers/media/v4l2-core
parent9b239b22df3ced4629af97e7edda558f1e7531b6 (diff)
[media] V4L: remove clock name from v4l2_clk API
All uses of the v4l2_clk API so far only register one clock with a fixed name. This allows us to get rid of it, which also will make CCF and DT integration easier. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Josh Wu <josh.wu@atmel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/v4l2-core')
-rw-r--r--drivers/media/v4l2-core/v4l2-clk.c33
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/media/v4l2-core/v4l2-clk.c b/drivers/media/v4l2-core/v4l2-clk.c
index e18cc0469cf8..3ff0b0093b0e 100644
--- a/drivers/media/v4l2-core/v4l2-clk.c
+++ b/drivers/media/v4l2-core/v4l2-clk.c
@@ -23,17 +23,13 @@
23static DEFINE_MUTEX(clk_lock); 23static DEFINE_MUTEX(clk_lock);
24static LIST_HEAD(clk_list); 24static LIST_HEAD(clk_list);
25 25
26static struct v4l2_clk *v4l2_clk_find(const char *dev_id, const char *id) 26static struct v4l2_clk *v4l2_clk_find(const char *dev_id)
27{ 27{
28 struct v4l2_clk *clk; 28 struct v4l2_clk *clk;
29 29
30 list_for_each_entry(clk, &clk_list, list) { 30 list_for_each_entry(clk, &clk_list, list)
31 if (strcmp(dev_id, clk->dev_id)) 31 if (!strcmp(dev_id, clk->dev_id))
32 continue;
33
34 if (!id || !clk->id || !strcmp(clk->id, id))
35 return clk; 32 return clk;
36 }
37 33
38 return ERR_PTR(-ENODEV); 34 return ERR_PTR(-ENODEV);
39} 35}
@@ -43,7 +39,7 @@ struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id)
43 struct v4l2_clk *clk; 39 struct v4l2_clk *clk;
44 40
45 mutex_lock(&clk_lock); 41 mutex_lock(&clk_lock);
46 clk = v4l2_clk_find(dev_name(dev), id); 42 clk = v4l2_clk_find(dev_name(dev));
47 43
48 if (!IS_ERR(clk)) 44 if (!IS_ERR(clk))
49 atomic_inc(&clk->use_count); 45 atomic_inc(&clk->use_count);
@@ -127,8 +123,8 @@ void v4l2_clk_disable(struct v4l2_clk *clk)
127 mutex_lock(&clk->lock); 123 mutex_lock(&clk->lock);
128 124
129 enable = --clk->enable; 125 enable = --clk->enable;
130 if (WARN(enable < 0, "Unbalanced %s() on %s:%s!\n", __func__, 126 if (WARN(enable < 0, "Unbalanced %s() on %s!\n", __func__,
131 clk->dev_id, clk->id)) 127 clk->dev_id))
132 clk->enable++; 128 clk->enable++;
133 else if (!enable && clk->ops->disable) 129 else if (!enable && clk->ops->disable)
134 clk->ops->disable(clk); 130 clk->ops->disable(clk);
@@ -181,7 +177,7 @@ EXPORT_SYMBOL(v4l2_clk_set_rate);
181 177
182struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops, 178struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
183 const char *dev_id, 179 const char *dev_id,
184 const char *id, void *priv) 180 void *priv)
185{ 181{
186 struct v4l2_clk *clk; 182 struct v4l2_clk *clk;
187 int ret; 183 int ret;
@@ -193,9 +189,8 @@ struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
193 if (!clk) 189 if (!clk)
194 return ERR_PTR(-ENOMEM); 190 return ERR_PTR(-ENOMEM);
195 191
196 clk->id = kstrdup(id, GFP_KERNEL);
197 clk->dev_id = kstrdup(dev_id, GFP_KERNEL); 192 clk->dev_id = kstrdup(dev_id, GFP_KERNEL);
198 if ((id && !clk->id) || !clk->dev_id) { 193 if (!clk->dev_id) {
199 ret = -ENOMEM; 194 ret = -ENOMEM;
200 goto ealloc; 195 goto ealloc;
201 } 196 }
@@ -205,7 +200,7 @@ struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
205 mutex_init(&clk->lock); 200 mutex_init(&clk->lock);
206 201
207 mutex_lock(&clk_lock); 202 mutex_lock(&clk_lock);
208 if (!IS_ERR(v4l2_clk_find(dev_id, id))) { 203 if (!IS_ERR(v4l2_clk_find(dev_id))) {
209 mutex_unlock(&clk_lock); 204 mutex_unlock(&clk_lock);
210 ret = -EEXIST; 205 ret = -EEXIST;
211 goto eexist; 206 goto eexist;
@@ -217,7 +212,6 @@ struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
217 212
218eexist: 213eexist:
219ealloc: 214ealloc:
220 kfree(clk->id);
221 kfree(clk->dev_id); 215 kfree(clk->dev_id);
222 kfree(clk); 216 kfree(clk);
223 return ERR_PTR(ret); 217 return ERR_PTR(ret);
@@ -227,15 +221,14 @@ EXPORT_SYMBOL(v4l2_clk_register);
227void v4l2_clk_unregister(struct v4l2_clk *clk) 221void v4l2_clk_unregister(struct v4l2_clk *clk)
228{ 222{
229 if (WARN(atomic_read(&clk->use_count), 223 if (WARN(atomic_read(&clk->use_count),
230 "%s(): Refusing to unregister ref-counted %s:%s clock!\n", 224 "%s(): Refusing to unregister ref-counted %s clock!\n",
231 __func__, clk->dev_id, clk->id)) 225 __func__, clk->dev_id))
232 return; 226 return;
233 227
234 mutex_lock(&clk_lock); 228 mutex_lock(&clk_lock);
235 list_del(&clk->list); 229 list_del(&clk->list);
236 mutex_unlock(&clk_lock); 230 mutex_unlock(&clk_lock);
237 231
238 kfree(clk->id);
239 kfree(clk->dev_id); 232 kfree(clk->dev_id);
240 kfree(clk); 233 kfree(clk);
241} 234}
@@ -253,7 +246,7 @@ static unsigned long fixed_get_rate(struct v4l2_clk *clk)
253} 246}
254 247
255struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id, 248struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
256 const char *id, unsigned long rate, struct module *owner) 249 unsigned long rate, struct module *owner)
257{ 250{
258 struct v4l2_clk *clk; 251 struct v4l2_clk *clk;
259 struct v4l2_clk_fixed *priv = kzalloc(sizeof(*priv), GFP_KERNEL); 252 struct v4l2_clk_fixed *priv = kzalloc(sizeof(*priv), GFP_KERNEL);
@@ -265,7 +258,7 @@ struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
265 priv->ops.get_rate = fixed_get_rate; 258 priv->ops.get_rate = fixed_get_rate;
266 priv->ops.owner = owner; 259 priv->ops.owner = owner;
267 260
268 clk = v4l2_clk_register(&priv->ops, dev_id, id, priv); 261 clk = v4l2_clk_register(&priv->ops, dev_id, priv);
269 if (IS_ERR(clk)) 262 if (IS_ERR(clk))
270 kfree(priv); 263 kfree(priv);
271 264