public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [bug report] media: i2c: ov5670: Use common clock framework
@ 2023-02-08 13:37 Dan Carpenter
  2023-02-08 14:23 ` Jacopo Mondi
  0 siblings, 1 reply; 5+ messages in thread
From: Dan Carpenter @ 2023-02-08 13:37 UTC (permalink / raw)
  To: jacopo.mondi; +Cc: linux-media

Hello Jacopo Mondi,

The patch 8004c91e2095: "media: i2c: ov5670: Use common clock
framework" from Jan 26, 2023, leads to the following Smatch static
checker warning:

	drivers/media/i2c/ov5670.c:2670 ov5670_probe()
	warn: passing zero to 'PTR_ERR'

drivers/media/i2c/ov5670.c
    2648 static int ov5670_probe(struct i2c_client *client)
    2649 {
    2650         struct ov5670 *ov5670;
    2651         const char *err_msg;
    2652         u32 input_clk = 0;
    2653         bool full_power;
    2654         int ret;
    2655 
    2656         ov5670 = devm_kzalloc(&client->dev, sizeof(*ov5670), GFP_KERNEL);
    2657         if (!ov5670) {
    2658                 ret = -ENOMEM;
    2659                 err_msg = "devm_kzalloc() error";
    2660                 goto error_print;
    2661         }
    2662 
    2663         ov5670->xvclk = devm_clk_get(&client->dev, NULL);
    2664         if (!IS_ERR_OR_NULL(ov5670->xvclk))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Imagine CONFIG_HAVE_CLK is not enabled so now devm_clk_get() returns
NULL. 

    2665                 input_clk = clk_get_rate(ov5670->xvclk);
    2666         else if (PTR_ERR(ov5670->xvclk) == -ENOENT)
    2667                 device_property_read_u32(&client->dev, "clock-frequency",
    2668                                          &input_clk);
    2669         else
--> 2670                 return dev_err_probe(&client->dev, PTR_ERR(ov5670->xvclk),
    2671                                      "error getting clock\n");

A NULL is zero and zero is success.

That means this code returns success without doing anything.  Perhaps
the right thing is to use use Kconfig to ensure that this cannot be
build without CONFIG_HAVE_CLK.  The other solution is to write the
driver with a bunch of NULL checks so that it still runs without a clk.

The IS_ERR_OR_NULL() check should be changed to if (IS_ERR()).

    2672 
    2673         if (input_clk != OV5670_XVCLK_FREQ) {
    2674                 dev_err(&client->dev,
    2675                         "Unsupported clock frequency %u\n", input_clk);
    2676                 return -EINVAL;
    2677         }
    2678 
    2679         /* Initialize subdev */
    2680         v4l2_i2c_subdev_init(&ov5670->sd, client, &ov5670_subdev_ops);
    2681 
    2682         ret = ov5670_regulators_probe(ov5670);
    2683         if (ret) {
    2684                 err_msg = "Regulators probe failed";

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-02-08 15:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-08 13:37 [bug report] media: i2c: ov5670: Use common clock framework Dan Carpenter
2023-02-08 14:23 ` Jacopo Mondi
2023-02-08 14:30   ` Jacopo Mondi
2023-02-08 15:02   ` Dan Carpenter
2023-02-08 15:47     ` Jacopo Mondi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox