]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: ov7670: make "xclk" clock optional
authorLubomir Rintel <lkundrak@v3.sk>
Thu, 4 Oct 2018 21:29:03 +0000 (17:29 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 5 Oct 2018 15:04:39 +0000 (11:04 -0400)
When the "xclk" clock was added, it was made mandatory. This broke the
driver on an OLPC plaform which doesn't know such clock. Make it
optional.

Tested on a OLPC XO-1 laptop.

Fixes: 0a024d634cee ("[media] ov7670: get xclk")
Cc: stable@vger.kernel.org # 4.11+
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/i2c/ov7670.c

index 92f59ae1b624e85f6dde866f94ae247890e8bc4b..bc68a3a5b4ec41fe64b6ba462e18f7eaf62614af 100644 (file)
@@ -1808,17 +1808,24 @@ static int ov7670_probe(struct i2c_client *client,
                        info->pclk_hb_disable = true;
        }
 
-       info->clk = devm_clk_get(&client->dev, "xclk");
-       if (IS_ERR(info->clk))
-               return PTR_ERR(info->clk);
-       ret = clk_prepare_enable(info->clk);
-       if (ret)
-               return ret;
+       info->clk = devm_clk_get(&client->dev, "xclk"); /* optional */
+       if (IS_ERR(info->clk)) {
+               ret = PTR_ERR(info->clk);
+               if (ret == -ENOENT)
+                       info->clk = NULL;
+               else
+                       return ret;
+       }
+       if (info->clk) {
+               ret = clk_prepare_enable(info->clk);
+               if (ret)
+                       return ret;
 
-       info->clock_speed = clk_get_rate(info->clk) / 1000000;
-       if (info->clock_speed < 10 || info->clock_speed > 48) {
-               ret = -EINVAL;
-               goto clk_disable;
+               info->clock_speed = clk_get_rate(info->clk) / 1000000;
+               if (info->clock_speed < 10 || info->clock_speed > 48) {
+                       ret = -EINVAL;
+                       goto clk_disable;
+               }
        }
 
        ret = ov7670_init_gpio(client, info);