[git:media_stage/master] media: cadence: csi2rx: Set the STOP bit when stopping a stream

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cadence: csi2rx: Set the STOP bit when stopping a stream
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:34 2023 +0530

The stream stop procedure says that the STOP bit should be set when the
stream is to be stopped, and then the ready bit in stream status
register polled to make sure the STOP operation is finished.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Reviewed-by: Maxime Ripard 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/cadence/cdns-csi2rx.c | 19 ++-
 1 file changed, 18 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c 
b/drivers/media/platform/cadence/cdns-csi2rx.c
index 913f84c341f4..230c627ef1f4 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -8,6 +8,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -41,8 +42,12 @@
 
 #define CSI2RX_STREAM_CTRL_REG(n)  (CSI2RX_STREAM_BASE(n) + 0x000)
 #define CSI2RX_STREAM_CTRL_SOFT_RSTBIT(4)
+#define CSI2RX_STREAM_CTRL_STOPBIT(1)
 #define CSI2RX_STREAM_CTRL_START   BIT(0)
 
+#define CSI2RX_STREAM_STATUS_REG(n)(CSI2RX_STREAM_BASE(n) + 0x004)
+#define CSI2RX_STREAM_STATUS_RDY   BIT(31)
+
 #define CSI2RX_STREAM_DATA_CFG_REG(n)  (CSI2RX_STREAM_BASE(n) + 0x008)
 #define CSI2RX_STREAM_DATA_CFG_EN_VC_SELECTBIT(31)
 #define CSI2RX_STREAM_DATA_CFG_VC_SELECT(n)BIT((n) + 16)
@@ -310,13 +315,25 @@ err_disable_pclk:
 static void csi2rx_stop(struct csi2rx_priv *csi2rx)
 {
unsigned int i;
+   u32 val;
+   int ret;
 
clk_prepare_enable(csi2rx->p_clk);
reset_control_assert(csi2rx->sys_rst);
clk_disable_unprepare(csi2rx->sys_clk);
 
for (i = 0; i < csi2rx->max_streams; i++) {
-   writel(0, csi2rx->base + CSI2RX_STREAM_CTRL_REG(i));
+   writel(CSI2RX_STREAM_CTRL_STOP,
+  csi2rx->base + CSI2RX_STREAM_CTRL_REG(i));
+
+   ret = readl_relaxed_poll_timeout(csi2rx->base +
+CSI2RX_STREAM_STATUS_REG(i),
+val,
+!(val & 
CSI2RX_STREAM_STATUS_RDY),
+10, 1);
+   if (ret)
+   dev_warn(csi2rx->dev,
+"Failed to stop streaming on pad%u\n", i);
 
reset_control_assert(csi2rx->pixel_rst[i]);
clk_disable_unprepare(csi2rx->pixel_clk[i]);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: cadence: csi2rx: Soft reset the streams before starting capture

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cadence: csi2rx: Soft reset the streams before starting capture
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:33 2023 +0530

This resets the stream state machines and FIFOs, giving them a clean
slate. On J721E if the streams are not reset before starting the
capture, the captured frame gets wrapped around vertically on every run
after the first.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Maxime Ripard 
Reviewed-by: Tomi Valkeinen 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/cadence/cdns-csi2rx.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c 
b/drivers/media/platform/cadence/cdns-csi2rx.c
index 77e2413c345a..913f84c341f4 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -40,6 +40,7 @@
 #define CSI2RX_STREAM_BASE(n)  (((n) + 1) * 0x100)
 
 #define CSI2RX_STREAM_CTRL_REG(n)  (CSI2RX_STREAM_BASE(n) + 0x000)
+#define CSI2RX_STREAM_CTRL_SOFT_RSTBIT(4)
 #define CSI2RX_STREAM_CTRL_START   BIT(0)
 
 #define CSI2RX_STREAM_DATA_CFG_REG(n)  (CSI2RX_STREAM_BASE(n) + 0x008)
@@ -134,12 +135,23 @@ struct csi2rx_priv *v4l2_subdev_to_csi2rx(struct 
v4l2_subdev *subdev)
 
 static void csi2rx_reset(struct csi2rx_priv *csi2rx)
 {
+   unsigned int i;
+
+   /* Reset module */
writel(CSI2RX_SOFT_RESET_PROTOCOL | CSI2RX_SOFT_RESET_FRONT,
   csi2rx->base + CSI2RX_SOFT_RESET_REG);
+   /* Reset individual streams. */
+   for (i = 0; i < csi2rx->max_streams; i++) {
+   writel(CSI2RX_STREAM_CTRL_SOFT_RST,
+  csi2rx->base + CSI2RX_STREAM_CTRL_REG(i));
+   }
 
-   udelay(10);
+   usleep_range(10, 20);
 
+   /* Clear resets */
writel(0, csi2rx->base + CSI2RX_SOFT_RESET_REG);
+   for (i = 0; i < csi2rx->max_streams; i++)
+   writel(0, csi2rx->base + CSI2RX_STREAM_CTRL_REG(i));
 }
 
 static int csi2rx_configure_ext_dphy(struct csi2rx_priv *csi2rx)

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: cadence: csi2rx: Fix stream data configuration

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cadence: csi2rx: Fix stream data configuration
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:35 2023 +0530

Firstly, there is no VC_EN bit present in the STREAM_DATA_CFG register.
Bit 31 is part of the VL_SELECT field. Remove it completely.

Secondly, it makes little sense to enable ith virtual channel for ith
stream. Sure, there might be a use-case that demands it. But there might
also be a use case that demands all streams to use the 0th virtual
channel. Prefer this case over the former because it is less arbitrary
and also makes it very clear what the limitations of the current driver
is instead of giving a false impression that multiple virtual channels
are supported.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Reviewed-by: Maxime Ripard 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/cadence/cdns-csi2rx.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c 
b/drivers/media/platform/cadence/cdns-csi2rx.c
index 230c627ef1f4..812f31dfaab1 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -49,7 +49,6 @@
 #define CSI2RX_STREAM_STATUS_RDY   BIT(31)
 
 #define CSI2RX_STREAM_DATA_CFG_REG(n)  (CSI2RX_STREAM_BASE(n) + 0x008)
-#define CSI2RX_STREAM_DATA_CFG_EN_VC_SELECTBIT(31)
 #define CSI2RX_STREAM_DATA_CFG_VC_SELECT(n)BIT((n) + 16)
 
 #define CSI2RX_STREAM_CFG_REG(n)   (CSI2RX_STREAM_BASE(n) + 0x00c)
@@ -271,8 +270,11 @@ static int csi2rx_start(struct csi2rx_priv *csi2rx)
writel(CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF,
   csi2rx->base + CSI2RX_STREAM_CFG_REG(i));
 
-   writel(CSI2RX_STREAM_DATA_CFG_EN_VC_SELECT |
-  CSI2RX_STREAM_DATA_CFG_VC_SELECT(i),
+   /*
+* Enable one virtual channel. When multiple virtual channels
+* are supported this will have to be changed.
+*/
+   writel(CSI2RX_STREAM_DATA_CFG_VC_SELECT(0),
   csi2rx->base + CSI2RX_STREAM_DATA_CFG_REG(i));
 
writel(CSI2RX_STREAM_CTRL_START,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: cadence: csi2rx: Add link validation

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cadence: csi2rx: Add link validation
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:37 2023 +0530

Add media link validation to make sure incorrectly configured pipelines
are caught.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Reviewed-by: Maxime Ripard 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/cadence/cdns-csi2rx.c | 5 +
 1 file changed, 5 insertions(+)

---

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c 
b/drivers/media/platform/cadence/cdns-csi2rx.c
index d0c2a5b3d0d5..889f4fbbafb3 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -453,6 +453,10 @@ static const struct v4l2_subdev_ops csi2rx_subdev_ops = {
.pad= _pad_ops,
 };
 
+static const struct media_entity_operations csi2rx_media_ops = {
+   .link_validate = v4l2_subdev_link_validate,
+};
+
 static int csi2rx_async_bound(struct v4l2_async_notifier *notifier,
  struct v4l2_subdev *s_subdev,
  struct v4l2_async_connection *asd)
@@ -669,6 +673,7 @@ static int csi2rx_probe(struct platform_device *pdev)
for (i = CSI2RX_PAD_SOURCE_STREAM0; i < CSI2RX_PAD_MAX; i++)
csi2rx->pads[i].flags = MEDIA_PAD_FL_SOURCE;
csi2rx->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+   csi2rx->subdev.entity.ops = _media_ops;
 
ret = media_entity_pads_init(>subdev.entity, CSI2RX_PAD_MAX,
 csi2rx->pads);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: cadence: csi2rx: Populate subdev devnode

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cadence: csi2rx: Populate subdev devnode
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:36 2023 +0530

The devnode can be used by media-ctl and other userspace tools to
perform configurations on the subdev. Without it, media-ctl returns
ENOENT when setting format on the sensor subdev.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Reviewed-by: Maxime Ripard 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/cadence/cdns-csi2rx.c | 1 +
 1 file changed, 1 insertion(+)

---

diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c 
b/drivers/media/platform/cadence/cdns-csi2rx.c
index 812f31dfaab1..d0c2a5b3d0d5 100644
--- a/drivers/media/platform/cadence/cdns-csi2rx.c
+++ b/drivers/media/platform/cadence/cdns-csi2rx.c
@@ -668,6 +668,7 @@ static int csi2rx_probe(struct platform_device *pdev)
csi2rx->pads[CSI2RX_PAD_SINK].flags = MEDIA_PAD_FL_SINK;
for (i = CSI2RX_PAD_SOURCE_STREAM0; i < CSI2RX_PAD_MAX; i++)
csi2rx->pads[i].flags = MEDIA_PAD_FL_SOURCE;
+   csi2rx->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
 
ret = media_entity_pads_init(>subdev.entity, CSI2RX_PAD_MAX,
 csi2rx->pads);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: hynix, hi846: Add video-interface-devices properties

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: hynix,hi846: Add video-interface-devices properties
Author:  Jacopo Mondi 
Date:Fri Oct 6 14:40:56 2023 +0200

Allow properties from video-interface-devices.yaml for the SK Hynix Hi-846
sensor.

All properties specified in video-interface-devices.yaml schema are
valid, so make them accepted by changing "additionalProperties: false"
to "unevaluatedProperties: false" at the schema top-level.

Add two properties from video-interface-devices.yaml to the example
to validate the new schema.

Signed-off-by: Jacopo Mondi 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 Documentation/devicetree/bindings/media/i2c/hynix,hi846.yaml | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/hynix,hi846.yaml 
b/Documentation/devicetree/bindings/media/i2c/hynix,hi846.yaml
index 1e2df8cf2937..60f19e1152b3 100644
--- a/Documentation/devicetree/bindings/media/i2c/hynix,hi846.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/hynix,hi846.yaml
@@ -14,6 +14,9 @@ description: |-
   interface and CCI (I2C compatible) control bus. The output format
   is raw Bayer.
 
+allOf:
+  - $ref: /schemas/media/video-interface-devices.yaml#
+
 properties:
   compatible:
 const: hynix,hi846
@@ -86,7 +89,7 @@ required:
   - vddd-supply
   - port
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |
@@ -109,6 +112,8 @@ examples:
 vddio-supply = <_camera_vddio>;
 reset-gpios = < 25 GPIO_ACTIVE_LOW>;
 shutdown-gpios = < 4 GPIO_ACTIVE_LOW>;
+orientation = <0>;
+rotation = <0>;
 
 port {
 camera_out: endpoint {

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: mt9m114: Fix missing error unwind in probe()

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: mt9m114: Fix missing error unwind in probe()
Author:  Laurent Pinchart 
Date:Tue Oct 3 22:20:43 2023 +0300

Two paths in the probe function return directly instead of jumping to
error handling. Fix them.

Fixes: 24d756e914fc ("media: i2c: Add driver for onsemi MT9M114 camera sensor")
Signed-off-by: Laurent Pinchart 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/mt9m114.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c
index dae675e52390..ac19078ceda3 100644
--- a/drivers/media/i2c/mt9m114.c
+++ b/drivers/media/i2c/mt9m114.c
@@ -2367,7 +2367,7 @@ static int mt9m114_probe(struct i2c_client *client)
 
ret = mt9m114_clk_init(sensor);
if (ret)
-   return ret;
+   goto error_ep_free;
 
/*
 * Identify the sensor. The driver supports runtime PM, but needs to
@@ -2378,7 +2378,7 @@ static int mt9m114_probe(struct i2c_client *client)
ret = mt9m114_power_on(sensor);
if (ret < 0) {
dev_err_probe(dev, ret, "Could not power on the device\n");
-   return ret;
+   goto error_ep_free;
}
 
ret = mt9m114_identify(sensor);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: sony, imx415: Allow props from video-interface-devices

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: sony,imx415: Allow props from 
video-interface-devices
Author:  Jacopo Mondi 
Date:Fri Oct 6 14:41:01 2023 +0200

All the properties described by video-interface-devices.yaml are
allowed for the image sensor, make them accepted by changing
"additionalProperties: false" to "unevaluatedProperties: false" at the
schema top-level.

Because all properties are now accepted, there is no need to explicitly
allow them in the schema.

Signed-off-by: Jacopo Mondi 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml 
b/Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml
index ffccf5f3c9e3..8ea3ddd251f6 100644
--- a/Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml
@@ -44,14 +44,6 @@ properties:
 description: Sensor reset (XCLR) GPIO
 maxItems: 1
 
-  flash-leds: true
-
-  lens-focus: true
-
-  orientation: true
-
-  rotation: true
-
   port:
 $ref: /schemas/graph.yaml#/$defs/port-base
 
@@ -88,7 +80,7 @@ required:
   - ovdd-supply
   - port
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: sony, imx214: Allow props from video-interface-devices

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: sony,imx214: Allow props from 
video-interface-devices
Author:  Jacopo Mondi 
Date:Fri Oct 6 14:41:00 2023 +0200

All the properties described by video-interface-devices.yaml are
allowed for the image sensor, make them accepted by changing
"additionalProperties: false" to "unevaluatedProperties: false" at the
schema top-level.

Signed-off-by: Jacopo Mondi 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml 
b/Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml
index e2470dd5920c..60903da84e1f 100644
--- a/Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/sony,imx214.yaml
@@ -91,7 +91,7 @@ required:
   - vddd-supply
   - port
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Rework initialising sub-device state

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Rework initialising sub-device state
Author:  Sakari Ailus 
Date:Mon Oct 9 09:40:11 2023 +0300

Initialise sub-device state in init_cfg callback using ccs_propagate() to
the extent it covers of the initialisation. This fixes a bug where the
driver configuration was incorrectly initialised.

Fixes: d8bca3ed1d70 ("media: ccs: Use sub-device active state")
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 45 +---
 1 file changed, 28 insertions(+), 17 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 2abfd5932e02..14e89ae98294 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -2075,6 +2075,7 @@ static void ccs_propagate(struct v4l2_subdev *subdev,
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
struct ccs_subdev *ssd = to_ccs_subdev(subdev);
struct v4l2_rect *comp, *crops[CCS_PADS];
+   struct v4l2_mbus_framefmt *fmt;
 
ccs_get_crop_compose(subdev, sd_state, crops, );
 
@@ -2096,6 +2097,9 @@ static void ccs_propagate(struct v4l2_subdev *subdev,
fallthrough;
case V4L2_SEL_TGT_COMPOSE:
*crops[CCS_PAD_SRC] = *comp;
+   fmt = v4l2_subdev_get_pad_format(subdev, sd_state, CCS_PAD_SRC);
+   fmt->width = comp->width;
+   fmt->height = comp->height;
if (which == V4L2_SUBDEV_FORMAT_ACTIVE && ssd == sensor->src)
sensor->src_src = *crops[CCS_PAD_SRC];
break;
@@ -3003,31 +3007,38 @@ static int ccs_init_cfg(struct v4l2_subdev *sd,
 {
struct ccs_subdev *ssd = to_ccs_subdev(sd);
struct ccs_sensor *sensor = ssd->sensor;
-   unsigned int i;
+   unsigned int pad = ssd == sensor->pixel_array ?
+   CCS_PA_PAD_SRC : CCS_PAD_SINK;
+   struct v4l2_mbus_framefmt *fmt =
+   v4l2_subdev_get_pad_format(sd, sd_state, pad);
+   struct v4l2_rect *crop =
+   v4l2_subdev_get_pad_crop(sd, sd_state, pad);
+   bool is_active = !sd->active_state || sd->active_state == sd_state;
 
mutex_lock(>mutex);
 
-   for (i = 0; i < ssd->npads; i++) {
-   struct v4l2_mbus_framefmt *fmt =
-   v4l2_subdev_get_pad_format(sd, sd_state, i);
-   struct v4l2_rect *crop =
-   v4l2_subdev_get_pad_crop(sd, sd_state, i);
-   struct v4l2_rect *comp;
-
-   ccs_get_native_size(ssd, crop);
+   ccs_get_native_size(ssd, crop);
 
-   fmt->width = crop->width;
-   fmt->height = crop->height;
-   fmt->code = sensor->internal_csi_format->code;
-   fmt->field = V4L2_FIELD_NONE;
+   fmt->width = crop->width;
+   fmt->height = crop->height;
+   fmt->code = sensor->internal_csi_format->code;
+   fmt->field = V4L2_FIELD_NONE;
 
-   if (ssd == sensor->pixel_array)
-   continue;
+   if (ssd == sensor->pixel_array) {
+   if (is_active)
+   sensor->pa_src = *crop;
 
-   comp = v4l2_subdev_get_pad_compose(sd, sd_state, i);
-   *comp = *crop;
+   mutex_unlock(>mutex);
+   return 0;
}
 
+   fmt = v4l2_subdev_get_pad_format(sd, sd_state, CCS_PAD_SRC);
+   fmt->code = ssd == sensor->src ?
+   sensor->csi_format->code : sensor->internal_csi_format->code;
+   fmt->field = V4L2_FIELD_NONE;
+
+   ccs_propagate(sd, sd_state, is_active, V4L2_SEL_TGT_CROP);
+
mutex_unlock(>mutex);
 
return 0;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: Add TI J721E CSI2RX

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: Add TI J721E CSI2RX
Author:  Pratyush Yadav 
Date:Mon Oct 9 18:39:38 2023 +0530

TI's J721E uses the Cadence CSI2RX and DPHY peripherals to facilitate
capture over a CSI-2 bus. The TI CSI2RX platform driver glues all the
parts together.

Signed-off-by: Pratyush Yadav 
Tested-by: Julien Massot 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Rob Herring 
Signed-off-by: Jai Luthra 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 .../bindings/media/ti,j721e-csi2rx-shim.yaml   | 100 +
 1 file changed, 100 insertions(+)

---

diff --git a/Documentation/devicetree/bindings/media/ti,j721e-csi2rx-shim.yaml 
b/Documentation/devicetree/bindings/media/ti,j721e-csi2rx-shim.yaml
new file mode 100644
index ..f762fdc05e4d
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/ti,j721e-csi2rx-shim.yaml
@@ -0,0 +1,100 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/ti,j721e-csi2rx-shim.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI J721E CSI2RX Shim
+
+description: |
+  The TI J721E CSI2RX Shim is a wrapper around Cadence CSI2RX bridge that
+  enables sending captured frames to memory over PSI-L DMA. In the J721E
+  Technical Reference Manual (SPRUIL1B) it is referred to as "SHIM" under the
+  CSI_RX_IF section.
+
+maintainers:
+  - Jai Luthra 
+
+properties:
+  compatible:
+const: ti,j721e-csi2rx-shim
+
+  dmas:
+maxItems: 1
+
+  dma-names:
+items:
+  - const: rx0
+
+  reg:
+maxItems: 1
+
+  power-domains:
+maxItems: 1
+
+  ranges: true
+
+  "#address-cells": true
+
+  "#size-cells": true
+
+patternProperties:
+  "^csi-bridge@":
+type: object
+description: CSI2 bridge node.
+$ref: cdns,csi2rx.yaml#
+
+required:
+  - compatible
+  - reg
+  - dmas
+  - dma-names
+  - power-domains
+  - ranges
+  - "#address-cells"
+  - "#size-cells"
+
+additionalProperties: false
+
+examples:
+  - |
+#include 
+
+ti_csi2rx0: ticsi2rx@450 {
+compatible = "ti,j721e-csi2rx-shim";
+dmas = <_udmap 0x4940>;
+dma-names = "rx0";
+reg = <0x450 0x1000>;
+power-domains = <_pds 26 TI_SCI_PD_EXCLUSIVE>;
+#address-cells = <1>;
+#size-cells = <1>;
+ranges;
+
+cdns_csi2rx: csi-bridge@4504000 {
+compatible = "ti,j721e-csi2rx", "cdns,csi2rx";
+reg = <0x4504000 0x1000>;
+clocks = <_clks 26 2>, <_clks 26 0>, <_clks 26 2>,
+  <_clks 26 2>, <_clks 26 3>, <_clks 26 3>;
+clock-names = "sys_clk", "p_clk", "pixel_if0_clk",
+  "pixel_if1_clk", "pixel_if2_clk", "pixel_if3_clk";
+phys = <>;
+phy-names = "dphy";
+
+ports {
+#address-cells = <1>;
+#size-cells = <0>;
+
+csi2_0: port@0 {
+
+reg = <0>;
+
+csi2rx0_in_sensor: endpoint {
+remote-endpoint = <_cam0>;
+bus-type = <4>; /* CSI2 DPHY. */
+clock-lanes = <0>;
+data-lanes = <1 2>;
+};
+};
+};
+};
+};

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: ovti, ov5640: Allow props from video-interface-devices

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: ovti,ov5640: Allow props from 
video-interface-devices
Author:  Jacopo Mondi 
Date:Fri Oct 6 14:40:59 2023 +0200

There is no reason to restrict the allowed rotation degrees to 0 and 180,
as the sensor can be mounted with any rotation.

Also, as all the properties described by video-interface-devices.yaml are
allowed for the image sensor, make them accepted by changing
"additionalProperties: false" to "unevaluatedProperties: false" at the
schema top-level.

Signed-off-by: Jacopo Mondi 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 Documentation/devicetree/bindings/media/i2c/ovti,ov5640.yaml | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/ovti,ov5640.yaml 
b/Documentation/devicetree/bindings/media/i2c/ovti,ov5640.yaml
index a621032f9bd0..2c5e69356658 100644
--- a/Documentation/devicetree/bindings/media/i2c/ovti,ov5640.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/ovti,ov5640.yaml
@@ -44,11 +44,6 @@ properties:
 description: >
   Reference to the GPIO connected to the reset pin, if any.
 
-  rotation:
-enum:
-  - 0
-  - 180
-
   port:
 description: Digital Output Port
 $ref: /schemas/graph.yaml#/$defs/port-base
@@ -85,7 +80,7 @@ required:
   - DOVDD-supply
   - port
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: ovti, ov02a10: Allow props from video-interface-devices

2023-10-12 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: ovti,ov02a10: Allow props from 
video-interface-devices
Author:  Jacopo Mondi 
Date:Fri Oct 6 14:40:57 2023 +0200

There is no reason to restrict the allowed rotation degrees to 0 and 180,
as the sensor can be mounted with any rotation.

Also, as all the properties described by video-interface-devices.yaml are
allowed for the image sensor, make them accepted by changing
"additionalProperties: false" to "unevaluatedProperties: false" at the
schema top-level.

Signed-off-by: Jacopo Mondi 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml | 8 +---
 1 file changed, 1 insertion(+), 7 deletions(-)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml 
b/Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
index 763cebe03dc2..67c1c291327b 100644
--- a/Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
@@ -68,12 +68,6 @@ properties:
   marked GPIO_ACTIVE_LOW.
 maxItems: 1
 
-  rotation:
-enum:
-  - 0# Sensor Mounted Upright
-  - 180  # Sensor Mounted Upside Down
-default: 0
-
   port:
 $ref: /schemas/graph.yaml#/$defs/port-base
 additionalProperties: false
@@ -114,7 +108,7 @@ required:
   - reset-gpios
   - port
 
-additionalProperties: false
+unevaluatedProperties: false
 
 examples:
   - |

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: sharp: fix sharp encoding

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: sharp: fix sharp encoding
Author:  Sean Young 
Date:Fri Oct 6 12:54:25 2023 +0100

The Sharp protocol[1] encoding has incorrect timings for bit space.

[1] https://www.sbprojects.net/knowledge/ir/sharp.php

Fixes: d35afc5fe097 ("[media] rc: ir-sharp-decoder: Add encode capability")
Cc: sta...@vger.kernel.org
Reported-by: Joe Ferner 
Closes: https://sourceforge.net/p/lirc/mailman/message/38604507/
Signed-off-by: Sean Young 
Signed-off-by: Hans Verkuil 

 drivers/media/rc/ir-sharp-decoder.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/rc/ir-sharp-decoder.c 
b/drivers/media/rc/ir-sharp-decoder.c
index 3d8488c39c56..3311099cbd57 100644
--- a/drivers/media/rc/ir-sharp-decoder.c
+++ b/drivers/media/rc/ir-sharp-decoder.c
@@ -15,7 +15,9 @@
 #define SHARP_UNIT 40  /* us */
 #define SHARP_BIT_PULSE(8* SHARP_UNIT) /* 320us */
 #define SHARP_BIT_0_PERIOD (25   * SHARP_UNIT) /* 1ms (680us space) */
-#define SHARP_BIT_1_PERIOD (50   * SHARP_UNIT) /* 2ms (1680ms space) */
+#define SHARP_BIT_1_PERIOD (50   * SHARP_UNIT) /* 2ms (1680us space) */
+#define SHARP_BIT_0_SPACE  (17   * SHARP_UNIT) /* 680us space */
+#define SHARP_BIT_1_SPACE  (42   * SHARP_UNIT) /* 1680us space */
 #define SHARP_ECHO_SPACE   (1000 * SHARP_UNIT) /* 40 ms */
 #define SHARP_TRAILER_SPACE(125  * SHARP_UNIT) /* 5 ms (even longer) */
 
@@ -168,8 +170,8 @@ static const struct ir_raw_timings_pd ir_sharp_timings = {
.header_pulse  = 0,
.header_space  = 0,
.bit_pulse = SHARP_BIT_PULSE,
-   .bit_space[0]  = SHARP_BIT_0_PERIOD,
-   .bit_space[1]  = SHARP_BIT_1_PERIOD,
+   .bit_space[0]  = SHARP_BIT_0_SPACE,
+   .bit_space[1]  = SHARP_BIT_1_SPACE,
.trailer_pulse = SHARP_BIT_PULSE,
.trailer_space = SHARP_ECHO_SPACE,
.msb_first = 1,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: lirc: drop trailing space from scancode transmit

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: lirc: drop trailing space from scancode transmit
Author:  Sean Young 
Date:Fri Oct 6 22:31:52 2023 +0100

When transmitting, infrared drivers expect an odd number of samples; iow
without a trailing space. No problems have been observed so far, so
this is just belt and braces.

Fixes: 9b6192589be7 ("media: lirc: implement scancode sending")
Cc: sta...@vger.kernel.org
Signed-off-by: Sean Young 
Signed-off-by: Hans Verkuil 

 drivers/media/rc/lirc_dev.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/rc/lirc_dev.c b/drivers/media/rc/lirc_dev.c
index 043d23aaa3cb..a537734832c5 100644
--- a/drivers/media/rc/lirc_dev.c
+++ b/drivers/media/rc/lirc_dev.c
@@ -276,7 +276,11 @@ static ssize_t lirc_transmit(struct file *file, const char 
__user *buf,
if (ret < 0)
goto out_kfree_raw;
 
-   count = ret;
+   /* drop trailing space */
+   if (!(ret % 2))
+   count = ret - 1;
+   else
+   count = ret;
 
txbuf = kmalloc_array(count, sizeof(unsigned int), GFP_KERNEL);
if (!txbuf) {

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: tc358746: check fmt validity

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: tc358746: check fmt validity
Author:  Hans Verkuil 
Date:Fri Oct 6 12:08:48 2023 +0200

Check if the format was really found.

Fixes smatch warning:

drivers/media/i2c/tc358746.c:790 tc358746_set_fmt() error: 'fmt' dereferencing 
possible ERR_PTR()

Signed-off-by: Hans Verkuil 
CC: Sakari Ailus 
Reviewed-by: Sakari Ailus 

 drivers/media/i2c/tc358746.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/i2c/tc358746.c b/drivers/media/i2c/tc358746.c
index 566f5eaddd57..ce612a47ba84 100644
--- a/drivers/media/i2c/tc358746.c
+++ b/drivers/media/i2c/tc358746.c
@@ -784,8 +784,12 @@ static int tc358746_set_fmt(struct v4l2_subdev *sd,
sink_fmt = v4l2_subdev_get_pad_format(sd, sd_state, TC358746_SINK);
 
fmt = tc358746_get_format_by_code(format->pad, format->format.code);
-   if (IS_ERR(fmt))
+   if (IS_ERR(fmt)) {
fmt = tc358746_get_format_by_code(format->pad, 
tc358746_def_fmt.code);
+   // Can't happen, but just in case...
+   if (WARN_ON(IS_ERR(fmt)))
+   return -EINVAL;
+   }
 
format->format.code = fmt->code;
format->format.field = V4L2_FIELD_NONE;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] staging: media: atomisp: drop check for reentrant .s_stream()

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: staging: media: atomisp: drop check for reentrant .s_stream()
Author:  Hans Verkuil 
Date:Fri Oct 6 12:08:42 2023 +0200

The subdev .s_stream() operation shall not be called to start streaming
on an already started subdev, or stop streaming on a stopped subdev.
Remove the check that guards against that condition.

Also fixes a smatch warning:

drivers/staging/media/atomisp/i2c/atomisp-gc0310.c:446 gc0310_s_stream() warn: 
missing error code 'ret'

Signed-off-by: Hans Verkuil 
CC: Hans de Goede 
Reviewed-by: Hans de Goede 

 drivers/staging/media/atomisp/i2c/atomisp-gc0310.c | 6 --
 1 file changed, 6 deletions(-)

---

diff --git a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c 
b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
index c438accb0472..58cddf11c9ab 100644
--- a/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
+++ b/drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
@@ -441,11 +441,6 @@ static int gc0310_s_stream(struct v4l2_subdev *sd, int 
enable)
dev_dbg(>dev, "%s S enable=%d\n", __func__, enable);
mutex_lock(>input_lock);
 
-   if (dev->is_streaming == enable) {
-   dev_warn(>dev, "stream already %s\n", enable ? 
"started" : "stopped");
-   goto error_unlock;
-   }
-
if (enable) {
ret = pm_runtime_get_sync(>dev);
if (ret < 0)
@@ -497,7 +492,6 @@ static int gc0310_s_stream(struct v4l2_subdev *sd, int 
enable)
 error_power_down:
pm_runtime_put(>dev);
dev->is_streaming = false;
-error_unlock:
mutex_unlock(>input_lock);
return ret;
 }

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] staging: media: atomisp: improve unwinding

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: staging: media: atomisp: improve unwinding
Author:  Hans Verkuil 
Date:Fri Oct 6 12:08:44 2023 +0200

This fixes two smatch warnings:

drivers/staging/media/atomisp/pci/atomisp_cmd.c:2779 
atomisp_cp_dvs_6axis_config() warn: missing unwind goto?
drivers/staging/media/atomisp/pci/atomisp_cmd.c:2878 atomisp_cp_morph_table() 
warn: missing unwind goto?

Signed-off-by: Hans Verkuil 
CC: Hans de Goede 
Reviewed-by: Hans de Goede 

 drivers/staging/media/atomisp/pci/atomisp_cmd.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

---

diff --git a/drivers/staging/media/atomisp/pci/atomisp_cmd.c 
b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
index a54be2d20c58..759233a7ba50 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_cmd.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_cmd.c
@@ -2771,12 +2771,16 @@ int atomisp_cp_dvs_6axis_config(struct 
atomisp_sub_device *asd,
css_param->dvs_6axis = NULL;
 
dvs_6axis_config = 
ia_css_dvs2_6axis_config_allocate(stream);
-   if (!dvs_6axis_config)
-   return -ENOMEM;
+   if (!dvs_6axis_config) {
+   ret = -ENOMEM;
+   goto error;
+   }
} else if (!dvs_6axis_config) {
dvs_6axis_config = 
ia_css_dvs2_6axis_config_allocate(stream);
-   if (!dvs_6axis_config)
-   return -ENOMEM;
+   if (!dvs_6axis_config) {
+   ret = -ENOMEM;
+   goto error;
+   }
}
 
dvs_6axis_config->exp_id = source_6axis_config->exp_id;
@@ -2874,8 +2878,10 @@ int atomisp_cp_morph_table(struct atomisp_sub_device 
*asd,
morph_table = atomisp_css_morph_table_allocate(
source_morph_table->width,
source_morph_table->height);
-   if (!morph_table)
-   return -ENOMEM;
+   if (!morph_table) {
+   ret = -ENOMEM;
+   goto error;
+   }
 
for (i = 0; i < IA_CSS_MORPH_TABLE_NUM_PLANES; i++) {
if (copy_from_compatible(morph_table->coordinates_x[i],

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/fixes] media: i2c: ov8858: Don't set fwnode in the driver

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: ov8858: Don't set fwnode in the driver
Author:  Ondrej Jirman 
Date:Tue Oct 10 09:07:44 2023 +0200

This makes the driver work with the new check in
v4l2_async_register_subdev() that was introduced recently in 6.6-rc1.
Without this change, probe fails with:

ov8858 1-0036: Detected OV8858 sensor, revision 0xb2
ov8858 1-0036: sub-device fwnode is an endpoint!
ov8858 1-0036: v4l2 async register subdev failed
ov8858: probe of 1-0036 failed with error -22

This also simplifies the driver a bit.

Signed-off-by: Ondrej Jirman 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ov8858.c | 10 ++
 1 file changed, 2 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c
index 3af6125a2eee..4d9fd76e2f60 100644
--- a/drivers/media/i2c/ov8858.c
+++ b/drivers/media/i2c/ov8858.c
@@ -1850,9 +1850,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858)
}
 
ret = v4l2_fwnode_endpoint_parse(endpoint, );
+   fwnode_handle_put(endpoint);
if (ret) {
dev_err(dev, "Failed to parse endpoint: %d\n", ret);
-   fwnode_handle_put(endpoint);
return ret;
}
 
@@ -1864,12 +1864,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858)
default:
dev_err(dev, "Unsupported number of data lanes %u\n",
ov8858->num_lanes);
-   fwnode_handle_put(endpoint);
return -EINVAL;
}
 
-   ov8858->subdev.fwnode = endpoint;
-
return 0;
 }
 
@@ -1913,7 +1910,7 @@ static int ov8858_probe(struct i2c_client *client)
 
ret = ov8858_init_ctrls(ov8858);
if (ret)
-   goto err_put_fwnode;
+   return ret;
 
sd = >subdev;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
@@ -1964,8 +1961,6 @@ err_clean_entity:
media_entity_cleanup(>entity);
 err_free_handler:
v4l2_ctrl_handler_free(>ctrl_handler);
-err_put_fwnode:
-   fwnode_handle_put(ov8858->subdev.fwnode);
 
return ret;
 }
@@ -1978,7 +1973,6 @@ static void ov8858_remove(struct i2c_client *client)
v4l2_async_unregister_subdev(sd);
media_entity_cleanup(>entity);
v4l2_ctrl_handler_free(>ctrl_handler);
-   fwnode_handle_put(ov8858->subdev.fwnode);
 
pm_runtime_disable(>dev);
if (!pm_runtime_status_suspended(>dev))

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/fixes] media: xilinx-vipp: Look for entities also in waiting_list

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: xilinx-vipp: Look for entities also in waiting_list
Author:  Sakari Ailus 
Date:Fri Sep 29 09:31:08 2023 +0300

The big V4L2 async framework overhaul simplified linked lists used by the
V4L2 async framework. This affected a few drivers and it turns out a few
of those drivers rely on searching for entities in both async notifier's
waiting and done lists. Do that by separately traversing both.

Fixes: 9bf19fbf0c8b ("media: v4l: async: Rework internal lists")
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/xilinx/xilinx-vipp.c | 17 -
 1 file changed, 12 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c 
b/drivers/media/platform/xilinx/xilinx-vipp.c
index 4285770fde18..996684a73038 100644
--- a/drivers/media/platform/xilinx/xilinx-vipp.c
+++ b/drivers/media/platform/xilinx/xilinx-vipp.c
@@ -55,11 +55,18 @@ xvip_graph_find_entity(struct xvip_composite_device *xdev,
 {
struct xvip_graph_entity *entity;
struct v4l2_async_connection *asd;
-
-   list_for_each_entry(asd, >notifier.done_list, asc_entry) {
-   entity = to_xvip_entity(asd);
-   if (entity->asd.match.fwnode == fwnode)
-   return entity;
+   struct list_head *lists[] = {
+   >notifier.done_list,
+   >notifier.waiting_list
+   };
+   unsigned int i;
+
+   for (i = 0; i < ARRAY_SIZE(lists); i++) {
+   list_for_each_entry(asd, lists[i], asc_entry) {
+   entity = to_xvip_entity(asd);
+   if (entity->asd.match.fwnode == fwnode)
+   return entity;
+   }
}
 
return NULL;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/fixes] media: ipu-bridge: Add missing acpi_dev_put() in ipu_bridge_get_ivsc_acpi_dev()

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ipu-bridge: Add missing acpi_dev_put() in 
ipu_bridge_get_ivsc_acpi_dev()
Author:  Geert Uytterhoeven 
Date:Fri Sep 29 11:31:33 2023 +0200

In ipu_bridge_get_ivsc_acpi_dev(), the "ivsc_adev" acpi_device pointer
from the outer loop is handed over to the caller, which takes proper
care of its reference count.
However, the "consumer" acpi_device pointer from the inner loop is lost,
without decrementing its reference count.

Fix this by adding the missing call to acpi_dev_put().

Fixes: c66821f381ae ("media: pci: intel: Add IVSC support for IPU bridge 
driver")
Signed-off-by: Geert Uytterhoeven 
Reviewed-by: Andy Shevchenko 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/pci/intel/ipu-bridge.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/pci/intel/ipu-bridge.c 
b/drivers/media/pci/intel/ipu-bridge.c
index 1bde8b6e0b11..e38198e259c0 100644
--- a/drivers/media/pci/intel/ipu-bridge.c
+++ b/drivers/media/pci/intel/ipu-bridge.c
@@ -107,8 +107,10 @@ static struct acpi_device 
*ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev
for_each_acpi_dev_match(ivsc_adev, acpi_id->id, NULL, -1)
/* camera sensor depends on IVSC in DSDT if exist */
for_each_acpi_consumer_dev(ivsc_adev, consumer)
-   if (consumer->handle == handle)
+   if (consumer->handle == handle) {
+   acpi_dev_put(consumer);
return ivsc_adev;
+   }
}
 
return NULL;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/fixes] media: subdev: Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled

2023-10-11 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: subdev: Don't report V4L2_SUBDEV_CAP_STREAMS when the streams 
API is disabled
Author:  Hans de Goede 
Date:Tue Oct 10 12:24:58 2023 +0200

Since the stream API is still experimental it is currently locked away
behind the internal, default disabled, v4l2_subdev_enable_streams_api flag.

Advertising V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
confuses userspace. E.g. it causes the following libcamera error:

ERROR SimplePipeline simple.cpp:1497 Failed to reset routes for
  /dev/v4l-subdev1: Inappropriate ioctl for device

Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
to avoid problems like this.

Reported-by: Dennis Bonke 
Fixes: 9a6b5bf4c1bb ("media: add V4L2_SUBDEV_CAP_STREAMS")
Cc: sta...@vger.kernel.org # for >= 6.3
Signed-off-by: Hans de Goede 
Acked-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/v4l2-core/v4l2-subdev.c | 7 +++
 1 file changed, 7 insertions(+)

---

diff --git a/drivers/media/v4l2-core/v4l2-subdev.c 
b/drivers/media/v4l2-core/v4l2-subdev.c
index b92348ad61f6..31752c06d1f0 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -502,6 +502,13 @@ static long subdev_do_ioctl(struct file *file, unsigned 
int cmd, void *arg,
   V4L2_SUBDEV_CLIENT_CAP_STREAMS;
int rval;
 
+   /*
+* If the streams API is not enabled, remove V4L2_SUBDEV_CAP_STREAMS.
+* Remove this when the API is no longer experimental.
+*/
+   if (!v4l2_subdev_enable_streams_api)
+   streams_subdev = false;
+
switch (cmd) {
case VIDIOC_SUBDEV_QUERYCAP: {
struct v4l2_subdev_capability *cap = arg;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: Add driver for onsemi MT9M114 camera sensor

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: Add driver for onsemi MT9M114 camera sensor
Author:  Laurent Pinchart 
Date:Wed Sep 20 20:11:54 2023 +0300

The MT9M114 is a CMOS camera sensor that combines a 1296x976 pixel array
with a 10-bit dynamic range together with an internal ISP. The driver
exposes two subdevs, one for the pixel array and one for the ISP (named
IFP for Image Flow Processor). Major supported features are

- Full configuration of analog crop and binning in the pixel array
- Full configuration of scaling in the ISP
- Automatic exposure and white balance
- Manual exposure and analog gain
- Horizontal and vertical flip

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 MAINTAINERS |1 +
 drivers/media/i2c/Kconfig   |   10 +
 drivers/media/i2c/Makefile  |1 +
 drivers/media/i2c/mt9m114.c | 2481 +++
 4 files changed, 2493 insertions(+)

---

diff --git a/MAINTAINERS b/MAINTAINERS
index c55e13029e2d..83a0c7f3826b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14564,6 +14564,7 @@ L:  linux-me...@vger.kernel.org
 S: Maintained
 T: git git://linuxtv.org/media_tree.git
 F: Documentation/devicetree/bindings/media/i2c/onnn,mt9m114.yaml
+F: drivers/media/i2c/mt9m114.c
 
 MT9P031 APTINA CAMERA SENSOR
 M: Laurent Pinchart 
diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 74ff833ff48c..897d02f0b552 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -215,6 +215,16 @@ config VIDEO_MT9M111
  This driver supports MT9M111, MT9M112 and MT9M131 cameras from
  Micron/Aptina
 
+config VIDEO_MT9M114
+   tristate "onsemi MT9M114 sensor support"
+   select V4L2_CCI_I2C
+   help
+ This is a Video4Linux2 sensor-level driver for the onsemi MT9M114
+ camera.
+
+ To compile this driver as a module, choose M here: the
+ module will be called mt9m114.
+
 config VIDEO_MT9P031
tristate "Aptina MT9P031 support"
select VIDEO_APTINA_PLL
diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile
index 80b00d39b48f..f5010f80a21f 100644
--- a/drivers/media/i2c/Makefile
+++ b/drivers/media/i2c/Makefile
@@ -65,6 +65,7 @@ obj-$(CONFIG_VIDEO_ML86V7667) += ml86v7667.o
 obj-$(CONFIG_VIDEO_MSP3400) += msp3400.o
 obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
 obj-$(CONFIG_VIDEO_MT9M111) += mt9m111.o
+obj-$(CONFIG_VIDEO_MT9M114) += mt9m114.o
 obj-$(CONFIG_VIDEO_MT9P031) += mt9p031.o
 obj-$(CONFIG_VIDEO_MT9T112) += mt9t112.o
 obj-$(CONFIG_VIDEO_MT9V011) += mt9v011.o
diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c
new file mode 100644
index ..dae675e52390
--- /dev/null
+++ b/drivers/media/i2c/mt9m114.c
@@ -0,0 +1,2481 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * mt9m114.c onsemi MT9M114 sensor driver
+ *
+ * Copyright (c) 2020-2023 Laurent Pinchart 
+ * Copyright (c) 2012 Analog Devices Inc.
+ *
+ * Almost complete rewrite of work by Scott Jiang 
+ * itself based on work from Andrew Chew .
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* Sysctl registers */
+#define MT9M114_CHIP_ID
CCI_REG16(0x)
+#define MT9M114_COMMAND_REGISTER   CCI_REG16(0x0080)
+#define MT9M114_COMMAND_REGISTER_APPLY_PATCH   BIT(0)
+#define MT9M114_COMMAND_REGISTER_SET_STATE BIT(1)
+#define MT9M114_COMMAND_REGISTER_REFRESH   BIT(2)
+#define MT9M114_COMMAND_REGISTER_WAIT_FOR_EVENTBIT(3)
+#define MT9M114_COMMAND_REGISTER_OKBIT(15)
+#define MT9M114_RESET_AND_MISC_CONTROL CCI_REG16(0x001a)
+#define MT9M114_RESET_SOC  BIT(0)
+#define MT9M114_PAD_SLEW   CCI_REG16(0x001e)
+#define MT9M114_PAD_CONTROLCCI_REG16(0x0032)
+
+/* XDMA registers */
+#define MT9M114_ACCESS_CTL_STAT
CCI_REG16(0x0982)
+#define MT9M114_PHYSICAL_ADDRESS_ACCESS
CCI_REG16(0x098a)
+#define MT9M114_LOGICAL_ADDRESS_ACCESS CCI_REG16(0x098e)
+
+/* Sensor Core registers */
+#define MT9M114_COARSE_INTEGRATION_TIME
CCI_REG16(0x3012)
+#define MT9M114_FINE_INTEGRATION_TIME  CCI_REG16(0x3014)
+#define MT9M114_RESET_REGISTER CCI_REG16(0x301a)
+#define MT9M114_RESET_REGISTER_LOCK_REGBIT(3)
+#define MT9M114_RESET_REGISTER_MASK_BADBIT(9)
+#

[git:media_stage/master] media: vidtv: psi: Add check for kstrdup

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: vidtv: psi: Add check for kstrdup
Author:  Jiasheng Jiang 
Date:Mon Jun 19 16:12:01 2023 +0800

Add check for the return value of kstrdup() and return the error
if it fails in order to avoid NULL pointer dereference.

Fixes: 7a7899f6f58e ("media: vidtv: psi: Implement an Event Information Table 
(EIT)")
Fixes: c2f78f0cb294 ("media: vidtv: psi: add a Network Information Table (NIT)")
Fixes: f90cf6079bf6 ("media: vidtv: add a bridge driver")
Signed-off-by: Jiasheng Jiang 
Signed-off-by: Hans Verkuil 

 drivers/media/test-drivers/vidtv/vidtv_psi.c | 45 
 1 file changed, 40 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/test-drivers/vidtv/vidtv_psi.c 
b/drivers/media/test-drivers/vidtv/vidtv_psi.c
index ce0b7a6e92dc..2a51c898c11e 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_psi.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_psi.c
@@ -301,16 +301,29 @@ struct vidtv_psi_desc_service 
*vidtv_psi_service_desc_init(struct vidtv_psi_desc
 
desc->service_name_len = service_name_len;
 
-   if (service_name && service_name_len)
+   if (service_name && service_name_len) {
desc->service_name = kstrdup(service_name, GFP_KERNEL);
+   if (!desc->service_name)
+   goto free_desc;
+   }
 
desc->provider_name_len = provider_name_len;
 
-   if (provider_name && provider_name_len)
+   if (provider_name && provider_name_len) {
desc->provider_name = kstrdup(provider_name, GFP_KERNEL);
+   if (!desc->provider_name)
+   goto free_desc_service_name;
+   }
 
vidtv_psi_desc_chain(head, (struct vidtv_psi_desc *)desc);
return desc;
+
+free_desc_service_name:
+   if (service_name && service_name_len)
+   kfree(desc->service_name);
+free_desc:
+   kfree(desc);
+   return NULL;
 }
 
 struct vidtv_psi_desc_registration
@@ -355,8 +368,13 @@ struct vidtv_psi_desc_network_name
 
desc->length = network_name_len;
 
-   if (network_name && network_name_len)
+   if (network_name && network_name_len) {
desc->network_name = kstrdup(network_name, GFP_KERNEL);
+   if (!desc->network_name) {
+   kfree(desc);
+   return NULL;
+   }
+   }
 
vidtv_psi_desc_chain(head, (struct vidtv_psi_desc *)desc);
return desc;
@@ -442,15 +460,32 @@ struct vidtv_psi_desc_short_event
iso_language_code = "eng";
 
desc->iso_language_code = kstrdup(iso_language_code, GFP_KERNEL);
+   if (!desc->iso_language_code)
+   goto free_desc;
 
-   if (event_name && event_name_len)
+   if (event_name && event_name_len) {
desc->event_name = kstrdup(event_name, GFP_KERNEL);
+   if (!desc->event_name)
+   goto free_desc_language_code;
+   }
 
-   if (text && text_len)
+   if (text && text_len) {
desc->text = kstrdup(text, GFP_KERNEL);
+   if (!desc->text)
+   goto free_desc_event_name;
+   }
 
vidtv_psi_desc_chain(head, (struct vidtv_psi_desc *)desc);
return desc;
+
+free_desc_event_name:
+   if (event_name && event_name_len)
+   kfree(desc->event_name);
+free_desc_language_code:
+   kfree(desc->iso_language_code);
+free_desc:
+   kfree(desc);
+   return NULL;
 }
 
 struct vidtv_psi_desc *vidtv_psi_desc_clone(struct vidtv_psi_desc *desc)

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Pass icc bandwidth table as a platform parameter

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Pass icc bandwidth table as a platform parameter
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:54 2023 +0100

Pass the bandwidth table as a platform parameter not if/else derived
pointer to the static table.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss.c | 29 +
 drivers/media/platform/qcom/camss/camss.h |  3 ++-
 2 files changed, 11 insertions(+), 21 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index 8fa5dee75672..f502b4d9e07c 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -1485,21 +1485,15 @@ fail_pm:
 static int camss_icc_get(struct camss *camss)
 {
const struct resources_icc *icc_res;
-   int nbr_icc_paths = 0;
int i;
 
-   if (camss->version == CAMSS_8250) {
-   icc_res = _res_sm8250[0];
-   nbr_icc_paths = ICC_SM8250_COUNT;
-   }
+   icc_res = camss->res->icc_res;
 
-   for (i = 0; i < nbr_icc_paths; i++) {
+   for (i = 0; i < camss->res->icc_path_num; i++) {
camss->icc_path[i] = devm_of_icc_get(camss->dev,
 icc_res[i].name);
if (IS_ERR(camss->icc_path[i]))
return PTR_ERR(camss->icc_path[i]);
-
-   camss->icc_bw_tbl[i] = icc_res[i].icc_bw_tbl;
}
 
return 0;
@@ -1742,6 +1736,8 @@ static const struct camss_resources sm8250_resources = {
.csiphy_res = csiphy_res_8250,
.csid_res = csid_res_8250,
.vfe_res = vfe_res_8250,
+   .icc_res = icc_res_sm8250,
+   .icc_path_num = ARRAY_SIZE(icc_res_sm8250),
 };
 
 static const struct of_device_id camss_dt_match[] = {
@@ -1758,14 +1754,10 @@ MODULE_DEVICE_TABLE(of, camss_dt_match);
 static int __maybe_unused camss_runtime_suspend(struct device *dev)
 {
struct camss *camss = dev_get_drvdata(dev);
-   int nbr_icc_paths = 0;
int i;
int ret;
 
-   if (camss->version == CAMSS_8250)
-   nbr_icc_paths = ICC_SM8250_COUNT;
-
-   for (i = 0; i < nbr_icc_paths; i++) {
+   for (i = 0; i < camss->res->icc_path_num; i++) {
ret = icc_set_bw(camss->icc_path[i], 0, 0);
if (ret)
return ret;
@@ -1777,17 +1769,14 @@ static int __maybe_unused camss_runtime_suspend(struct 
device *dev)
 static int __maybe_unused camss_runtime_resume(struct device *dev)
 {
struct camss *camss = dev_get_drvdata(dev);
-   int nbr_icc_paths = 0;
+   const struct resources_icc *icc_res = camss->res->icc_res;
int i;
int ret;
 
-   if (camss->version == CAMSS_8250)
-   nbr_icc_paths = ICC_SM8250_COUNT;
-
-   for (i = 0; i < nbr_icc_paths; i++) {
+   for (i = 0; i < camss->res->icc_path_num; i++) {
ret = icc_set_bw(camss->icc_path[i],
-camss->icc_bw_tbl[i].avg,
-camss->icc_bw_tbl[i].peak);
+icc_res[i].icc_bw_tbl.avg,
+icc_res[i].icc_bw_tbl.peak);
if (ret)
return ret;
}
diff --git a/drivers/media/platform/qcom/camss/camss.h 
b/drivers/media/platform/qcom/camss/camss.h
index 20c84e832888..8b2e4adb923e 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -84,6 +84,8 @@ struct camss_resources {
const struct camss_subdev_resources *csid_res;
const struct camss_subdev_resources *ispif_res;
const struct camss_subdev_resources *vfe_res;
+   const struct resources_icc *icc_res;
+   const unsigned int icc_path_num;
 };
 
 struct camss {
@@ -105,7 +107,6 @@ struct camss {
struct device **genpd;
struct device_link **genpd_link;
struct icc_path *icc_path[ICC_SM8250_COUNT];
-   struct icc_bw_tbl icc_bw_tbl[ICC_SM8250_COUNT];
const struct camss_resources *res;
 };
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: pci: mgb4: Added Digiteq Automotive MGB4 driver

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: pci: mgb4: Added Digiteq Automotive MGB4 driver
Author:  Martin Tůma 
Date:Mon Sep 25 16:36:04 2023 +0200

Digiteq Automotive MGB4 is a modular frame grabber PCIe card for automotive
video interfaces. As for now, two modules - FPD-Link and GMSL - are
available and supported by the driver. The card has two inputs and two
outputs (FPD-Link only).

In addition to the video interfaces it also provides a trigger signal
interface and a MTD interface for FPGA firmware upload.

Signed-off-by: Martin Tůma 
Signed-off-by: Hans Verkuil 

 MAINTAINERS |   7 +
 drivers/media/pci/Kconfig   |   1 +
 drivers/media/pci/Makefile  |   1 +
 drivers/media/pci/mgb4/Kconfig  |  17 +
 drivers/media/pci/mgb4/Makefile |   6 +
 drivers/media/pci/mgb4/mgb4_cmt.c   | 244 +
 drivers/media/pci/mgb4/mgb4_cmt.h   |  17 +
 drivers/media/pci/mgb4/mgb4_core.c  | 686 +++
 drivers/media/pci/mgb4/mgb4_core.h  |  74 +++
 drivers/media/pci/mgb4/mgb4_dma.c   | 123 +
 drivers/media/pci/mgb4/mgb4_dma.h   |  18 +
 drivers/media/pci/mgb4/mgb4_i2c.c   | 140 +
 drivers/media/pci/mgb4/mgb4_i2c.h   |  35 ++
 drivers/media/pci/mgb4/mgb4_io.h|  33 ++
 drivers/media/pci/mgb4/mgb4_regs.c  |  30 +
 drivers/media/pci/mgb4/mgb4_regs.h  |  35 ++
 drivers/media/pci/mgb4/mgb4_sysfs.h |  18 +
 drivers/media/pci/mgb4/mgb4_sysfs_in.c  | 772 ++
 drivers/media/pci/mgb4/mgb4_sysfs_out.c | 737 +
 drivers/media/pci/mgb4/mgb4_sysfs_pci.c |  71 +++
 drivers/media/pci/mgb4/mgb4_trigger.c   | 208 +++
 drivers/media/pci/mgb4/mgb4_trigger.h   |   8 +
 drivers/media/pci/mgb4/mgb4_vin.c   | 939 
 drivers/media/pci/mgb4/mgb4_vin.h   |  69 +++
 drivers/media/pci/mgb4/mgb4_vout.c  | 602 
 drivers/media/pci/mgb4/mgb4_vout.h  |  65 +++
 26 files changed, 4956 insertions(+)

---



___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: tvp541x: Sort header files

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: tvp541x: Sort header files
Author:  Biju Das 
Date:Sat Sep 23 17:36:41 2023 +0100

Sort header files alphabetically.

Suggested-by: Jacopo Mondi 
Signed-off-by: Biju Das 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/tvp514x.c | 18 +-
 1 file changed, 9 insertions(+), 9 deletions(-)

---

diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
index 569a9437ec86..c37f605cb75f 100644
--- a/drivers/media/i2c/tvp514x.c
+++ b/drivers/media/i2c/tvp514x.c
@@ -16,24 +16,24 @@
  * Prabhakar Lad 
  */
 
-#include 
-#include 
 #include 
-#include 
+#include 
 #include 
 #include 
-#include 
 #include 
 #include 
+#include 
+#include 
+#include 
 
+#include 
+#include 
 #include 
-#include 
 #include 
-#include 
-#include 
 #include 
-#include 
-#include 
+#include 
+#include 
+#include 
 
 #include "tvp514x_regs.h"
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Untangle if/else spaghetti in camss

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Untangle if/else spaghetti in camss
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:00 2023 +0100

We have a very convoluted if/else legacy here which needs to be
rationalised to make it more sustainable.

Adding in another Soc or two will make some of these if statements into
increasingly large multi-clause behemoths.

Introduce switches in the obvious places to despaghetiify.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csiphy.c | 16 +++-
 drivers/media/platform/qcom/camss/camss-vfe.c| 33 ++--
 drivers/media/platform/qcom/camss/camss-video.c  | 17 ++--
 3 files changed, 37 insertions(+), 29 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c 
b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 4310a132dcbe..18f9a4defb2a 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -558,19 +558,21 @@ int msm_csiphy_subdev_init(struct camss *camss,
csiphy->cfg.combo_mode = 0;
csiphy->ops = res->ops;
 
-   if (camss->res->version == CAMSS_8x16) {
+   switch (camss->res->version) {
+   case CAMSS_8x16:
csiphy->formats = csiphy_formats_8x16;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_8x16);
-   } else if (camss->res->version == CAMSS_8x96 ||
-  camss->res->version == CAMSS_660) {
+   break;
+   case CAMSS_8x96:
+   case CAMSS_660:
csiphy->formats = csiphy_formats_8x96;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_8x96);
-   } else if (camss->res->version == CAMSS_845 ||
-  camss->res->version == CAMSS_8250) {
+   break;
+   case CAMSS_845:
+   case CAMSS_8250:
csiphy->formats = csiphy_formats_sdm845;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_sdm845);
-   } else {
-   return -EINVAL;
+   break;
}
 
/* Memory */
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index 4d5c32d3dddb..db8f68819ded 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -170,7 +170,8 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 
sink_code,
 {
struct vfe_device *vfe = to_vfe(line);
 
-   if (vfe->camss->res->version == CAMSS_8x16)
+   switch (vfe->camss->res->version) {
+   case CAMSS_8x16:
switch (sink_code) {
case MEDIA_BUS_FMT_YUYV8_1X16:
{
@@ -218,10 +219,11 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 
sink_code,
 
return sink_code;
}
-   else if (vfe->camss->res->version == CAMSS_8x96 ||
-vfe->camss->res->version == CAMSS_660 ||
-vfe->camss->res->version == CAMSS_845 ||
-vfe->camss->res->version == CAMSS_8250)
+   break;
+   case CAMSS_8x96:
+   case CAMSS_660:
+   case CAMSS_845:
+   case CAMSS_8250:
switch (sink_code) {
case MEDIA_BUS_FMT_YUYV8_1X16:
{
@@ -281,8 +283,9 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 
sink_code,
 
return sink_code;
}
-   else
-   return 0;
+   break;
+   }
+   return 0;
 }
 
 int vfe_reset(struct vfe_device *vfe)
@@ -1379,7 +1382,8 @@ int msm_vfe_subdev_init(struct camss *camss, struct 
vfe_device *vfe,
init_completion(>output.sof);
init_completion(>output.reg_update);
 
-   if (camss->res->version == CAMSS_8x16) {
+   switch (camss->res->version) {
+   case CAMSS_8x16:
if (i == VFE_LINE_PIX) {
l->formats = formats_pix_8x16;
l->nformats = ARRAY_SIZE(formats_pix_8x16);
@@ -1387,8 +1391,9 @@ int msm_vfe_subdev_init(struct camss *camss, struct 
vfe_device *vfe,
l->formats = formats_rdi_8x16;
l->nformats = ARRAY_SIZE(formats_rdi_8x16);
}
-   } else if (camss->res->version == CAMSS_8x96 ||
-  camss->res->version == CAMSS_660) {
+   break;
+   case CAMSS_8x96:
+   case CAMSS_660:
if (i == VFE_LINE_PIX) {
l->formats = formats

[git:media_stage/master] media: i2c/hi556: add a new mode 1296x722 settings

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c/hi556: add a new mode 1296x722 settings
Author:  Bingbu Cao 
Date:Mon Sep 18 10:58:12 2023 +0800

Add a new mode - 16:9 resolution 1296x722 for hi556.

Signed-off-by: Bingbu Cao 
Signed-off-by: Qingwu Zhang 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/hi556.c | 64 ++-
 1 file changed, 63 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/i2c/hi556.c b/drivers/media/i2c/hi556.c
index e6e7049108e7..f6ea9b7b9700 100644
--- a/drivers/media/i2c/hi556.c
+++ b/drivers/media/i2c/hi556.c
@@ -477,6 +477,50 @@ static const struct hi556_reg mode_1296x972_regs[] = {
{0x0958, 0xbb80},
 };
 
+static const struct hi556_reg mode_1296x722_regs[] = {
+   {0x0a00, 0x},
+   {0x0b0a, 0x8259},
+   {0x0f30, 0x5b15},
+   {0x0f32, 0x7167},
+   {0x004a, 0x0100},
+   {0x004c, 0x},
+   {0x004e, 0x0100},
+   {0x000c, 0x0122},
+   {0x0008, 0x0b00},
+   {0x005a, 0x0404},
+   {0x0012, 0x000c},
+   {0x0018, 0x0a33},
+   {0x0022, 0x0008},
+   {0x0028, 0x0017},
+   {0x0024, 0x0022},
+   {0x002a, 0x002b},
+   {0x0026, 0x012a},
+   {0x002c, 0x06cf},
+   {0x002e, 0x3311},
+   {0x0030, 0x3311},
+   {0x0032, 0x3311},
+   {0x0006, 0x0814},
+   {0x0a22, 0x},
+   {0x0a12, 0x0510},
+   {0x0a14, 0x02d2},
+   {0x003e, 0x},
+   {0x0074, 0x0812},
+   {0x0070, 0x0409},
+   {0x0804, 0x0308},
+   {0x0806, 0x0100},
+   {0x0a04, 0x016a},
+   {0x090c, 0x09c0},
+   {0x090e, 0x0010},
+   {0x0902, 0x4319},
+   {0x0914, 0xc106},
+   {0x0916, 0x040e},
+   {0x0918, 0x0304},
+   {0x091a, 0x0708},
+   {0x091c, 0x0e06},
+   {0x091e, 0x0300},
+   {0x0958, 0xbb80},
+};
+
 static const char * const hi556_test_pattern_menu[] = {
"Disabled",
"Solid Colour",
@@ -556,7 +600,25 @@ static const struct hi556_mode supported_modes[] = {
.regs = mode_1296x972_regs,
},
.link_freq_index = HI556_LINK_FREQ_437MHZ_INDEX,
-   }
+   },
+   {
+   .width = 1296,
+   .height = 722,
+   .crop = {
+   .left = HI556_PIXEL_ARRAY_LEFT,
+   .top = 250,
+   .width = HI556_PIXEL_ARRAY_WIDTH,
+   .height = 1444
+   },
+   .fll_def = HI556_FLL_30FPS,
+   .fll_min = HI556_FLL_30FPS_MIN,
+   .llp = 0x0b00,
+   .reg_list = {
+   .num_of_regs = ARRAY_SIZE(mode_1296x722_regs),
+   .regs = mode_1296x722_regs,
+   },
+   .link_freq_index = HI556_LINK_FREQ_437MHZ_INDEX,
+   },
 };
 
 struct hi556 {

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: mediatek: vcodec: add encoder power management helper functions

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: mediatek: vcodec: add encoder power management helper functions
Author:  Irui Wang 
Date:Mon Sep 25 12:02:00 2023 +0800

Remove PM functions at start/stop streaming, add PM helper functions
to get PM before encoding frame start and put PM after encoding frame
done. Meanwhile, remove unnecessary clock operations.

Signed-off-by: Irui Wang 
Signed-off-by: Hans Verkuil 

 .../mediatek/vcodec/encoder/mtk_vcodec_enc.c| 21 +++--
 .../mediatek/vcodec/encoder/mtk_vcodec_enc_pm.c | 18 ++
 .../mediatek/vcodec/encoder/mtk_vcodec_enc_pm.h |  3 ++-
 .../platform/mediatek/vcodec/encoder/venc_drv_if.c  |  8 ++--
 4 files changed, 25 insertions(+), 25 deletions(-)

---

diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c 
b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
index 04948d3eb011..eb381fa6e7d1 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
@@ -866,7 +866,7 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, 
unsigned int count)
 {
struct mtk_vcodec_enc_ctx *ctx = vb2_get_drv_priv(q);
struct venc_enc_param param;
-   int ret, pm_ret;
+   int ret;
int i;
 
/* Once state turn into MTK_STATE_ABORT, we need stop_streaming
@@ -886,18 +886,12 @@ static int vb2ops_venc_start_streaming(struct vb2_queue 
*q, unsigned int count)
return 0;
}
 
-   ret = pm_runtime_resume_and_get(>dev->plat_dev->dev);
-   if (ret < 0) {
-   mtk_v4l2_venc_err(ctx, "pm_runtime_resume_and_get fail %d", 
ret);
-   goto err_start_stream;
-   }
-
mtk_venc_set_param(ctx, );
ret = venc_if_set_param(ctx, VENC_SET_PARAM_ENC, );
if (ret) {
mtk_v4l2_venc_err(ctx, "venc_if_set_param failed=%d", ret);
ctx->state = MTK_STATE_ABORT;
-   goto err_set_param;
+   goto err_start_stream;
}
ctx->param_change = MTK_ENCODE_PARAM_NONE;
 
@@ -910,18 +904,13 @@ static int vb2ops_venc_start_streaming(struct vb2_queue 
*q, unsigned int count)
if (ret) {
mtk_v4l2_venc_err(ctx, "venc_if_set_param failed=%d", 
ret);
ctx->state = MTK_STATE_ABORT;
-   goto err_set_param;
+   goto err_start_stream;
}
ctx->state = MTK_STATE_HEADER;
}
 
return 0;
 
-err_set_param:
-   pm_ret = pm_runtime_put(>dev->plat_dev->dev);
-   if (pm_ret < 0)
-   mtk_v4l2_venc_err(ctx, "pm_runtime_put fail %d", pm_ret);
-
 err_start_stream:
for (i = 0; i < q->num_buffers; ++i) {
struct vb2_buffer *buf = vb2_get_buffer(q, i);
@@ -1004,10 +993,6 @@ static void vb2ops_venc_stop_streaming(struct vb2_queue 
*q)
if (ret)
mtk_v4l2_venc_err(ctx, "venc_if_deinit failed=%d", ret);
 
-   ret = pm_runtime_put(>dev->plat_dev->dev);
-   if (ret < 0)
-   mtk_v4l2_venc_err(ctx, "pm_runtime_put fail %d", ret);
-
ctx->state = MTK_STATE_FREE;
 }
 
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.c 
b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.c
index 3fce936e61b9..a22b7dfc656e 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.c
@@ -58,6 +58,24 @@ int mtk_vcodec_init_enc_clk(struct mtk_vcodec_enc_dev 
*mtkdev)
return 0;
 }
 
+void mtk_vcodec_enc_pw_on(struct mtk_vcodec_pm *pm)
+{
+   int ret;
+
+   ret = pm_runtime_resume_and_get(pm->dev);
+   if (ret)
+   dev_err(pm->dev, "pm_runtime_resume_and_get fail: %d", ret);
+}
+
+void mtk_vcodec_enc_pw_off(struct mtk_vcodec_pm *pm)
+{
+   int ret;
+
+   ret = pm_runtime_put(pm->dev);
+   if (ret && ret != -EAGAIN)
+   dev_err(pm->dev, "pm_runtime_put fail %d", ret);
+}
+
 void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm)
 {
struct mtk_vcodec_clk *enc_clk = >venc_clk;
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.h 
b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.h
index e50be0575190..157ea08ba9e3 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.h
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc_pm.h
@@ -10,7 +10,8 @@
 #include "mtk_vcodec_enc_drv.h"
 
 int mtk_vcodec_init_enc_clk(struct mtk_vcodec_enc_dev *dev);
-
+void mtk_vcodec_enc_pw_on

[git:media_stage/master] media: i2c: adv7180: Drop CONFIG_OF ifdeffery

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: adv7180: Drop CONFIG_OF ifdeffery
Author:  Biju Das 
Date:Sun Sep 10 16:22:00 2023 +0100

Drop of_match_ptr() from adv7180_driver and get rid of ugly CONFIG_OF
if check. This slightly increases the size of adv7180_driver on non-OF
system and shouldn't be an issue.

Add mod_devicetable.h include.

It also allows, in case if needed, to enumerate this device via ACPI with
PRP0001 magic.

Signed-off-by: Biju Das 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/adv7180.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/adv7180.c
index fc4f29e74e05..54134473186b 100644
--- a/drivers/media/i2c/adv7180.c
+++ b/drivers/media/i2c/adv7180.c
@@ -5,6 +5,7 @@
  * Copyright (C) 2013 Cogent Embedded, Inc.
  * Copyright (C) 2013 Renesas Solutions Corp.
  */
+#include 
 #include 
 #include 
 #include 
@@ -1584,7 +1585,6 @@ static const struct i2c_device_id adv7180_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, adv7180_id);
 
-#ifdef CONFIG_OF
 static const struct of_device_id adv7180_of_id[] = {
{ .compatible = "adi,adv7180", _info },
{ .compatible = "adi,adv7180cp", _info },
@@ -1600,13 +1600,12 @@ static const struct of_device_id adv7180_of_id[] = {
{}
 };
 MODULE_DEVICE_TABLE(of, adv7180_of_id);
-#endif
 
 static struct i2c_driver adv7180_driver = {
.driver = {
   .name = KBUILD_MODNAME,
   .pm = ADV7180_PM_OPS,
-  .of_match_table = of_match_ptr(adv7180_of_id),
+  .of_match_table = adv7180_of_id,
   },
.probe = adv7180_probe,
.remove = adv7180_remove,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Assign the correct number of RDIs per VFE

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Assign the correct number of RDIs per VFE
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:58 2023 +0100

Each Video Front End - VFE - has a variable number of Raw Data Interfaces -
RDIs associated with it.

The CAMSS code started from a naive implementation where a fixed define was
used as a control in a for(){} loop iterating through RDIs.

That model scales badly. An attempt was made with  VFE_LINE_NUM_GEN2 and
VFE_LINE_NUM_GEN1 to differentiate between SoCs but, the problem with that
is "gen1" and "gen2" have no meaning in the silicon. There is no fixed
constraint in the silicon between VFE and RDI, it is entirely up to the SoC
designers how many VFEs are populated and how many RDIs to associate with
each VFE.

As an example sdm845 has VFE version 175 and sm8250 VFE version 480.
sdm845 has 2 VFEs with 4 RDIs and 1 VFE Lite with 4 RDIs.
sm8250 has 2 VFEs with 3 RDIs and 2 VFE Lite with 4 RDIs.

Clearly then we need a more granular model to capture the necessary data.

The defines have gone away to be replaced with per-SoC data but, we haven't
populated the parameter data with the real values.

Let's call those values out now

msm8916:
1 x VFE
3 x RDI per VFE (not 4)

msm8996:
2 x VFE
3 x RDI per VFE (not 4)

sdm660:
2 x VFE
3 x RDI per VFE (not 4)

sdm845:
2 x VFE
4 x RDI per VFE (not 3)
1 x VFE Lite
4 x RDI per VFE Lite (not 3)

sm8250:
2 x VFE
3 x RDI per VFE (not 4)
2 x VFE Lite
4 x RDI per VFE Lite

This more complex and correct mapping was not possible prior to passing
values via driver data. Now that we have that change in place we can
correctly map VFEs to RDIs for each VFE.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe.h |  2 --
 drivers/media/platform/qcom/camss/camss.c | 20 ++--
 2 files changed, 10 insertions(+), 12 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h 
b/drivers/media/platform/qcom/camss/camss-vfe.h
index b4bae9f65c68..4783afa73a36 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.h
+++ b/drivers/media/platform/qcom/camss/camss-vfe.h
@@ -52,9 +52,7 @@ enum vfe_line_id {
VFE_LINE_RDI0 = 0,
VFE_LINE_RDI1 = 1,
VFE_LINE_RDI2 = 2,
-   VFE_LINE_NUM_GEN2 = 3,
VFE_LINE_PIX = 3,
-   VFE_LINE_NUM_GEN1 = 4,
VFE_LINE_NUM_MAX = 4
 };
 
diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index 12131d9ea7ca..8e78dd8d5961 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -128,7 +128,7 @@ static const struct camss_subdev_resources vfe_res_8x16[] = 
{
{ 0 } },
.reg = { "vfe0" },
.interrupt = { "vfe0" },
-   .line_num = VFE_LINE_NUM_GEN1,
+   .line_num = 3,
.ops = _ops_4_1
}
 };
@@ -277,7 +277,7 @@ static const struct camss_subdev_resources vfe_res_8x96[] = 
{
{ 0 } },
.reg = { "vfe0" },
.interrupt = { "vfe0" },
-   .line_num = VFE_LINE_NUM_GEN1,
+   .line_num = 3,
.ops = _ops_4_7
},
 
@@ -297,7 +297,7 @@ static const struct camss_subdev_resources vfe_res_8x96[] = 
{
{ 0 } },
.reg = { "vfe1" },
.interrupt = { "vfe1" },
-   .line_num = VFE_LINE_NUM_GEN1,
+   .line_num = 3,
.ops = _ops_4_7
}
 };
@@ -467,7 +467,7 @@ static const struct camss_subdev_resources vfe_res_660[] = {
{ 0 } },
.reg = { "vfe0" },
.interrupt = { "vfe0" },
-   .line_num = VFE_LINE_NUM_GEN1,
+   .line_num = 3,
.ops = _ops_4_8
},
 
@@ -490,7 +490,7 @@ static const struct camss_subdev_resources vfe_res_660[] = {
{ 0 } },
.reg = { "vfe1" },
.interrupt = { "vfe1" },
-   .line_num = VFE_LINE_NUM_GEN1,
+   .line_num = 3,
.ops = _ops_4_8
}
 };
@@ -657,7 +657,7 @@ static const struct camss_subdev_resources vfe_res_845[] = {
{ 38400 } },
.reg = { "vfe0" },
.interrupt = { "vfe0" },
-   .line_num = VFE_LINE_NUM_GEN2,
+   .line_num = 4,
.ops = _ops_170
},
 
@@ -679,7 +679,7 @@ static const struct camss_subdev_resources vfe_res_845[] = {
{ 38400 } },

[git:media_stage/master] media: qcom: camss: Allow clocks vfeN vfe_liteN or vfe_lite

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Allow clocks vfeN vfe_liteN or vfe_lite
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:01 2023 +0100

The number of Video Front End - VFE or Image Front End - IFE supported
with new SoCs can vary both for the full and lite cases.

For example sdm845 has one vfe_lite and two vfe interfaces with the vfe
clock called simply "vfe_lite" with no integer postfix. sc8280xp has four
vfe and four vfe lite blocks.

At the moment we declare vfe_lite0 and vfe_lite1 for sm8250 but never set
those clocks because we don't match the strings.

We need to support the following clock name formats

- vfeN
- vfe_liteN
- vfe_lite

with N being any reasonably sized integer.

There are two sites in this code which need to do the same thing,
constructing and matching strings with the pattern above, so encapsulate
the logic in one function.

Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe.c | 22 --
 1 file changed, 16 insertions(+), 6 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index db8f68819ded..4db0d0a1c6a5 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -431,6 +431,20 @@ void vfe_isr_reset_ack(struct vfe_device *vfe)
complete(>reset_complete);
 }
 
+static int vfe_match_clock_names(struct vfe_device *vfe,
+struct camss_clock *clock)
+{
+   char vfe_name[7]; /* vfeXXX\0 */
+   char vfe_lite_name[12]; /* vfe_liteXXX\0 */
+
+   snprintf(vfe_name, sizeof(vfe_name), "vfe%d", vfe->id);
+   snprintf(vfe_lite_name, sizeof(vfe_lite_name), "vfe_lite%d", vfe->id);
+
+   return (!strcmp(clock->name, vfe_name) ||
+   !strcmp(clock->name, vfe_lite_name) ||
+   !strcmp(clock->name, "vfe_lite"));
+}
+
 /*
  * vfe_set_clock_rates - Calculate and set clock rates on VFE module
  * @vfe: VFE device
@@ -454,9 +468,7 @@ static int vfe_set_clock_rates(struct vfe_device *vfe)
for (i = 0; i < vfe->nclocks; i++) {
struct camss_clock *clock = >clock[i];
 
-   if (!strcmp(clock->name, "vfe0") ||
-   !strcmp(clock->name, "vfe1") ||
-   !strcmp(clock->name, "vfe_lite")) {
+   if (vfe_match_clock_names(vfe, clock)) {
u64 min_rate = 0;
long rate;
 
@@ -537,9 +549,7 @@ static int vfe_check_clock_rates(struct vfe_device *vfe)
for (i = 0; i < vfe->nclocks; i++) {
struct camss_clock *clock = >clock[i];
 
-   if (!strcmp(clock->name, "vfe0") ||
-   !strcmp(clock->name, "vfe1") ||
-   !strcmp(clock->name, "vfe_lite")) {
+   if (vfe_match_clock_names(vfe, clock)) {
u64 min_rate = 0;
unsigned long rate;
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Drop unused macros

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Drop unused macros
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:51 2023 +0300

Drop a handful of macros that are not used and don't provide any value.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 10 --
 1 file changed, 10 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 9d84f09bcced..a9f929fc58b0 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -72,12 +72,6 @@
 
 #define IMX219_VBLANK_MIN  4
 
-/*Frame Length Line*/
-#define IMX219_FLL_MIN 0x08a6
-#define IMX219_FLL_MAX 0x
-#define IMX219_FLL_STEP1
-#define IMX219_FLL_DEFAULT 0x0c98
-
 /* HBLANK control - read only */
 #define IMX219_PPL_DEFAULT 3448
 
@@ -105,10 +99,6 @@
 #define IMX219_TESTP_COLOUR_MIN0
 #define IMX219_TESTP_COLOUR_MAX0x03ff
 #define IMX219_TESTP_COLOUR_STEP   1
-#define IMX219_TESTP_RED_DEFAULT   IMX219_TESTP_COLOUR_MAX
-#define IMX219_TESTP_GREENR_DEFAULT0
-#define IMX219_TESTP_BLUE_DEFAULT  0
-#define IMX219_TESTP_GREENB_DEFAULT0
 
 /* External clock frequency is 24.0M */
 #define IMX219_XCLK_FREQ   2400

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Replace register addresses with macros

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Replace register addresses with macros
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:52 2023 +0300

Define macros for all the known registers used in the register arrays,
and use them to replace the numerical addresses. This improves
readability.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 169 ++---
 1 file changed, 81 insertions(+), 88 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index a9f929fc58b0..530b03d78e34 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -41,6 +41,13 @@
 #define IMX219_CSI_2_LANE_MODE 0x01
 #define IMX219_CSI_4_LANE_MODE 0x03
 
+#define IMX219_REG_DPHY_CTRL   CCI_REG8(0x0128)
+#define IMX219_DPHY_CTRL_TIMING_AUTO   0
+#define IMX219_DPHY_CTRL_TIMING_MANUAL 1
+
+#define IMX219_REG_EXCK_FREQ   CCI_REG16(0x012a)
+#define IMX219_EXCK_FREQ(n)((n) * 256) /* n expressed 
in MHz */
+
 /* Analog gain control */
 #define IMX219_REG_ANALOG_GAIN CCI_REG8(0x0157)
 #define IMX219_ANA_GAIN_MIN0
@@ -75,6 +82,15 @@
 /* HBLANK control - read only */
 #define IMX219_PPL_DEFAULT 3448
 
+#define IMX219_REG_LINE_LENGTH_A   CCI_REG16(0x0162)
+#define IMX219_REG_X_ADD_STA_A CCI_REG16(0x0164)
+#define IMX219_REG_X_ADD_END_A CCI_REG16(0x0166)
+#define IMX219_REG_Y_ADD_STA_A CCI_REG16(0x0168)
+#define IMX219_REG_Y_ADD_END_A CCI_REG16(0x016a)
+#define IMX219_REG_X_OUTPUT_SIZE   CCI_REG16(0x016c)
+#define IMX219_REG_Y_OUTPUT_SIZE   CCI_REG16(0x016e)
+#define IMX219_REG_X_ODD_INC_A CCI_REG8(0x0170)
+#define IMX219_REG_Y_ODD_INC_A CCI_REG8(0x0171)
 #define IMX219_REG_ORIENTATION CCI_REG8(0x0172)
 
 /* Binning  Mode */
@@ -83,6 +99,18 @@
 #define IMX219_BINNING_2X2 0x0101
 #define IMX219_BINNING_2X2_ANALOG  0x0303
 
+#define IMX219_REG_CSI_DATA_FORMAT_A   CCI_REG16(0x018c)
+
+/* PLL Settings */
+#define IMX219_REG_VTPXCK_DIV  CCI_REG8(0x0301)
+#define IMX219_REG_VTSYCK_DIV  CCI_REG8(0x0303)
+#define IMX219_REG_PREPLLCK_VT_DIV CCI_REG8(0x0304)
+#define IMX219_REG_PREPLLCK_OP_DIV CCI_REG8(0x0305)
+#define IMX219_REG_PLL_VT_MPY  CCI_REG16(0x0306)
+#define IMX219_REG_OPPXCK_DIV  CCI_REG8(0x0309)
+#define IMX219_REG_OPSYCK_DIV  CCI_REG8(0x030b)
+#define IMX219_REG_PLL_OP_MPY  CCI_REG16(0x030c)
+
 /* Test Pattern Control */
 #define IMX219_REG_TEST_PATTERNCCI_REG16(0x0600)
 #define IMX219_TEST_PATTERN_DISABLE0
@@ -100,6 +128,9 @@
 #define IMX219_TESTP_COLOUR_MAX0x03ff
 #define IMX219_TESTP_COLOUR_STEP   1
 
+#define IMX219_REG_TP_WINDOW_WIDTH CCI_REG16(0x0624)
+#define IMX219_REG_TP_WINDOW_HEIGHTCCI_REG16(0x0626)
+
 /* External clock frequency is 24.0M */
 #define IMX219_XCLK_FREQ   2400
 
@@ -144,7 +175,7 @@ struct imx219_mode {
 };
 
 static const struct cci_reg_sequence imx219_common_regs[] = {
-   { CCI_REG8(0x0100), 0x00 }, /* Mode Select */
+   { IMX219_REG_MODE_SELECT, 0x00 },   /* Mode Select */
 
/* To Access Addresses 3000-5fff, send the following commands */
{ CCI_REG8(0x30eb), 0x0c },
@@ -155,15 +186,13 @@ static const struct cci_reg_sequence imx219_common_regs[] 
= {
{ CCI_REG8(0x30eb), 0x09 },
 
/* PLL Clock Table */
-   { CCI_REG8(0x0301), 0x05 }, /* VTPXCK_DIV */
-   { CCI_REG8(0x0303), 0x01 }, /* VTSYSCK_DIV */
-   { CCI_REG8(0x0304), 0x03 }, /* PREPLLCK_VT_DIV 0x03 = AUTO set */
-   { CCI_REG8(0x0305), 0x03 }, /* PREPLLCK_OP_DIV 0x03 = AUTO set */
-   { CCI_REG8(0x0306), 0x00 }, /* PLL_VT_MPY */
-   { CCI_REG8(0x0307), 0x39 },
-   { CCI_REG8(0x030b), 0x01 }, /* OP_SYS_CLK_DIV */
-   { CCI_REG8(0x030c), 0x00 }, /* PLL_OP_MPY */
-   { CCI_REG8(0x030d), 0x72 },
+   { IMX219_REG_VTPXCK_DIV, 5 },
+   { IMX219_REG_VTSYCK_DIV, 1 },
+   { IMX219_REG_PREPLLCK_VT_DIV, 3 },  /* 0x03 = AUTO set */
+   { IMX219_REG_PREPLLCK_OP_DIV, 3 },  /* 0x03 = AUTO set */
+   { IMX219_REG_PLL_VT_MPY, 57 },
+   { IMX219_REG_OPSYCK_DIV, 1 },
+   { IMX219_REG_PLL_OP_MPY, 114 },
 
/* Undocumented registers */
{ CCI_REG8(0x455e), 0x00 },
@@ -180,16 +209,14 @@ static const struct cci_reg_sequence imx219_common_regs[] 
= {
{ CCI_REG8(0x479b), 0x0e },
 
/* Frame Bank Register Group "A" */
-   { CCI_REG8(0x0162), 0x0d }, /* Line_Length_A */
-   { CCI_REG8(0x0163), 0x78 },
-   { CCI_REG8(0x0170), 0x01 }, /* X_ODD_INC_A */
-   { CCI_REG8(0x0171), 0x01 }, /* Y_ODD_INC_A */
+   { IMX219_REG_LIN

[git:media_stage/master] media: qcom: camss: Propagate vfe_reset error up the callstack

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Propagate vfe_reset error up the callstack
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:06 2023 +0100

A previous patch I had removed the returns from vfe_disable() since we
didn't trap any meaningful errors. Konrad pointed out vfe_reset() could
return an error, which is true.

Trap the vfe_reset() error code and throw it up the callstack.

Suggested-by: Konrad Dybcio 
Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index b3d5af7f0969..4839e2cedfe5 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -435,8 +435,11 @@ static int vfe_disable_output(struct vfe_line *line)
 int vfe_disable(struct vfe_line *line)
 {
struct vfe_device *vfe = to_vfe(line);
+   int ret;
 
-   vfe_disable_output(line);
+   ret = vfe_disable_output(line);
+   if (ret)
+   goto error;
 
vfe_put_output(line);
 
@@ -446,7 +449,8 @@ int vfe_disable(struct vfe_line *line)
 
mutex_unlock(>stream_lock);
 
-   return 0;
+error:
+   return ret;
 }
 
 /**

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: tvp541x: Drop CONFIG_OF ifdeffery

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: tvp541x: Drop CONFIG_OF ifdeffery
Author:  Biju Das 
Date:Sat Sep 23 17:36:40 2023 +0100

Drop of_match_ptr() from tvp514x_driver and get rid of ugly CONFIG_OF
if check. This slightly increases the size of tvp514x_driver on non-OF
system and shouldn't be an issue.

Add mod_devicetable.h include.

It also allows, in case if needed, to enumerate this device via ACPI with
PRP0001 magic.

Signed-off-by: Biju Das 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/tvp514x.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

---

diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
index 4d0ffaa312c5..569a9437ec86 100644
--- a/drivers/media/i2c/tvp514x.c
+++ b/drivers/media/i2c/tvp514x.c
@@ -20,6 +20,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1190,7 +1191,6 @@ static const struct i2c_device_id tvp514x_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, tvp514x_id);
 
-#if IS_ENABLED(CONFIG_OF)
 static const struct of_device_id tvp514x_of_match[] = {
{ .compatible = "ti,tvp5146", .data = tvp5146_init_reg_seq },
{ .compatible = "ti,tvp5146m2", .data = tvp514xm_init_reg_seq },
@@ -1199,11 +1199,10 @@ static const struct of_device_id tvp514x_of_match[] = {
{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, tvp514x_of_match);
-#endif
 
 static struct i2c_driver tvp514x_driver = {
.driver = {
-   .of_match_table = of_match_ptr(tvp514x_of_match),
+   .of_match_table = tvp514x_of_match,
.name = TVP514X_MODULE_NAME,
},
.probe = tvp514x_probe,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: visl: use canonical ftrace path

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: visl: use canonical ftrace path
Author:  Ross Zwisler 
Date:Tue Aug 29 14:46:01 2023 -0600

The canonical location for the tracefs filesystem is at
/sys/kernel/tracing.

But, from Documentation/trace/ftrace.rst:

  Before 4.1, all ftrace tracing control files were within the debugfs
  file system, which is typically located at /sys/kernel/debug/tracing.
  For backward compatibility, when mounting the debugfs file system,
  the tracefs file system will be automatically mounted at:

  /sys/kernel/debug/tracing

Update the visl decoder driver documentation to use this tracefs path.

Signed-off-by: Ross Zwisler 
Reviewed-by: Masami Hiramatsu (Google) 
Reviewed-by: Steven Rostedt (Google) 
Signed-off-by: Hans Verkuil 

 Documentation/admin-guide/media/visl.rst | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

---

diff --git a/Documentation/admin-guide/media/visl.rst 
b/Documentation/admin-guide/media/visl.rst
index 7d2dc78341c9..4328c6c72d30 100644
--- a/Documentation/admin-guide/media/visl.rst
+++ b/Documentation/admin-guide/media/visl.rst
@@ -78,7 +78,7 @@ The trace events are defined on a per-codec basis, e.g.:
 
 .. code-block:: bash
 
-$ ls /sys/kernel/debug/tracing/events/ | grep visl
+$ ls /sys/kernel/tracing/events/ | grep visl
 visl_fwht_controls
 visl_h264_controls
 visl_hevc_controls
@@ -90,13 +90,13 @@ For example, in order to dump HEVC SPS data:
 
 .. code-block:: bash
 
-$ echo 1 >  
/sys/kernel/debug/tracing/events/visl_hevc_controls/v4l2_ctrl_hevc_sps/enable
+$ echo 1 >  
/sys/kernel/tracing/events/visl_hevc_controls/v4l2_ctrl_hevc_sps/enable
 
 The SPS data will be dumped to the trace buffer, i.e.:
 
 .. code-block:: bash
 
-$ cat /sys/kernel/debug/tracing/trace
+$ cat /sys/kernel/tracing/trace
 video_parameter_set_id 0
 seq_parameter_set_id 0
 pic_width_in_luma_samples 1920

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: imx334: Orphan the driver

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: imx334: Orphan the driver
Author:  Sakari Ailus 
Date:Tue Sep 19 14:09:57 2023 +0300

The current maintainers won't be looking after this driver anymore. Mark
it orphan.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 MAINTAINERS | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

---

diff --git a/MAINTAINERS b/MAINTAINERS
index 85c817eae9ae..985670c74cf0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20020,10 +20020,8 @@ T: git git://linuxtv.org/media_tree.git
 F: drivers/media/i2c/imx319.c
 
 SONY IMX334 SENSOR DRIVER
-M: Paul J. Murphy 
-M: Daniele Alessandrelli 
 L: linux-me...@vger.kernel.org
-S: Maintained
+S: Orphan
 T: git git://linuxtv.org/media_tree.git
 F: Documentation/devicetree/bindings/media/i2c/sony,imx334.yaml
 F: drivers/media/i2c/imx334.c

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dvb-frontends: drop check because i2c_unregister_device() is NULL safe

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dvb-frontends: drop check because i2c_unregister_device() is 
NULL safe
Author:  Wolfram Sang 
Date:Fri Sep 22 10:04:20 2023 +0200

No need to check the argument of i2c_unregister_device() because the
function itself does it.

Signed-off-by: Wolfram Sang 
Reviewed-by: Kieran Bingham 
Reviewed-by: Geert Uytterhoeven 
Signed-off-by: Hans Verkuil 

 drivers/media/dvb-frontends/m88ds3103.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

---

diff --git a/drivers/media/dvb-frontends/m88ds3103.c 
b/drivers/media/dvb-frontends/m88ds3103.c
index cf037b61b226..26c67ef05d13 100644
--- a/drivers/media/dvb-frontends/m88ds3103.c
+++ b/drivers/media/dvb-frontends/m88ds3103.c
@@ -1920,8 +1920,7 @@ static void m88ds3103_remove(struct i2c_client *client)
 
dev_dbg(>dev, "\n");
 
-   if (dev->dt_client)
-   i2c_unregister_device(dev->dt_client);
+   i2c_unregister_device(dev->dt_client);
 
i2c_mux_del_adapters(dev->muxc);
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: allegro: Annotate struct mcu_msg_push_buffers_internal with __counted_by

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: allegro: Annotate struct mcu_msg_push_buffers_internal with 
__counted_by
Author:  Kees Cook 
Date:Fri Sep 22 10:49:36 2023 -0700

Prepare for the coming implementation by GCC and Clang of the __counted_by
attribute. Flexible array members annotated with __counted_by can have
their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS
(for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family
functions).

As found with Coccinelle[1], add __counted_by for
struct mcu_msg_push_buffers_internal.

[1] 
https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci

Cc: Michael Tretter 
Cc: Pengutronix Kernel Team 
Signed-off-by: Kees Cook 
Reviewed-by: Gustavo A. R. Silva 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/allegro-dvt/allegro-mail.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/allegro-dvt/allegro-mail.h 
b/drivers/media/platform/allegro-dvt/allegro-mail.h
index a5686058d754..c0c9013f1aab 100644
--- a/drivers/media/platform/allegro-dvt/allegro-mail.h
+++ b/drivers/media/platform/allegro-dvt/allegro-mail.h
@@ -184,7 +184,7 @@ struct mcu_msg_push_buffers_internal {
struct mcu_msg_header header;
u32 channel_id;
size_t num_buffers;
-   struct mcu_msg_push_buffers_internal_buffer buffer[];
+   struct mcu_msg_push_buffers_internal_buffer buffer[] 
__counted_by(num_buffers);
 };
 
 struct mcu_msg_put_stream_buffer {

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: platform: cros-ec: Add Taranza to the match table

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: platform: cros-ec: Add Taranza to the match table
Author:  Ken Lin 
Date:Thu Oct 5 09:38:41 2023 +0800

Taranza has two HDMI ports which support CEC:
Port D is EC port 0
Port B is EC port 1

Signed-off-by: Ken Lin 
Signed-off-by: Hans Verkuil 

 drivers/media/cec/platform/cros-ec/cros-ec-cec.c | 2 ++
 1 file changed, 2 insertions(+)

---

diff --git a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c 
b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
index dbee25b138ff..42dde3f0dbde 100644
--- a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
+++ b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
@@ -322,6 +322,8 @@ static const struct cec_dmi_match cec_dmi_match_table[] = {
{ "Google", "Constitution", ":00:02.0", port_ba_conns },
/* Google Boxy */
{ "Google", "Boxy", ":00:02.0", port_d_conns },
+   /* Google Taranza */
+   { "Google", "Taranza", ":00:02.0", port_db_conns },
 };
 
 static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: imx335: Orphan the driver

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: imx335: Orphan the driver
Author:  Sakari Ailus 
Date:Tue Sep 19 14:09:32 2023 +0300

The current maintainers won't be looking after this driver anymore. Mark
it orphan.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 MAINTAINERS | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

---

diff --git a/MAINTAINERS b/MAINTAINERS
index a9d4f734702b..85c817eae9ae 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20029,10 +20029,8 @@ F: 
Documentation/devicetree/bindings/media/i2c/sony,imx334.yaml
 F: drivers/media/i2c/imx334.c
 
 SONY IMX335 SENSOR DRIVER
-M: Paul J. Murphy 
-M: Daniele Alessandrelli 
 L: linux-me...@vger.kernel.org
-S: Maintained
+S: Orphan
 T: git git://linuxtv.org/media_tree.git
 F: Documentation/devicetree/bindings/media/i2c/sony,imx335.yaml
 F: drivers/media/i2c/imx335.c

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Convert to CCI register access helpers

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Convert to CCI register access helpers
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:50 2023 +0300

Use the new common CCI register access helpers to replace the private
register access helpers in the imx219 driver. This simplifies the driver
by reducing the amount of code.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/Kconfig  |   1 +
 drivers/media/i2c/imx219.c | 513 +++--
 2 files changed, 220 insertions(+), 294 deletions(-)

---

diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 897d02f0b552..59ee0ca2c978 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -99,6 +99,7 @@ config VIDEO_IMX214
 
 config VIDEO_IMX219
tristate "Sony IMX219 sensor support"
+   select V4L2_CCI_I2C
help
  This is a Video4Linux2 sensor driver for the Sony
  IMX219 camera.
diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index af29398c657d..9d84f09bcced 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -21,40 +21,49 @@
 #include 
 #include 
 #include 
+
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
-#include 
 
-#define IMX219_REG_VALUE_08BIT 1
-#define IMX219_REG_VALUE_16BIT 2
+/* Chip ID */
+#define IMX219_REG_CHIP_ID CCI_REG16(0x)
+#define IMX219_CHIP_ID 0x0219
 
-#define IMX219_REG_MODE_SELECT 0x0100
+#define IMX219_REG_MODE_SELECT CCI_REG8(0x0100)
 #define IMX219_MODE_STANDBY0x00
 #define IMX219_MODE_STREAMING  0x01
 
-/* Chip ID */
-#define IMX219_REG_CHIP_ID 0x
-#define IMX219_CHIP_ID 0x0219
-
-/* External clock frequency is 24.0M */
-#define IMX219_XCLK_FREQ   2400
+#define IMX219_REG_CSI_LANE_MODE   CCI_REG8(0x0114)
+#define IMX219_CSI_2_LANE_MODE 0x01
+#define IMX219_CSI_4_LANE_MODE 0x03
 
-/* Pixel rate is fixed for all the modes */
-#define IMX219_PIXEL_RATE  18240
-#define IMX219_PIXEL_RATE_4LANE28080
+/* Analog gain control */
+#define IMX219_REG_ANALOG_GAIN CCI_REG8(0x0157)
+#define IMX219_ANA_GAIN_MIN0
+#define IMX219_ANA_GAIN_MAX232
+#define IMX219_ANA_GAIN_STEP   1
+#define IMX219_ANA_GAIN_DEFAULT0x0
 
-#define IMX219_DEFAULT_LINK_FREQ   45600
-#define IMX219_DEFAULT_LINK_FREQ_4LANE 36300
+/* Digital gain control */
+#define IMX219_REG_DIGITAL_GAINCCI_REG16(0x0158)
+#define IMX219_DGTL_GAIN_MIN   0x0100
+#define IMX219_DGTL_GAIN_MAX   0x0fff
+#define IMX219_DGTL_GAIN_DEFAULT   0x0100
+#define IMX219_DGTL_GAIN_STEP  1
 
-#define IMX219_REG_CSI_LANE_MODE   0x0114
-#define IMX219_CSI_2_LANE_MODE 0x01
-#define IMX219_CSI_4_LANE_MODE 0x03
+/* Exposure control */
+#define IMX219_REG_EXPOSURECCI_REG16(0x015a)
+#define IMX219_EXPOSURE_MIN4
+#define IMX219_EXPOSURE_STEP   1
+#define IMX219_EXPOSURE_DEFAULT0x640
+#define IMX219_EXPOSURE_MAX65535
 
 /* V_TIMING internal */
-#define IMX219_REG_VTS 0x0160
+#define IMX219_REG_VTS CCI_REG16(0x0160)
 #define IMX219_VTS_15FPS   0x0dc6
 #define IMX219_VTS_30FPS_1080P 0x06e3
 #define IMX219_VTS_30FPS_BINNED0x06e3
@@ -72,37 +81,16 @@
 /* HBLANK control - read only */
 #define IMX219_PPL_DEFAULT 3448
 
-/* Exposure control */
-#define IMX219_REG_EXPOSURE0x015a
-#define IMX219_EXPOSURE_MIN4
-#define IMX219_EXPOSURE_STEP   1
-#define IMX219_EXPOSURE_DEFAULT0x640
-#define IMX219_EXPOSURE_MAX65535
-
-/* Analog gain control */
-#define IMX219_REG_ANALOG_GAIN 0x0157
-#define IMX219_ANA_GAIN_MIN0
-#define IMX219_ANA_GAIN_MAX232
-#define IMX219_ANA_GAIN_STEP   1
-#define IMX219_ANA_GAIN_DEFAULT0x0
-
-/* Digital gain control */
-#define IMX219_REG_DIGITAL_GAIN0x0158
-#define IMX219_DGTL_GAIN_MIN   0x0100
-#define IMX219_DGTL_GAIN_MAX   0x0fff
-#define IMX219_DGTL_GAIN_DEFAULT   0x0100
-#define IMX219_DGTL_GAIN_STEP  1
-
-#define IMX219_REG_ORIENTATION 0x0172
+#define IMX219_REG_ORIENTATION CCI_REG8(0x0172)
 
 /* Binning  Mode */
-#define IMX219_REG_BINNING_MODE0x0174
+#define IMX219_REG_BINNING_MODECCI_REG16(0x0174)
 #define IMX219_BINNING_NONE0x
 #define IMX219_BINNING_2X2 0x0101
 #define IMX219_BINNING_2X2_ANALOG  0x0303
 
 /* Test Pattern Control */
-#define IMX219_REG_TE

[git:media_stage/master] media: vidtv: mux: Add check and kfree for kstrdup

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: vidtv: mux: Add check and kfree for kstrdup
Author:  Jiasheng Jiang 
Date:Mon Jun 19 16:12:02 2023 +0800

Add check for the return value of kstrdup() and return the error
if it fails in order to avoid NULL pointer dereference.
Moreover, use kfree() in the later error handling in order to avoid
memory leak.

Fixes: c2f78f0cb294 ("media: vidtv: psi: add a Network Information Table (NIT)")
Signed-off-by: Jiasheng Jiang 
Signed-off-by: Hans Verkuil 

 drivers/media/test-drivers/vidtv/vidtv_mux.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/test-drivers/vidtv/vidtv_mux.c 
b/drivers/media/test-drivers/vidtv/vidtv_mux.c
index b51e6a3b8cbe..f99878eff7ac 100644
--- a/drivers/media/test-drivers/vidtv/vidtv_mux.c
+++ b/drivers/media/test-drivers/vidtv/vidtv_mux.c
@@ -504,13 +504,16 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
m->priv = args->priv;
m->network_id = args->network_id;
m->network_name = kstrdup(args->network_name, GFP_KERNEL);
+   if (!m->network_name)
+   goto free_mux_buf;
+
m->timing.current_jiffies = get_jiffies_64();
 
if (args->channels)
m->channels = args->channels;
else
if (vidtv_channels_init(m) < 0)
-   goto free_mux_buf;
+   goto free_mux_network_name;
 
/* will alloc data for pmt_sections after initializing pat */
if (vidtv_channel_si_init(m) < 0)
@@ -527,6 +530,8 @@ free_channel_si:
vidtv_channel_si_destroy(m);
 free_channels:
vidtv_channels_destroy(m);
+free_mux_network_name:
+   kfree(m->network_name);
 free_mux_buf:
vfree(m->mux_buf);
 free_mux:

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: s3c-camif: Avoid inappropriate kfree()

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: s3c-camif: Avoid inappropriate kfree()
Author:  Katya Orlova 
Date:Fri Sep 22 14:55:06 2023 +0300

s3c_camif_register_video_node() works with video_device structure stored
as a field of camif_vp, so it should not be kfreed.
But there is video_device_release() on error path that do it.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: babde1c243b2 ("[media] V4L: Add driver for S3C24XX/S3C64XX SoC series 
camera interface")
Signed-off-by: Katya Orlova 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/samsung/s3c-camif/camif-capture.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

---

diff --git a/drivers/media/platform/samsung/s3c-camif/camif-capture.c 
b/drivers/media/platform/samsung/s3c-camif/camif-capture.c
index 76634d242b10..0f5b3845d7b9 100644
--- a/drivers/media/platform/samsung/s3c-camif/camif-capture.c
+++ b/drivers/media/platform/samsung/s3c-camif/camif-capture.c
@@ -1133,12 +1133,12 @@ int s3c_camif_register_video_node(struct camif_dev 
*camif, int idx)
 
ret = vb2_queue_init(q);
if (ret)
-   goto err_vd_rel;
+   return ret;
 
vp->pad.flags = MEDIA_PAD_FL_SINK;
ret = media_entity_pads_init(>entity, 1, >pad);
if (ret)
-   goto err_vd_rel;
+   return ret;
 
video_set_drvdata(vfd, vp);
 
@@ -1171,8 +1171,6 @@ err_ctrlh_free:
v4l2_ctrl_handler_free(>ctrl_handler);
 err_me_cleanup:
media_entity_cleanup(>entity);
-err_vd_rel:
-   video_device_release(vfd);
return ret;
 }
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Rename camss struct resources to camss_subdev_resources

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Rename camss struct resources to 
camss_subdev_resources
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:52 2023 +0100

Rename non-specific struct resources {} to struct camss_subdev_resources {}

Each logical block in CAMSS has a number of regulators, clocks and resets
associated with it. We represent these blocks as v4l subdevices.

The name "struct camss_subdev_resources" is a more descriptive and accurate
name.

Suggested-by: Laurent Pinchart 
Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csid.c   |  2 +-
 drivers/media/platform/qcom/camss/camss-csid.h   |  4 +--
 drivers/media/platform/qcom/camss/camss-csiphy.c |  2 +-
 drivers/media/platform/qcom/camss/camss-csiphy.h |  4 +--
 drivers/media/platform/qcom/camss/camss-ispif.c  |  2 +-
 drivers/media/platform/qcom/camss/camss-ispif.h  |  4 +--
 drivers/media/platform/qcom/camss/camss-vfe.c|  2 +-
 drivers/media/platform/qcom/camss/camss-vfe.h|  4 +--
 drivers/media/platform/qcom/camss/camss.c| 44 
 drivers/media/platform/qcom/camss/camss.h|  2 +-
 10 files changed, 35 insertions(+), 35 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c 
b/drivers/media/platform/qcom/camss/camss-csid.c
index 9d7fb1adebb9..b1113decdb30 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -566,7 +566,7 @@ static const struct v4l2_ctrl_ops csid_ctrl_ops = {
  * Return 0 on success or a negative error code otherwise
  */
 int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid,
-const struct resources *res, u8 id)
+const struct camss_subdev_resources *res, u8 id)
 {
struct device *dev = camss->dev;
struct platform_device *pdev = to_platform_device(dev);
diff --git a/drivers/media/platform/qcom/camss/camss-csid.h 
b/drivers/media/platform/qcom/camss/camss-csid.h
index d4b48432a097..30d94eb2eb04 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.h
+++ b/drivers/media/platform/qcom/camss/camss-csid.h
@@ -172,7 +172,7 @@ struct csid_device {
const struct csid_hw_ops *ops;
 };
 
-struct resources;
+struct camss_subdev_resources;
 
 /*
  * csid_find_code - Find a format code in an array using array index or format 
code
@@ -200,7 +200,7 @@ const struct csid_format *csid_get_fmt_entry(const struct 
csid_format *formats,
 u32 code);
 
 int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid,
-const struct resources *res, u8 id);
+const struct camss_subdev_resources *res, u8 id);
 
 int msm_csid_register_entity(struct csid_device *csid,
 struct v4l2_device *v4l2_dev);
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c 
b/drivers/media/platform/qcom/camss/camss-csiphy.c
index c5ae9c61ee0b..b1b6c4cf1838 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -546,7 +546,7 @@ static int csiphy_init_formats(struct v4l2_subdev *sd,
  */
 int msm_csiphy_subdev_init(struct camss *camss,
   struct csiphy_device *csiphy,
-  const struct resources *res, u8 id)
+  const struct camss_subdev_resources *res, u8 id)
 {
struct device *dev = camss->dev;
struct platform_device *pdev = to_platform_device(dev);
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h 
b/drivers/media/platform/qcom/camss/camss-csiphy.h
index 1c14947f92d3..c9b7fe82b1f0 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.h
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.h
@@ -83,11 +83,11 @@ struct csiphy_device {
unsigned int nformats;
 };
 
-struct resources;
+struct camss_subdev_resources;
 
 int msm_csiphy_subdev_init(struct camss *camss,
   struct csiphy_device *csiphy,
-  const struct resources *res, u8 id);
+  const struct camss_subdev_resources *res, u8 id);
 
 int msm_csiphy_register_entity(struct csiphy_device *csiphy,
   struct v4l2_device *v4l2_dev);
diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c 
b/drivers/media/platform/qcom/camss/camss-ispif.c
index 61765b874b9a..75b8a60806b2 100644
--- a/drivers/media/platform/qcom/camss/camss-ispif.c
+++ b/drivers/media/platform/qcom/camss/camss-ispif.c
@@ -1095,7 +1095,7 @@ static int ispif_init_formats(struct v4l2_subdev *sd, 
struct v4l2_subdev_fh *fh)
  * Return 0 on success or a negative error code otherwise
  */
 int msm_ispif_subdev_init(struct camss *camss,
- const struc

[git:media_stage/master] media: qcom: camss: Support RDI3 for VFE 17x

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Support RDI3 for VFE 17x
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:04 2023 +0100

Some VFEs have four RDIs apiece. Right now the ISR code has a hard-coded
value which tops-out at RDI2 meaning only three RDIs can be utilised in
practice.

Extend out the various routines in camss-vfe-17x.c to support the higher
RDI count.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe-170.c | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c 
b/drivers/media/platform/qcom/camss/camss-vfe-170.c
index 2ba7160b3bd1..a5aa79950186 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-170.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c
@@ -209,7 +209,8 @@ static void vfe_global_reset(struct vfe_device *vfe)
 GLOBAL_RESET_CMD_IDLE_CGC  |
 GLOBAL_RESET_CMD_RDI0  |
 GLOBAL_RESET_CMD_RDI1  |
-GLOBAL_RESET_CMD_RDI2;
+GLOBAL_RESET_CMD_RDI2  |
+GLOBAL_RESET_CMD_RDI3;
 
writel_relaxed(BIT(31), vfe->base + VFE_IRQ_MASK_0);
 
@@ -343,7 +344,7 @@ static void vfe_violation_read(struct vfe_device *vfe)
 static irqreturn_t vfe_isr(int irq, void *dev)
 {
struct vfe_device *vfe = dev;
-   u32 status0, status1, vfe_bus_status[3];
+   u32 status0, status1, vfe_bus_status[VFE_LINE_NUM_MAX];
int i, wm;
 
status0 = readl_relaxed(vfe->base + VFE_IRQ_STATUS_0);
@@ -352,7 +353,7 @@ static irqreturn_t vfe_isr(int irq, void *dev)
writel_relaxed(status0, vfe->base + VFE_IRQ_CLEAR_0);
writel_relaxed(status1, vfe->base + VFE_IRQ_CLEAR_1);
 
-   for (i = VFE_LINE_RDI0; i <= VFE_LINE_RDI2; i++) {
+   for (i = VFE_LINE_RDI0; i < vfe->line_num; i++) {
vfe_bus_status[i] = readl_relaxed(vfe->base + 
VFE_BUS_IRQ_STATUS(i));
writel_relaxed(vfe_bus_status[i], vfe->base + 
VFE_BUS_IRQ_CLEAR(i));
}
@@ -366,11 +367,11 @@ static irqreturn_t vfe_isr(int irq, void *dev)
if (status0 & STATUS_0_RESET_ACK)
vfe->isr_ops.reset_ack(vfe);
 
-   for (i = VFE_LINE_RDI0; i <= VFE_LINE_RDI2; i++)
+   for (i = VFE_LINE_RDI0; i < vfe->line_num; i++)
if (status0 & STATUS_0_RDI_REG_UPDATE(i))
vfe->isr_ops.reg_update(vfe, i);
 
-   for (i = VFE_LINE_RDI0; i <= VFE_LINE_RDI2; i++)
+   for (i = VFE_LINE_RDI0; i < vfe->line_num; i++)
if (status0 & STATUS_1_RDI_SOF(i))
vfe->isr_ops.sof(vfe, i);
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Amalgamate struct resource with struct resource_ispif

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Amalgamate struct resource with struct 
resource_ispif
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:51 2023 +0100

There is no good reason to differentiate the two resource structures
here. As part of a general tidyup of the declaration and passing of
resources within in the CAMSS driver it will be advantageous to have
one unified resource structure.

The two structures are very similar anyway thus leading more credence
still to the argument there should be only one.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-ispif.c |  4 ++--
 drivers/media/platform/qcom/camss/camss-ispif.h |  4 ++--
 drivers/media/platform/qcom/camss/camss.c   | 14 +++---
 drivers/media/platform/qcom/camss/camss.h   |  8 +---
 4 files changed, 12 insertions(+), 18 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c 
b/drivers/media/platform/qcom/camss/camss-ispif.c
index 1c7e4b1b4940..61765b874b9a 100644
--- a/drivers/media/platform/qcom/camss/camss-ispif.c
+++ b/drivers/media/platform/qcom/camss/camss-ispif.c
@@ -1095,7 +1095,7 @@ static int ispif_init_formats(struct v4l2_subdev *sd, 
struct v4l2_subdev_fh *fh)
  * Return 0 on success or a negative error code otherwise
  */
 int msm_ispif_subdev_init(struct camss *camss,
- const struct resources_ispif *res)
+ const struct resources *res)
 {
struct device *dev = camss->dev;
struct ispif_device *ispif = camss->ispif;
@@ -1152,7 +1152,7 @@ int msm_ispif_subdev_init(struct camss *camss,
 
/* Interrupt */
 
-   ret = platform_get_irq_byname(pdev, res->interrupt);
+   ret = platform_get_irq_byname(pdev, res->interrupt[0]);
if (ret < 0)
return ret;
 
diff --git a/drivers/media/platform/qcom/camss/camss-ispif.h 
b/drivers/media/platform/qcom/camss/camss-ispif.h
index fdf28e68cc7d..c7c41f7afcaa 100644
--- a/drivers/media/platform/qcom/camss/camss-ispif.h
+++ b/drivers/media/platform/qcom/camss/camss-ispif.h
@@ -66,10 +66,10 @@ struct ispif_device {
struct camss *camss;
 };
 
-struct resources_ispif;
+struct resources;
 
 int msm_ispif_subdev_init(struct camss *camss,
- const struct resources_ispif *res);
+ const struct resources *res);
 
 int msm_ispif_register_entities(struct ispif_device *ispif,
struct v4l2_device *v4l2_dev);
diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index c6df862c79e3..fa0eb30d77c2 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -93,14 +93,14 @@ static const struct resources csid_res_8x16[] = {
},
 };
 
-static const struct resources_ispif ispif_res_8x16 = {
+static const struct resources ispif_res_8x16 = {
/* ISPIF */
.clock = { "top_ahb", "ahb", "ispif_ahb",
   "csi0", "csi0_pix", "csi0_rdi",
   "csi1", "csi1_pix", "csi1_rdi" },
.clock_for_reset = { "vfe0", "csi_vfe0" },
.reg = { "ispif", "csi_clk_mux" },
-   .interrupt = "ispif"
+   .interrupt = { "ispif" }
 
 };
 
@@ -234,7 +234,7 @@ static const struct resources csid_res_8x96[] = {
}
 };
 
-static const struct resources_ispif ispif_res_8x96 = {
+static const struct resources ispif_res_8x96 = {
/* ISPIF */
.clock = { "top_ahb", "ahb", "ispif_ahb",
   "csi0", "csi0_pix", "csi0_rdi",
@@ -243,7 +243,7 @@ static const struct resources_ispif ispif_res_8x96 = {
   "csi3", "csi3_pix", "csi3_rdi" },
.clock_for_reset = { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" },
.reg = { "ispif", "csi_clk_mux" },
-   .interrupt = "ispif"
+   .interrupt = { "ispif" }
 };
 
 static const struct resources vfe_res_8x96[] = {
@@ -410,7 +410,7 @@ static const struct resources csid_res_660[] = {
}
 };
 
-static const struct resources_ispif ispif_res_660 = {
+static const struct resources ispif_res_660 = {
/* ISPIF */
.clock = { "top_ahb", "ahb", "ispif_ahb",
   "csi0", "csi0_pix", "csi0_rdi",
@@ -419,7 +419,7 @@ static const struct resources_ispif ispif_res_660 = {
   "csi3", "csi3_pix", "csi3_rdi" },
.clock_for

[git:media_stage/master] media: tvp541x: Extend match support for OF tables

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: tvp541x: Extend match support for OF tables
Author:  Biju Das 
Date:Sat Sep 23 17:36:39 2023 +0100

The driver has an OF match table, still, it uses an ID lookup table for
retrieving match data. Currently, the driver is working on the
assumption that an I2C device registered via OF will always match a
legacy I2C device ID. The correct approach is to have an OF device ID
table using i2c_get_match_data() if the devices are registered via OF/ID.

Unify the OF/ID table by using tvp514x_reg as match data for both
these tables and replace the ID lookup table for the match data by
i2c_get_match_data() and simplifly probe().

While at it, remove the trailing comma in the terminator entry for the OF
table making code robust against (theoretical) misrebases or other similar
things where the new entry goes _after_ the termination without the
compiler noticing.

Signed-off-by: Biju Das 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/tvp514x.c | 26 --
 1 file changed, 12 insertions(+), 14 deletions(-)

---

diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
index aa6d4b67b6d5..4d0ffaa312c5 100644
--- a/drivers/media/i2c/tvp514x.c
+++ b/drivers/media/i2c/tvp514x.c
@@ -118,7 +118,7 @@ struct tvp514x_decoder {
struct media_pad pad;
struct v4l2_mbus_framefmt format;
 
-   struct tvp514x_reg *int_seq;
+   const struct tvp514x_reg *int_seq;
 };
 
 /* TVP514x default register values */
@@ -1024,7 +1024,6 @@ done:
 static int
 tvp514x_probe(struct i2c_client *client)
 {
-   const struct i2c_device_id *id = i2c_client_get_device_id(client);
struct tvp514x_platform_data *pdata = tvp514x_get_pdata(client);
struct tvp514x_decoder *decoder;
struct v4l2_subdev *sd;
@@ -1049,7 +1048,7 @@ tvp514x_probe(struct i2c_client *client)
memcpy(decoder->tvp514x_regs, tvp514x_reg_list_default,
sizeof(tvp514x_reg_list_default));
 
-   decoder->int_seq = (struct tvp514x_reg *)id->driver_data;
+   decoder->int_seq = i2c_get_match_data(client);
 
/* Copy board specific information here */
decoder->pdata = pdata;
@@ -1183,22 +1182,21 @@ static const struct tvp514x_reg tvp514xm_init_reg_seq[] 
= {
  * driver_data - Driver data
  */
 static const struct i2c_device_id tvp514x_id[] = {
-   {"tvp5146", (unsigned long)tvp5146_init_reg_seq},
-   {"tvp5146m2", (unsigned long)tvp514xm_init_reg_seq},
-   {"tvp5147", (unsigned long)tvp5147_init_reg_seq},
-   {"tvp5147m1", (unsigned long)tvp514xm_init_reg_seq},
-   {},
+   {"tvp5146", (kernel_ulong_t)tvp5146_init_reg_seq },
+   {"tvp5146m2", (kernel_ulong_t)tvp514xm_init_reg_seq },
+   {"tvp5147", (kernel_ulong_t)tvp5147_init_reg_seq },
+   {"tvp5147m1", (kernel_ulong_t)tvp514xm_init_reg_seq },
+   { /* sentinel */ }
 };
-
 MODULE_DEVICE_TABLE(i2c, tvp514x_id);
 
 #if IS_ENABLED(CONFIG_OF)
 static const struct of_device_id tvp514x_of_match[] = {
-   { .compatible = "ti,tvp5146", },
-   { .compatible = "ti,tvp5146m2", },
-   { .compatible = "ti,tvp5147", },
-   { .compatible = "ti,tvp5147m1", },
-   { /* sentinel */ },
+   { .compatible = "ti,tvp5146", .data = tvp5146_init_reg_seq },
+   { .compatible = "ti,tvp5146m2", .data = tvp514xm_init_reg_seq },
+   { .compatible = "ti,tvp5147", .data = tvp5147_init_reg_seq },
+   { .compatible = "ti,tvp5147m1", .data = tvp514xm_init_reg_seq },
+   { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, tvp514x_of_match);
 #endif

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: adv7180: Extend match support for OF tables

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: adv7180: Extend match support for OF tables
Author:  Biju Das 
Date:Sun Sep 10 16:21:59 2023 +0100

The driver has an OF match table, still, it uses an ID lookup table for
retrieving match data. Currently, the driver is working on the
assumption that an I2C device registered via OF will always match a
legacy I2C device ID. The correct approach is to have an OF device ID
table using i2c_get_match_data() if the devices are registered via OF/ID.

Unify the OF/ID table by using struct adv7180_chip_info as match data for
both these tables and replace the ID lookup table for the match data by
i2c_get_match_data().

While at it, remove the trailing comma in the terminator entry for the OF
table making code robust against (theoretical) misrebases or other similar
things where the new entry goes _after_ the termination without the
compiler noticing.

Signed-off-by: Biju Das 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/adv7180.c | 60 ++---
 1 file changed, 29 insertions(+), 31 deletions(-)

---

diff --git a/drivers/media/i2c/adv7180.c b/drivers/media/i2c/adv7180.c
index 99ba925e8ec8..fc4f29e74e05 100644
--- a/drivers/media/i2c/adv7180.c
+++ b/drivers/media/i2c/adv7180.c
@@ -1395,7 +1395,6 @@ out_unlock:
 
 static int adv7180_probe(struct i2c_client *client)
 {
-   const struct i2c_device_id *id = i2c_client_get_device_id(client);
struct device_node *np = client->dev.of_node;
struct adv7180_state *state;
struct v4l2_subdev *sd;
@@ -1411,7 +1410,7 @@ static int adv7180_probe(struct i2c_client *client)
 
state->client = client;
state->field = V4L2_FIELD_ALTERNATE;
-   state->chip_info = (struct adv7180_chip_info *)id->driver_data;
+   state->chip_info = i2c_get_match_data(client);
 
state->pwdn_gpio = devm_gpiod_get_optional(>dev, "powerdown",
   GPIOD_OUT_HIGH);
@@ -1536,22 +1535,6 @@ static void adv7180_remove(struct i2c_client *client)
mutex_destroy(>mutex);
 }
 
-static const struct i2c_device_id adv7180_id[] = {
-   { "adv7180", (kernel_ulong_t)_info },
-   { "adv7180cp", (kernel_ulong_t)_info },
-   { "adv7180st", (kernel_ulong_t)_info },
-   { "adv7182", (kernel_ulong_t)_info },
-   { "adv7280", (kernel_ulong_t)_info },
-   { "adv7280-m", (kernel_ulong_t)_m_info },
-   { "adv7281", (kernel_ulong_t)_info },
-   { "adv7281-m", (kernel_ulong_t)_m_info },
-   { "adv7281-ma", (kernel_ulong_t)_ma_info },
-   { "adv7282", (kernel_ulong_t)_info },
-   { "adv7282-m", (kernel_ulong_t)_m_info },
-   {},
-};
-MODULE_DEVICE_TABLE(i2c, adv7180_id);
-
 #ifdef CONFIG_PM_SLEEP
 static int adv7180_suspend(struct device *dev)
 {
@@ -1585,22 +1568,37 @@ static SIMPLE_DEV_PM_OPS(adv7180_pm_ops, 
adv7180_suspend, adv7180_resume);
 #define ADV7180_PM_OPS NULL
 #endif
 
+static const struct i2c_device_id adv7180_id[] = {
+   { "adv7180", (kernel_ulong_t)_info },
+   { "adv7180cp", (kernel_ulong_t)_info },
+   { "adv7180st", (kernel_ulong_t)_info },
+   { "adv7182", (kernel_ulong_t)_info },
+   { "adv7280", (kernel_ulong_t)_info },
+   { "adv7280-m", (kernel_ulong_t)_m_info },
+   { "adv7281", (kernel_ulong_t)_info },
+   { "adv7281-m", (kernel_ulong_t)_m_info },
+   { "adv7281-ma", (kernel_ulong_t)_ma_info },
+   { "adv7282", (kernel_ulong_t)_info },
+   { "adv7282-m", (kernel_ulong_t)_m_info },
+   {}
+};
+MODULE_DEVICE_TABLE(i2c, adv7180_id);
+
 #ifdef CONFIG_OF
 static const struct of_device_id adv7180_of_id[] = {
-   { .compatible = "adi,adv7180", },
-   { .compatible = "adi,adv7180cp", },
-   { .compatible = "adi,adv7180st", },
-   { .compatible = "adi,adv7182", },
-   { .compatible = "adi,adv7280", },
-   { .compatible = "adi,adv7280-m", },
-   { .compatible = "adi,adv7281", },
-   { .compatible = "adi,adv7281-m", },
-   { .compatible = "adi,adv7281-ma", },
-   { .compatible = "adi,adv7282", },
-   { .compatible = "adi,adv7282-m", },
-   { },
+   { .compatible = "adi,adv7180", _info },
+   { .compatible = "adi,adv7180cp", _info },
+   { .compatible = "adi,adv7180st", _info },
+   { .compatible = "adi,adv7182", _info },
+   { .compatible = "adi,adv7280", _info },
+   { .compatible = "adi,adv7280-m", _m_info },
+   { .compatible = "ad

[git:media_stage/master] media: qcom: camss: Comment CSID dt_id field

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Comment CSID dt_id field
Author:  Bryan O'Donoghue 
Date:Thu Sep 28 01:58:25 2023 +0100

Digging into the documentation we find that the DT_ID bitfield is used to
map the six bit DT to a two bit ID code. This value is concatenated to the
VC bitfield to create a CID value. DT_ID is the two least significant bits
of CID and VC the most significant bits.

Originally we set dt_id = vc * 4 in and then subsequently set dt_id = vc.

commit 3c4ed72a16bc ("media: camss: sm8250: Virtual channels for CSID")
silently fixed the multiplication by four which would give a better
value for the generated CID without mentioning what was being done or why.

Next up I haplessly changed the value back to "dt_id = vc * 4" since there
didn't appear to be any logic behind it.

Hans asked what the change was for and I honestly couldn't remember the
provenance of it, so I dug in.

Link: 
https://lore.kernel.org/linux-arm-msm/edd4bf9b-0e1b-883c-1a4d-50f4102c3...@xs4all.nl/

Add a comment so the next hapless programmer doesn't make this same
mistake.

Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csid-gen2.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c 
b/drivers/media/platform/qcom/camss/camss-csid-gen2.c
index 6ba2b1032644..05ff5fa8095a 100644
--- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c
+++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c
@@ -352,7 +352,19 @@ static void __csid_configure_stream(struct csid_device 
*csid, u8 enable, u8 vc)
phy_sel = csid->phy.csiphy_id;
 
if (enable) {
-   u8 dt_id = vc;
+   /*
+* DT_ID is a two bit bitfield that is concatenated with
+* the four least significant bits of the five bit VC
+* bitfield to generate an internal CID value.
+*
+* CSID_RDI_CFG0(vc)
+* DT_ID : 28:27
+* VC: 26:22
+* DT: 21:16
+*
+* CID   : VC 3:0 << 2 | DT_ID 1:0
+*/
+   u8 dt_id = vc & 0x03;
 
if (tg->enabled) {
/* configure one DT, infinite frames */

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: cedrus: Fix clock/reset sequence

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cedrus: Fix clock/reset sequence
Author:  Jernej Skrabec 
Date:Mon Sep 11 20:46:12 2023 +0200

According to H6 user manual, resets should always be de-asserted before
clocks are enabled. This is also consistent with vendor driver.

Fixes: d5aecd289bab ("media: cedrus: Implement runtime PM")
Signed-off-by: Jernej Skrabec 
Acked-by: Paul Kocialkowski 
Signed-off-by: Hans Verkuil 

 drivers/staging/media/sunxi/cedrus/cedrus_hw.c | 24 
 1 file changed, 12 insertions(+), 12 deletions(-)

---

diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_hw.c 
b/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
index b696bf884cbd..32af0e96e762 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_hw.c
@@ -172,12 +172,12 @@ int cedrus_hw_suspend(struct device *device)
 {
struct cedrus_dev *dev = dev_get_drvdata(device);
 
-   reset_control_assert(dev->rstc);
-
clk_disable_unprepare(dev->ram_clk);
clk_disable_unprepare(dev->mod_clk);
clk_disable_unprepare(dev->ahb_clk);
 
+   reset_control_assert(dev->rstc);
+
return 0;
 }
 
@@ -186,11 +186,18 @@ int cedrus_hw_resume(struct device *device)
struct cedrus_dev *dev = dev_get_drvdata(device);
int ret;
 
+   ret = reset_control_reset(dev->rstc);
+   if (ret) {
+   dev_err(dev->dev, "Failed to apply reset\n");
+
+   return ret;
+   }
+
ret = clk_prepare_enable(dev->ahb_clk);
if (ret) {
dev_err(dev->dev, "Failed to enable AHB clock\n");
 
-   return ret;
+   goto err_rst;
}
 
ret = clk_prepare_enable(dev->mod_clk);
@@ -207,21 +214,14 @@ int cedrus_hw_resume(struct device *device)
goto err_mod_clk;
}
 
-   ret = reset_control_reset(dev->rstc);
-   if (ret) {
-   dev_err(dev->dev, "Failed to apply reset\n");
-
-   goto err_ram_clk;
-   }
-
return 0;
 
-err_ram_clk:
-   clk_disable_unprepare(dev->ram_clk);
 err_mod_clk:
clk_disable_unprepare(dev->mod_clk);
 err_ahb_clk:
clk_disable_unprepare(dev->ahb_clk);
+err_rst:
+   reset_control_assert(dev->rstc);
 
return ret;
 }

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Start to move to module compat matched resources

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Start to move to module compat matched resources
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:53 2023 +0100

There is a lot of unnecessary if/elsing in this code that arguably
should never have made it upstream when adding a second let alone
subsequent SoC.

I'm guilty of not fixing the mess myself when adding in the sm8250.
Before adding in any new SoCs or resources lets take the time to cleanup
the resource passing.

First step is to pass the generic struct camss_resources as a parameter
per the compatible list.

Subsequent patches will address the other somewhat disparate strutures
which we are also doing if/else on and assigning statically.

Squashed down a commit to drop useless NULL assignment for ispif resources.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss.c | 90 ---
 drivers/media/platform/qcom/camss/camss.h |  8 +++
 2 files changed, 54 insertions(+), 44 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index 718ef8e4f593..8fa5dee75672 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -14,6 +14,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1120,47 +1121,13 @@ err_cleanup:
  */
 static int camss_init_subdevices(struct camss *camss)
 {
-   const struct camss_subdev_resources *csiphy_res;
-   const struct camss_subdev_resources *csid_res;
-   const struct camss_subdev_resources *ispif_res;
-   const struct camss_subdev_resources *vfe_res;
+   const struct camss_resources *res = camss->res;
unsigned int i;
int ret;
 
-   if (camss->version == CAMSS_8x16) {
-   csiphy_res = csiphy_res_8x16;
-   csid_res = csid_res_8x16;
-   ispif_res = _res_8x16;
-   vfe_res = vfe_res_8x16;
-   } else if (camss->version == CAMSS_8x96) {
-   csiphy_res = csiphy_res_8x96;
-   csid_res = csid_res_8x96;
-   ispif_res = _res_8x96;
-   vfe_res = vfe_res_8x96;
-   } else if (camss->version == CAMSS_660) {
-   csiphy_res = csiphy_res_660;
-   csid_res = csid_res_660;
-   ispif_res = _res_660;
-   vfe_res = vfe_res_660;
-   }  else if (camss->version == CAMSS_845) {
-   csiphy_res = csiphy_res_845;
-   csid_res = csid_res_845;
-   /* Titan VFEs don't have an ISPIF  */
-   ispif_res = NULL;
-   vfe_res = vfe_res_845;
-   } else if (camss->version == CAMSS_8250) {
-   csiphy_res = csiphy_res_8250;
-   csid_res = csid_res_8250;
-   /* Titan VFEs don't have an ISPIF  */
-   ispif_res = NULL;
-   vfe_res = vfe_res_8250;
-   } else {
-   return -EINVAL;
-   }
-
for (i = 0; i < camss->csiphy_num; i++) {
ret = msm_csiphy_subdev_init(camss, >csiphy[i],
-_res[i], i);
+>csiphy_res[i], i);
if (ret < 0) {
dev_err(camss->dev,
"Failed to init csiphy%d sub-device: %d\n",
@@ -1172,7 +1139,7 @@ static int camss_init_subdevices(struct camss *camss)
/* note: SM8250 requires VFE to be initialized before CSID */
for (i = 0; i < camss->vfe_num + camss->vfe_lite_num; i++) {
ret = msm_vfe_subdev_init(camss, >vfe[i],
- _res[i], i);
+ >vfe_res[i], i);
if (ret < 0) {
dev_err(camss->dev,
"Fail to init vfe%d sub-device: %d\n", i, ret);
@@ -1182,7 +1149,7 @@ static int camss_init_subdevices(struct camss *camss)
 
for (i = 0; i < camss->csid_num; i++) {
ret = msm_csid_subdev_init(camss, >csid[i],
-  _res[i], i);
+  >csid_res[i], i);
if (ret < 0) {
dev_err(camss->dev,
"Failed to init csid%d sub-device: %d\n",
@@ -1191,7 +1158,7 @@ static int camss_init_subdevices(struct camss *camss)
}
}
 
-   ret = msm_ispif_subdev_init(camss, ispif_res);
+   ret = msm_ispif_subdev_init(camss, res->ispif_res);
if (ret < 0) {
dev_err(camss->dev, "Failed to init ispif sub-device: %d\n",
ret);
@@ -1568,6 +1535,8 @@ s

[git:media_stage/master] media: qcom: camss: Pass line_num from compat resources

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Pass line_num from compat resources
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:56 2023 +0100

line_num indicates the number of RDI - raw data interface channels which
are associated with a given IFE/VFE - image/video front end.

On several SoCs the RDI number is not static for each VFE - for example
on sm8250 VFE Lite has four RDIs where regular VFE has three.

Assigning line_num statically in the subdev_init() phase initialises
each VFE to the lower number, meaning in practical terms that we are
lobbing off one RDI on some VFEs.

Interrupt handling uses static for (i = RDI0; i < RDI2; i++) {} in some
of our VFE blocks but this can't work for situations where we have a
mixture of VFE @ 3 RDI and VFE-lite @ 4 RDI blocks.

First step to remediate is to pass line_num from a compat string
controlled data-structure and do so on a per-VFE basis.

Later patches will assign the correct number of RDI blocks per VFE.

Signed-off-by: Bryan O'Donoghue 
Reviewed-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe-170.c |  2 --
 drivers/media/platform/qcom/camss/camss-vfe-4-1.c |  2 --
 drivers/media/platform/qcom/camss/camss-vfe-4-7.c |  2 --
 drivers/media/platform/qcom/camss/camss-vfe-4-8.c |  2 --
 drivers/media/platform/qcom/camss/camss-vfe-480.c |  1 -
 drivers/media/platform/qcom/camss/camss-vfe.c |  5 
 drivers/media/platform/qcom/camss/camss.c | 36 +++
 drivers/media/platform/qcom/camss/camss.h |  1 +
 8 files changed, 30 insertions(+), 21 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c 
b/drivers/media/platform/qcom/camss/camss-vfe-170.c
index 82d2392022dd..2ba7160b3bd1 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-170.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c
@@ -753,8 +753,6 @@ static void vfe_subdev_init(struct device *dev, struct 
vfe_device *vfe)
 {
vfe->isr_ops = vfe_isr_ops_170;
vfe->video_ops = vfe_video_ops_170;
-
-   vfe->line_num = VFE_LINE_NUM_GEN2;
 }
 
 const struct vfe_hw_ops vfe_ops_170 = {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c 
b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
index bc309f326f51..2911e4126e7a 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
@@ -992,8 +992,6 @@ static void vfe_subdev_init(struct device *dev, struct 
vfe_device *vfe)
vfe->isr_ops = vfe_isr_ops_gen1;
vfe->ops_gen1 = _ops_gen1_4_1;
vfe->video_ops = vfe_video_ops_gen1;
-
-   vfe->line_num = VFE_LINE_NUM_GEN1;
 }
 
 const struct vfe_hw_ops vfe_ops_4_1 = {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c 
b/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
index 8acd76c9746b..b65ed0fef595 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
@@ -1188,8 +1188,6 @@ static void vfe_subdev_init(struct device *dev, struct 
vfe_device *vfe)
vfe->isr_ops = vfe_isr_ops_gen1;
vfe->ops_gen1 = _ops_gen1_4_7;
vfe->video_ops = vfe_video_ops_gen1;
-
-   vfe->line_num = VFE_LINE_NUM_GEN1;
 }
 
 const struct vfe_hw_ops vfe_ops_4_7 = {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c 
b/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
index 3a0167ecf873..7b3805177f03 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
@@ -1173,8 +1173,6 @@ static void vfe_subdev_init(struct device *dev, struct 
vfe_device *vfe)
vfe->isr_ops = vfe_isr_ops_gen1;
vfe->ops_gen1 = _ops_gen1_4_8;
vfe->video_ops = vfe_video_ops_gen1;
-
-   vfe->line_num = VFE_LINE_NUM_GEN1;
 }
 
 const struct vfe_hw_ops vfe_ops_4_8 = {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c 
b/drivers/media/platform/qcom/camss/camss-vfe-480.c
index 074fa4e38163..43a2964121f2 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-480.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c
@@ -569,7 +569,6 @@ static const struct camss_video_ops vfe_video_ops_480 = {
 static void vfe_subdev_init(struct device *dev, struct vfe_device *vfe)
 {
vfe->video_ops = vfe_video_ops_480;
-   vfe->line_num = MAX_VFE_OUTPUT_LINES;
 }
 
 const struct vfe_hw_ops vfe_ops_480 = {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index 94ee7c7039eb..f381c82f1f87 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -1305,6 +1305,11 @@ int msm_vfe_subdev_init(struct camss *camss, struct 
vfe_device *vfe,
default:

[git:media_stage/master] media: qcom: camss: Pass remainder of variables as resources

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Pass remainder of variables as resources
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:55 2023 +0100

The following variables are being assigned statically based on
compatible strings in the probe path.

* enum camss_version version;
* unsigned int csiphy_num;
* unsigned int csid_num;
* unsigned int vfe_num;
* unsigned int vfe_lite_num;
* unsigned int vfe_total_num;

Migrate those variables to resource parameters passed in on platform
probe arguments. The one caveat is for VFE it has been necessary to
intoduce a new variable vfe_total_num to capture the aggregate value of
vfe_num + vfe_lite_num.

All the rest of the changes are rote camss->variable to
camss->res->variable with the parameter tables now populating the listed
variables.

Signed-off-by: Bryan O'Donoghue 
Acked-by: Konrad Dybcio 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csid.c |  14 +--
 .../platform/qcom/camss/camss-csiphy-3ph-1-0.c |   8 +-
 drivers/media/platform/qcom/camss/camss-csiphy.c   |  16 +--
 drivers/media/platform/qcom/camss/camss-ispif.c|  28 ++---
 drivers/media/platform/qcom/camss/camss-vfe-170.c  |   4 +-
 drivers/media/platform/qcom/camss/camss-vfe-480.c  |   4 +-
 drivers/media/platform/qcom/camss/camss-vfe.c  |  26 ++---
 drivers/media/platform/qcom/camss/camss-video.c|  10 +-
 drivers/media/platform/qcom/camss/camss.c  | 115 ++---
 drivers/media/platform/qcom/camss/camss.h  |  11 +-
 10 files changed, 113 insertions(+), 123 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c 
b/drivers/media/platform/qcom/camss/camss-csid.c
index b1113decdb30..14abb7a7ceb4 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -159,7 +159,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on)
struct camss *camss = csid->camss;
struct device *dev = camss->dev;
struct vfe_device *vfe = >vfe[csid->id];
-   u32 version = camss->version;
+   u32 version = camss->res->version;
int ret = 0;
 
if (on) {
@@ -576,13 +576,13 @@ int msm_csid_subdev_init(struct camss *camss, struct 
csid_device *csid,
csid->camss = camss;
csid->id = id;
 
-   if (camss->version == CAMSS_8x16) {
+   if (camss->res->version == CAMSS_8x16) {
csid->ops = _ops_4_1;
-   } else if (camss->version == CAMSS_8x96 ||
-  camss->version == CAMSS_660) {
+   } else if (camss->res->version == CAMSS_8x96 ||
+  camss->res->version == CAMSS_660) {
csid->ops = _ops_4_7;
-   } else if (camss->version == CAMSS_845 ||
-  camss->version == CAMSS_8250) {
+   } else if (camss->res->version == CAMSS_845 ||
+  camss->res->version == CAMSS_8250) {
csid->ops = _ops_gen2;
} else {
return -EINVAL;
@@ -591,7 +591,7 @@ int msm_csid_subdev_init(struct camss *camss, struct 
csid_device *csid,
 
/* Memory */
 
-   if (camss->version == CAMSS_8250) {
+   if (camss->res->version == CAMSS_8250) {
/* for titan 480, CSID registers are inside the VFE region,
 * between the VFE "top" and "bus" registers. this requires
 * VFE to be initialized before CSID
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c 
b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
index 4dba61b8d3f2..f50e2235c37f 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c
@@ -402,7 +402,7 @@ static void csiphy_gen1_config_lanes(struct csiphy_device 
*csiphy,
val = CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG;
writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG1(l));
 
-   if (csiphy->camss->version == CAMSS_660)
+   if (csiphy->camss->res->version == CAMSS_660)
val = CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS_660;
else
val = CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS;
@@ -419,7 +419,7 @@ static void csiphy_gen2_config_lanes(struct csiphy_device 
*csiphy,
int i, l, array_size;
u32 val;
 
-   switch (csiphy->camss->version) {
+   switch (csiphy->camss->res->version) {
case CAMSS_845:
r = _regs_sdm845[0][0];
array_size = ARRAY_SIZE(lane_regs_sdm845[0]);
@@ -468,8 +468,8 @@ static void csiphy_lanes_enable(struct csiphy_device 
*csiphy,
s64 link_freq, u8 lane_mask)
 {
struct csiphy_lanes_cfg *c = >csi2->lane_cfg;
-   bool is_gen

[git:media_stage/master] media: cobalt: Use FIELD_GET() to extract Link Width

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: cobalt: Use FIELD_GET() to extract Link Width
Author:  Ilpo Järvinen 
Date:Wed Sep 13 15:27:40 2023 +0300

Use FIELD_GET() to extract PCIe Negotiated and Maximum Link Width fields
instead of custom masking and shifting.

Signed-off-by: Ilpo Järvinen 
Reviewed-by: Jonathan Cameron 
Signed-off-by: Hans Verkuil 

 drivers/media/pci/cobalt/cobalt-driver.c | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/pci/cobalt/cobalt-driver.c 
b/drivers/media/pci/cobalt/cobalt-driver.c
index 74edcc76d12f..6e1a0614e6d0 100644
--- a/drivers/media/pci/cobalt/cobalt-driver.c
+++ b/drivers/media/pci/cobalt/cobalt-driver.c
@@ -8,6 +8,7 @@
  *  All rights reserved.
  */
 
+#include 
 #include 
 #include 
 #include 
@@ -210,17 +211,17 @@ void cobalt_pcie_status_show(struct cobalt *cobalt)
pcie_capability_read_word(pci_dev, PCI_EXP_LNKSTA, );
cobalt_info("PCIe link capability 0x%08x: %s per lane and %u lanes\n",
capa, get_link_speed(capa),
-   (capa & PCI_EXP_LNKCAP_MLW) >> 4);
+   FIELD_GET(PCI_EXP_LNKCAP_MLW, capa));
cobalt_info("PCIe link control 0x%04x\n", ctrl);
cobalt_info("PCIe link status 0x%04x: %s per lane and %u lanes\n",
stat, get_link_speed(stat),
-   (stat & PCI_EXP_LNKSTA_NLW) >> 4);
+   FIELD_GET(PCI_EXP_LNKSTA_NLW, stat));
 
/* Bus */
pcie_capability_read_dword(pci_bus_dev, PCI_EXP_LNKCAP, );
cobalt_info("PCIe bus link capability 0x%08x: %s per lane and %u 
lanes\n",
capa, get_link_speed(capa),
-   (capa & PCI_EXP_LNKCAP_MLW) >> 4);
+   FIELD_GET(PCI_EXP_LNKCAP_MLW, capa));
 
/* Slot */
pcie_capability_read_dword(pci_dev, PCI_EXP_SLTCAP, );
@@ -239,7 +240,7 @@ static unsigned pcie_link_get_lanes(struct cobalt *cobalt)
if (!pci_is_pcie(pci_dev))
return 0;
pcie_capability_read_word(pci_dev, PCI_EXP_LNKSTA, );
-   return (link & PCI_EXP_LNKSTA_NLW) >> 4;
+   return FIELD_GET(PCI_EXP_LNKSTA_NLW, link);
 }
 
 static unsigned pcie_bus_link_get_lanes(struct cobalt *cobalt)
@@ -250,7 +251,7 @@ static unsigned pcie_bus_link_get_lanes(struct cobalt 
*cobalt)
if (!pci_is_pcie(pci_dev))
return 0;
pcie_capability_read_dword(pci_dev, PCI_EXP_LNKCAP, );
-   return (link & PCI_EXP_LNKCAP_MLW) >> 4;
+   return FIELD_GET(PCI_EXP_LNKCAP_MLW, link);
 }
 
 static void msi_config_show(struct cobalt *cobalt, struct pci_dev *pci_dev)

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: v4l2-event: Annotate struct v4l2_subscribed_event with __counted_by

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: v4l2-event: Annotate struct v4l2_subscribed_event with 
__counted_by
Author:  Kees Cook 
Date:Fri Sep 22 10:49:52 2023 -0700

Prepare for the coming implementation by GCC and Clang of the __counted_by
attribute. Flexible array members annotated with __counted_by can have
their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS
(for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family
functions).

As found with Coccinelle[1], add __counted_by for
struct v4l2_subscribed_event.
Additionally, since the element count member must be set before accessing
the annotated flexible array member, move its initialization earlier.

[1] 
https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci

Cc: lijian 
Signed-off-by: Kees Cook 
Reviewed-by: Gustavo A. R. Silva 
Signed-off-by: Hans Verkuil 

 drivers/media/v4l2-core/v4l2-event.c | 2 +-
 include/media/v4l2-event.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/v4l2-core/v4l2-event.c 
b/drivers/media/v4l2-core/v4l2-event.c
index c5ce9f11ad7b..3898ff7edddb 100644
--- a/drivers/media/v4l2-core/v4l2-event.c
+++ b/drivers/media/v4l2-core/v4l2-event.c
@@ -238,6 +238,7 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
if (!sev)
return -ENOMEM;
+   sev->elems = elems;
for (i = 0; i < elems; i++)
sev->events[i].sev = sev;
sev->type = sub->type;
@@ -245,7 +246,6 @@ int v4l2_event_subscribe(struct v4l2_fh *fh,
sev->flags = sub->flags;
sev->fh = fh;
sev->ops = ops;
-   sev->elems = elems;
 
mutex_lock(>subscribe_lock);
 
diff --git a/include/media/v4l2-event.h b/include/media/v4l2-event.h
index 4ffa914ade3a..3a0e2588361c 100644
--- a/include/media/v4l2-event.h
+++ b/include/media/v4l2-event.h
@@ -78,7 +78,7 @@ struct v4l2_subscribed_event {
unsigned intelems;
unsigned intfirst;
unsigned intin_use;
-   struct v4l2_kevent  events[];
+   struct v4l2_kevent  events[] __counted_by(elems);
 };
 
 /**

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: platform: cros-ec: Rename conns array for the match table

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: platform: cros-ec: Rename conns array for the match table
Author:  Ken Lin 
Date:Thu Oct 5 09:38:40 2023 +0800

Rename conns array to port_**_conns, ** is the ports which support cec.
ex: dibbi_conns support Port D and B will be renamed to port_db_conns.
Make it much cleaner and readable.

Signed-off-by: Ken Lin 
Signed-off-by: Hans Verkuil 

 drivers/media/cec/platform/cros-ec/cros-ec-cec.c | 30 
 1 file changed, 15 insertions(+), 15 deletions(-)

---

diff --git a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c 
b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
index 920aed0d1929..dbee25b138ff 100644
--- a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
+++ b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c
@@ -294,34 +294,34 @@ struct cec_dmi_match {
const char *const *conns;
 };
 
-static const char *const fizz_conns[] = { "Port B", NULL };
-static const char *const dibbi_conns[] = { "Port D", "Port B", NULL };
-static const char *const constitution_conns[] = { "Port B", "Port A", NULL };
-static const char *const boxy_conns[] = { "Port D", NULL };
+static const char *const port_b_conns[] = { "Port B", NULL };
+static const char *const port_db_conns[] = { "Port D", "Port B", NULL };
+static const char *const port_ba_conns[] = { "Port B", "Port A", NULL };
+static const char *const port_d_conns[] = { "Port D", NULL };
 
 static const struct cec_dmi_match cec_dmi_match_table[] = {
/* Google Fizz */
-   { "Google", "Fizz", ":00:02.0", fizz_conns },
+   { "Google", "Fizz", ":00:02.0", port_b_conns },
/* Google Brask */
-   { "Google", "Brask", ":00:02.0", fizz_conns },
+   { "Google", "Brask", ":00:02.0", port_b_conns },
/* Google Moli */
-   { "Google", "Moli", ":00:02.0", fizz_conns },
+   { "Google", "Moli", ":00:02.0", port_b_conns },
/* Google Kinox */
-   { "Google", "Kinox", ":00:02.0", fizz_conns },
+   { "Google", "Kinox", ":00:02.0", port_b_conns },
/* Google Kuldax */
-   { "Google", "Kuldax", ":00:02.0", fizz_conns },
+   { "Google", "Kuldax", ":00:02.0", port_b_conns },
/* Google Aurash */
-   { "Google", "Aurash", ":00:02.0", fizz_conns },
+   { "Google", "Aurash", ":00:02.0", port_b_conns },
/* Google Gladios */
-   { "Google", "Gladios", ":00:02.0", fizz_conns },
+   { "Google", "Gladios", ":00:02.0", port_b_conns },
/* Google Lisbon */
-   { "Google", "Lisbon", ":00:02.0", fizz_conns },
+   { "Google", "Lisbon", ":00:02.0", port_b_conns },
/* Google Dibbi */
-   { "Google", "Dibbi", ":00:02.0", dibbi_conns },
+   { "Google", "Dibbi", ":00:02.0", port_db_conns },
/* Google Constitution */
-   { "Google", "Constitution", ":00:02.0", constitution_conns },
+   { "Google", "Constitution", ":00:02.0", port_ba_conns },
/* Google Boxy */
-   { "Google", "Boxy", ":00:02.0", boxy_conns },
+   { "Google", "Boxy", ":00:02.0", port_d_conns },
 };
 
 static struct device *cros_ec_cec_find_hdmi_dev(struct device *dev,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: platform: mtk-mdp3: add missing of_node_put

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: platform: mtk-mdp3: add missing of_node_put
Author:  Julia Lawall 
Date:Thu Sep 7 11:55:21 2023 +0200

for_each_child_of_node performs an of_node_get on each
iteration, so a break out of the loop requires an
of_node_put.

This was done using the Coccinelle semantic patch
iterators/for_each_child.cocci

Signed-off-by: Julia Lawall 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 1 +
 1 file changed, 1 insertion(+)

---

diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c 
b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
index 667933ea15f4..575c8d52acd1 100644
--- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
+++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c
@@ -1137,6 +1137,7 @@ int mdp_comp_config(struct mdp_dev *mdp)
comp = mdp_comp_create(mdp, node, id);
if (IS_ERR(comp)) {
ret = PTR_ERR(comp);
+   of_node_put(node);
goto err_init_comps;
}
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: Documentation: dv-timings.rst: explain basic approach

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: Documentation: dv-timings.rst: explain basic approach
Author:  Hans Verkuil 
Date:Thu Sep 7 10:54:31 2023 +0200

Explain how the DV Timings API and the V4L2_EVENT_SOURCE_CHANGE
event work together to handle video source changes.

Signed-off-by: Hans Verkuil 

 .../userspace-api/media/v4l/dv-timings.rst  | 21 +
 1 file changed, 21 insertions(+)

---

diff --git a/Documentation/userspace-api/media/v4l/dv-timings.rst 
b/Documentation/userspace-api/media/v4l/dv-timings.rst
index e17f056b129f..4b19bcb4bd80 100644
--- a/Documentation/userspace-api/media/v4l/dv-timings.rst
+++ b/Documentation/userspace-api/media/v4l/dv-timings.rst
@@ -33,6 +33,27 @@ current DV timings they use the
 the DV timings as seen by the video receiver applications use the
 :ref:`VIDIOC_QUERY_DV_TIMINGS` ioctl.
 
+When the hardware detects a video source change (e.g. the video
+signal appears or disappears, or the video resolution changes), then
+it will issue a `V4L2_EVENT_SOURCE_CHANGE` event. Use the
+:ref:`ioctl VIDIOC_SUBSCRIBE_EVENT ` and the
+:ref:`VIDIOC_DQEVENT` to check if this event was reported.
+
+If the video signal changed, then the application has to stop
+streaming, free all buffers, and call the :ref:`VIDIOC_QUERY_DV_TIMINGS`
+to obtain the new video timings, and if they are valid, it can set
+those by calling the :ref:`ioctl VIDIOC_S_DV_TIMINGS `.
+This will also update the format, so use the :ref:`ioctl VIDIOC_G_FMT 
`
+to obtain the new format. Now the application can allocate new buffers
+and start streaming again.
+
+The :ref:`VIDIOC_QUERY_DV_TIMINGS` will just report what the
+hardware detects, it will never change the configuration. If the
+currently set timings and the actually detected timings differ, then
+typically this will mean that you will not be able to capture any
+video. The correct approach is to rely on the `V4L2_EVENT_SOURCE_CHANGE`
+event so you know when something changed.
+
 Applications can make use of the :ref:`input-capabilities` and
 :ref:`output-capabilities` flags to determine whether the digital
 video ioctls can be used with the given input or output.

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ov9282: Assign maintenance to Dave

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ov9282: Assign maintenance to Dave
Author:  Sakari Ailus 
Date:Tue Sep 19 14:04:47 2023 +0300

The current maintainers won't be looking after this driver anymore. Dave
offered to take over the driver, assign maintenance to him.

Signed-off-by: Sakari Ailus 
Acked-by: Dave Stevenson 
Signed-off-by: Hans Verkuil 

 MAINTAINERS | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

---

diff --git a/MAINTAINERS b/MAINTAINERS
index bba09f9d0141..bcbc7c2b9c3f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -15881,8 +15881,7 @@ F:  
Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml
 F: drivers/media/i2c/ov8858.c
 
 OMNIVISION OV9282 SENSOR DRIVER
-M: Paul J. Murphy 
-M: Daniele Alessandrelli 
+M: Dave Stevenson 
 L: linux-me...@vger.kernel.org
 S: Maintained
 T: git git://linuxtv.org/media_tree.git

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: nuvoton: npcm-video: Fix IS_ERR() vs NULL bug

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: nuvoton: npcm-video: Fix IS_ERR() vs NULL bug
Author:  Dan Carpenter 
Date:Wed Sep 27 15:39:43 2023 +0300

The of_parse_phandle() function returns NULL on error.  It never returns
error pointers.  Update the check accordingly.

Fixes: 70721089985c ("media: nuvoton: Add driver for NPCM video capture and 
encoding engine")
Signed-off-by: Dan Carpenter 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/nuvoton/npcm-video.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/nuvoton/npcm-video.c 
b/drivers/media/platform/nuvoton/npcm-video.c
index ac8d73b794d3..b9e6782f59b4 100644
--- a/drivers/media/platform/nuvoton/npcm-video.c
+++ b/drivers/media/platform/nuvoton/npcm-video.c
@@ -1660,9 +1660,9 @@ static int npcm_video_ece_init(struct npcm_video *video)
void __iomem *regs;
 
ece_node = of_parse_phandle(video->dev->of_node, "nuvoton,ece", 0);
-   if (IS_ERR(ece_node)) {
+   if (!ece_node) {
dev_err(dev, "Failed to get ECE phandle in DTS\n");
-   return PTR_ERR(ece_node);
+   return -ENODEV;
}
 
video->ece.enable = of_device_is_available(ece_node);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Pass CAMSS subdev callbacks via resource ops pointer

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Pass CAMSS subdev callbacks via resource ops 
pointer
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:57 2023 +0100

It is possible to pass all of the CAMSS subdevice internal operations
pointers from the controlling resources structure with an additional
pointer added to the resources structure.

This allows for the removal of most of the probe-time control structures.

Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csid.c   |  12 +--
 drivers/media/platform/qcom/camss/camss-csiphy.c |   4 +-
 drivers/media/platform/qcom/camss/camss-vfe.c|  20 +---
 drivers/media/platform/qcom/camss/camss.c| 117 ---
 drivers/media/platform/qcom/camss/camss.h|   1 +
 5 files changed, 86 insertions(+), 68 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c 
b/drivers/media/platform/qcom/camss/camss-csid.c
index 14abb7a7ceb4..99f651e2021c 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -575,18 +575,8 @@ int msm_csid_subdev_init(struct camss *camss, struct 
csid_device *csid,
 
csid->camss = camss;
csid->id = id;
+   csid->ops = res->ops;
 
-   if (camss->res->version == CAMSS_8x16) {
-   csid->ops = _ops_4_1;
-   } else if (camss->res->version == CAMSS_8x96 ||
-  camss->res->version == CAMSS_660) {
-   csid->ops = _ops_4_7;
-   } else if (camss->res->version == CAMSS_845 ||
-  camss->res->version == CAMSS_8250) {
-   csid->ops = _ops_gen2;
-   } else {
-   return -EINVAL;
-   }
csid->ops->subdev_init(csid);
 
/* Memory */
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c 
b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 48e6a101ec9c..4310a132dcbe 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -556,19 +556,17 @@ int msm_csiphy_subdev_init(struct camss *camss,
csiphy->camss = camss;
csiphy->id = id;
csiphy->cfg.combo_mode = 0;
+   csiphy->ops = res->ops;
 
if (camss->res->version == CAMSS_8x16) {
-   csiphy->ops = _ops_2ph_1_0;
csiphy->formats = csiphy_formats_8x16;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_8x16);
} else if (camss->res->version == CAMSS_8x96 ||
   camss->res->version == CAMSS_660) {
-   csiphy->ops = _ops_3ph_1_0;
csiphy->formats = csiphy_formats_8x96;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_8x96);
} else if (camss->res->version == CAMSS_845 ||
   camss->res->version == CAMSS_8250) {
-   csiphy->ops = _ops_3ph_1_0;
csiphy->formats = csiphy_formats_sdm845;
csiphy->nformats = ARRAY_SIZE(csiphy_formats_sdm845);
} else {
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index f381c82f1f87..4d5c32d3dddb 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -1286,25 +1286,7 @@ int msm_vfe_subdev_init(struct camss *camss, struct 
vfe_device *vfe,
int i, j;
int ret;
 
-   switch (camss->res->version) {
-   case CAMSS_8x16:
-   vfe->ops = _ops_4_1;
-   break;
-   case CAMSS_8x96:
-   vfe->ops = _ops_4_7;
-   break;
-   case CAMSS_660:
-   vfe->ops = _ops_4_8;
-   break;
-   case CAMSS_845:
-   vfe->ops = _ops_170;
-   break;
-   case CAMSS_8250:
-   vfe->ops = _ops_480;
-   break;
-   default:
-   return -EINVAL;
-   }
+   vfe->ops = res->ops;
 
if (!res->line_num)
return -EINVAL;
diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index 54886a2a449b..12131d9ea7ca 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -42,7 +42,8 @@ static const struct camss_subdev_resources csiphy_res_8x16[] 
= {
{ 0 },
{ 1, 2 } },
.reg = { "csiphy0", "csiphy0_clk_mux" },
-   .interrupt = { "csiphy0" }
+   .interrupt = { "csiphy0" },
+   .ops = _ops_2ph_1_0
},
 
/* CSIPHY1 */
@@ -54,7 +55,8 @@ static const struc

[git:media_stage/master] media: qcom: camss: Fix support for setting CSIPHY clock name csiphyX

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Fix support for setting CSIPHY clock name csiphyX
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:03 2023 +0100

Several of our upstream and soon-to-be upstream SoC CAMSS dtsi declare
csiphyX as opposed to the older clock name csiX_phy.

Right now the CAMSS code will fail to set the csiphyX clock even if we have
declared it in our list of clocks. For sdm845 and sm8250 we appear to "get
away" with this error, however on sc8280xp we don't.

The right approach here is to set the clock when it is declared. If a SoC
doesn't require or a SoC driver implementer doesn't think we need, then the
clock ought to simply be omitted from the clock list.

Include csiphyX in the set of permissible strings which will subsequently
lead to the csiphyX clock being set during csiphy_set_clock_rates() phase.

sdm845 and sm8250 will work with the code as-is so I've omitted this from a
suggested Fixes list.

Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csiphy.c | 4 
 1 file changed, 4 insertions(+)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c 
b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 20bb361e9ad0..edd573606a6a 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -677,6 +677,10 @@ int msm_csiphy_subdev_init(struct camss *camss,
if (csiphy->rate_set[i])
break;
}
+
+   csiphy->rate_set[i] = 
csiphy_match_clock_name(clock->name, "csiphy%d", k);
+   if (csiphy->rate_set[i])
+   break;
}
}
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: amphion: handle firmware debug message

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: amphion: handle firmware debug message
Author:  Ming Qian 
Date:Thu Sep 7 09:51:00 2023 +0800

decoder firmware may notify host some debug message,
it can help analyze the state of the firmware in case of error

Fixes: 9f599f351e86 ("media: amphion: add vpu core driver")
Signed-off-by: Ming Qian 
Reviewed-by: Nicolas Dufresne 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/amphion/vpu_defs.h|  1 +
 drivers/media/platform/amphion/vpu_helpers.c |  1 +
 drivers/media/platform/amphion/vpu_malone.c  |  1 +
 drivers/media/platform/amphion/vpu_msgs.c| 31 +++-
 4 files changed, 29 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/platform/amphion/vpu_defs.h 
b/drivers/media/platform/amphion/vpu_defs.h
index 667637eedb5d..7320852668d6 100644
--- a/drivers/media/platform/amphion/vpu_defs.h
+++ b/drivers/media/platform/amphion/vpu_defs.h
@@ -71,6 +71,7 @@ enum {
VPU_MSG_ID_TIMESTAMP_INFO,
VPU_MSG_ID_FIRMWARE_XCPT,
VPU_MSG_ID_PIC_SKIPPED,
+   VPU_MSG_ID_DBG_MSG,
 };
 
 enum VPU_ENC_MEMORY_RESOURSE {
diff --git a/drivers/media/platform/amphion/vpu_helpers.c 
b/drivers/media/platform/amphion/vpu_helpers.c
index af3b336e5dc3..d12310af9ebc 100644
--- a/drivers/media/platform/amphion/vpu_helpers.c
+++ b/drivers/media/platform/amphion/vpu_helpers.c
@@ -489,6 +489,7 @@ const char *vpu_id_name(u32 id)
case VPU_MSG_ID_UNSUPPORTED: return "unsupported";
case VPU_MSG_ID_FIRMWARE_XCPT: return "exception";
case VPU_MSG_ID_PIC_SKIPPED: return "skipped";
+   case VPU_MSG_ID_DBG_MSG: return "debug msg";
}
return "";
 }
diff --git a/drivers/media/platform/amphion/vpu_malone.c 
b/drivers/media/platform/amphion/vpu_malone.c
index f771661980c0..d3425de7bccd 100644
--- a/drivers/media/platform/amphion/vpu_malone.c
+++ b/drivers/media/platform/amphion/vpu_malone.c
@@ -745,6 +745,7 @@ static struct vpu_pair malone_msgs[] = {
{VPU_MSG_ID_UNSUPPORTED, VID_API_EVENT_UNSUPPORTED_STREAM},
{VPU_MSG_ID_FIRMWARE_XCPT, VID_API_EVENT_FIRMWARE_XCPT},
{VPU_MSG_ID_PIC_SKIPPED, VID_API_EVENT_PIC_SKIPPED},
+   {VPU_MSG_ID_DBG_MSG, VID_API_EVENT_DBG_MSG_DEC},
 };
 
 static void vpu_malone_pack_fs_alloc(struct vpu_rpc_event *pkt,
diff --git a/drivers/media/platform/amphion/vpu_msgs.c 
b/drivers/media/platform/amphion/vpu_msgs.c
index d0ead051f7d1..b74a407a19f2 100644
--- a/drivers/media/platform/amphion/vpu_msgs.c
+++ b/drivers/media/platform/amphion/vpu_msgs.c
@@ -23,6 +23,7 @@
 struct vpu_msg_handler {
u32 id;
void (*done)(struct vpu_inst *inst, struct vpu_rpc_event *pkt);
+   u32 is_str;
 };
 
 static void vpu_session_handle_start_done(struct vpu_inst *inst, struct 
vpu_rpc_event *pkt)
@@ -154,7 +155,7 @@ static void vpu_session_handle_error(struct vpu_inst *inst, 
struct vpu_rpc_event
 {
char *str = (char *)pkt->data;
 
-   if (strlen(str))
+   if (*str)
dev_err(inst->dev, "instance %d firmware error : %s\n", 
inst->id, str);
else
dev_err(inst->dev, "instance %d is unsupported stream\n", 
inst->id);
@@ -180,6 +181,21 @@ static void vpu_session_handle_pic_skipped(struct vpu_inst 
*inst, struct vpu_rpc
vpu_inst_unlock(inst);
 }
 
+static void vpu_session_handle_dbg_msg(struct vpu_inst *inst, struct 
vpu_rpc_event *pkt)
+{
+   char *str = (char *)pkt->data;
+
+   if (*str)
+   dev_info(inst->dev, "instance %d firmware dbg msg : %s\n", 
inst->id, str);
+}
+
+static void vpu_terminate_string_msg(struct vpu_rpc_event *pkt)
+{
+   if (pkt->hdr.num == ARRAY_SIZE(pkt->data))
+   pkt->hdr.num--;
+   pkt->data[pkt->hdr.num] = 0;
+}
+
 static struct vpu_msg_handler handlers[] = {
{VPU_MSG_ID_START_DONE, vpu_session_handle_start_done},
{VPU_MSG_ID_STOP_DONE, vpu_session_handle_stop_done},
@@ -193,9 +209,10 @@ static struct vpu_msg_handler handlers[] = {
{VPU_MSG_ID_PIC_DECODED, vpu_session_handle_pic_decoded},
{VPU_MSG_ID_DEC_DONE, vpu_session_handle_pic_done},
{VPU_MSG_ID_PIC_EOS, vpu_session_handle_eos},
-   {VPU_MSG_ID_UNSUPPORTED, vpu_session_handle_error},
-   {VPU_MSG_ID_FIRMWARE_XCPT, vpu_session_handle_firmware_xcpt},
+   {VPU_MSG_ID_UNSUPPORTED, vpu_session_handle_error, true},
+   {VPU_MSG_ID_FIRMWARE_XCPT, vpu_session_handle_firmware_xcpt, true},
{VPU_MSG_ID_PIC_SKIPPED, vpu_session_handle_pic_skipped},
+   {VPU_MSG_ID_DBG_MSG, vpu_session_handle_dbg_msg, true},
 };
 
 static int vpu_session_handle_msg(struct vpu_inst *inst, struct vpu_rpc_event 
*msg)
@@ -219,8 +236,12 @@ static int vpu_session_handle_msg(struct vpu_inst *inst, 
struct vpu_rpc_event *m

[git:media_stage/master] media: Documentation: Added Digiteq Automotive MGB4 driver documentation

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: Documentation: Added Digiteq Automotive MGB4 driver 
documentation
Author:  Martin Tůma 
Date:Mon Sep 25 16:36:05 2023 +0200

The "admin-guide" documentation for the Digiteq Automotive MGB4 driver.

Signed-off-by: Martin Tůma 
Signed-off-by: Hans Verkuil 

 Documentation/admin-guide/media/mgb4.rst | 374 +++
 Documentation/admin-guide/media/pci-cardlist.rst |   1 +
 Documentation/admin-guide/media/v4l-drivers.rst  |   1 +
 3 files changed, 376 insertions(+)

---

diff --git a/Documentation/admin-guide/media/mgb4.rst 
b/Documentation/admin-guide/media/mgb4.rst
new file mode 100644
index ..2977f74d7e26
--- /dev/null
+++ b/Documentation/admin-guide/media/mgb4.rst
@@ -0,0 +1,374 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+
+mgb4 sysfs interface
+
+
+The mgb4 driver provides a sysfs interface, that is used to configure video
+stream related parameters (some of them must be set properly before the v4l2
+device can be opened) and obtain the video device/stream status.
+
+There are two types of parameters - global / PCI card related, found under
+``/sys/class/video4linux/videoX/device`` and module specific found under
+``/sys/class/video4linux/videoX``.
+
+
+Global (PCI card) parameters
+
+
+**module_type** (R):
+Module type.
+
+| 0 - No module present
+| 1 - FPDL3
+| 2 - GMSL
+
+**module_version** (R):
+Module version number. Zero in case of a missing module.
+
+**fw_type** (R):
+Firmware type.
+
+| 1 - FPDL3
+| 2 - GMSL
+
+**fw_version** (R):
+Firmware version number.
+
+**serial_number** (R):
+Card serial number. The format is::
+
+PRODUCT-REVISION-SERIES-SERIAL
+
+where each component is a 8b number.
+
+
+Common FPDL3/GMSL input parameters
+==
+
+**input_id** (R):
+Input number ID, zero based.
+
+**oldi_lane_width** (RW):
+Number of deserializer output lanes.
+
+| 0 - single
+| 1 - dual (default)
+
+**color_mapping** (RW):
+Mapping of the incoming bits in the signal to the colour bits of the 
pixels.
+
+| 0 - OLDI/JEIDA
+| 1 - SPWG/VESA (default)
+
+**link_status** (R):
+Video link status. If the link is locked, chips are properly connected and
+communicating at the same speed and protocol. The link can be locked 
without
+an active video stream.
+
+A value of 0 is equivalent to the V4L2_IN_ST_NO_SYNC flag of the V4L2
+VIDIOC_ENUMINPUT status bits.
+
+| 0 - unlocked
+| 1 - locked
+
+**stream_status** (R):
+Video stream status. A stream is detected if the link is locked, the input
+pixel clock is running and the DE signal is moving.
+
+A value of 0 is equivalent to the V4L2_IN_ST_NO_SIGNAL flag of the V4L2
+VIDIOC_ENUMINPUT status bits.
+
+| 0 - not detected
+| 1 - detected
+
+**video_width** (R):
+Video stream width. This is the actual width as detected by the HW.
+
+The value is identical to what VIDIOC_QUERY_DV_TIMINGS returns in the width
+field of the v4l2_bt_timings struct.
+
+**video_height** (R):
+Video stream height. This is the actual height as detected by the HW.
+
+The value is identical to what VIDIOC_QUERY_DV_TIMINGS returns in the 
height
+field of the v4l2_bt_timings struct.
+
+**vsync_status** (R):
+The type of VSYNC pulses as detected by the video format detector.
+
+The value is equivalent to the flags returned by VIDIOC_QUERY_DV_TIMINGS in
+the polarities field of the v4l2_bt_timings struct.
+
+| 0 - active low
+| 1 - active high
+| 2 - not available
+
+**hsync_status** (R):
+The type of HSYNC pulses as detected by the video format detector.
+
+The value is equivalent to the flags returned by VIDIOC_QUERY_DV_TIMINGS in
+the polarities field of the v4l2_bt_timings struct.
+
+| 0 - active low
+| 1 - active high
+| 2 - not available
+
+**vsync_gap_length** (RW):
+If the incoming video signal does not contain synchronization VSYNC and
+HSYNC pulses, these must be generated internally in the FPGA to achieve
+the correct frame ordering. This value indicates, how many "empty" pixels
+(pixels with deasserted Data Enable signal) are necessary to generate the
+internal VSYNC pulse.
+
+**hsync_gap_length** (RW):
+If the incoming video signal does not contain synchronization VSYNC and
+HSYNC pulses, these must be generated internally in the FPGA to achieve
+the correct frame ordering. This value indicates, how many "empty" pixels
+(pixels with deasserted Data Enable signal) are necessary to generate the
+internal HSYNC pulse. The value must be greater than 1 and smaller than
+vsync_gap_length.
+
+**pclk_frequency** (R):
+Input pixel clock frequency in kHz.
+
+

[git:media_stage/master] media: imx412: Orphan the driver

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: imx412: Orphan the driver
Author:  Sakari Ailus 
Date:Tue Sep 19 14:06:06 2023 +0300

The current maintainers won't be looking after this driver anymore. Mark
it orphan.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 MAINTAINERS | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

---

diff --git a/MAINTAINERS b/MAINTAINERS
index bcbc7c2b9c3f..a9d4f734702b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20045,10 +20045,8 @@ T: git git://linuxtv.org/media_tree.git
 F: drivers/media/i2c/imx355.c
 
 SONY IMX412 SENSOR DRIVER
-M: Paul J. Murphy 
-M: Daniele Alessandrelli 
 L: linux-me...@vger.kernel.org
-S: Maintained
+S: Orphan
 T: git git://linuxtv.org/media_tree.git
 F: Documentation/devicetree/bindings/media/i2c/sony,imx412.yaml
 F: drivers/media/i2c/imx412.c

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: s5p-mfc: Fix potential deadlock on condlock

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: s5p-mfc: Fix potential deadlock on condlock
Author:  Chengfeng Ye 
Date:Tue Sep 26 10:53:30 2023 +

As >condlock is acquired under irq context along the following
call chain from s5p_mfc_irq(), other acquisition of the same lock
inside process context or softirq context should disable irq avoid double
lock. enc_post_frame_start() seems to be one such function that execute
under process context or softirq context.



enc_post_frame_start()
--> clear_work_bit()
--> spin_loc(>condlock)

   --> s5p_mfc_irq()
   --> s5p_mfc_handle_frame()
   --> clear_work_bit()
   --> spin_lock(>condlock)

This flaw was found by an experimental static analysis tool I am
developing for irq-related deadlock.

To prevent the potential deadlock, the patch change clear_work_bit()
inside enc_post_frame_start() to clear_work_bit_irqsave().

Signed-off-by: Chengfeng Ye 
Acked-by: Marek Szyprowski 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c 
b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
index f62703cebb77..4b4c129c09e7 100644
--- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
@@ -1297,7 +1297,7 @@ static int enc_post_frame_start(struct s5p_mfc_ctx *ctx)
if (ctx->state == MFCINST_FINISHING && ctx->ref_queue_cnt == 0)
src_ready = false;
if (!src_ready || ctx->dst_queue_cnt == 0)
-   clear_work_bit(ctx);
+   clear_work_bit_irqsave(ctx);
 
return 0;
 }

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: dt-bindings: media: i2c: Add MT9M114 camera sensor binding

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: dt-bindings: media: i2c: Add MT9M114 camera sensor binding
Author:  Laurent Pinchart 
Date:Wed Sep 20 20:11:53 2023 +0300

Add device tree binding for the onsemi MT9M114 CMOS camera sensor.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Rob Herring 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 .../bindings/media/i2c/onnn,mt9m114.yaml   | 114 +
 MAINTAINERS|   7 ++
 2 files changed, 121 insertions(+)

---

diff --git a/Documentation/devicetree/bindings/media/i2c/onnn,mt9m114.yaml 
b/Documentation/devicetree/bindings/media/i2c/onnn,mt9m114.yaml
new file mode 100644
index ..f6b87892068a
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/i2c/onnn,mt9m114.yaml
@@ -0,0 +1,114 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/i2c/onnn,mt9m114.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: onsemi 1/6-inch 720p CMOS Digital Image Sensor
+
+maintainers:
+  - Laurent Pinchart 
+
+description: |-
+  The onsemi MT9M114 is a 1/6-inch 720p (1.26 Mp) CMOS digital image sensor
+  with an active pixel-array size of 1296H x 976V. It is programmable through
+  an I2C interface and outputs image data over a 8-bit parallel or 1-lane MIPI
+  CSI-2 connection.
+
+properties:
+  compatible:
+const: onnn,mt9m114
+
+  reg:
+description: I2C device address
+enum:
+  - 0x48
+  - 0x5d
+
+  clocks:
+description: EXTCLK clock signal
+maxItems: 1
+
+  vdd-supply:
+description:
+  Core digital voltage supply, 1.8V
+
+  vddio-supply:
+description:
+  I/O digital voltage supply, 1.8V or 2.8V
+
+  vaa-supply:
+description:
+  Analog voltage supply, 2.8V
+
+  reset-gpios:
+description: |-
+  Reference to the GPIO connected to the RESET_BAR pin, if any (active
+  low).
+
+  port:
+$ref: /schemas/graph.yaml#/$defs/port-base
+additionalProperties: false
+
+properties:
+  endpoint:
+$ref: /schemas/media/video-interfaces.yaml#
+additionalProperties: false
+
+properties:
+  bus-type:
+enum: [4, 5, 6]
+
+  link-frequencies: true
+  remote-endpoint: true
+
+  # The number and mapping of lanes (for CSI-2), and the bus width and
+  # signal polarities (for parallel and BT.656) are fixed and must not
+  # be specified.
+
+required:
+  - bus-type
+  - link-frequencies
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - vdd-supply
+  - vddio-supply
+  - vaa-supply
+  - port
+
+additionalProperties: false
+
+examples:
+  - |
+#include 
+#include 
+
+i2c0 {
+#address-cells = <1>;
+#size-cells = <0>;
+
+sensor@48 {
+compatible = "onnn,mt9m114";
+reg = <0x48>;
+
+clocks = < 0>;
+
+reset-gpios = < 21 GPIO_ACTIVE_LOW>;
+
+vddio-supply = <_cam_1v8>;
+vdd-supply = <_cam_1v8>;
+vaa-supply = <_2p8v>;
+
+port {
+endpoint {
+bus-type = ;
+link-frequencies = /bits/ 64 <38400>;
+remote-endpoint = <_csi_in>;
+};
+};
+};
+};
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 985670c74cf0..c55e13029e2d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -14558,6 +14558,13 @@ L: linux-...@lists.infradead.org
 S: Maintained
 F: drivers/mtd/devices/docg3*
 
+MT9M114 ONSEMI SENSOR DRIVER
+M: Laurent Pinchart 
+L: linux-me...@vger.kernel.org
+S: Maintained
+T: git git://linuxtv.org/media_tree.git
+F: Documentation/devicetree/bindings/media/i2c/onnn,mt9m114.yaml
+
 MT9P031 APTINA CAMERA SENSOR
 M: Laurent Pinchart 
 L: linux-me...@vger.kernel.org

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: drop check because i2c_unregister_device() is NULL safe

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: drop check because i2c_unregister_device() is NULL safe
Author:  Wolfram Sang 
Date:Fri Sep 22 10:04:19 2023 +0200

No need to check the argument of i2c_unregister_device() because the
function itself does it.

Signed-off-by: Wolfram Sang 
Reviewed-by: Geert Uytterhoeven 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/rdacm20.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

---

diff --git a/drivers/media/i2c/rdacm20.c b/drivers/media/i2c/rdacm20.c
index f4e2e2f3972a..b4647bda8c21 100644
--- a/drivers/media/i2c/rdacm20.c
+++ b/drivers/media/i2c/rdacm20.c
@@ -625,8 +625,7 @@ error_free_ctrls:
v4l2_ctrl_handler_free(>ctrls);
 error:
media_entity_cleanup(>sd.entity);
-   if (dev->sensor)
-   i2c_unregister_device(dev->sensor);
+   i2c_unregister_device(dev->sensor);
 
dev_err(>dev, "probe failed\n");
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Functionally decompose CSIPHY clock lookups

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Functionally decompose CSIPHY clock lookups
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:02 2023 +0100

The csiphyX_timer and csiX_phy values need not be hard-coded. We can
functionally decompose the string matching inside of a loop.

Static string values are brittle, difficult to extend and not required
anyway since the camss->res->csiphy_num value informs us of the number
of CSIPHYs and hence the set of potential clocks for a given CSIPHY.

In simple terms if we have five CSIPHYs we can have no more and no less
than five csiphy_timer clocks. Similarly csi_phy core clocks have a 1:1
relationship with the PHY they clock.

Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csiphy.c | 37 +++-
 1 file changed, 23 insertions(+), 14 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c 
b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 18f9a4defb2a..20bb361e9ad0 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -536,6 +536,15 @@ static int csiphy_init_formats(struct v4l2_subdev *sd,
return csiphy_set_format(sd, fh ? fh->state : NULL, );
 }
 
+static bool csiphy_match_clock_name(const char *clock_name, const char *format,
+   int index)
+{
+   char name[16]; /* csiphyXXX_timer\0 */
+
+   snprintf(name, sizeof(name), format, index);
+   return !strcmp(clock_name, name);
+}
+
 /*
  * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resources
  * @csiphy: CSIPHY device
@@ -550,7 +559,7 @@ int msm_csiphy_subdev_init(struct camss *camss,
 {
struct device *dev = camss->dev;
struct platform_device *pdev = to_platform_device(dev);
-   int i, j;
+   int i, j, k;
int ret;
 
csiphy->camss = camss;
@@ -656,19 +665,19 @@ int msm_csiphy_subdev_init(struct camss *camss,
for (j = 0; j < clock->nfreqs; j++)
clock->freq[j] = res->clock_rate[i][j];
 
-   if (!strcmp(clock->name, "csiphy0_timer") ||
-   !strcmp(clock->name, "csiphy1_timer") ||
-   !strcmp(clock->name, "csiphy2_timer") ||
-   !strcmp(clock->name, "csiphy3_timer") ||
-   !strcmp(clock->name, "csiphy4_timer") ||
-   !strcmp(clock->name, "csiphy5_timer"))
-   csiphy->rate_set[i] = true;
-
-   if (camss->res->version == CAMSS_660 &&
-   (!strcmp(clock->name, "csi0_phy") ||
-!strcmp(clock->name, "csi1_phy") ||
-!strcmp(clock->name, "csi2_phy")))
-   csiphy->rate_set[i] = true;
+   for (k = 0; k < camss->res->csiphy_num; k++) {
+   csiphy->rate_set[i] = 
csiphy_match_clock_name(clock->name,
+ 
"csiphy%d_timer", k);
+   if (csiphy->rate_set[i])
+   break;
+
+   if (camss->res->version == CAMSS_660) {
+   csiphy->rate_set[i] = 
csiphy_match_clock_name(clock->name,
+ 
"csi%d_phy", k);
+   if (csiphy->rate_set[i])
+   break;
+   }
+   }
}
 
return 0;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Remove special case for VFE get/put

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Remove special case for VFE get/put
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:46:59 2023 +0100

>From sdm845 onwards we need to ensure the VFE is powered on prior to
switching on the CSID.

Currently the code tests for sdm845, sm8250 and then does get/set. This is
not extensible and it turns out is not necessary either since vfe_get and
vfe_set reference count.

Remove the over-conservative SoC version check.

Signed-off-by: Bryan O'Donoghue 
Suggested-by: Laurent Pinchart 
Tested-by: Bryan O'Donoghue  # rb3 # db410c
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-csid.c | 17 +
 1 file changed, 9 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid.c 
b/drivers/media/platform/qcom/camss/camss-csid.c
index 99f651e2021c..95873f988f7e 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -159,15 +159,17 @@ static int csid_set_power(struct v4l2_subdev *sd, int on)
struct camss *camss = csid->camss;
struct device *dev = camss->dev;
struct vfe_device *vfe = >vfe[csid->id];
-   u32 version = camss->res->version;
int ret = 0;
 
if (on) {
-   if (version == CAMSS_8250 || version == CAMSS_845) {
-   ret = vfe_get(vfe);
-   if (ret < 0)
-   return ret;
-   }
+   /*
+* From SDM845 onwards, the VFE needs to be powered on before
+* switching on the CSID. Do so unconditionally, as there is no
+* drawback in following the same powering order on older SoCs.
+*/
+   ret = vfe_get(vfe);
+   if (ret < 0)
+   return ret;
 
ret = pm_runtime_resume_and_get(dev);
if (ret < 0)
@@ -217,8 +219,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on)
regulator_bulk_disable(csid->num_supplies,
   csid->supplies);
pm_runtime_put_sync(dev);
-   if (version == CAMSS_8250 || version == CAMSS_845)
-   vfe_put(vfe);
+   vfe_put(vfe);
}
 
return ret;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: qcom: camss: Move vfe_disable into a common routine where applicable

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: qcom: camss: Move vfe_disable into a common routine where 
applicable
Author:  Bryan O'Donoghue 
Date:Mon Sep 25 16:47:05 2023 +0100

We can move vfe_disable() into a common routine in the core VFE file
provided we make wm_stop() a VFE specific callback.

The callback is required to capture the case where VFE 17x currently isn't
VC enabled where as VFE 480 is.

Suggested-by: Laurent Pinchart 
Signed-off-by: Bryan O'Donoghue 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/qcom/camss/camss-vfe-170.c | 40 +--
 drivers/media/platform/qcom/camss/camss-vfe-480.c | 40 +--
 drivers/media/platform/qcom/camss/camss-vfe.c | 39 ++
 drivers/media/platform/qcom/camss/camss-vfe.h |  9 +
 4 files changed, 50 insertions(+), 78 deletions(-)

---

diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c 
b/drivers/media/platform/qcom/camss/camss-vfe-170.c
index a5aa79950186..0b211fed1276 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-170.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c
@@ -494,22 +494,6 @@ static int vfe_enable_output(struct vfe_line *line)
return 0;
 }
 
-static void vfe_disable_output(struct vfe_line *line)
-{
-   struct vfe_device *vfe = to_vfe(line);
-   struct vfe_output *output = >output;
-   unsigned long flags;
-   unsigned int i;
-
-   spin_lock_irqsave(>output_lock, flags);
-   for (i = 0; i < output->wm_num; i++)
-   vfe_wm_stop(vfe, output->wm_idx[i]);
-   output->gen2.active_num = 0;
-   spin_unlock_irqrestore(>output_lock, flags);
-
-   vfe_reset(vfe);
-}
-
 /*
  * vfe_enable - Enable streaming on VFE line
  * @line: VFE line
@@ -555,29 +539,6 @@ error_get_output:
return ret;
 }
 
-/*
- * vfe_disable - Disable streaming on VFE line
- * @line: VFE line
- *
- * Return 0 on success or a negative error code otherwise
- */
-static int vfe_disable(struct vfe_line *line)
-{
-   struct vfe_device *vfe = to_vfe(line);
-
-   vfe_disable_output(line);
-
-   vfe_put_output(line);
-
-   mutex_lock(>stream_lock);
-
-   vfe->stream_count--;
-
-   mutex_unlock(>stream_lock);
-
-   return 0;
-}
-
 /*
  * vfe_isr_sof - Process start of frame interrupt
  * @vfe: VFE Device
@@ -770,4 +731,5 @@ const struct vfe_hw_ops vfe_ops_170 = {
.vfe_enable = vfe_enable,
.vfe_halt = vfe_halt,
.violation_read = vfe_violation_read,
+   .vfe_wm_stop = vfe_wm_stop,
 };
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c 
b/drivers/media/platform/qcom/camss/camss-vfe-480.c
index 43a2964121f2..f2368b77fc6d 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-480.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c
@@ -327,22 +327,6 @@ static int vfe_enable_output(struct vfe_line *line)
return 0;
 }
 
-static void vfe_disable_output(struct vfe_line *line)
-{
-   struct vfe_device *vfe = to_vfe(line);
-   struct vfe_output *output = >output;
-   unsigned long flags;
-   unsigned int i;
-
-   spin_lock_irqsave(>output_lock, flags);
-   for (i = 0; i < output->wm_num; i++)
-   vfe_wm_stop(vfe, output->wm_idx[i]);
-   output->gen2.active_num = 0;
-   spin_unlock_irqrestore(>output_lock, flags);
-
-   vfe_reset(vfe);
-}
-
 /*
  * vfe_enable - Enable streaming on VFE line
  * @line: VFE line
@@ -390,29 +374,6 @@ error_get_output:
return ret;
 }
 
-/*
- * vfe_disable - Disable streaming on VFE line
- * @line: VFE line
- *
- * Return 0 on success or a negative error code otherwise
- */
-static int vfe_disable(struct vfe_line *line)
-{
-   struct vfe_device *vfe = to_vfe(line);
-
-   vfe_disable_output(line);
-
-   vfe_put_output(line);
-
-   mutex_lock(>stream_lock);
-
-   vfe->stream_count--;
-
-   mutex_unlock(>stream_lock);
-
-   return 0;
-}
-
 /*
  * vfe_isr_reg_update - Process reg update interrupt
  * @vfe: VFE Device
@@ -581,4 +542,5 @@ const struct vfe_hw_ops vfe_ops_480 = {
.vfe_disable = vfe_disable,
.vfe_enable = vfe_enable,
.vfe_halt = vfe_halt,
+   .vfe_wm_stop = vfe_wm_stop,
 };
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c 
b/drivers/media/platform/qcom/camss/camss-vfe.c
index 4db0d0a1c6a5..b3d5af7f0969 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -410,6 +410,45 @@ int vfe_put_output(struct vfe_line *line)
return 0;
 }
 
+static int vfe_disable_output(struct vfe_line *line)
+{
+   struct vfe_device *vfe = to_vfe(line);
+   struct vfe_output *output = >output;
+   unsigned long flags;
+   unsigned int i;
+
+   spin_lock_irqsave(>output_lock, flags);
+   for (i = 0; i < output-&g

[git:media_stage/master] media: mtk-jpegenc: Fix bug in JPEG encode quality selection

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: mtk-jpegenc: Fix bug in JPEG encode quality selection
Author:  Fei Shao 
Date:Fri Sep 8 21:28:04 2023 +0800

The driver uses the upper-bound approach to decide the target JPEG
encode quality, but there's a logic bug that if the desired quality is
higher than what the driver can support, the driver falls back to using
the worst quality.

Fix the bug by assuming using the best quality in the beginning, and
with trivial refactor to avoid long lines.

Fixes: 45f13a57d813 ("media: platform: Add jpeg enc feature")
Signed-off-by: Fei Shao 
Reviewed-by: Chen-Yu Tsai 
Signed-off-by: Hans Verkuil 

 drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c 
b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
index 2bbc48c7402c..f8fa3b841ccf 100644
--- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
+++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_enc_hw.c
@@ -127,6 +127,7 @@ void mtk_jpeg_set_enc_params(struct mtk_jpeg_ctx *ctx,  
void __iomem *base)
u32 img_stride;
u32 mem_stride;
u32 i, enc_quality;
+   u32 nr_enc_quality = ARRAY_SIZE(mtk_jpeg_enc_quality);
 
value = width << 16 | height;
writel(value, base + JPEG_ENC_IMG_SIZE);
@@ -157,8 +158,8 @@ void mtk_jpeg_set_enc_params(struct mtk_jpeg_ctx *ctx,  
void __iomem *base)
writel(img_stride, base + JPEG_ENC_IMG_STRIDE);
writel(mem_stride, base + JPEG_ENC_STRIDE);
 
-   enc_quality = mtk_jpeg_enc_quality[0].hardware_value;
-   for (i = 0; i < ARRAY_SIZE(mtk_jpeg_enc_quality); i++) {
+   enc_quality = mtk_jpeg_enc_quality[nr_enc_quality - 1].hardware_value;
+   for (i = 0; i < nr_enc_quality; i++) {
if (ctx->enc_quality <= mtk_jpeg_enc_quality[i].quality_param) {
enc_quality = mtk_jpeg_enc_quality[i].hardware_value;
break;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Set mode registers programmatically

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Set mode registers programmatically
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:55 2023 +0300

Replace the per-mode register arrays with code that sets the same
register values using the mode definitions. This avoids duplicating
information in two different places.

The error check for invalid formats in imx219_set_framefmt() is dropped
as the format is guaranteed to be valid.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 134 -
 1 file changed, 36 insertions(+), 98 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index cf55c59cbb7f..927ab106cea6 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -149,11 +149,6 @@
 #define IMX219_PIXEL_ARRAY_WIDTH   3280U
 #define IMX219_PIXEL_ARRAY_HEIGHT  2464U
 
-struct imx219_reg_list {
-   unsigned int num_of_regs;
-   const struct cci_reg_sequence *regs;
-};
-
 /* Mode : resolution and related config */
 struct imx219_mode {
/* Frame width */
@@ -167,9 +162,6 @@ struct imx219_mode {
/* V-timing */
unsigned int vts_def;
 
-   /* Default register values */
-   struct imx219_reg_list reg_list;
-
/* 2x2 binning is used */
bool binning;
 };
@@ -218,65 +210,6 @@ static const struct cci_reg_sequence imx219_common_regs[] 
= {
{ IMX219_REG_EXCK_FREQ, IMX219_EXCK_FREQ(IMX219_XCLK_FREQ / 100) },
 };
 
-/*
- * Register sets lifted off the i2C interface from the Raspberry Pi firmware
- * driver.
- * 3280x2464 = mode 2, 1920x1080 = mode 1, 1640x1232 = mode 4, 640x480 = mode 
7.
- */
-static const struct cci_reg_sequence mode_3280x2464_regs[] = {
-   { IMX219_REG_X_ADD_STA_A, 0 },
-   { IMX219_REG_X_ADD_END_A, 3279 },
-   { IMX219_REG_Y_ADD_STA_A, 0 },
-   { IMX219_REG_Y_ADD_END_A, 2463 },
-   { IMX219_REG_X_OUTPUT_SIZE, 3280 },
-   { IMX219_REG_Y_OUTPUT_SIZE, 2464 },
-   { IMX219_REG_TP_WINDOW_WIDTH, 3280 },
-   { IMX219_REG_TP_WINDOW_HEIGHT, 2464 },
-};
-
-static const struct cci_reg_sequence mode_1920_1080_regs[] = {
-   { IMX219_REG_X_ADD_STA_A, 680 },
-   { IMX219_REG_X_ADD_END_A, 2599 },
-   { IMX219_REG_Y_ADD_STA_A, 692 },
-   { IMX219_REG_Y_ADD_END_A, 1771 },
-   { IMX219_REG_X_OUTPUT_SIZE, 1920 },
-   { IMX219_REG_Y_OUTPUT_SIZE, 1080 },
-   { IMX219_REG_TP_WINDOW_WIDTH, 1920 },
-   { IMX219_REG_TP_WINDOW_HEIGHT, 1080 },
-};
-
-static const struct cci_reg_sequence mode_1640_1232_regs[] = {
-   { IMX219_REG_X_ADD_STA_A, 0 },
-   { IMX219_REG_X_ADD_END_A, 3279 },
-   { IMX219_REG_Y_ADD_STA_A, 0 },
-   { IMX219_REG_Y_ADD_END_A, 2463 },
-   { IMX219_REG_X_OUTPUT_SIZE, 1640 },
-   { IMX219_REG_Y_OUTPUT_SIZE, 1232 },
-   { IMX219_REG_TP_WINDOW_WIDTH, 1640 },
-   { IMX219_REG_TP_WINDOW_HEIGHT, 1232 },
-};
-
-static const struct cci_reg_sequence mode_640_480_regs[] = {
-   { IMX219_REG_X_ADD_STA_A, 1000 },
-   { IMX219_REG_X_ADD_END_A, 2279 },
-   { IMX219_REG_Y_ADD_STA_A, 752 },
-   { IMX219_REG_Y_ADD_END_A, 1711 },
-   { IMX219_REG_X_OUTPUT_SIZE, 640 },
-   { IMX219_REG_Y_OUTPUT_SIZE, 480 },
-   { IMX219_REG_TP_WINDOW_WIDTH, 640 },
-   { IMX219_REG_TP_WINDOW_HEIGHT, 480 },
-};
-
-static const struct cci_reg_sequence raw8_framefmt_regs[] = {
-   { IMX219_REG_CSI_DATA_FORMAT_A, 0x0808 },
-   { IMX219_REG_OPPXCK_DIV, 8 },
-};
-
-static const struct cci_reg_sequence raw10_framefmt_regs[] = {
-   { IMX219_REG_CSI_DATA_FORMAT_A, 0x0a0a },
-   { IMX219_REG_OPPXCK_DIV, 10 },
-};
-
 static const s64 imx219_link_freq_menu[] = {
IMX219_DEFAULT_LINK_FREQ,
 };
@@ -372,10 +305,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 2464
},
.vts_def = IMX219_VTS_15FPS,
-   .reg_list = {
-   .num_of_regs = ARRAY_SIZE(mode_3280x2464_regs),
-   .regs = mode_3280x2464_regs,
-   },
.binning = false,
},
{
@@ -389,10 +318,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 1080
},
.vts_def = IMX219_VTS_30FPS_1080P,
-   .reg_list = {
-   .num_of_regs = ARRAY_SIZE(mode_1920_1080_regs),
-   .regs = mode_1920_1080_regs,
-   },
.binning = false,
},
{
@@ -406,10 +331,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 2464
},
.vts_def = IMX219_VTS_30FPS_BINNED,
-   .reg_list = {
-   .num_of_regs = ARRAY_SIZE

[git:media_stage/master] media: i2c: imx219: Merge format and binning setting functions

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Merge format and binning setting functions
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:56 2023 +0300

The imx219_set_binning() function sets registers based on the bpp value,
which is computed in imx219_set_framefmt(). As both functions are called
from the same place consecutively, and set registers based on the
selected mode, merge them together to simplify the code.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 43 ++-
 1 file changed, 10 insertions(+), 33 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 927ab106cea6..140924445a61 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -614,6 +614,7 @@ static int imx219_set_framefmt(struct imx219 *imx219,
 {
const struct imx219_mode *mode = imx219->mode;
unsigned int bpp;
+   u64 bin_mode;
int ret = 0;
 
switch (format->code) {
@@ -644,6 +645,15 @@ static int imx219_set_framefmt(struct imx219 *imx219,
  mode->crop.top - IMX219_PIXEL_ARRAY_TOP + mode->crop.height - 
1,
  );
 
+   if (!imx219->mode->binning)
+   bin_mode = IMX219_BINNING_NONE;
+   else if (bpp == 8)
+   bin_mode = IMX219_BINNING_2X2_ANALOG;
+   else
+   bin_mode = IMX219_BINNING_2X2;
+
+   cci_write(imx219->regmap, IMX219_REG_BINNING_MODE, bin_mode, );
+
cci_write(imx219->regmap, IMX219_REG_X_OUTPUT_SIZE,
  format->width, );
cci_write(imx219->regmap, IMX219_REG_Y_OUTPUT_SIZE,
@@ -661,32 +671,6 @@ static int imx219_set_framefmt(struct imx219 *imx219,
return ret;
 }
 
-static int imx219_set_binning(struct imx219 *imx219,
- const struct v4l2_mbus_framefmt *format)
-{
-   if (!imx219->mode->binning)
-   return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
-IMX219_BINNING_NONE, NULL);
-
-   switch (format->code) {
-   case MEDIA_BUS_FMT_SRGGB8_1X8:
-   case MEDIA_BUS_FMT_SGRBG8_1X8:
-   case MEDIA_BUS_FMT_SGBRG8_1X8:
-   case MEDIA_BUS_FMT_SBGGR8_1X8:
-   return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
-IMX219_BINNING_2X2_ANALOG, NULL);
-
-   case MEDIA_BUS_FMT_SRGGB10_1X10:
-   case MEDIA_BUS_FMT_SGRBG10_1X10:
-   case MEDIA_BUS_FMT_SGBRG10_1X10:
-   case MEDIA_BUS_FMT_SBGGR10_1X10:
-   return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
-IMX219_BINNING_2X2, NULL);
-   }
-
-   return -EINVAL;
-}
-
 static int imx219_get_selection(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_selection *sel)
@@ -760,13 +744,6 @@ static int imx219_start_streaming(struct imx219 *imx219,
goto err_rpm_put;
}
 
-   ret = imx219_set_binning(imx219, format);
-   if (ret) {
-   dev_err(>dev, "%s failed to set binning: %d\n",
-   __func__, ret);
-   goto err_rpm_put;
-   }
-
/* Apply customized values from user */
ret =  __v4l2_ctrl_handler_setup(imx219->sd.ctrl_handler);
if (ret)

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Initialize ycbcr_enc

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Initialize ycbcr_enc
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:57 2023 +0300

While the ycbcr_enc field doesn't apply to raw formats, leaving it
uninitialized makes the driver behave in a less deterministic way. Fix
it by picking the default value for the colorspace.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 1 +
 1 file changed, 1 insertion(+)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 140924445a61..2e1fbeef11a8 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -495,6 +495,7 @@ static void imx219_update_pad_format(struct imx219 *imx219,
fmt->height = mode->height;
fmt->field = V4L2_FIELD_NONE;
fmt->colorspace = V4L2_COLORSPACE_RAW;
+   fmt->ycbcr_enc = V4L2_YCBCR_ENC_601;
fmt->quantization = V4L2_QUANTIZATION_FULL_RANGE;
fmt->xfer_func = V4L2_XFER_FUNC_NONE;
 }

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Fix test pattern window for 640x480 mode

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Fix test pattern window for 640x480 mode
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:54 2023 +0300

The 640x480 mode specifies incorrect values for the TP_WINDOW_WIDTH and
TP_WINDOW_HEIGHT registers, which likely got copied from the 1640x1232
mode. They should be identical to the X_OUTPUT_SIZE and Y_OUTPUT_SIZE
registers as for all the other modes, to avoid cropping the test
pattern. Fix them.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index a14de8f3dee7..cf55c59cbb7f 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -263,8 +263,8 @@ static const struct cci_reg_sequence mode_640_480_regs[] = {
{ IMX219_REG_Y_ADD_END_A, 1711 },
{ IMX219_REG_X_OUTPUT_SIZE, 640 },
{ IMX219_REG_Y_OUTPUT_SIZE, 480 },
-   { IMX219_REG_TP_WINDOW_WIDTH, 1640 },
-   { IMX219_REG_TP_WINDOW_HEIGHT, 1232 },
+   { IMX219_REG_TP_WINDOW_WIDTH, 640 },
+   { IMX219_REG_TP_WINDOW_HEIGHT, 480 },
 };
 
 static const struct cci_reg_sequence raw8_framefmt_regs[] = {

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Group functions by purpose

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Group functions by purpose
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:03 2023 +0300

Move functions around to group them by purpose, in order to improve
readability. No functional change is intended.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 591 +++--
 1 file changed, 303 insertions(+), 288 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 76551e6db22a..dfc5ce574227 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -385,6 +385,10 @@ static u32 imx219_get_format_code(struct imx219 *imx219, 
u32 code)
return imx219_mbus_formats[i];
 }
 
+/* 
-
+ * Controls
+ */
+
 static int imx219_set_ctrl(struct v4l2_ctrl *ctrl)
 {
struct imx219 *imx219 =
@@ -476,130 +480,135 @@ static const struct v4l2_ctrl_ops imx219_ctrl_ops = {
.s_ctrl = imx219_set_ctrl,
 };
 
-static void imx219_update_pad_format(struct imx219 *imx219,
-const struct imx219_mode *mode,
-struct v4l2_mbus_framefmt *fmt, u32 code)
+static unsigned long imx219_get_pixel_rate(struct imx219 *imx219)
 {
-   /* Bayer order varies with flips */
-   fmt->code = imx219_get_format_code(imx219, code);
-   fmt->width = mode->width;
-   fmt->height = mode->height;
-   fmt->field = V4L2_FIELD_NONE;
-   fmt->colorspace = V4L2_COLORSPACE_RAW;
-   fmt->ycbcr_enc = V4L2_YCBCR_ENC_601;
-   fmt->quantization = V4L2_QUANTIZATION_FULL_RANGE;
-   fmt->xfer_func = V4L2_XFER_FUNC_NONE;
+   return (imx219->lanes == 2) ? IMX219_PIXEL_RATE : 
IMX219_PIXEL_RATE_4LANE;
 }
 
-static int imx219_init_cfg(struct v4l2_subdev *sd,
-  struct v4l2_subdev_state *state)
+/* Initialize control handlers */
+static int imx219_init_controls(struct imx219 *imx219)
 {
-   struct imx219 *imx219 = to_imx219(sd);
-   struct v4l2_mbus_framefmt *format;
-   struct v4l2_rect *crop;
-
-   /* Initialize the format. */
-   format = v4l2_subdev_get_pad_format(sd, state, 0);
-   imx219_update_pad_format(imx219, _modes[0], format,
-MEDIA_BUS_FMT_SRGGB10_1X10);
-
-   /* Initialize the crop rectangle. */
-   crop = v4l2_subdev_get_pad_crop(sd, state, 0);
-   crop->top = IMX219_PIXEL_ARRAY_TOP;
-   crop->left = IMX219_PIXEL_ARRAY_LEFT;
-   crop->width = IMX219_PIXEL_ARRAY_WIDTH;
-   crop->height = IMX219_PIXEL_ARRAY_HEIGHT;
+   struct i2c_client *client = v4l2_get_subdevdata(>sd);
+   const struct imx219_mode *mode = _modes[0];
+   struct v4l2_ctrl_handler *ctrl_hdlr;
+   struct v4l2_fwnode_device_properties props;
+   int exposure_max, exposure_def, hblank;
+   int i, ret;
 
-   return 0;
-}
+   ctrl_hdlr = >ctrl_handler;
+   ret = v4l2_ctrl_handler_init(ctrl_hdlr, 12);
+   if (ret)
+   return ret;
 
-static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
-struct v4l2_subdev_state *sd_state,
-struct v4l2_subdev_mbus_code_enum *code)
-{
-   struct imx219 *imx219 = to_imx219(sd);
+   /* By default, PIXEL_RATE is read only */
+   imx219->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, _ctrl_ops,
+  V4L2_CID_PIXEL_RATE,
+  imx219_get_pixel_rate(imx219),
+  imx219_get_pixel_rate(imx219), 1,
+  imx219_get_pixel_rate(imx219));
 
-   if (code->index >= (ARRAY_SIZE(imx219_mbus_formats) / 4))
-   return -EINVAL;
+   imx219->link_freq =
+   v4l2_ctrl_new_int_menu(ctrl_hdlr, _ctrl_ops,
+  V4L2_CID_LINK_FREQ,
+  ARRAY_SIZE(imx219_link_freq_menu) - 1, 0,
+  (imx219->lanes == 2) ? 
imx219_link_freq_menu :
+  imx219_link_freq_4lane_menu);
+   if (imx219->link_freq)
+   imx219->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
 
-   code->code = imx219_get_format_code(imx219, 
imx219_mbus_formats[code->index * 4]);
+   /* Initial vblank/hblank/exposure parameters based on current mode */
+   imx219->vblank = v4l2_ctrl_new_std(ctrl_hdlr, _ctrl_ops,
+  V4L2_CID_VBLANK, IMX219_VBLANK_MIN,
+  IMX219_VTS_MAX - mode

[git:media_stage/master] media: i2c: imx219: Infer binning settings from format and crop

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Infer binning settings from format and crop
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:59 2023 +0300

Compare the format and crop rectangle dimensions to infer binning
settings, instead of storing the binning mode in the imx219_mode
structure. This removes duplicate information from the mode.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 562cfee87b24..bc836cd13ef5 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -161,9 +161,6 @@ struct imx219_mode {
 
/* V-timing */
unsigned int vts_def;
-
-   /* 2x2 binning is used */
-   bool binning;
 };
 
 static const struct cci_reg_sequence imx219_common_regs[] = {
@@ -305,7 +302,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 2464
},
.vts_def = IMX219_VTS_15FPS,
-   .binning = false,
},
{
/* 1080P 30fps cropped */
@@ -318,7 +314,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 1080
},
.vts_def = IMX219_VTS_30FPS_1080P,
-   .binning = false,
},
{
/* 2x2 binned 30fps mode */
@@ -331,7 +326,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 2464
},
.vts_def = IMX219_VTS_30FPS_BINNED,
-   .binning = true,
},
{
/* 640x480 30fps mode */
@@ -344,7 +338,6 @@ static const struct imx219_mode supported_modes[] = {
.height = 960
},
.vts_def = IMX219_VTS_30FPS_640x480,
-   .binning = true,
},
 };
 
@@ -648,7 +641,7 @@ static int imx219_set_framefmt(struct imx219 *imx219,
cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A,
  crop->top - IMX219_PIXEL_ARRAY_TOP + crop->height - 1, );
 
-   if (!imx219->mode->binning)
+   if (format->width == crop->width && format->height == crop->height)
bin_mode = IMX219_BINNING_NONE;
else if (bpp == 8)
bin_mode = IMX219_BINNING_2X2_ANALOG;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Access height from active format in imx219_set_ctrl

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Access height from active format in imx219_set_ctrl
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:00 2023 +0300

Use the active format height instead of the mode height in
imx219_set_ctrl(). This prepares for dropping the mode field from the
imx219 structure.

The state is retrieved using v4l2_subdev_get_locked_active_state() as
the subdev active state and the control handler share the same lock.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index bc836cd13ef5..f4f684bda4fa 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -397,13 +397,18 @@ static int imx219_set_ctrl(struct v4l2_ctrl *ctrl)
struct imx219 *imx219 =
container_of(ctrl->handler, struct imx219, ctrl_handler);
struct i2c_client *client = v4l2_get_subdevdata(>sd);
+   const struct v4l2_mbus_framefmt *format;
+   struct v4l2_subdev_state *state;
int ret = 0;
 
+   state = v4l2_subdev_get_locked_active_state(>sd);
+   format = v4l2_subdev_get_pad_format(>sd, state, 0);
+
if (ctrl->id == V4L2_CID_VBLANK) {
int exposure_max, exposure_def;
 
/* Update max exposure while meeting expected vblanking */
-   exposure_max = imx219->mode->height + ctrl->val - 4;
+   exposure_max = format->height + ctrl->val - 4;
exposure_def = (exposure_max < IMX219_EXPOSURE_DEFAULT) ?
exposure_max : IMX219_EXPOSURE_DEFAULT;
__v4l2_ctrl_modify_range(imx219->exposure,
@@ -443,7 +448,7 @@ static int imx219_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_VBLANK:
cci_write(imx219->regmap, IMX219_REG_VTS,
- imx219->mode->height + ctrl->val, );
+ format->height + ctrl->val, );
break;
case V4L2_CID_TEST_PATTERN_RED:
cci_write(imx219->regmap, IMX219_REG_TESTP_RED,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Don't store the current mode in the imx219 structure

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Don't store the current mode in the imx219 
structure
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:01 2023 +0300

The mode field of the imx219 structure is only used in
imx219_init_controls(), after the probe function sets it to point to the
default mode. Use the default mode directly when initializing controls,
and drop the mode field from the imx219 structure.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 20 +++-
 1 file changed, 7 insertions(+), 13 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index f4f684bda4fa..82e5d1dad14a 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -362,9 +362,6 @@ struct imx219 {
struct v4l2_ctrl *vblank;
struct v4l2_ctrl *hblank;
 
-   /* Current mode */
-   const struct imx219_mode *mode;
-
/* Two or Four lanes */
u8 lanes;
 };
@@ -580,7 +577,6 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
*crop = mode->crop;
 
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
-   imx219->mode = mode;
/* Update limits and set FPS to default */
__v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN,
 IMX219_VTS_MAX - mode->height, 1,
@@ -923,8 +919,8 @@ static unsigned long imx219_get_pixel_rate(struct imx219 
*imx219)
 static int imx219_init_controls(struct imx219 *imx219)
 {
struct i2c_client *client = v4l2_get_subdevdata(>sd);
+   const struct imx219_mode *mode = _modes[0];
struct v4l2_ctrl_handler *ctrl_hdlr;
-   unsigned int height = imx219->mode->height;
struct v4l2_fwnode_device_properties props;
int exposure_max, exposure_def, hblank;
int i, ret;
@@ -953,15 +949,15 @@ static int imx219_init_controls(struct imx219 *imx219)
/* Initial vblank/hblank/exposure parameters based on current mode */
imx219->vblank = v4l2_ctrl_new_std(ctrl_hdlr, _ctrl_ops,
   V4L2_CID_VBLANK, IMX219_VBLANK_MIN,
-  IMX219_VTS_MAX - height, 1,
-  imx219->mode->vts_def - height);
-   hblank = IMX219_PPL_DEFAULT - imx219->mode->width;
+  IMX219_VTS_MAX - mode->height, 1,
+  mode->vts_def - mode->height);
+   hblank = IMX219_PPL_DEFAULT - mode->width;
imx219->hblank = v4l2_ctrl_new_std(ctrl_hdlr, _ctrl_ops,
   V4L2_CID_HBLANK, hblank, hblank,
   1, hblank);
if (imx219->hblank)
imx219->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
-   exposure_max = imx219->mode->vts_def - 4;
+   exposure_max = mode->vts_def - 4;
exposure_def = (exposure_max < IMX219_EXPOSURE_DEFAULT) ?
exposure_max : IMX219_EXPOSURE_DEFAULT;
imx219->exposure = v4l2_ctrl_new_std(ctrl_hdlr, _ctrl_ops,
@@ -1148,10 +1144,8 @@ static int imx219_probe(struct i2c_client *client)
if (ret)
goto error_power_off;
 
-   /* Set default mode to max resolution */
-   imx219->mode = _modes[0];
-
-   /* sensor doesn't enter LP-11 state upon power up until and unless
+   /*
+* Sensor doesn't enter LP-11 state upon power up until and unless
 * streaming is started, so upon power up switch the modes to:
 * streaming -> standby
 */

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Drop IMX219_VTS_* macros

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Drop IMX219_VTS_* macros
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:02 2023 +0300

The IMX219_VTS_* macros define default VTS values for the modes
supported by the driver. They are used in a single place, and hinder
readability compared to using the value directly as a decimal number.
Drop them.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 12 
 1 file changed, 4 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 82e5d1dad14a..76551e6db22a 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -71,10 +71,6 @@
 
 /* V_TIMING internal */
 #define IMX219_REG_VTS CCI_REG16(0x0160)
-#define IMX219_VTS_15FPS   0x0dc6
-#define IMX219_VTS_30FPS_1080P 0x06e3
-#define IMX219_VTS_30FPS_BINNED0x06e3
-#define IMX219_VTS_30FPS_640x480   0x06e3
 #define IMX219_VTS_MAX 0x
 
 #define IMX219_VBLANK_MIN  4
@@ -301,7 +297,7 @@ static const struct imx219_mode supported_modes[] = {
.width = 3280,
.height = 2464
},
-   .vts_def = IMX219_VTS_15FPS,
+   .vts_def = 3526,
},
{
/* 1080P 30fps cropped */
@@ -313,7 +309,7 @@ static const struct imx219_mode supported_modes[] = {
.width = 1920,
.height = 1080
},
-   .vts_def = IMX219_VTS_30FPS_1080P,
+   .vts_def = 1763,
},
{
/* 2x2 binned 30fps mode */
@@ -325,7 +321,7 @@ static const struct imx219_mode supported_modes[] = {
.width = 3280,
.height = 2464
},
-   .vts_def = IMX219_VTS_30FPS_BINNED,
+   .vts_def = 1763,
},
{
/* 640x480 30fps mode */
@@ -337,7 +333,7 @@ static const struct imx219_mode supported_modes[] = {
.width = 1280,
.height = 960
},
-   .vts_def = IMX219_VTS_30FPS_640x480,
+   .vts_def = 1763,
},
 };
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Switch to init_cfg

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Switch to init_cfg
Author:  Sakari Ailus 
Date:Wed Aug 9 16:12:38 2023 +0300

Use init_cfg() instead of manually setting up defaults in file handle
open.

Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 17 ++---
 1 file changed, 6 insertions(+), 11 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index fb823c5c3dd3..9e8769603704 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -2945,7 +2945,6 @@ static int ccs_identify_module(struct ccs_sensor *sensor)
 }
 
 static const struct v4l2_subdev_ops ccs_ops;
-static const struct v4l2_subdev_internal_ops ccs_internal_ops;
 static const struct media_entity_operations ccs_entity_ops;
 
 static int ccs_register_subdev(struct ccs_sensor *sensor,
@@ -3076,13 +3075,13 @@ static void ccs_create_subdev(struct ccs_sensor *sensor,
if (ssd == sensor->src)
return;
 
-   ssd->sd.internal_ops = _internal_ops;
ssd->sd.owner = THIS_MODULE;
ssd->sd.dev = >dev;
v4l2_set_subdevdata(>sd, client);
 }
 
-static int ccs_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
+static int ccs_init_cfg(struct v4l2_subdev *sd,
+   struct v4l2_subdev_state *sd_state)
 {
struct ccs_subdev *ssd = to_ccs_subdev(sd);
struct ccs_sensor *sensor = ssd->sensor;
@@ -3092,9 +3091,9 @@ static int ccs_open(struct v4l2_subdev *sd, struct 
v4l2_subdev_fh *fh)
 
for (i = 0; i < ssd->npads; i++) {
struct v4l2_mbus_framefmt *try_fmt =
-   v4l2_subdev_get_try_format(sd, fh->state, i);
+   v4l2_subdev_get_try_format(sd, sd_state, i);
struct v4l2_rect *try_crop =
-   v4l2_subdev_get_try_crop(sd, fh->state, i);
+   v4l2_subdev_get_try_crop(sd, sd_state, i);
struct v4l2_rect *try_comp;
 
ccs_get_native_size(ssd, try_crop);
@@ -3107,7 +3106,7 @@ static int ccs_open(struct v4l2_subdev *sd, struct 
v4l2_subdev_fh *fh)
if (ssd == sensor->pixel_array)
continue;
 
-   try_comp = v4l2_subdev_get_try_compose(sd, fh->state, i);
+   try_comp = v4l2_subdev_get_try_compose(sd, sd_state, i);
*try_comp = *try_crop;
}
 
@@ -3123,6 +3122,7 @@ static const struct v4l2_subdev_video_ops ccs_video_ops = 
{
 };
 
 static const struct v4l2_subdev_pad_ops ccs_pad_ops = {
+   .init_cfg = ccs_init_cfg,
.enum_mbus_code = ccs_enum_mbus_code,
.get_fmt = ccs_get_format,
.set_fmt = ccs_set_format,
@@ -3148,11 +3148,6 @@ static const struct media_entity_operations 
ccs_entity_ops = {
 static const struct v4l2_subdev_internal_ops ccs_internal_src_ops = {
.registered = ccs_registered,
.unregistered = ccs_unregistered,
-   .open = ccs_open,
-};
-
-static const struct v4l2_subdev_internal_ops ccs_internal_ops = {
-   .open = ccs_open,
 };
 
 /* 
-

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Calculate crop rectangle dynamically

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Calculate crop rectangle dynamically
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:07 2023 +0300

Calculate the crop rectangle size and location dynamically when setting
the format, instead of storing it in the imx219_mode structure. This
removes duplicated information from the mode, to guarantee consistency.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 45 +++--
 1 file changed, 15 insertions(+), 30 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index bf1c2a1dad95..2b88c5b8a7bf 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -153,9 +154,6 @@ struct imx219_mode {
/* Frame height */
unsigned int height;
 
-   /* Analog crop rectangle. */
-   struct v4l2_rect crop;
-
/* V-timing */
unsigned int vts_def;
 };
@@ -292,48 +290,24 @@ static const struct imx219_mode supported_modes[] = {
/* 8MPix 15fps mode */
.width = 3280,
.height = 2464,
-   .crop = {
-   .left = IMX219_PIXEL_ARRAY_LEFT,
-   .top = IMX219_PIXEL_ARRAY_TOP,
-   .width = 3280,
-   .height = 2464
-   },
.vts_def = 3526,
},
{
/* 1080P 30fps cropped */
.width = 1920,
.height = 1080,
-   .crop = {
-   .left = 688,
-   .top = 700,
-   .width = 1920,
-   .height = 1080
-   },
.vts_def = 1763,
},
{
/* 2x2 binned 30fps mode */
.width = 1640,
.height = 1232,
-   .crop = {
-   .left = IMX219_PIXEL_ARRAY_LEFT,
-   .top = IMX219_PIXEL_ARRAY_TOP,
-   .width = 3280,
-   .height = 2464
-   },
.vts_def = 1763,
},
{
/* 640x480 30fps mode */
.width = 640,
.height = 480,
-   .crop = {
-   .left = 1008,
-   .top = 760,
-   .width = 1280,
-   .height = 960
-   },
.vts_def = 1763,
},
 };
@@ -844,6 +818,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
int exposure_max, exposure_def, hblank;
struct v4l2_mbus_framefmt *format;
struct v4l2_rect *crop;
+   unsigned int bin_h, bin_v;
 
mode = v4l2_find_nearest_size(supported_modes,
  ARRAY_SIZE(supported_modes),
@@ -853,10 +828,20 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
imx219_update_pad_format(imx219, mode, >format, fmt->format.code);
 
format = v4l2_subdev_get_pad_format(sd, sd_state, 0);
-   crop = v4l2_subdev_get_pad_crop(sd, sd_state, 0);
-
*format = fmt->format;
-   *crop = mode->crop;
+
+   /*
+* Use binning to maximize the crop rectangle size, and centre it in the
+* sensor.
+*/
+   bin_h = min(IMX219_PIXEL_ARRAY_WIDTH / format->width, 2U);
+   bin_v = min(IMX219_PIXEL_ARRAY_HEIGHT / format->height, 2U);
+
+   crop = v4l2_subdev_get_pad_crop(sd, sd_state, 0);
+   crop->width = format->width * bin_h;
+   crop->height = format->height * bin_v;
+   crop->left = (IMX219_NATIVE_WIDTH - crop->width) / 2;
+   crop->top = (IMX219_NATIVE_HEIGHT - crop->height) / 2;
 
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
/* Update limits and set FPS to default */

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Implement .init_cfg() using .set_fmt()

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Implement .init_cfg() using .set_fmt()
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:05 2023 +0300

Instead of duplicating the logical implemented in the .set_fmt()
operation in .init_cfg(), call .set_fmt() directly. This centralizes the
format and crop rectangle calculations in a single place.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 40 ++--
 1 file changed, 18 insertions(+), 22 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index a12ebf288dd2..6bfdceaf5044 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -784,28 +784,6 @@ static void imx219_update_pad_format(struct imx219 *imx219,
fmt->xfer_func = V4L2_XFER_FUNC_NONE;
 }
 
-static int imx219_init_cfg(struct v4l2_subdev *sd,
-  struct v4l2_subdev_state *state)
-{
-   struct imx219 *imx219 = to_imx219(sd);
-   struct v4l2_mbus_framefmt *format;
-   struct v4l2_rect *crop;
-
-   /* Initialize the format. */
-   format = v4l2_subdev_get_pad_format(sd, state, 0);
-   imx219_update_pad_format(imx219, _modes[0], format,
-MEDIA_BUS_FMT_SRGGB10_1X10);
-
-   /* Initialize the crop rectangle. */
-   crop = v4l2_subdev_get_pad_crop(sd, state, 0);
-   crop->top = IMX219_PIXEL_ARRAY_TOP;
-   crop->left = IMX219_PIXEL_ARRAY_LEFT;
-   crop->width = IMX219_PIXEL_ARRAY_WIDTH;
-   crop->height = IMX219_PIXEL_ARRAY_HEIGHT;
-
-   return 0;
-}
-
 static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
 struct v4l2_subdev_state *sd_state,
 struct v4l2_subdev_mbus_code_enum *code)
@@ -924,6 +902,24 @@ static int imx219_get_selection(struct v4l2_subdev *sd,
return -EINVAL;
 }
 
+static int imx219_init_cfg(struct v4l2_subdev *sd,
+  struct v4l2_subdev_state *state)
+{
+   struct v4l2_subdev_format fmt = {
+   .which = V4L2_SUBDEV_FORMAT_TRY,
+   .pad = 0,
+   .format = {
+   .code = MEDIA_BUS_FMT_SRGGB10_1X10,
+   .width = supported_modes[0].width,
+   .height = supported_modes[0].height,
+   },
+   };
+
+   imx219_set_pad_format(sd, state, );
+
+   return 0;
+}
+
 static const struct v4l2_subdev_core_ops imx219_core_ops = {
.subscribe_event = v4l2_ctrl_subdev_subscribe_event,
.unsubscribe_event = v4l2_event_subdev_unsubscribe,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: Documentation: Align numbered list, make it a proper ReST

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: Documentation: Align numbered list, make it a proper ReST
Author:  Sakari Ailus 
Date:Wed Aug 2 15:11:50 2023 +0300

Align lines for numbered list so that Sphinx produces an uniform output
for all list entries. Also indent paragraphs of such list entries for
consistency.

Also use ReST numbered list syntax for the entries.

Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 .../userspace-api/media/v4l/dev-subdev.rst | 49 +++---
 1 file changed, 24 insertions(+), 25 deletions(-)

---

diff --git a/Documentation/userspace-api/media/v4l/dev-subdev.rst 
b/Documentation/userspace-api/media/v4l/dev-subdev.rst
index a4f1df7093e8..43988516acdd 100644
--- a/Documentation/userspace-api/media/v4l/dev-subdev.rst
+++ b/Documentation/userspace-api/media/v4l/dev-subdev.rst
@@ -579,20 +579,19 @@ is started.
 
 There are three steps in configuring the streams:
 
-1) Set up links. Connect the pads between sub-devices using the :ref:`Media
-Controller API `
+1. Set up links. Connect the pads between sub-devices using the
+   :ref:`Media Controller API `
 
-2) Streams. Streams are declared and their routing is configured by
-setting the routing table for the sub-device using
-:ref:`VIDIOC_SUBDEV_S_ROUTING ` ioctl. Note that
-setting the routing table will reset formats and selections in the
-sub-device to default values.
+2. Streams. Streams are declared and their routing is configured by setting the
+   routing table for the sub-device using :ref:`VIDIOC_SUBDEV_S_ROUTING
+   ` ioctl. Note that setting the routing table will
+   reset formats and selections in the sub-device to default values.
 
-3) Configure formats and selections. Formats and selections of each stream
-are configured separately as documented for plain sub-devices in
-:ref:`format-propagation`. The stream ID is set to the same stream ID
-associated with either sink or source pads of routes configured using the
-:ref:`VIDIOC_SUBDEV_S_ROUTING ` ioctl.
+3. Configure formats and selections. Formats and selections of each stream are
+   configured separately as documented for plain sub-devices in
+   :ref:`format-propagation`. The stream ID is set to the same stream ID
+   associated with either sink or source pads of routes configured using the
+   :ref:`VIDIOC_SUBDEV_S_ROUTING ` ioctl.
 
 Multiplexed streams setup example
 ^
@@ -618,11 +617,11 @@ modeled as V4L2 devices, exposed to userspace via 
/dev/videoX nodes.
 
 To configure this pipeline, the userspace must take the following steps:
 
-1) Set up media links between entities: connect the sensors to the bridge,
-bridge to the receiver, and the receiver to the DMA engines. This step does
-not differ from normal non-multiplexed media controller setup.
+1. Set up media links between entities: connect the sensors to the bridge,
+   bridge to the receiver, and the receiver to the DMA engines. This step does
+   not differ from normal non-multiplexed media controller setup.
 
-2) Configure routing
+2. Configure routing
 
 .. flat-table:: Bridge routing table
 :header-rows:  1
@@ -656,14 +655,14 @@ not differ from normal non-multiplexed media controller 
setup.
   - V4L2_SUBDEV_ROUTE_FL_ACTIVE
   - Pixel data stream from Sensor B
 
-3) Configure formats and selections
+3. Configure formats and selections
 
-After configuring routing, the next step is configuring the formats and
-selections for the streams. This is similar to performing this step without
-streams, with just one exception: the ``stream`` field needs to be assigned
-to the value of the stream ID.
+   After configuring routing, the next step is configuring the formats and
+   selections for the streams. This is similar to performing this step without
+   streams, with just one exception: the ``stream`` field needs to be assigned
+   to the value of the stream ID.
 
-A common way to accomplish this is to start from the sensors and propagate the
-configurations along the stream towards the receiver,
-using :ref:`VIDIOC_SUBDEV_S_FMT ` ioctls to configure each
-stream endpoint in each sub-device.
+   A common way to accomplish this is to start from the sensors and propagate
+   the configurations along the stream towards the receiver, using
+   :ref:`VIDIOC_SUBDEV_S_FMT ` ioctls to configure each
+   stream endpoint in each sub-device.

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Correctly initialise try compose rectangle

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Correctly initialise try compose rectangle
Author:  Sakari Ailus 
Date:Mon Sep 4 15:57:37 2023 +0300

Initialise the try sink compose rectangle size to the sink compose
rectangle for binner and scaler sub-devices. This was missed due to the
faulty condition that lead to the compose rectangles to be initialised for
the pixel array sub-device where it is not relevant.

Fixes: ccfc97bdb5ae ("[media] smiapp: Add driver")
Cc: sta...@vger.kernel.org
Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 6a8116454f87..022e8712d48e 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -3097,7 +3097,7 @@ static int ccs_open(struct v4l2_subdev *sd, struct 
v4l2_subdev_fh *fh)
try_fmt->code = sensor->internal_csi_format->code;
try_fmt->field = V4L2_FIELD_NONE;
 
-   if (ssd != sensor->pixel_array)
+   if (ssd == sensor->pixel_array)
continue;
 
try_comp = v4l2_subdev_get_try_compose(sd, fh->state, i);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: v4l: subdev: Clear frame descriptor before get_frame_desc

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: v4l: subdev: Clear frame descriptor before get_frame_desc
Author:  Sakari Ailus 
Date:Fri Sep 15 14:23:28 2023 +0300

Clear frame descriptor before calling transmitter's get_frame_desc() op.
Also remove the corresponding memset() calls from drivers.

Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Reviewed-by: Tomi Valkeinen 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ds90ub913.c  | 2 --
 drivers/media/i2c/ds90ub953.c  | 2 --
 drivers/media/i2c/ds90ub960.c  | 2 --
 drivers/media/platform/nxp/imx-mipi-csis.c | 2 --
 drivers/media/v4l2-core/v4l2-subdev.c  | 9 +
 5 files changed, 9 insertions(+), 8 deletions(-)

---

diff --git a/drivers/media/i2c/ds90ub913.c b/drivers/media/i2c/ds90ub913.c
index 4bfa3b3cf619..8e9ebed09f64 100644
--- a/drivers/media/i2c/ds90ub913.c
+++ b/drivers/media/i2c/ds90ub913.c
@@ -362,8 +362,6 @@ static int ub913_get_frame_desc(struct v4l2_subdev *sd, 
unsigned int pad,
if (ret)
return ret;
 
-   memset(fd, 0, sizeof(*fd));
-
fd->type = V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL;
 
state = v4l2_subdev_lock_and_get_active_state(sd);
diff --git a/drivers/media/i2c/ds90ub953.c b/drivers/media/i2c/ds90ub953.c
index dc394e22a42c..644022312833 100644
--- a/drivers/media/i2c/ds90ub953.c
+++ b/drivers/media/i2c/ds90ub953.c
@@ -499,8 +499,6 @@ static int ub953_get_frame_desc(struct v4l2_subdev *sd, 
unsigned int pad,
if (ret)
return ret;
 
-   memset(fd, 0, sizeof(*fd));
-
fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
 
state = v4l2_subdev_lock_and_get_active_state(sd);
diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c
index 8ba5750f5a23..b8f3e5ca03ef 100644
--- a/drivers/media/i2c/ds90ub960.c
+++ b/drivers/media/i2c/ds90ub960.c
@@ -2786,8 +2786,6 @@ static int ub960_get_frame_desc(struct v4l2_subdev *sd, 
unsigned int pad,
if (!ub960_pad_is_source(priv, pad))
return -EINVAL;
 
-   memset(fd, 0, sizeof(*fd));
-
fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
 
state = v4l2_subdev_lock_and_get_active_state(>sd);
diff --git a/drivers/media/platform/nxp/imx-mipi-csis.c 
b/drivers/media/platform/nxp/imx-mipi-csis.c
index 5f93712bf485..6cb20b45e0a1 100644
--- a/drivers/media/platform/nxp/imx-mipi-csis.c
+++ b/drivers/media/platform/nxp/imx-mipi-csis.c
@@ -1114,8 +1114,6 @@ static int mipi_csis_get_frame_desc(struct v4l2_subdev 
*sd, unsigned int pad,
fd->type = V4L2_MBUS_FRAME_DESC_TYPE_PARALLEL;
fd->num_entries = 1;
 
-   memset(entry, 0, sizeof(*entry));
-
entry->flags = 0;
entry->pixelcode = csis_fmt->code;
entry->bus.csi2.vc = 0;
diff --git a/drivers/media/v4l2-core/v4l2-subdev.c 
b/drivers/media/v4l2-core/v4l2-subdev.c
index 32b7d9cd43e6..9cb04ace86ae 100644
--- a/drivers/media/v4l2-core/v4l2-subdev.c
+++ b/drivers/media/v4l2-core/v4l2-subdev.c
@@ -306,6 +306,14 @@ static int call_set_selection(struct v4l2_subdev *sd,
   sd->ops->pad->set_selection(sd, state, sel);
 }
 
+static int call_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
+  struct v4l2_mbus_frame_desc *fd)
+{
+   memset(fd, 0, sizeof(*fd));
+
+   return sd->ops->pad->get_frame_desc(sd, pad, fd);
+}
+
 static inline int check_edid(struct v4l2_subdev *sd,
 struct v4l2_subdev_edid *edid)
 {
@@ -446,6 +454,7 @@ static const struct v4l2_subdev_pad_ops 
v4l2_subdev_call_pad_wrappers = {
.set_edid   = call_set_edid,
.dv_timings_cap = call_dv_timings_cap,
.enum_dv_timings= call_enum_dv_timings,
+   .get_frame_desc = call_get_frame_desc,
.get_mbus_config= call_get_mbus_config,
 };
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Use active crop rectangle to configure registers

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Use active crop rectangle to configure registers
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:58 2023 +0300

Configure the crop-related registers from the values stored in the
active crop rectangle instead of the mode structure. This removes usage
of the mode from the imx219_set_framefmt(). No functional change is
intended.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 22 +++---
 1 file changed, 11 insertions(+), 11 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 2e1fbeef11a8..562cfee87b24 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -611,13 +611,17 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
 }
 
 static int imx219_set_framefmt(struct imx219 *imx219,
-  const struct v4l2_mbus_framefmt *format)
+  struct v4l2_subdev_state *state)
 {
-   const struct imx219_mode *mode = imx219->mode;
+   const struct v4l2_mbus_framefmt *format;
+   const struct v4l2_rect *crop;
unsigned int bpp;
u64 bin_mode;
int ret = 0;
 
+   format = v4l2_subdev_get_pad_format(>sd, state, 0);
+   crop = v4l2_subdev_get_pad_crop(>sd, state, 0);
+
switch (format->code) {
case MEDIA_BUS_FMT_SRGGB8_1X8:
case MEDIA_BUS_FMT_SGRBG8_1X8:
@@ -636,15 +640,13 @@ static int imx219_set_framefmt(struct imx219 *imx219,
}
 
cci_write(imx219->regmap, IMX219_REG_X_ADD_STA_A,
- mode->crop.left - IMX219_PIXEL_ARRAY_LEFT, );
+ crop->left - IMX219_PIXEL_ARRAY_LEFT, );
cci_write(imx219->regmap, IMX219_REG_X_ADD_END_A,
- mode->crop.left - IMX219_PIXEL_ARRAY_LEFT + mode->crop.width 
- 1,
- );
+ crop->left - IMX219_PIXEL_ARRAY_LEFT + crop->width - 1, );
cci_write(imx219->regmap, IMX219_REG_Y_ADD_STA_A,
- mode->crop.top - IMX219_PIXEL_ARRAY_TOP, );
+ crop->top - IMX219_PIXEL_ARRAY_TOP, );
cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A,
- mode->crop.top - IMX219_PIXEL_ARRAY_TOP + mode->crop.height - 
1,
- );
+ crop->top - IMX219_PIXEL_ARRAY_TOP + crop->height - 1, );
 
if (!imx219->mode->binning)
bin_mode = IMX219_BINNING_NONE;
@@ -714,7 +716,6 @@ static int imx219_start_streaming(struct imx219 *imx219,
  struct v4l2_subdev_state *state)
 {
struct i2c_client *client = v4l2_get_subdevdata(>sd);
-   const struct v4l2_mbus_framefmt *format;
int ret;
 
ret = pm_runtime_resume_and_get(>dev);
@@ -737,8 +738,7 @@ static int imx219_start_streaming(struct imx219 *imx219,
}
 
/* Apply format and crop settings. */
-   format = v4l2_subdev_get_pad_format(>sd, state, 0);
-   ret = imx219_set_framefmt(imx219, format);
+   ret = imx219_set_framefmt(imx219, state);
if (ret) {
dev_err(>dev, "%s failed to set frame format: %d\n",
__func__, ret);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Obtain media bus formats before initialising up sub-devices

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Obtain media bus formats before initialising up sub-devices
Author:  Sakari Ailus 
Date:Mon Oct 2 13:29:22 2023 +0300

The available mbus codes will soon be needed earlier, at the time
sub-devices are initialisaed. This is due to calling init_cfg() op via the
v4l2_subdev_init_finalize().

Move ccs_get_mbus_formats() before ccs_init_subdev() calls.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index e2669e9299ab..422fb6a4a907 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -3553,6 +3553,12 @@ static int ccs_probe(struct i2c_client *client)
sensor->pll.ext_clk_freq_hz = sensor->hwcfg.ext_clk;
sensor->pll.scale_n = CCS_LIM(sensor, SCALER_N_MIN);
 
+   rval = ccs_get_mbus_formats(sensor);
+   if (rval) {
+   rval = -ENODEV;
+   goto out_cleanup;
+   }
+
rval = ccs_init_subdev(sensor, sensor->scaler, " scaler", 2,
   MEDIA_ENT_F_PROC_VIDEO_SCALER);
if (rval)
@@ -3574,12 +3580,6 @@ static int ccs_probe(struct i2c_client *client)
if (rval)
goto out_cleanup;
 
-   rval = ccs_get_mbus_formats(sensor);
-   if (rval) {
-   rval = -ENODEV;
-   goto out_cleanup;
-   }
-
rval = ccs_init_late_controls(sensor);
if (rval) {
rval = -ENODEV;

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Drop IMX219_REG_CSI_LANE_MODE from common regs array

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Drop IMX219_REG_CSI_LANE_MODE from common regs 
array
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:32:53 2023 +0300

The IMX219_REG_CSI_LANE_MODE is configured twice, once with a hardcoded
value in the imx219_common_regs registers array, and once with the value
appropriate for the system in imx219_configure_lanes(). The latter is
enough, drop the former.

Fixes: ceddfd4493b3 ("media: i2c: imx219: Support four-lane operation")
Suggested-by: Dave Stevenson 
Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 1 -
 1 file changed, 1 deletion(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 530b03d78e34..a14de8f3dee7 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -214,7 +214,6 @@ static const struct cci_reg_sequence imx219_common_regs[] = 
{
{ IMX219_REG_Y_ODD_INC_A, 1 },
 
/* Output setup registers */
-   { IMX219_REG_CSI_LANE_MODE, IMX219_CSI_2_LANE_MODE },
{ IMX219_REG_DPHY_CTRL, IMX219_DPHY_CTRL_TIMING_AUTO },
{ IMX219_REG_EXCK_FREQ, IMX219_EXCK_FREQ(IMX219_XCLK_FREQ / 100) },
 };

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Name all subdev state variables 'state'

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Name all subdev state variables 'state'
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:08 2023 +0300

Subdev state variables are named with a mix of 'state' and 'sd_state'
through the driver. To improve consistency, name them all 'state'.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 2b88c5b8a7bf..358a6d77d88c 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -774,7 +774,7 @@ static void imx219_update_pad_format(struct imx219 *imx219,
 }
 
 static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
-struct v4l2_subdev_state *sd_state,
+struct v4l2_subdev_state *state,
 struct v4l2_subdev_mbus_code_enum *code)
 {
struct imx219 *imx219 = to_imx219(sd);
@@ -788,7 +788,7 @@ static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int imx219_enum_frame_size(struct v4l2_subdev *sd,
- struct v4l2_subdev_state *sd_state,
+ struct v4l2_subdev_state *state,
  struct v4l2_subdev_frame_size_enum *fse)
 {
struct imx219 *imx219 = to_imx219(sd);
@@ -810,7 +810,7 @@ static int imx219_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int imx219_set_pad_format(struct v4l2_subdev *sd,
-struct v4l2_subdev_state *sd_state,
+struct v4l2_subdev_state *state,
 struct v4l2_subdev_format *fmt)
 {
struct imx219 *imx219 = to_imx219(sd);
@@ -827,7 +827,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
 
imx219_update_pad_format(imx219, mode, >format, fmt->format.code);
 
-   format = v4l2_subdev_get_pad_format(sd, sd_state, 0);
+   format = v4l2_subdev_get_pad_format(sd, state, 0);
*format = fmt->format;
 
/*
@@ -837,7 +837,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
bin_h = min(IMX219_PIXEL_ARRAY_WIDTH / format->width, 2U);
bin_v = min(IMX219_PIXEL_ARRAY_HEIGHT / format->height, 2U);
 
-   crop = v4l2_subdev_get_pad_crop(sd, sd_state, 0);
+   crop = v4l2_subdev_get_pad_crop(sd, state, 0);
crop->width = format->width * bin_h;
crop->height = format->height * bin_v;
crop->left = (IMX219_NATIVE_WIDTH - crop->width) / 2;
@@ -872,12 +872,12 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
 }
 
 static int imx219_get_selection(struct v4l2_subdev *sd,
-   struct v4l2_subdev_state *sd_state,
+   struct v4l2_subdev_state *state,
struct v4l2_subdev_selection *sel)
 {
switch (sel->target) {
case V4L2_SEL_TGT_CROP: {
-   sel->r = *v4l2_subdev_get_pad_crop(sd, sd_state, 0);
+   sel->r = *v4l2_subdev_get_pad_crop(sd, state, 0);
return 0;
}
 

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Separate horizontal and vertical binning

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Separate horizontal and vertical binning
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:06 2023 +0300

The IMX219 has distinct binning registers for the horizontal and
vertical directions. Calculate their value and write them separately.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Jacopo Mondi 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 39 +++
 1 file changed, 27 insertions(+), 12 deletions(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 6bfdceaf5044..bf1c2a1dad95 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -90,10 +90,11 @@
 #define IMX219_REG_ORIENTATION CCI_REG8(0x0172)
 
 /* Binning  Mode */
-#define IMX219_REG_BINNING_MODECCI_REG16(0x0174)
-#define IMX219_BINNING_NONE0x
-#define IMX219_BINNING_2X2 0x0101
-#define IMX219_BINNING_2X2_ANALOG  0x0303
+#define IMX219_REG_BINNING_MODE_H  CCI_REG8(0x0174)
+#define IMX219_REG_BINNING_MODE_V  CCI_REG8(0x0175)
+#define IMX219_BINNING_NONE0x00
+#define IMX219_BINNING_X2  0x01
+#define IMX219_BINNING_X2_ANALOG   0x03
 
 #define IMX219_REG_CSI_DATA_FORMAT_A   CCI_REG16(0x018c)
 
@@ -615,7 +616,7 @@ static int imx219_set_framefmt(struct imx219 *imx219,
const struct v4l2_mbus_framefmt *format;
const struct v4l2_rect *crop;
unsigned int bpp;
-   u64 bin_mode;
+   u64 bin_h, bin_v;
int ret = 0;
 
format = v4l2_subdev_get_pad_format(>sd, state, 0);
@@ -647,14 +648,28 @@ static int imx219_set_framefmt(struct imx219 *imx219,
cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A,
  crop->top - IMX219_PIXEL_ARRAY_TOP + crop->height - 1, );
 
-   if (format->width == crop->width && format->height == crop->height)
-   bin_mode = IMX219_BINNING_NONE;
-   else if (bpp == 8)
-   bin_mode = IMX219_BINNING_2X2_ANALOG;
-   else
-   bin_mode = IMX219_BINNING_2X2;
+   switch (crop->width / format->width) {
+   case 1:
+   default:
+   bin_h = IMX219_BINNING_NONE;
+   break;
+   case 2:
+   bin_h = bpp == 8 ? IMX219_BINNING_X2_ANALOG : IMX219_BINNING_X2;
+   break;
+   }
+
+   switch (crop->height / format->height) {
+   case 1:
+   default:
+   bin_v = IMX219_BINNING_NONE;
+   break;
+   case 2:
+   bin_v = bpp == 8 ? IMX219_BINNING_X2_ANALOG : IMX219_BINNING_X2;
+   break;
+   }
 
-   cci_write(imx219->regmap, IMX219_REG_BINNING_MODE, bin_mode, );
+   cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_H, bin_h, );
+   cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_V, bin_v, );
 
cci_write(imx219->regmap, IMX219_REG_X_OUTPUT_SIZE,
  format->width, );

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: i2c: imx219: Move variables to inner scope

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: i2c: imx219: Move variables to inner scope
Author:  Laurent Pinchart 
Date:Sun Sep 24 18:33:09 2023 +0300

The exposure_max, exposure_def and hblank variables are only used in an
inner scope in the imx219_set_pad_format() function. Move them to that
scope to keep them closer to their usage and improve readability.

Signed-off-by: Laurent Pinchart 
Reviewed-by: Dave Stevenson 
Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/imx219.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
index 358a6d77d88c..8436880dcf7a 100644
--- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c
@@ -815,7 +815,6 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
 {
struct imx219 *imx219 = to_imx219(sd);
const struct imx219_mode *mode;
-   int exposure_max, exposure_def, hblank;
struct v4l2_mbus_framefmt *format;
struct v4l2_rect *crop;
unsigned int bin_h, bin_v;
@@ -844,6 +843,10 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
crop->top = (IMX219_NATIVE_HEIGHT - crop->height) / 2;
 
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
+   int exposure_max;
+   int exposure_def;
+   int hblank;
+
/* Update limits and set FPS to default */
__v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN,
 IMX219_VTS_MAX - mode->height, 1,

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Use sub-device active state

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Use sub-device active state
Author:  Sakari Ailus 
Date:Thu Aug 24 10:31:10 2023 +0300

Make use of sub-device active state. In most cases the effect on need for
acquiring the mutex is non-existent as access to the driver's core data
structure still needs to be serialised.

This still removes a lot of code as the code paths for active and try
state are the same in many cases.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 286 ++-
 drivers/media/i2c/ccs/ccs.h  |   4 +-
 2 files changed, 104 insertions(+), 186 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 422fb6a4a907..c6853622946b 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -508,9 +508,8 @@ static void __ccs_update_exposure_limits(struct ccs_sensor 
*sensor)
struct v4l2_ctrl *ctrl = sensor->exposure;
int max;
 
-   max = sensor->pixel_array->crop[CCS_PA_PAD_SRC].height
-   + sensor->vblank->val
-   - CCS_LIM(sensor, COARSE_INTEGRATION_TIME_MAX_MARGIN);
+   max = sensor->pa_src.height + sensor->vblank->val -
+   CCS_LIM(sensor, COARSE_INTEGRATION_TIME_MAX_MARGIN);
 
__v4l2_ctrl_modify_range(ctrl, ctrl->minimum, max, ctrl->step, max);
 }
@@ -728,15 +727,12 @@ static int ccs_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_VBLANK:
rval = ccs_write(sensor, FRAME_LENGTH_LINES,
-sensor->pixel_array->crop[
-CCS_PA_PAD_SRC].height
-+ ctrl->val);
+sensor->pa_src.height + ctrl->val);
 
break;
case V4L2_CID_HBLANK:
rval = ccs_write(sensor, LINE_LENGTH_PCK,
-sensor->pixel_array->crop[CCS_PA_PAD_SRC].width
-+ ctrl->val);
+sensor->pa_src.width + ctrl->val);
 
break;
case V4L2_CID_TEST_PATTERN:
@@ -1214,15 +1210,13 @@ static void ccs_update_blanking(struct ccs_sensor 
*sensor)
 
min = max_t(int,
CCS_LIM(sensor, MIN_FRAME_BLANKING_LINES),
-   min_fll - sensor->pixel_array->crop[CCS_PA_PAD_SRC].height);
-   max = max_fll - sensor->pixel_array->crop[CCS_PA_PAD_SRC].height;
+   min_fll - sensor->pa_src.height);
+   max = max_fll - sensor->pa_src.height;
 
__v4l2_ctrl_modify_range(vblank, min, max, vblank->step, min);
 
-   min = max_t(int,
-   min_llp - sensor->pixel_array->crop[CCS_PA_PAD_SRC].width,
-   min_lbp);
-   max = max_llp - sensor->pixel_array->crop[CCS_PA_PAD_SRC].width;
+   min = max_t(int, min_llp - sensor->pa_src.width, min_lbp);
+   max = max_llp - sensor->pa_src.width;
 
__v4l2_ctrl_modify_range(hblank, min, max, hblank->step, min);
 
@@ -1246,10 +1240,8 @@ static int ccs_pll_blanking_update(struct ccs_sensor 
*sensor)
 
dev_dbg(>dev, "real timeperframe\t100/%d\n",
sensor->pll.pixel_rate_pixel_array /
-   ((sensor->pixel_array->crop[CCS_PA_PAD_SRC].width
- + sensor->hblank->val) *
-(sensor->pixel_array->crop[CCS_PA_PAD_SRC].height
- + sensor->vblank->val) / 100));
+   ((sensor->pa_src.width + sensor->hblank->val) *
+(sensor->pa_src.height + sensor->vblank->val) / 100));
 
return 0;
 }
@@ -1756,28 +1748,22 @@ static int ccs_start_streaming(struct ccs_sensor 
*sensor)
goto out;
 
/* Analog crop start coordinates */
-   rval = ccs_write(sensor, X_ADDR_START,
-sensor->pixel_array->crop[CCS_PA_PAD_SRC].left);
+   rval = ccs_write(sensor, X_ADDR_START, sensor->pa_src.left);
if (rval < 0)
goto out;
 
-   rval = ccs_write(sensor, Y_ADDR_START,
-sensor->pixel_array->crop[CCS_PA_PAD_SRC].top);
+   rval = ccs_write(sensor, Y_ADDR_START, sensor->pa_src.top);
if (rval < 0)
goto out;
 
/* Analog crop end coordinates */
-   rval = ccs_write(
-   sensor, X_ADDR_END,
-   sensor->pixel_array->crop[CCS_PA_PAD_SRC].left
-   + sensor->pixel_array->crop[CCS_PA_PAD_SRC].width - 1);
+   rval = ccs_write(sensor, X_ADDR_END,
+sensor->pa_src.left + sensor->pa_src.width - 1);
if (rval < 0)
g

[git:media_stage/master] media: ccs: Fix driver quirk struct documentation

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Fix driver quirk struct documentation
Author:  Sakari Ailus 
Date:Thu Aug 24 15:18:18 2023 +0300

Fix documentation for struct ccs_quirk, a device specific struct for
managing deviations from the standard. The flags field was drifted away
from where it should have been.

Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-quirk.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-quirk.h 
b/drivers/media/i2c/ccs/ccs-quirk.h
index 5838fcda92fd..0b1a64958d71 100644
--- a/drivers/media/i2c/ccs/ccs-quirk.h
+++ b/drivers/media/i2c/ccs/ccs-quirk.h
@@ -32,12 +32,10 @@ struct ccs_sensor;
  * @reg: Pointer to the register to access
  * @value: Register value, set by the caller on write, or
  * by the quirk on read
- *
- * @flags: Quirk flags
- *
  * @return: 0 on success, -ENOIOCTLCMD if no register
  *  access may be done by the caller (default read
  *  value is zero), else negative error code on error
+ * @flags: Quirk flags
  */
 struct ccs_quirk {
int (*limits)(struct ccs_sensor *sensor);

___
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits


[git:media_stage/master] media: ccs: Move media_entity_pads_init to init from register

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Move media_entity_pads_init to init from register
Author:  Sakari Ailus 
Date:Mon Oct 2 10:25:37 2023 +0300

The media entity will soon need to be initialised before the sub-device
init finalisation that allocates memory for sub-device state. Do that now.

Signed-off-by: Sakari Ailus 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ccs/ccs-core.c | 75 +++-
 1 file changed, 36 insertions(+), 39 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 6bcce908f93b..e2669e9299ab 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -2958,16 +2958,10 @@ static int ccs_register_subdev(struct ccs_sensor 
*sensor,
if (!sink_ssd)
return 0;
 
-   rval = media_entity_pads_init(>sd.entity, ssd->npads, ssd->pads);
-   if (rval) {
-   dev_err(>dev, "media_entity_pads_init failed\n");
-   return rval;
-   }
-
rval = v4l2_device_register_subdev(sensor->src->sd.v4l2_dev, >sd);
if (rval) {
dev_err(>dev, "v4l2_device_register_subdev failed\n");
-   goto out_media_entity_cleanup;
+   return rval;
}
 
rval = media_create_pad_link(>sd.entity, source_pad,
@@ -2975,18 +2969,11 @@ static int ccs_register_subdev(struct ccs_sensor 
*sensor,
 link_flags);
if (rval) {
dev_err(>dev, "media_create_pad_link failed\n");
-   goto out_v4l2_device_unregister_subdev;
+   v4l2_device_unregister_subdev(>sd);
+   return rval;
}
 
return 0;
-
-out_v4l2_device_unregister_subdev:
-   v4l2_device_unregister_subdev(>sd);
-
-out_media_entity_cleanup:
-   media_entity_cleanup(>sd.entity);
-
-   return rval;
 }
 
 static void ccs_unregistered(struct v4l2_subdev *subdev)
@@ -3031,6 +3018,10 @@ out_err:
 static void ccs_cleanup(struct ccs_sensor *sensor)
 {
struct i2c_client *client = v4l2_get_subdevdata(>src->sd);
+   unsigned int i;
+
+   for (i = 0; i < sensor->ssds_used; i++)
+   media_entity_cleanup(>ssds[i].sd.entity);
 
device_remove_file(>dev, _attr_nvm);
device_remove_file(>dev, _attr_ident);
@@ -3038,14 +3029,15 @@ static void ccs_cleanup(struct ccs_sensor *sensor)
ccs_free_controls(sensor);
 }
 
-static void ccs_init_subdev(struct ccs_sensor *sensor,
-   struct ccs_subdev *ssd, const char *name,
-   unsigned short num_pads, u32 function)
+static int ccs_init_subdev(struct ccs_sensor *sensor,
+  struct ccs_subdev *ssd, const char *name,
+  unsigned short num_pads, u32 function)
 {
struct i2c_client *client = v4l2_get_subdevdata(>src->sd);
+   int rval;
 
if (!ssd)
-   return;
+   return 0;
 
if (ssd != sensor->src)
v4l2_subdev_init(>sd, _ops);
@@ -3072,12 +3064,20 @@ static void ccs_init_subdev(struct ccs_sensor *sensor,
 
ssd->sd.entity.ops = _entity_ops;
 
+   rval = media_entity_pads_init(>sd.entity, ssd->npads, ssd->pads);
+   if (rval) {
+   dev_err(>dev, "media_entity_pads_init failed\n");
+   return rval;
+   }
+
if (ssd == sensor->src)
-   return;
+   return 0;
 
ssd->sd.owner = THIS_MODULE;
ssd->sd.dev = >dev;
v4l2_set_subdevdata(>sd, client);
+
+   return 0;
 }
 
 static int ccs_init_cfg(struct v4l2_subdev *sd,
@@ -3553,12 +3553,18 @@ static int ccs_probe(struct i2c_client *client)
sensor->pll.ext_clk_freq_hz = sensor->hwcfg.ext_clk;
sensor->pll.scale_n = CCS_LIM(sensor, SCALER_N_MIN);
 
-   ccs_init_subdev(sensor, sensor->scaler, " scaler", 2,
-   MEDIA_ENT_F_PROC_VIDEO_SCALER);
-   ccs_init_subdev(sensor, sensor->binner, " binner", 2,
-   MEDIA_ENT_F_PROC_VIDEO_SCALER);
-   ccs_init_subdev(sensor, sensor->pixel_array, " pixel_array", 1,
-   MEDIA_ENT_F_CAM_SENSOR);
+   rval = ccs_init_subdev(sensor, sensor->scaler, " scaler", 2,
+  MEDIA_ENT_F_PROC_VIDEO_SCALER);
+   if (rval)
+   goto out_cleanup;
+   rval = ccs_init_subdev(sensor, sensor->binner, " binner", 2,
+  MEDIA_ENT_F_PROC_VIDEO_SCALER);
+   if (rval)
+   goto out_cleanup;
+   rval = ccs_init_subdev(sensor, sensor->pixel_array, " pixel_array", 1,
+ 

[git:media_stage/master] media: ov2740: Use sub-device active state

2023-10-07 Thread Hans Verkuil
This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ov2740: Use sub-device active state
Author:  Sakari Ailus 
Date:Thu Sep 7 15:10:03 2023 +0300

Use sub-device active state. Rely on control handler lock to serialise
access to the active state. Also clean up locking on s_stream handler.

Signed-off-by: Sakari Ailus 
Reviewed-by: Laurent Pinchart 
Signed-off-by: Hans Verkuil 

 drivers/media/i2c/ov2740.c | 109 +
 1 file changed, 42 insertions(+), 67 deletions(-)

---

diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c
index 6d5fb2789dc6..d83ac31efd9c 100644
--- a/drivers/media/i2c/ov2740.c
+++ b/drivers/media/i2c/ov2740.c
@@ -336,9 +336,6 @@ struct ov2740 {
/* Current mode */
const struct ov2740_mode *cur_mode;
 
-   /* To serialize asynchronus callbacks */
-   struct mutex mutex;
-
/* NVM data inforamtion */
struct nvm_data *nvm;
 
@@ -579,7 +576,6 @@ static int ov2740_init_controls(struct ov2740 *ov2740)
if (ret)
return ret;
 
-   ctrl_hdlr->lock = >mutex;
cur_mode = ov2740->cur_mode;
size = ARRAY_SIZE(link_freq_menu_items);
 
@@ -789,15 +785,15 @@ static int ov2740_set_stream(struct v4l2_subdev *sd, int 
enable)
 {
struct ov2740 *ov2740 = to_ov2740(sd);
struct i2c_client *client = v4l2_get_subdevdata(sd);
+   struct v4l2_subdev_state *sd_state;
int ret = 0;
 
-   mutex_lock(>mutex);
+   sd_state = v4l2_subdev_lock_and_get_active_state(>sd);
+
if (enable) {
ret = pm_runtime_resume_and_get(>dev);
-   if (ret < 0) {
-   mutex_unlock(>mutex);
-   return ret;
-   }
+   if (ret < 0)
+   goto out_unlock;
 
ret = ov2740_start_streaming(ov2740);
if (ret) {
@@ -810,7 +806,8 @@ static int ov2740_set_stream(struct v4l2_subdev *sd, int 
enable)
pm_runtime_put(>dev);
}
 
-   mutex_unlock(>mutex);
+out_unlock:
+   v4l2_subdev_unlock_state(sd_state);
 
return ret;
 }
@@ -828,48 +825,26 @@ static int ov2740_set_format(struct v4l2_subdev *sd,
  height, fmt->format.width,
  fmt->format.height);
 
-   mutex_lock(>mutex);
ov2740_update_pad_format(mode, >format);
-   if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
-   *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = 
fmt->format;
-   } else {
-   ov2740->cur_mode = mode;
-   __v4l2_ctrl_s_ctrl(ov2740->link_freq, mode->link_freq_index);
-   __v4l2_ctrl_s_ctrl_int64(ov2740->pixel_rate,
-to_pixel_rate(mode->link_freq_index));
-
-   /* Update limits and set FPS to default */
-   vblank_def = mode->vts_def - mode->height;
-   __v4l2_ctrl_modify_range(ov2740->vblank,
-mode->vts_min - mode->height,
-OV2740_VTS_MAX - mode->height, 1,
-vblank_def);
-   __v4l2_ctrl_s_ctrl(ov2740->vblank, vblank_def);
-   h_blank = to_pixels_per_line(mode->hts, mode->link_freq_index) -
- mode->width;
-   __v4l2_ctrl_modify_range(ov2740->hblank, h_blank, h_blank, 1,
-h_blank);
-   }
-   mutex_unlock(>mutex);
+   *v4l2_subdev_get_pad_format(sd, sd_state, fmt->pad) = fmt->format;
 
-   return 0;
-}
-
-static int ov2740_get_format(struct v4l2_subdev *sd,
-struct v4l2_subdev_state *sd_state,
-struct v4l2_subdev_format *fmt)
-{
-   struct ov2740 *ov2740 = to_ov2740(sd);
-
-   mutex_lock(>mutex);
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
-   fmt->format = *v4l2_subdev_get_try_format(>sd,
- sd_state,
- fmt->pad);
-   else
-   ov2740_update_pad_format(ov2740->cur_mode, >format);
+   return 0;
 
-   mutex_unlock(>mutex);
+   ov2740->cur_mode = mode;
+   __v4l2_ctrl_s_ctrl(ov2740->link_freq, mode->link_freq_index);
+   __v4l2_ctrl_s_ctrl_int64(ov2740->pixel_rate,
+to_pixel_rate(mode->link_freq_index));
+
+   /* Update limits and set FPS to default */
+   vblank_def = mode->vts_def - mode->height;
+   __v4l2_ctrl_modify_range(ov2740->vblank,
+mode->vts_min - mod

<    5   6   7   8   9   10   11   12   13   14   >