aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--drivers/media/platform/soc_camera/soc_camera.c6
-rw-r--r--drivers/media/usb/em28xx/em28xx-camera.c2
-rw-r--r--drivers/media/v4l2-core/v4l2-clk.c33
-rw-r--r--include/media/v4l2-clk.h8
4 files changed, 20 insertions, 29 deletions
diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
index 1ed0a0bc8d44..2049037149a1 100644
--- a/drivers/media/platform/soc_camera/soc_camera.c
+++ b/drivers/media/platform/soc_camera/soc_camera.c
@@ -1364,7 +1364,7 @@ static int soc_camera_i2c_init(struct soc_camera_device *icd,
1364 snprintf(clk_name, sizeof(clk_name), "%d-%04x", 1364 snprintf(clk_name, sizeof(clk_name), "%d-%04x",
1365 shd->i2c_adapter_id, shd->board_info->addr); 1365 shd->i2c_adapter_id, shd->board_info->addr);
1366 1366
1367 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, "mclk", icd); 1367 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, icd);
1368 if (IS_ERR(icd->clk)) { 1368 if (IS_ERR(icd->clk)) {
1369 ret = PTR_ERR(icd->clk); 1369 ret = PTR_ERR(icd->clk);
1370 goto eclkreg; 1370 goto eclkreg;
@@ -1545,7 +1545,7 @@ static int scan_async_group(struct soc_camera_host *ici,
1545 snprintf(clk_name, sizeof(clk_name), "%d-%04x", 1545 snprintf(clk_name, sizeof(clk_name), "%d-%04x",
1546 sasd->asd.match.i2c.adapter_id, sasd->asd.match.i2c.address); 1546 sasd->asd.match.i2c.adapter_id, sasd->asd.match.i2c.address);
1547 1547
1548 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, "mclk", icd); 1548 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, icd);
1549 if (IS_ERR(icd->clk)) { 1549 if (IS_ERR(icd->clk)) {
1550 ret = PTR_ERR(icd->clk); 1550 ret = PTR_ERR(icd->clk);
1551 goto eclkreg; 1551 goto eclkreg;
@@ -1650,7 +1650,7 @@ static int soc_of_bind(struct soc_camera_host *ici,
1650 snprintf(clk_name, sizeof(clk_name), "of-%s", 1650 snprintf(clk_name, sizeof(clk_name), "of-%s",
1651 of_node_full_name(remote)); 1651 of_node_full_name(remote));
1652 1652
1653 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, "mclk", icd); 1653 icd->clk = v4l2_clk_register(&soc_camera_clk_ops, clk_name, icd);
1654 if (IS_ERR(icd->clk)) { 1654 if (IS_ERR(icd->clk)) {
1655 ret = PTR_ERR(icd->clk); 1655 ret = PTR_ERR(icd->clk);
1656 goto eclkreg; 1656 goto eclkreg;
diff --git a/drivers/media/usb/em28xx/em28xx-camera.c b/drivers/media/usb/em28xx/em28xx-camera.c
index 7be661f73930..a4b22c2c3ba7 100644
--- a/drivers/media/usb/em28xx/em28xx-camera.c
+++ b/drivers/media/usb/em28xx/em28xx-camera.c
@@ -330,7 +330,7 @@ int em28xx_init_camera(struct em28xx *dev)
330 330
331 v4l2_clk_name_i2c(clk_name, sizeof(clk_name), 331 v4l2_clk_name_i2c(clk_name, sizeof(clk_name),
332 i2c_adapter_id(adap), client->addr); 332 i2c_adapter_id(adap), client->addr);
333 v4l2->clk = v4l2_clk_register_fixed(clk_name, "mclk", -EINVAL); 333 v4l2->clk = v4l2_clk_register_fixed(clk_name, -EINVAL);
334 if (IS_ERR(v4l2->clk)) 334 if (IS_ERR(v4l2->clk))
335 return PTR_ERR(v4l2->clk); 335 return PTR_ERR(v4l2->clk);
336 336
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
diff --git a/include/media/v4l2-clk.h b/include/media/v4l2-clk.h
index 0b36cc138304..928045f4e70c 100644
--- a/include/media/v4l2-clk.h
+++ b/include/media/v4l2-clk.h
@@ -26,7 +26,6 @@ struct v4l2_clk {
26 struct list_head list; 26 struct list_head list;
27 const struct v4l2_clk_ops *ops; 27 const struct v4l2_clk_ops *ops;
28 const char *dev_id; 28 const char *dev_id;
29 const char *id;
30 int enable; 29 int enable;
31 struct mutex lock; /* Protect the enable count */ 30 struct mutex lock; /* Protect the enable count */
32 atomic_t use_count; 31 atomic_t use_count;
@@ -43,7 +42,7 @@ struct v4l2_clk_ops {
43 42
44struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops, 43struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
45 const char *dev_name, 44 const char *dev_name,
46 const char *name, void *priv); 45 void *priv);
47void v4l2_clk_unregister(struct v4l2_clk *clk); 46void v4l2_clk_unregister(struct v4l2_clk *clk);
48struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id); 47struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id);
49void v4l2_clk_put(struct v4l2_clk *clk); 48void v4l2_clk_put(struct v4l2_clk *clk);
@@ -55,14 +54,13 @@ int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
55struct module; 54struct module;
56 55
57struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id, 56struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
58 const char *id, unsigned long rate, struct module *owner); 57 unsigned long rate, struct module *owner);
59void v4l2_clk_unregister_fixed(struct v4l2_clk *clk); 58void v4l2_clk_unregister_fixed(struct v4l2_clk *clk);
60 59
61static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id, 60static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id,
62 const char *id,
63 unsigned long rate) 61 unsigned long rate)
64{ 62{
65 return __v4l2_clk_register_fixed(dev_id, id, rate, THIS_MODULE); 63 return __v4l2_clk_register_fixed(dev_id, rate, THIS_MODULE);
66} 64}
67 65
68#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \ 66#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \