From: dean@sensoray.com
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH] media: usb: s2255: device-id custom V4L2_CID
Date: Thu, 07 Dec 2023 18:03:31 -0600 [thread overview]
Message-ID: <22f5d529d3f25b61b3bce7611140469a@sensoray.com> (raw)
In-Reply-To: <479c1d97-6df6-4a97-9542-c8819bd03d27@xs4all.nl>
Hi Hans,
>> +static struct v4l2_ctrl_config v4l2_ctrl_deviceid = {
>> + .ops = &s2255_ctrl_ops,
>> + .name = "Device ID",
>> + .id = V4L2_CID_S2255_DEVICEID,
>> + .type = V4L2_CTRL_TYPE_INTEGER,
>
> Please note that TYPE_INTEGER is a signed integer.
>
> If you need an unsigned integer, then use TYPE_U32.
It is unsigned, but it doesn't need to be. The max value should not run
into a signed value. I can change the maximum value from 0xffffffff to
0x7fffffff.
Is it acceptable to not use TYPE_U32 in order to simplify the user space
calls?
TYPE_U32 is a compound type. My understanding is VIDIOC_G_CTRL will not
work with compound types and some V4L user programs may not implement
the compound type queries.
Best regards,
Dean
On 2023-12-06 03:43, Hans Verkuil wrote:
> Hi Dean,
>
> Some comments below:
>
> On 22/11/2023 20:48, Dean Anderson wrote:
>> Adding V4L2 read-only control id for device id as hardware
>> does not support embedding the device-id in the USB device
>> descriptors.
>>
>> base-commit: 3e238417254bfdcc23fe207780b59cbb08656762
>
> Just drop this line, it doesn't belong in a commit message.
>
>>
>> Signed-off-by: Dean Anderson <dean@sensoray.com>
>>
>> ---
>> drivers/media/usb/s2255/s2255drv.c | 49
>> +++++++++++++++++++++++++++++-
>> 1 file changed, 48 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/media/usb/s2255/s2255drv.c
>> b/drivers/media/usb/s2255/s2255drv.c
>> index 3c2627712fe9..c2248bbc7840 100644
>> --- a/drivers/media/usb/s2255/s2255drv.c
>> +++ b/drivers/media/usb/s2255/s2255drv.c
>> @@ -40,7 +40,7 @@
>> #include <media/v4l2-ctrls.h>
>> #include <media/v4l2-event.h>
>>
>> -#define S2255_VERSION "1.25.1"
>> +#define S2255_VERSION "1.26.1"
>> #define FIRMWARE_FILE_NAME "f2255usb.bin"
>>
>> /* default JPEG quality */
>> @@ -60,6 +60,7 @@
>> #define S2255_MIN_BUFS 2
>> #define S2255_SETMODE_TIMEOUT 500
>> #define S2255_VIDSTATUS_TIMEOUT 350
>> +#define S2255_MARKER_FIRMWARE cpu_to_le32(0xDDCCBBAAL)
>> #define S2255_MARKER_FRAME cpu_to_le32(0x2255DA4AL)
>> #define S2255_MARKER_RESPONSE cpu_to_le32(0x2255ACACL)
>> #define S2255_RESPONSE_SETMODE cpu_to_le32(0x01)
>> @@ -323,6 +324,7 @@ struct s2255_buffer {
>> #define S2255_V4L2_YC_ON 1
>> #define S2255_V4L2_YC_OFF 0
>> #define V4L2_CID_S2255_COLORFILTER (V4L2_CID_USER_S2255_BASE + 0)
>> +#define V4L2_CID_S2255_DEVICEID (V4L2_CID_USER_S2255_BASE + 1)
>>
>> /* frame prefix size (sent once every frame) */
>> #define PREFIX_SIZE 512
>> @@ -1232,6 +1234,37 @@ static int s2255_s_ctrl(struct v4l2_ctrl *ctrl)
>> return 0;
>> }
>>
>> +/* deviceid/serial number is not used in usb device descriptors.
>> + * returns device-id/serial number from device, 0 if none found.
>
> Please put the '/*' on a line by itself, that's consistent with the
> coding style for multi-line comments.
>
> Also run the patch through 'checkpatch.pl --strict'. I get several
> warnings.
>
> returns -> Returns
>
> One question about this comment: is the Device ID the same as a serial
> number? "Device ID" can mean either the ID of a device model, or a
> unique
> ID for each device. If it is the latter, should it perhaps be called
> "Device S/N" or just "Serial Number"?
>
>> + */
>> +#define S2255_DEVICEID_NONE 0
>> +static int s2255_g_deviceid(struct s2255_dev *dev)
>> +{
>> + u8 *outbuf;
>> + int rc;
>> + int deviceid = S2255_DEVICEID_NONE;
>> +#define S2255_I2C_SIZE 16
>> + outbuf = kzalloc(S2255_I2C_SIZE * sizeof(u8), GFP_KERNEL);
>
> Drop the "* sizeof(u8)", it serves no purpose.
>
>> + if (outbuf == NULL)
>> + return deviceid;
>> +#define S2255_I2C_SNDEV 0xa2
>> +#define S2255_I2C_SNOFFSET 0x1ff0
>> +#define S2255_USBVENDOR_READREG 0x22
>> + rc = s2255_vendor_req(dev, S2255_USBVENDOR_READREG,
>> S2255_I2C_SNOFFSET,
>> + S2255_I2C_SNDEV >> 1, outbuf, S2255_I2C_SIZE, 0);
>> + if (rc < 0)
>> + goto exit_g_deviceid;
>> +
>> + /* verify marker code */
>> + if (*(__le32 *)outbuf != S2255_MARKER_FIRMWARE)
>> + goto exit_g_deviceid;
>> +
>> + deviceid = (outbuf[12] << 24) + (outbuf[13] << 16) + (outbuf[14] <<
>> 8) + outbuf[15];
>> +exit_g_deviceid:
>> + kfree(outbuf);
>> + return deviceid;
>
> This is overly complicated. How about this:
>
> /* verify marker code */
> if (*(__le32 *)outbuf == S2255_MARKER_FIRMWARE)
> deviceid = (outbuf[12] << 24) + (outbuf[13] << 16) + (outbuf[14] <<
> 8) + outbuf[15];
> kfree(outbuf);
> return deviceid;
>
>> +}
>> +
>> static int vidioc_g_jpegcomp(struct file *file, void *priv,
>> struct v4l2_jpegcompression *jc)
>> {
>> @@ -1581,6 +1614,17 @@ static const struct v4l2_ctrl_config
>> color_filter_ctrl = {
>> .def = 1,
>> };
>>
>> +static struct v4l2_ctrl_config v4l2_ctrl_deviceid = {
>> + .ops = &s2255_ctrl_ops,
>> + .name = "Device ID",
>> + .id = V4L2_CID_S2255_DEVICEID,
>> + .type = V4L2_CTRL_TYPE_INTEGER,
>
> Please note that TYPE_INTEGER is a signed integer.
>
> If you need an unsigned integer, then use TYPE_U32.
>
>> + .max = 0xffffffff,
>> + .min = 0,
>> + .step = 1,
>> + .flags = V4L2_CTRL_FLAG_READ_ONLY,
>> +};
>> +
>> static int s2255_probe_v4l(struct s2255_dev *dev)
>> {
>> int ret;
>> @@ -1615,6 +1659,9 @@ static int s2255_probe_v4l(struct s2255_dev
>> *dev)
>> (dev->pid != 0x2257 || vc->idx <= 1))
>> v4l2_ctrl_new_custom(&vc->hdl, &color_filter_ctrl,
>> NULL);
>> + v4l2_ctrl_deviceid.def = s2255_g_deviceid(dev);
>> + v4l2_ctrl_new_custom(&vc->hdl, &v4l2_ctrl_deviceid,
>> + NULL);
>> if (vc->hdl.error) {
>> ret = vc->hdl.error;
>> v4l2_ctrl_handler_free(&vc->hdl);
>
> Regards,
>
> Hans
next prev parent reply other threads:[~2023-12-08 0:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-22 19:48 [PATCH] media: usb: s2255: device-id custom V4L2_CID Dean Anderson
2023-12-06 9:43 ` Hans Verkuil
2023-12-07 16:42 ` dean
2023-12-08 0:03 ` dean [this message]
2023-12-08 7:37 ` Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=22f5d529d3f25b61b3bce7611140469a@sensoray.com \
--to=dean@sensoray.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.