lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4f85e24e-4bd9-4cde-ad33-075cfcb2b7c0@amd.com>
Date: Fri, 28 Mar 2025 18:19:21 -0400
From: "Nirujogi, Pratap" <pnirujog@....com>
To: Krzysztof Kozlowski <krzk@...nel.org>,
 Pratap Nirujogi <pratap.nirujogi@....com>, mchehab@...nel.org,
 sakari.ailus@...ux.intel.com, hverkuil@...all.nl,
 laurent.pinchart@...asonboard.com, dave.stevenson@...pberrypi.com
Cc: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org,
 benjamin.chan@....com, bin.du@....com, gjorgji.rosikopulos@....com,
 king.li@....com, dominic.antony@....com
Subject: Re: [PATCH] media: i2c: Add OV05C camera sensor driver

Hi Krzysztof,

Thanks for reviewing and extremely sorry for the delayed response.

We have submitted V2 patch based on the review feedback. Can you please 
help to review latest V2 patch and let us know your feedback.

Thanks,
Pratap

On 3/1/2025 8:30 AM, Krzysztof Kozlowski wrote:
> Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> 
> 
> On 28/02/2025 17:53, Pratap Nirujogi wrote:
>> Add driver for OmniVision 5.2M OV05C10 sensor. This driver
>> supports only the full size normal 2888x1808@...ps 2-lane
>> sensor profile.
>>
>> Signed-off-by: Pratap Nirujogi <pratap.nirujogi@....com>
>> ---
>>   drivers/media/i2c/Kconfig  |   10 +
>>   drivers/media/i2c/Makefile |    1 +
>>   drivers/media/i2c/ov05c.c  | 1031 ++++++++++++++++++++++++++++++++++++
>>   3 files changed, 1042 insertions(+)
>>   create mode 100644 drivers/media/i2c/ov05c.c
>>
>> diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
>> index 8ba096b8ebca..fd160feabc41 100644
>> --- a/drivers/media/i2c/Kconfig
>> +++ b/drivers/media/i2c/Kconfig
>> @@ -337,6 +337,16 @@ config VIDEO_OG01A1B
>>          To compile this driver as a module, choose M here: the
>>          module will be called og01a1b.
>>
>> +config VIDEO_OV05C
>> +     tristate "OmniVision OV05 sensor support"
>> +     select V4L2_CCI_I2C
>> +     help
>> +       This is a Video4Linux2 sensor driver for the OmniVision
>> +       OV05C camera.
>> +
>> +       To compile this driver as a module, choose M here: the
>> +       module will be called OV05C.
>> +
>>   config VIDEO_OV01A10
>>        tristate "OmniVision OV01A10 sensor support"
>>        help
>> diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile
>> index fbb988bd067a..08bfc2d59be2 100644
>> --- a/drivers/media/i2c/Makefile
>> +++ b/drivers/media/i2c/Makefile
>> @@ -80,6 +80,7 @@ obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
>>   obj-$(CONFIG_VIDEO_MT9V032) += mt9v032.o
>>   obj-$(CONFIG_VIDEO_MT9V111) += mt9v111.o
>>   obj-$(CONFIG_VIDEO_OG01A1B) += og01a1b.o
>> +obj-$(CONFIG_VIDEO_OV05C) += ov05c.o
>>   obj-$(CONFIG_VIDEO_OV01A10) += ov01a10.o
>>   obj-$(CONFIG_VIDEO_OV02A10) += ov02a10.o
>>   obj-$(CONFIG_VIDEO_OV08D10) += ov08d10.o
>> diff --git a/drivers/media/i2c/ov05c.c b/drivers/media/i2c/ov05c.c
>> new file mode 100644
>> index 000000000000..96c4f74af4a9
>> --- /dev/null
>> +++ b/drivers/media/i2c/ov05c.c
>> @@ -0,0 +1,1031 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
>> + * All Rights Reserved.
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining a
>> + * copy of this software and associated documentation files (the
>> + * "Software"), to deal in the Software without restriction, including
>> + * without limitation the rights to use, copy, modify, merge, publish,
>> + * distribute, sub license, and/or sell copies of the Software, and to
>> + * permit persons to whom the Software is furnished to do so, subject to
>> + * the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including the
>> + * next paragraph) shall be included in all copies or substantial portions
>> + * of the Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
>> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
>> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
>> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
>> + * USE OR OTHER DEALINGS IN THE SOFTWARE.
> 
> What's with AMD? Second patch that day, same issues.
> 
> Drop license boilerplate.
> 
Done. Updated copyright header and license in V2.

>> + *
>> + */
>> +
>> +#include <linux/acpi.h>
>> +#include <linux/i2c.h>
>> +#include <linux/module.h>
>> +#include <linux/delay.h>
>> +#include <linux/units.h>
>> +#include <linux/pm_runtime.h>
>> +#include <linux/gpio.h>
>> +#include <media/v4l2-ctrls.h>
>> +#include <media/v4l2-device.h>
>> +#include <media/v4l2-fwnode.h>
>> +#include <media/v4l2-cci.h>
> 
> 
> ...
> 
>> +
>> +static int ov05c_probe(struct i2c_client *client)
>> +{
>> +     struct ov05c *ov05c;
>> +     int i, ret;
>> +
>> +     ov05c = devm_kzalloc(&client->dev, sizeof(*ov05c), GFP_KERNEL);
>> +     if (!ov05c)
>> +             return -ENOMEM;
>> +
>> +     client->dev.init_name = DRV_NAME;
>> +
>> +     /* create sensor enable gpio control */
>> +     ov05c->enable_gpio = devm_gpiod_get(&client->dev, "sensor0_enable", GPIOD_OUT_LOW);
> 
> 
> s/sensor0_enable/enable/
> 
Is it okay to use "sensor0_enabled" as connection id? We used this name 
to differentiate the two GPIO PINs that has to be programmed for RGB 
streaming to work with this sensor.

>> +     if (IS_ERR_OR_NULL(ov05c->enable_gpio))
>> +             return PTR_ERR(ov05c->enable_gpio);
>> +
>> +     /* Initialize subdev */
>> +     v4l2_i2c_subdev_init(&ov05c->sd, client, &ov05c_subdev_ops);
>> +
>> +     /* Initialize CCI */
>> +     ov05c->regmap = devm_cci_regmap_init_i2c(client, 8);
>> +     if (IS_ERR(ov05c->regmap)) {
>> +             dev_err(&client->dev, "Failed to initialize CCI\n");
> 
> Syntax is: return dev_err_probe
> 
Done. Updated in V2.

>> +             return PTR_ERR(ov05c->regmap);
>> +     }
>> +
>> +     /* Set default mode to max resolution */
>> +     ov05c->cur_mode = &supported_modes[0];
>> +
>> +     /* Initialize V4L2 controls */
>> +     ret = ov05c_init_controls(ov05c);
>> +     if (ret)
>> +             return ret;
>> +
>> +     /* Initialize V4L2 subdev */
>> +     ov05c->sd.internal_ops = &ov05c_internal_ops;
>> +     ov05c->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
>> +     ov05c->sd.entity.ops = &ov05c_subdev_entity_ops;
>> +     ov05c->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
>> +     ov05c->sd.entity.name = "OV05C";
>> +
>> +     /* Initialize source pad */
>> +     for (i = 0; i < NUM_OF_PADS; i++)
>> +             ov05c->pads[i].flags = MEDIA_PAD_FL_SOURCE;
>> +
>> +     ret = media_entity_pads_init(&ov05c->sd.entity, NUM_OF_PADS, ov05c->pads);
>> +     if (ret)
>> +             goto error_handler_free;
>> +
>> +     ret = v4l2_async_register_subdev_sensor(&ov05c->sd);
>> +     if (ret)
>> +             goto error_media_entity;
>> +
>> +     /*
>> +      * Device is already turned on by i2c-core with ACPI domain PM.
>> +      * Enable runtime PM and turn off the device.
>> +      */
>> +     pm_runtime_set_active(&client->dev);
>> +     pm_runtime_enable(&client->dev);
>> +     pm_runtime_idle(&client->dev);
>> +
>> +     dev_info(&client->dev, "%s success", __func__);
> 
> Drop, useless. Kernel has infrastructure for simple function exit
> debugging. For probing as well.
> 
Done. Removed in V2.

>> +
>> +     return 0;
>> +
>> +error_media_entity:
>> +     media_entity_cleanup(&ov05c->sd.entity);
>> +
>> +error_handler_free:
>> +     ov05c_free_controls(ov05c);
>> +
>> +     return ret;
>> +}
>> +
>> +static void ov05c_remove(struct i2c_client *client)
>> +{
>> +     struct v4l2_subdev *sd = i2c_get_clientdata(client);
>> +     struct ov05c *ov05c = to_ov05c(sd);
>> +
>> +     v4l2_async_unregister_subdev(sd);
>> +     media_entity_cleanup(&sd->entity);
>> +     ov05c_free_controls(ov05c);
>> +
>> +     pm_runtime_disable(&client->dev);
>> +     pm_runtime_set_suspended(&client->dev);
>> +}
>> +
>> +static const struct i2c_device_id ov05c_id[] = {
>> +     {"ov05c", 0 },
>> +     { }
>> +};
>> +
>> +MODULE_DEVICE_TABLE(i2c, ov05c_id);
>> +
>> +static struct i2c_driver ov05c_i2c_driver = {
>> +     .driver = {
>> +             .name = DRV_NAME,
>> +     },
>> +     .id_table = ov05c_id,
>> +     .probe = ov05c_probe,
>> +     .remove = ov05c_remove,
>> +};
>> +
>> +module_i2c_driver(ov05c_i2c_driver);
>> +
>> +MODULE_AUTHOR("Venkata Narendra Kumar Gutta <vengutta@....com>");
>> +MODULE_AUTHOR("Pratap Nirujogi <pratap.nirujogi@....com>");
>> +MODULE_DESCRIPTION("OmniVision OV05C sensor driver");
>> +MODULE_ALIAS("ov05c");
> 
> Drop, not correct alias.
> 
Done. Removed in V2.

>> +MODULE_LICENSE("GPL and additional rights");
> 
> No, use proper license and matching tag. Your top said this is not GPL!
> 
Done. Updated to "GPL v2" in V2.

> 
> Best regards,
> Krzysztof


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ