> Cc: Sakari Ailus
> Cc: Laurent Pinchart
> Cc: linux-me...@vger.kernel.org
> Signed-off-by: Rob Herring
> ---
> .../bindings/media/video-interfaces.yaml | 75 ---
> 1 file changed, 33 insertions(+), 42 deletions(-)
>
> diff --git a/Docume
r the
previous VPLLF_FRAC_CFG ?
> Signed-off-by: Quanyang Wang
Nonetheless, this change looks good to me, I actually had the same patch
in my tree while investigation issues related to the clock rate, so
Reviewed-by: Laurent Pinchart
Tested-by: Laurent Pinchart
I was hoping it would so
Hi Jacopo,
On Tue, Mar 16, 2021 at 01:56:07PM +0100, Jacopo Mondi wrote:
> On Mon, Mar 15, 2021 at 11:37:26PM +0200, Laurent Pinchart wrote:
> > On Mon, Mar 15, 2021 at 02:14:56PM +0100, Jacopo Mondi wrote:
> > > Enable the noise immunity threshold at the end of the rdacm20
&g
ot;failed to get xclk\n");
> + return PTR_ERR(sensor->xclk);
> + }
> +
> + ret = clk_set_rate(sensor->xclk, AR0521_XCLK_RATE);
> + if (ret < 0)
> + return ret;
> +
> + sensor->xclk_freq = clk_get_rate(sensor->xclk);
> +
> + if (sensor->xclk_freq < AR0521_XCLK_MIN ||
> + sensor->xclk_freq > AR0521_XCLK_MAX) {
> + dev_err(dev, "xclk frequency out of range: %u Hz\n",
> sensor->xclk_freq);
> + return -EINVAL;
> + }
> +
> + clk_prepare_enable(sensor->xclk);
> +
> + /* request optional reset pin */
> + sensor->reset_gpio = devm_gpiod_get_optional(dev, "reset",
> GPIOD_OUT_HIGH);
> +
> + v4l2_i2c_subdev_init(>sd, client, _subdev_ops);
> +
> + sensor->sd.flags = V4L2_SUBDEV_FL_HAS_DEVNODE |
> V4L2_SUBDEV_FL_HAS_EVENTS;
> + sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
> + sensor->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
> + ret = media_entity_pads_init(>sd.entity, 1, >pad);
> + if (ret)
> + return ret;
> +
> + mutex_init(>lock);
> +
> + ret = ar0521_init_controls(sensor);
> + if (ret)
> + goto entity_cleanup;
> +
> + ret = v4l2_async_register_subdev(>sd);
> + if (ret)
> + goto free_ctrls;
> +
> + ar0521_reset(sensor);
> + for (cnt = 0; cnt < ARRAY_SIZE(initial_regs); cnt++)
> + if (ar0521_write_reg(sensor, initial_regs[cnt].addr,
> initial_regs[cnt].value))
> + goto unreg_subdev;
> +
> + ret = ar0521_write_reg(sensor, AR0521_REG_SERIAL_FORMAT,
> +AR0521_REG_SERIAL_FORMAT_MIPI | nlanes);
> + if (ret)
> + goto unreg_subdev;
> +
> + // set MIPI test mode - disabled for now
> + ret = ar0521_write_reg(sensor, AR0521_REG_HISPI_TEST_MODE,
> +((0x40 << nlanes) - 0x40) |
> +AR0521_REG_HISPI_TEST_MODE_LP11);
> + if (ret)
> + goto unreg_subdev;
> +
> + ret = ar0521_write_reg(sensor, AR0521_REG_ROW_SPEED, 0x110 | 4 /
> nlanes);
> + if (ret)
> + goto unreg_subdev;
> +
> + ret = ar0521_set_stream(sensor, 0);
> + if (ret)
> + goto unreg_subdev;
> +
> + ar0521_set_mode(sensor);
> +
> + dev_info(dev, "AR0521 initialized, master clock frequency: %s MHz, %u
> MIPI data lanes\n",
> + mhz(sensor->xclk_freq), nlanes);
> + return 0;
> +
> +unreg_subdev:
> + v4l2_async_unregister_subdev(>sd);
> +free_ctrls:
> + v4l2_ctrl_handler_free(>ctrls.handler);
> +entity_cleanup:
> + mutex_destroy(>lock);
> + media_entity_cleanup(>sd.entity);
> + return ret;
> +}
> +
> +static int ar0521_remove(struct i2c_client *client)
> +{
> + struct v4l2_subdev *sd = i2c_get_clientdata(client);
> + struct ar0521_dev *sensor = to_ar0521_dev(sd);
> +
> + v4l2_async_unregister_subdev(>sd);
> + mutex_destroy(>lock);
> + media_entity_cleanup(>sd.entity);
> + v4l2_ctrl_handler_free(>ctrls.handler);
> + return 0;
> +}
> +
> +static const struct i2c_device_id ar0521_id[] = {
> + {"ar0521", 0},
> + {},
> +};
> +MODULE_DEVICE_TABLE(i2c, ar0521_id);
> +
> +static const struct of_device_id ar0521_dt_ids[] = {
> + {.compatible = "onnn,ar0521"},
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, ar0521_dt_ids);
> +
> +static struct i2c_driver ar0521_i2c_driver = {
> + .driver = {
> + .name = "ar0521",
> + .of_match_table = ar0521_dt_ids,
> + },
> + .id_table = ar0521_id,
> + .probe= ar0521_probe,
> + .remove = ar0521_remove,
> +};
> +
> +module_i2c_driver(ar0521_i2c_driver);
> +
> +MODULE_DESCRIPTION("AR0521 MIPI Camera subdev driver");
> +MODULE_AUTHOR("Krzysztof Halasa ");
> +MODULE_LICENSE("GPL");
--
Regards,
Laurent Pinchart
+
> +reset-gpios = < 7 GPIO_ACTIVE_LOW>;
> +
> +port {
> + mipi_camera_to_mipi_csi2: endpoint {
> +remote-endpoint = <_csi2_in>;
> +data-lanes = <1 2 3 4>;
> +};
> +};
> +};
> +};
--
Regards,
Laurent Pinchart
Hi Ricardo,
On Tue, Mar 16, 2021 at 11:12:57AM +0100, Ricardo Ribalda wrote:
> On Tue, Mar 16, 2021 at 11:08 AM Laurent Pinchart wrote:
> > On Tue, Mar 16, 2021 at 09:37:07AM +0100, Hans Verkuil wrote:
> > > On 15/03/2021 18:36, Ricardo Ribalda wrote:
> > > >
c_ctrl_add_mapping(struct
> > uvc_video_chain *chain,
> > if (map->set == NULL)
> > map->set = uvc_set_le_value;
> >
> > + for (i = 0; i < ARRAY_SIZE(uvc_control_class); i++) {
> > + if (V4L2_CTRL_ID2WHICH(uvc_control_class[i].id) ==
> > + V4L2_CTRL_ID2WHICH(map->id)) {
> > + chain->ctrl_class_bitmap |= BIT(i);
> > + break;
> > + }
> > + }
> > +
> > list_add_tail(>list, >info.mappings);
> > uvc_dbg(chain->dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n",
> > map->name, ctrl->info.entity, ctrl->info.selector);
> > diff --git a/drivers/media/usb/uvc/uvcvideo.h
> > b/drivers/media/usb/uvc/uvcvideo.h
> > index 97df5ecd66c9..1f17e4253673 100644
> > --- a/drivers/media/usb/uvc/uvcvideo.h
> > +++ b/drivers/media/usb/uvc/uvcvideo.h
> > @@ -262,6 +262,11 @@ struct uvc_control_mapping {
> > u8 *data);
> > };
> >
> > +struct uvc_control_class {
> > + u32 id;
> > + char name[32];
> > +};
> > +
> > struct uvc_control {
> > struct uvc_entity *entity;
> > struct uvc_control_info info;
> > @@ -475,6 +480,7 @@ struct uvc_video_chain {
> >
> > struct v4l2_prio_state prio;/* V4L2 priority state */
> > u32 caps; /* V4L2 chain-wide caps */
> > + u8 ctrl_class_bitmap; /* Bitmap of valid classes */
> > };
> >
> > struct uvc_stats_frame {
> >
>
--
Regards,
Laurent Pinchart
the Eagle board though.
Now that the kernel is gaining support for compiling DT overlays
(https://lore.kernel.org/lkml/cover.1615354376.git.viresh.ku...@linaro.org/),
I wonder if this is something that could be handled using overlays.
--
Regards,
Laurent Pinchart
> <_in2>;
> + };
> + };
> + };
> + };
> +#endif
> +
> +#ifdef EAGLE_USE_CAMERA_3
> + i2c@3 {
> + status = "okay";
> +
> + camera@54 {
> + compatible = EAGLE_CAMERA_MODEL;
> + reg = <0x54>, <0x64>;
> +
> + port {
> + fakra_con3: endpoint {
> + remote-endpoint =
> <_in3>;
> + };
> + };
> + };
> + };
> +#endif
> + };
> +};
> +#endif
--
Regards,
Laurent Pinchart
gt; + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + max9286_in0: endpoin
gpios: true
> + output-low: true
> + line-name: true
> +
> +required:
> + - gpio-hog
> + - gpios
> + - output-low
> +
> +additionalProperties: false
> +
> required:
>- compatible
>- reg
--
Regards,
Laurent Pinchart
ata/overlay_gpio_01.dts
> drivers/of/unittest-data/overlay_10.dts
> drivers/of/unittest-data/overlay_7.dts
> drivers/of/unittest-data/overlay_bad_phandle.dts
> drivers/of/unittest-data/overlay_3.dts
> drivers/of/unittest-data/overlay_6.dts
> drivers/of/unittest-data/overlay_8.dts
> drivers/of/unittest-data/overlay_12.dts
> drivers/of/unittest-data/overlay_gpio_02a.dts
> drivers/of/unittest-data/overlay_gpio_02b.dts
> drivers/of/unittest-data/overlay_4.dts
> drivers/of/unittest-data/overlay.dts
> drivers/of/unittest-data/overlay_9.dts
> drivers/of/unittest-data/overlay_2.dts
> drivers/of/unittest-data/overlay_15.dts
> drivers/of/unittest-data/overlay_base.dts
> drivers/of/unittest-data/overlay_13.dts
--
Regards,
Laurent Pinchart
; No functional changes intended.
>
> Signed-off-by: Jacopo Mondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/max9286.c | 16 ++--
> 1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/media/i2c/max9286.c b/drivers/medi
probe sequence of the remote subdevices, the usage of this
> + * operation could be considered to allow the devices along the pipeline to
> + * probe and register in the media graph and to defer any operation that
> + * require actual access to the communication bus to their init() function
> + * implementation.
> *
> * @load_fw: load firmware.
> *
--
Regards,
Laurent Pinchart
firmware boot delay is unfortunately not characterized in the camera
> module manual.
>
> Fixes: a59f853b3b4b ("media: i2c: Add driver for RDACM21 camera module")
> Signed-off-by: Jacopo Mondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/rdacm21.c | 2 +-
xes: a59f853b3b4b ("media: i2c: Add driver for RDACM21 camera module")
> Signed-off-by: Jacopo Mondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/rdacm21.c | 6 --
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/i2c/
programming.
Isn't the initial address fixed though ? Nonetheless, this can be
addressed separately, so
Reviewed-by: Laurent Pinchart
> Signed-off-by: Jacopo Mondi
> ---
> drivers/media/i2c/max9271.c | 7 +++
> drivers/media/i2c/max9271.h | 9 +
> drivers/media/i
>
> Signed-off-by: Jacopo Mondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/max9271.c | 30 +++---
> 1 file changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/i2c/max9271.c b/drivers/media/i2c/max9271.c
>
e compensated by increasing the reverse channel
> + * amplitude on the remote deserializer side.
> + */
> + return max9271_set_high_threshold(>serializer, true);
> }
>
> static int rdacm20_probe(struct i2c_client *client)
--
Regards,
Laurent Pinchart
a)
>
> Even if the behaviour is intended, silence the sparse warning replacing
> the cast with a bitwise & operation.
>
> Reported-by: Hans Verkuil
> Signed-off-by: Jacopo Mondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/rdacm21.c | 2 +-
> 1 file changed, 1
Hi Doug,
On Mon, Mar 15, 2021 at 09:31:41AM -0700, Doug Anderson wrote:
> On Sat, Mar 13, 2021 at 1:13 PM Laurent Pinchart wrote:
> > On Thu, Mar 04, 2021 at 03:52:00PM -0800, Douglas Anderson wrote:
> > > This patch is _only_ code motion to prepare for the patch
> > >
s: 54f38fcae536 ("media: docs: move uAPI book to userspace-api/media")
> Signed-off-by: Liu Ying
Reviewed-by: Laurent Pinchart
> ---
> Documentation/userspace-api/media/v4l/subdev-formats.rst | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/D
nt in resume callback
> error path where streaming is stopped and runtime PM count is left
> unbalanced.
>
> Fixes: 1283b3b8f82b9 ("media: i2c: Add driver for Sony IMX219 sensor")
> Reported-by: Pavel Machek
> Signed-off-by: Lad Prabhakar
Reviewed-by: Laurent Pincha
issue in resume callback error path where streaming is
> stopped and the controls are left in locked state.
>
> Fixes: 1283b3b8f82b9 ("media: i2c: Add driver for Sony IMX219 sensor")
> Reported-by: Pavel Machek
> Signed-off-by: Lad Prabhakar
Reviewed-by: Laurent Pinchart
Hi Daniel,
Thank you for the patch.
On Fri, Mar 12, 2021 at 10:32:39AM +, Daniel Scally wrote:
> The OV5693 is a 5 Mpx CMOS image sensor, connected via MIPI CSI-2. The
> chip is capable of a single lane configuration, but currently only two
> lanes are supported.
>
> Most of the sensor's
ust specify a period of 1x125 µs
> (i.e., a bInterval value of 1)."
>
> The issue was observed during testing UVC class on CV.
> I treat this change as improvement because we can control
> bInterval by configfs.
>
> Signed-off-by: Pawel Laszczak
Reviewed-by: Lauren
mmit message should explain this.
This change looks good to me, but could you also update
drivers/usb/gadget/legacy/webcam.c and
drivers/usb/gadget/function/f_uvc.c to explicitly set this field to 0 ?
With that,
Reviewed-by: Laurent Pinchart
> Signed-off-by: Pawel Laszczak
> ---
> include/uapi/linux
; > .bDescriptorType= USB_DT_CS_INTERFACE,
> > .bDescriptorSubType = UVC_VC_HEADER,
> > - .bcdUVC = cpu_to_le16(0x0100),
> > + .bcdUVC = cpu_to_le16(0x0110),
> > .wTotalLength = 0, /* dynamic */
> > .dwClockFrequency = cpu_to_le32(4800),
> > .bInCollection = 0, /* dynamic */
The change looks good to me. With the typo in the commit message fixed,
Reviewed-by: Laurent Pinchart
--
Regards,
Laurent Pinchart
nings:
> ./drivers/gpu/drm/omapdrm/dss/dsi.c:2155:5-6:
> WARNING: Unsigned expression compared with zero: r < 0
>
> Signed-off-by: Junlin Yang
Reviewed-by: Laurent Pinchart
Tomi, will you take this in your tree ?
> ---
> drivers/gpu/drm/omapdrm/dss/dsi.c | 7 ---
>
t;
> static const struct drm_bridge_funcs ti_sn_bridge_funcs = {
> .attach = ti_sn_bridge_attach,
> + .detach = ti_sn_bridge_detach,
> .pre_enable = ti_sn_bridge_pre_enable,
> .enable = ti_sn_bridge_enable,
> .disable = ti_sn_bridge_disable,
> @@ -1227,6 +1302,10 @@ static int ti_sn_bridge_probe(struct i2c_client
> *client,
> if (!pdata)
> return -ENOMEM;
>
> + mutex_init(>pre_enable_mutex);
> + INIT_DELAYED_WORK(>pre_enable_timeout_work,
> + ti_sn_bridge_pre_enable_timeout);
> +
> pdata->regmap = devm_regmap_init_i2c(client,
>_sn_bridge_regmap_config);
> if (IS_ERR(pdata->regmap)) {
> @@ -1301,7 +1380,6 @@ static int ti_sn_bridge_remove(struct i2c_client
> *client)
> if (!pdata)
> return -EINVAL;
>
> - kfree(pdata->edid);
> ti_sn_debugfs_remove(pdata);
>
> of_node_put(pdata->host_node);
--
Regards,
Laurent Pinchart
tand.
s/make/makes/
>
> Signed-off-by: Douglas Anderson
Reviewed-by: Laurent Pinchart
> ---
>
> drivers/gpu/drm/bridge/ti-sn65dsi86.c | 196 +-
> 1 file changed, 98 insertions(+), 98 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
d OK to me. We already have to
> check for NULL in the enable case anyway so why not avoid the extra
> call?
>
> Signed-off-by: Douglas Anderson
Reviewed-by: Laurent Pinchart
> ---
>
> drivers/gpu/drm/bridge/ti-sn65dsi86.c | 11 +++
> 1 file changed, 3 insertions(+
Hi Ricardo,
On Sat, Mar 13, 2021 at 12:17:50AM +0100, Ricardo Ribalda Delgado wrote:
> On Fri, Mar 12, 2021 at 11:30 PM Laurent Pinchart wrote:
> > On Fri, Mar 12, 2021 at 01:48:29PM +0100, Ricardo Ribalda wrote:
> > > All the entities must have a unique name. And now tha
10.430 min 268.837 max (uS)
> header: 54308/5000 uS/qty: 10.861 avg 5.104 std 0.778 min 54.736 max (uS)
> latency: 268799/5000 uS/qty: 53.759 avg 21.827 std 6.095 min 255.153 max (uS)
> decode: 5/5000 uS/qty: 10.444 avg 7.137 std 1.874 min 71.103 max (uS)
> raw decode speed: 11.04
y, ctrl->info.selector);
> diff --git a/drivers/media/usb/uvc/uvcvideo.h
> b/drivers/media/usb/uvc/uvcvideo.h
> index 97df5ecd66c9..1f17e4253673 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -262,6 +262,11 @@ struct uvc_control_mapping {
> u8 *data);
> };
>
> +struct uvc_control_class {
> + u32 id;
> + char name[32];
> +};
> +
> struct uvc_control {
> struct uvc_entity *entity;
> struct uvc_control_info info;
> @@ -475,6 +480,7 @@ struct uvc_video_chain {
>
> struct v4l2_prio_state prio;/* V4L2 priority state */
> u32 caps; /* V4L2 chain-wide caps */
> + u8 ctrl_class_bitmap; /* Bitmap of valid classes */
> };
>
> struct uvc_stats_frame {
--
Regards,
Laurent Pinchart
ctrls->error_idx = (ret == -EACCES) ?
> + ctrls->count : i;
> return ret;
> }
> }
--
Regards,
Laurent Pinchart
uvc_ctrl_init_ctrl(chain, ctrl);
> ctrl++;
> }
> }
> @@ -2346,6 +2345,22 @@ int uvc_ctrl_init_device(struct uvc_device *dev)
> return 0;
> }
>
> +int uvc_ctrl_init_device(struct uvc_device *dev)
> +{
> + struct uvc_v
Hi Ricardo,
On Fri, Mar 12, 2021 at 11:15:46PM +0100, Ricardo Ribalda Delgado wrote:
> On Fri, Mar 12, 2021 at 10:19 PM Laurent Pinchart wrote:
> > On Fri, Mar 12, 2021 at 01:57:09PM +0100, Ricardo Ribalda wrote:
> > > On architectures where there is no coherent cachi
rmer is done in the V4L2 core, which uses vdev->name
as-is. In this context, we con't need to add dev->name, it would be
redundant as the media controller device already reports it. The latter
is done in uvc_ioctl_querycap(). How about dropping dev->name from
vdev->name, and modifying uvc_ioctl_querycap() to use dev->name instead
of cap->card ?
>
> /*
>* Set the driver data before calling video_register_device, otherwise
--
Regards,
Laurent Pinchart
Hi Rob,
On Fri, Mar 12, 2021 at 08:33:06AM -0700, Rob Herring wrote:
> On Fri, Mar 12, 2021 at 3:06 AM Laurent Pinchart wrote:
> > On Fri, Mar 12, 2021 at 09:29:04AM +0200, Sakari Ailus wrote:
> > > On Fri, Mar 12, 2021 at 03:25:11AM +0200, Laurent Pinchart wrote:
> >
nged, 74 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_video.c
> b/drivers/media/usb/uvc/uvc_video.c
> index f2f565281e63..8e60f81e2257 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -6,11 +6,14 @@
&
Hi Hans,
On Fri, Mar 12, 2021 at 11:22:07AM +0100, Hans Verkuil wrote:
> On 12/03/2021 11:13, Laurent Pinchart wrote:
> > On Fri, Mar 12, 2021 at 10:57:33AM +0100, Ricardo Ribalda Delgado wrote:
> >> On Fri, Mar 12, 2021 at 2:25 AM Laurent Pinchart wrote:
> >>> On T
; > ret = uvc_ctrl_get(chain, ctrl);
> > if (ret < 0) {
> > uvc_ctrl_rollback(handle);
> > - ctrls->error_idx = i;
> > + ctrls->error_idx = (ret == -EACCES) ?
> > + ctrls->count : i;
> > return ret;
> > }
> > }
--
Regards,
Laurent Pinchart
Hi Ricardo,
On Fri, Mar 12, 2021 at 10:57:33AM +0100, Ricardo Ribalda Delgado wrote:
> On Fri, Mar 12, 2021 at 2:25 AM Laurent Pinchart wrote:
> > On Thu, Mar 11, 2021 at 11:19:45PM +0100, Ricardo Ribalda wrote:
> > > Create all the class controls for the devic
Hi Sakari,
On Fri, Mar 12, 2021 at 09:29:04AM +0200, Sakari Ailus wrote:
> On Fri, Mar 12, 2021 at 03:25:11AM +0200, Laurent Pinchart wrote:
> > On Thu, Mar 11, 2021 at 04:40:42PM -0700, Rob Herring wrote:
> > > Now that we have the graph schema, convert the video-mux binding
And I forgot to mention:
On Fri, Mar 12, 2021 at 03:42:14AM +0200, Laurent Pinchart wrote:
> Hi Christoph and Ricardo,
>
> Thank you for the patch.
>
> On Mon, Mar 01, 2021 at 09:52:36AM +0100, Christoph Hellwig wrote:
> > From: Ricardo Ribalda
> >
vcvideo.h | 4 +-
> 2 files changed, 60 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_video.c
> b/drivers/media/usb/uvc/uvc_video.c
> index f2f565281e63ff..d008c68fb6c806 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/medi
Hi Rob,
Thank you for the patch.
On Thu, Mar 11, 2021 at 04:40:42PM -0700, Rob Herring wrote:
> Now that we have the graph schema, convert the video-mux binding to DT
> schema.
>
> Cc: Sakari Ailus
> Cc: Laurent Pinchart
> Cc: Mauro Carvalho Chehab
> Cc: linux-me...@vge
map |= BIT(i);
> + break;
> + }
> + }
> +
> list_add_tail(>list, >info.mappings);
> uvc_dbg(dev, CONTROL, "Adding mapping '%s' to control %pUl/%u\n",
> map->name, ctrl->info.entity, ctrl->info.selector);
> diff --git a/drivers/media/usb/uvc/uvcvideo.h
> b/drivers/media/usb/uvc/uvcvideo.h
> index 97df5ecd66c9..63b5d697a438 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -262,6 +262,11 @@ struct uvc_control_mapping {
> u8 *data);
> };
>
> +struct uvc_control_class {
> + u32 id;
> + char name[32];
> +};
> +
> struct uvc_control {
> struct uvc_entity *entity;
> struct uvc_control_info info;
> @@ -707,6 +712,8 @@ struct uvc_device {
> } async_ctrl;
>
> struct uvc_entity *gpio_unit;
> +
> + u8 ctrl_class_bitmap;
Should this be stored in the chain, as different chains can have
different controls ?
> };
>
> enum uvc_handle_state {
--
Regards,
Laurent Pinchart
H_DEF_VAL)
> return 1;
> + if (c->which == V4L2_CTRL_WHICH_REQUEST_VAL)
> + return 0;
Or possibly
switch (c->which) {
case V4L2_CTRL_WHICH_CUR_VAL:
case V4L2_CTRL_WHICH_DEF_VAL:
return 1;
case V4L2_CTRL_WHIC
ctrls->error_idx = i;
> + ctrls->error_idx = (ret == -EACCES) ?
> + ctrls->count : i;
> return ret;
> }
> }
--
Regards,
Laurent Pinchart
ies having the same name. Could this be fixed at the same time ?
You can use the unit ID of the output terminal to create unique names
(and it would be nice if the video and metadata nodes has similar names,
with "video" and "metadata" being the only difference between them).
>
> /*
>* Set the driver data before calling video_register_device, otherwise
--
Regards,
Laurent Pinchart
Hi Ricardo,
On Thu, Mar 11, 2021 at 11:59:27PM +0100, Ricardo Ribalda Delgado wrote:
> On Thu, Mar 11, 2021 at 11:53 PM Laurent Pinchart wrote:
> > On Thu, Mar 11, 2021 at 11:19:43PM +0100, Ricardo Ribalda wrote:
> > > The device is doing something unspected with the contr
LS: FAIL
>
> Signed-off-by: Ricardo Ribalda
The change looks good to me.
Reviewed-by: Laurent Pinchart
Which of the error codes below do you get with your camera, and for
which control ?
> ---
> drivers/media/usb/uvc/uvc_video.c | 5 +
> 1 file changed, 5 insertions(+)
ue;
> + ctrl->value = (ret < 0) ? 0 : qc.default_value;
That's not great, if an error occurs, it should be reported to the user,
not ignored silently. Sounds like this needs to be addressed in
v4l2-compliance, as the V4L2 specification doesn't forbid errors being
returned from V4L2_CTRL_WHICH_DEF_VAL.
> }
>
> return 0;
--
Regards,
Laurent Pinchart
puzzling, as the interactions with the hardware to read
the controls are not supposed to affect the hardware state in a way that
applications should care about. It may be an issue in the V4L2
specification.
> return ret;
> }
> }
--
Regards,
Laurent Pinchart
define UVC_CC_USER_CLASS1
> +#define UVC_CC_LAST_CLASSUVC_CC_USER_CLASS
>
> /* ----
> * Driver specific constants.
> @@ -375,6 +379,11 @@ struct uvc_entity {
> struct gpio_desc *gpio_privacy;
> int irq;
> } gpio;
> +
> + struct {
> + u8 bControlSize;
> + u8 *bmControls;
> + } ctrl_class;
> };
>
> u8 bNrInPins;
> @@ -715,6 +724,7 @@ struct uvc_device {
> } async_ctrl;
>
> struct uvc_entity *gpio_unit;
> + struct uvc_entity *ctrl_class_unit;
> };
>
> enum uvc_handle_state {
--
Regards,
Laurent Pinchart
.bmControls[0] = (1 << (UVC_CC_LAST_CLASS + 1)) - 1;
> > > unit->get_info = uvc_ctrl_class_get_info;
> > > strncpy(unit->name, "Control Class", sizeof(unit->name) - 1);
> > >
> > > diff --git a/drivers/media/usb/uvc/uvcvideo.h
> > > b/drivers/media/usb/uvc/uvcvideo.h
> > > index 1d59ac10c2eb..cc573d63e459 100644
> > > --- a/drivers/media/usb/uvc/uvcvideo.h
> > > +++ b/drivers/media/usb/uvc/uvcvideo.h
> > > @@ -186,7 +186,6 @@
> > > */
> > > #define UVC_CC_CAMERA_CLASS 0
> > > #define UVC_CC_USER_CLASS1
> > > -#define UVC_CC_LAST_CLASSUVC_CC_USER_CLASS
> > >
> > > /*
> > >
> > > * Driver specific constants.
--
Regards,
Laurent Pinchart
uld be useful for
userspace to know that the value it sets isn't valid.
> > - return -EINVAL;
> > + return -EIO;
> > default: /* reserved or unknown */
> > break;
> > }
--
Regards,
Laurent Pinchart
fail: v4l2-test-formats.cpp(1241): node->has_frmintervals &&
> !cap->capability
>
> Signed-off-by: Ricardo Ribalda
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/usb/uvc/uvc_v4l2.c | 7 +--
> 1 file changed, 5 insertions(+), 2 deletions(-
component are transmitted on a 30-bit
> input bus(10-bit per component) from a display controller or a 36-bit
> output bus(12-bit per component) to a pixel link.
>
> Reviewed-by: Robert Foss
> Signed-off-by: Liu Ying
Reviewed-by: Laurent Pinchart
> ---
> v4->v5:
>
- 0
I count 32 bits here. Should these two 0 be replaced by spaces ? Same
for MEDIA_BUS_FMT_RGB888_1X30-CPADLO.
With this fixed,
Reviewed-by: Laurent Pinchart
> + - r\ :sub:`5`
> + - r\ :sub:`4`
> + - r\ :sub:`3`
> + - r\ :sub:`2`
> + - r\ :
Hi Prabhakar,
On Wed, Mar 10, 2021 at 12:46:39PM +, Lad, Prabhakar wrote:
> On Wed, Mar 10, 2021 at 12:40 PM Laurent Pinchart wrote:
> > On Wed, Mar 10, 2021 at 12:20:13PM +, Lad Prabhakar wrote:
> > > Serialize during stream start/stop in suspend/resume callbacks.
>
> error:
> + client = v4l2_get_subdevdata(>sd);
> imx219_stop_streaming(imx219);
> + pm_runtime_put(>dev);
> imx219->streaming = false;
> __v4l2_ctrl_grab(imx219->vflip, false);
> __v4l2_ctrl_grab(imx219->hflip, false);
Similarly to the __v4l2_ctrl_grab(), it could be better to move
pm_runtime_put() to imx219_stop_streaming().
--
Regards,
Laurent Pinchart
__v4l2_ctrl_grab(imx219->hflip, false);
It's not very nice to do this manually in imx219_resume(). Shouldn't we
move the __v4l2_ctrl_grab() calls from imx219_set_stream() to
imx219_start_streaming() and imx219_stop_streaming() instead ?
>
> return ret;
> }
--
Regards,
Laurent Pinchart
*dev)
> imx219->streaming = false;
> __v4l2_ctrl_grab(imx219->vflip, false);
> __v4l2_ctrl_grab(imx219->hflip, false);
> + mutex_unlock(>mutex);
>
> return ret;
> }
--
Regards,
Laurent Pinchart
Hi Ricardo,
On Wed, Mar 10, 2021 at 08:58:39AM +0100, Ricardo Ribalda wrote:
> On Wed, Mar 10, 2021 at 8:49 AM Laurent Pinchart wrote:
> > On Wed, Mar 10, 2021 at 12:43:17AM +0100, Ricardo Ribalda wrote:
> > > The plane_length is an unsigned integer. So, if we have a size o
t; /* Memops alloc requires size to be page aligned. */
> - unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
> + size = PAGE_ALIGN(size);
>
> /* Did it wrap around? */
> if (size < vb->planes[plane].length)
Doesn't this address the issue already ?
--
Regards,
Laurent Pinchart
an embedded system, it may be useful to select
which HDCP versions to offer based on different constraints at runtime.
This really seems like a system configuration parameter to me, not a
system description.
--
Regards,
Laurent Pinchart
gtr_probe(struct platform_device *pdev)
> provider = devm_of_phy_provider_register(>dev, xpsgtr_xlate);
> if (IS_ERR(provider)) {
> dev_err(>dev, "registering provider failed\n");
> - return PTR_ERR(provider);
> + ret = PTR_ERR(provider);
> + goto err_clk_put;
> }
> return 0;
> +
> +err_clk_put:
> + for (i = 0; i < ARRAY_SIZE(gtr_dev->clk); i++)
> + clk_disable_unprepare(gtr_dev->clk[i]);
> +
> + return ret;
> }
>
> static const struct of_device_id xpsgtr_of_match[] = {
--
Regards,
Laurent Pinchart
= <1>;
> #size-cells = <0>;
> #clock-cells = <1>;
> + compatible = "silabs,si5328";
> clocks = <>;
> clock-names = "xtal";
> clock-output-names = "si5328";
--
Regards,
Laurent Pinchart
Hi Jagan,
On Wed, Mar 03, 2021 at 08:08:35PM +0530, Jagan Teki wrote:
> On Wed, Feb 24, 2021 at 6:44 PM Laurent Pinchart wrote:
> > On Wed, Feb 24, 2021 at 06:07:43PM +0530, Jagan Teki wrote:
> > > On Mon, Feb 15, 2021 at 5:48 PM Laurent Pinchart wrote:
> > > > On S
> interface (via driver drivers/media/platform/rcar_drif.c, or from other
> > > sources since this IP is decoupled from DRIF), and then when it's time
> > > to accelerate FFT, FIC, or MSC, it can request services to the DAB IP, so
> > > that the app can go on and use the processor to do some work, while the
> > > DAB
> > > IP processes things.
> > > A framework to connect and exchange processing blocks (either SW or HW)
> > > and
> > > interfaces is therefore vital to properly place a kernel implementation
> > > in the great scheme of things, in its absence a simple driver can help
> >
> > I'm not entirely sure we are missing a framework. What's missing in
> > V4L2 MEM2MEM?
>
> I was referring to a user space framework (I should have been more specific
> with my previous email).
>
> > Before considering drivers/staging, it would be interesting to figure
> > out if V4L2 can do it as-is, and if not, discuss what's missing.
>
> I think an interim solution would allow us and users to evaluate things a
> little bit better, so that we can integrate this IP with V4L2 later on.
--
Regards,
Laurent Pinchart
ibe
the system, not configure it. A way for userspace to configure this
would be better.
--
Regards,
Laurent Pinchart
reg-names = "mhdptx";
> +reg = <0xf0 0xfb00 0x0 0x100>,
> + <0x0 0x4f48000 0x0 0x74>;
> +reg-names = "mhdptx", "mhdptx-sapb";
> clocks = <_clock>;
> phys = <_phy>;
> phy-names = "dpphy";
--
Regards,
Laurent Pinchart
he
> +subsystem as a hole. For core changes, whenever possible, multiple
s/hole/whole/
> +media (sub-)maintainers do the review.
> +
> +The sub-maintainers work on specific areas of the subsystem, as
> +described below:
> +
> +Digital TV:
> + Sean Young
> +
> +HDM
From: Laurent Pinchart
Make the V4L2 async framework a bit more robust by allowing to
unregister a non-registered async subdev. Otherwise the
v4l2_async_cleanup() will attempt to delete the async subdev from the
subdev_list with the corresponding list_head not initialized.
Signed-off
From: Laurent Pinchart
The new function checks if the list_head prev and next pointers are
NULL, in order to see if a list_head that has been zeroed when allocated
has been initialized with INIT_LIST_HEAD() or added to a list.
This can be used in cleanup functions that want to support being
mber; /*
> > +* Orthogonal Frequency Division
> > +* Multiplexing (OFDM).
> > +* Minimum value is 1, maximum
> > value is
> > +
axItems: 1
I usually try to describe clocks:
clocks:
items:
- description: The module functional clock
but as there's a single clock, it may not be worth it. Up to you.
> +
> + clock-names:
> +const: dab
With Geert's and Sergei's comments addressed,
Reviewed-by
AT25=m
> CONFIG_UACCE=m
> +CONFIG_RCAR_DAB=m
> # CONFIG_SCSI_PROC_FS is not set
> CONFIG_BLK_DEV_SD=y
> CONFIG_SCSI_SAS_ATA=y
--
Regards,
Laurent Pinchart
Hz, while S3D1 on E3 runs at 266 MHz.
> Probably it doesn't matter that much, as your driver doesn't care
> about the actual clock rate.
I have the exact same concerns, here and for 1/7.
> > DEF_MOD("scu-all", 1017, R8A77965_CLK_S3D4),
> > DEF_MOD("scu-dvc1", 1018, MOD_CLK_ID(1017)),
> > DEF_MOD("scu-dvc0", 1019, MOD_CLK_ID(1017)),
--
Regards,
Laurent Pinchart
clocks = < CPG_MOD 1016>;
As the clock isn't documented in the documentation, I can't verify this
of the resets property :-S
> + clock-names = "dab";
I'll comment on the clock name in the DT bindings.
Reviewed-by
quot;;
> + power-domains = < R8A77965_PD_ALWAYS_ON>;
> + resets = < 1016>;
Same comments as for r8a77990.
Reviewed-by: Laurent Pinchart
> + status = "disabled";
> + };
> +
>
rcar_dev.c
> create mode 100644 drivers/misc/rcar_dab/rcar_dev.h
> create mode 100644 drivers/misc/rcar_dab/rcar_fft.c
> create mode 100644 include/uapi/linux/rcar_dab.h
--
Regards,
Laurent Pinchart
Hi Jacopo,
On Mon, Feb 22, 2021 at 03:59:05PM +0100, Jacopo Mondi wrote:
> On Mon, Feb 22, 2021 at 02:49:34AM +0200, Laurent Pinchart wrote:
> > On Wed, Feb 17, 2021 at 12:55:19PM +, Kieran Bingham wrote:
> > > On 16/02/2021 17:41, Jacopo Mondi wrote:
> > >
Hi Jacopo,
On Mon, Feb 22, 2021 at 04:19:13PM +0100, Jacopo Mondi wrote:
> On Mon, Feb 22, 2021 at 03:27:25AM +0200, Laurent Pinchart wrote:
> > On Tue, Feb 16, 2021 at 06:41:39PM +0100, Jacopo Mondi wrote:
> > > The OV10640 image sensor reset and powerdown on signals are co
Hi Jacopo,
On Mon, Feb 22, 2021 at 04:11:41PM +0100, Jacopo Mondi wrote:
> On Mon, Feb 22, 2021 at 03:18:53AM +0200, Laurent Pinchart wrote:
> > On Wed, Feb 17, 2021 at 01:33:01PM +, Kieran Bingham wrote:
> > > On 16/02/2021 17:41, Jacopo Mondi wrote:
> > >
Hi Jacopo,
On Mon, Feb 22, 2021 at 04:06:43PM +0100, Jacopo Mondi wrote:
> On Mon, Feb 22, 2021 at 03:05:03AM +0200, Laurent Pinchart wrote:
> > Hi Jacopo,
> >
> > Reviewed-by: Laurent Pinchart
> >
> > On Wed, Feb 17, 2021 at 01:01:26PM +, Kieran Bingham
Hi Jagan,
On Wed, Feb 24, 2021 at 06:07:43PM +0530, Jagan Teki wrote:
> On Mon, Feb 15, 2021 at 5:48 PM Laurent Pinchart wrote:
> > On Sun, Feb 14, 2021 at 11:22:10PM +0530, Jagan Teki wrote:
> > > ICN6211 is MIPI-DSI to RGB Convertor bridge from Chipone.
> > &
Hi Daniel,
On Tue, Feb 23, 2021 at 10:36:18PM +, Daniel Scally wrote:
> On 23/02/2021 20:04, Laurent Pinchart wrote:
> >> +
> >> +/*
> >> + * Here follows platform specific mapping information that we can pass to
> >> + * the functions mapping resources
sensor that is dependent on this entry.
>
> This commit adds a new module, registering a platform driver to deal
> with the 3rd scenario plus an i2c driver to deal with #1 and #2, by
> querying the CLDB buffer found against INT3472 entries to determine
> which is most appropriate.
>
ch_entry() in
drm_atomic_bridge_chain_pre_enable(). Still, this will likely break
drivers that depend on the existing order, so I don't think that's an
acceptable solution as-is.
>
> if (bridge->funcs->attach) {
> ret = bridge->funcs->attach(bridge, flags);
--
Regards,
Laurent Pinchart
ex 80b6f16f87a8..552985026458 100644
> > --- a/drivers/media/i2c/rdacm21.c
> > +++ b/drivers/media/i2c/rdacm21.c
> > @@ -442,7 +442,7 @@ static int rdacm21_init(struct v4l2_subdev *sd,
> > unsigned int val)
> > ret = max9271_configure_i2c(>serializer,
> > MAX9271_I2CSLVSH_469NS_234NS |
> > MAX9271_I2CSLVTO_1024US |
> > - MAX9271_I2CMSTBT_105KBPS);
> > + MAX9271_I2CMSTBT_339KBPS);
> > if (ret)
> > return ret;
> >
--
Regards,
Laurent Pinchart
- Disable auto-ack as communication on the control channel are now
>* stable.
>*/
> - max9286_reverse_channel_setup(priv, MAX9286_REV_AMP_HIGH);
> max9286_check_config_link(priv, priv->source_mask);
>
> /*
--
Regards,
Laurent Pinchart
Hi Jacopo,
Reviewed-by: Laurent Pinchart
On Thu, Feb 18, 2021 at 04:13:14PM +, Kieran Bingham wrote:
> On 16/02/2021 17:41, Jacopo Mondi wrote:
> > The current probe() procedure of the RDACM20 and RDACM20 performs
>
> and RDACM21?
>
> > initialization of the
channel amplitude to compensate for the
> - * remote ends high threshold, if not done already
> + * remote ends high threshold
I would have done this in the previous patch, but it doesn't matter
much.
Reviewed-by: Laurent Pinchart
>* - Verify all configuration lin
ondi
Reviewed-by: Laurent Pinchart
> ---
> drivers/media/i2c/max9286.c | 13 ++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/i2c/max9286.c b/drivers/media/i2c/max9286.c
> index 1f14cd817fbf..4afb5ca06448 100644
> --- a
tests after fixing this.
> usleep_range(3000, 5000);
>
> /* Read OV10640 ID to test communications. */
--
Regards,
Laurent Pinchart
priv->reverse_channel_mv = reverse_channel_microvolt / 1000U;
> + priv->init_rev_chan_mv = reverse_channel_microvolt / 1000U;
>
> priv->route_mask = priv->source_mask;
>
--
Regards,
Laurent Pinchart
101 - 200 of 4490 matches
Mail list logo