RE: [PATCH v9 00/21] media: i2c: add Maxim GMSL2/3 serializer and deserializer drivers
From: Dayananda, Vivekananda
Date: Tue Mar 31 2026 - 14:29:07 EST
[Public]
There is one other patch that is required in addition, which enables the remote-control channel links from port 1 using REG3. Adding the patch below
----
From 36936732c6ecd599f1a26744bef3031e41194229 Mon Sep 17 00:00:00 2001
From: Vivekananda Dayananda <vivekana@xxxxxxx>
Date: Tue, 31 Mar 2026 08:12:20 -0700
Subject: [PATCH] media: i2c: maxim-serdes: max96724: allow selecting CC port
Add a DT property that lets platforms choose which control-channel port the MAX96724 exposes to the upstream I2C host. Document the new property for the MAX96724 compatibles and default to port 0 so existing device trees retain their behaviour.
The driver caches the chosen port and reprograms register 0x03 after every reset, restoring control-channel access regardless of whether the deserializer was power-cycled. Boards that need to talk through port 1 can now opt in by setting "maxim,control-channel-port = <1>;" in the device tree.
Signed-off-by: Vivekananda Dayananda <vivekana@xxxxxxx>
---
.../bindings/media/i2c/maxim,max96712.yaml | 8 +++
drivers/media/i2c/maxim-serdes/max96724.c | 59 ++++++++++++++++++-
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml
index efee188a100d..04429439d2f6 100644
--- a/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/maxim,max96712.yaml
@@ -33,6 +33,14 @@ properties:
enable-gpios: true
+ maxim,control-channel-port:
+ description:
+ Selects which deserializer control-channel port is connected to the
+ upstream I2C segment when the device resets. 0 selects port 0, 1 selects
+ port 1. Defaults to 0 when omitted.
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum: [0, 1]
+
i2c-alias-pool:
maxItems: 4
diff --git a/drivers/media/i2c/maxim-serdes/max96724.c b/drivers/media/i2c/maxim-serdes/max96724.c
index 65f2a8493a40..180815634c67 100644
--- a/drivers/media/i2c/maxim-serdes/max96724.c
+++ b/drivers/media/i2c/maxim-serdes/max96724.c
@@ -12,15 +12,37 @@
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/of_graph.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include "max_des.h"
#define MAX96724_REG0 0x0
+#define MAX96724_REG3 0x3
+#define MAX96724_REG3_CC_PORT_SEL(n) GENMASK((n) * 2 + 1, (n) * 2)
+#define MAX96724_REG3_CC_PORT_SEL_MASK (MAX96724_REG3_CC_PORT_SEL(0) | \
+ MAX96724_REG3_CC_PORT_SEL(1) | \
+ MAX96724_REG3_CC_PORT_SEL(2) | \
+ MAX96724_REG3_CC_PORT_SEL(3))
+#define MAX96724_REG3_CC_PORT_SEL_PORT0 0x2
+#define MAX96724_REG3_CC_PORT_SEL_PORT1 0x1
+#define MAX96724_REG3_CC_PORT_CFG(sel) \
+ (FIELD_PREP(MAX96724_REG3_CC_PORT_SEL(0), (sel)) | \
+ FIELD_PREP(MAX96724_REG3_CC_PORT_SEL(1), (sel)) | \
+ FIELD_PREP(MAX96724_REG3_CC_PORT_SEL(2), (sel)) | \
+ FIELD_PREP(MAX96724_REG3_CC_PORT_SEL(3), (sel)))
+#define MAX96724_REG3_CC_PORT_CFG_PORT0 \
+ MAX96724_REG3_CC_PORT_CFG(MAX96724_REG3_CC_PORT_SEL_PORT0)
+#define MAX96724_REG3_CC_PORT_CFG_PORT1 \
+ MAX96724_REG3_CC_PORT_CFG(MAX96724_REG3_CC_PORT_SEL_PORT1)
+
#define MAX96724_REG6 0x6
#define MAX96724_REG6_LINK_EN GENMASK(3, 0)
+#define MAX96724_REG7 0x7
+#define MAX96724_REG7_CC_CROSSOVER_SEL GENMASK(7, 4)
+
#define MAX96724_DEBUG_EXTRA 0x9
#define MAX96724_DEBUG_EXTRA_PCLK_SRC GENMASK(1, 0)
#define MAX96724_DEBUG_EXTRA_PCLK_SRC_25MHZ 0b00
@@ -223,6 +245,7 @@ struct max96724_priv {
struct regmap *regmap;
struct gpio_desc *gpiod_enable;
+ unsigned int cc_port_cfg;
};
struct max96724_chip_info {
@@ -274,7 +297,14 @@ static int max96724_reset(struct max96724_priv *priv)
fsleep(10000);
- return max96724_wait_for_device(priv);
+ ret = max96724_wait_for_device(priv);
+ if (ret)
+ return ret;
+
+ /* Restore I2C control-channel access after a reset. */
+ return regmap_update_bits(priv->regmap, MAX96724_REG3,
+ MAX96724_REG3_CC_PORT_SEL_MASK,
+ priv->cc_port_cfg);
}
static int __maybe_unused max96724_reg_read(struct max_des *des, unsigned int reg,
@@ -461,6 +491,12 @@ static int max96724_init(struct max_des *des)
return ret;
}
+ /* Enable I2C control ports crossover. */
+ ret = regmap_set_bits(priv->regmap, MAX96724_REG7,
+ MAX96724_REG7_CC_CROSSOVER_SEL);
+ if (ret)
+ return ret;
+
/* Set PHY mode. */
ret = regmap_update_bits(priv->regmap, MAX96724_MIPI_PHY0,
MAX96724_MIPI_PHY0_PHY_CONFIG,
@@ -1096,6 +1132,7 @@ static int max96724_probe(struct i2c_client *client)
struct max96724_priv *priv;
struct max_des_info *info;
struct max_des_ops *ops;
+ u32 cc_port;
int ret;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
@@ -1139,6 +1176,26 @@ static int max96724_probe(struct i2c_client *client)
usleep_range(4000, 5000);
}
+ priv->cc_port_cfg = MAX96724_REG3_CC_PORT_CFG_PORT0;
+
+ ret = device_property_read_u32(dev, "maxim,control-channel-port",
+ &cc_port);
+ if (!ret) {
+ switch (cc_port) {
+ case 0:
+ priv->cc_port_cfg = MAX96724_REG3_CC_PORT_CFG_PORT0;
+ break;
+ case 1:
+ priv->cc_port_cfg = MAX96724_REG3_CC_PORT_CFG_PORT1;
+ break;
+ default:
+ dev_err(dev, "Invalid control-channel port %u\n", cc_port);
+ return -EINVAL;
+ }
+ } else if (ret != -ENODATA && ret != -ENOENT && ret != -EINVAL) {
+ return ret;
+ }
+
*info = max96724_des_info;
info->versions = priv->info->versions;
info->modes = priv->info->modes;
--
2.34.1
> -----Original Message-----
> From: Ceclan Dumitru <mitrutzceclan@xxxxxxxxx>
> Sent: Monday, March 30, 2026 12:55 AM
> To: Dayananda, Vivekananda <vivekananda.dayananda@xxxxxxx>;
> dumitru.ceclan@xxxxxxxxxx; Tomi Valkeinen
> <tomi.valkeinen+renesas@xxxxxxxxxxxxxxxx>; Mauro Carvalho Chehab
> <mchehab@xxxxxxxxxx>; Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>; Laurent
> Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>; Julien Massot
> <julien.massot@xxxxxxxxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Niklas
> Söderlund <niklas.soderlund@xxxxxxxxxxxx>; Greg Kroah-Hartman
> <gregkh@xxxxxxxxxxxxxxxxxxx>; Cosmin Tanislav <cosmin.tanislav@xxxxxxxxxx>
> Cc: linux-media@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
> devicetree@xxxxxxxxxxxxxxx; linux-staging@xxxxxxxxxxxxxxx; linux-
> gpio@xxxxxxxxxxxxxxx; Niklas Söderlund
> <niklas.soderlund+renesas@xxxxxxxxxxxx>; martin.hecht@xxxxxxxx; Tomi
> Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>; Cosmin Tanislav
> <demonsingur@xxxxxxxxx>; Cory Keitz <ckeitz@xxxxxxxxxx>
> Subject: Re: [PATCH v9 00/21] media: i2c: add Maxim GMSL2/3 serializer and
> deserializer drivers
>
>
>
> On 3/26/26 7:00 PM, Dayananda, Vivekananda wrote:
> > [AMD Official Use Only - AMD Internal Distribution Only]
> >
> > Hi Dumitru, Sakari,
> >
> > Thank you for the latest patch series. We have been validating this on
> > the following test infrastructure:
> >
> > - IMX219 image sensor
> > - MAX96724 deserializer
> > - MAX96717 serializer
> >
> > With this setup the v9 drivers operate as expected and we are able to
> > exercise streaming end-to-end.
> >
> > One item worth noting: our deserializer sits on a custom daughter card
> > where the I2C bus is routed through port 1. The current MAX96724
> > driver only supports I2C on port 0. It would be valuable to extend the
> > driver to support additional I2C port configurations so that setups
> > like ours can be accommodated.
> >
> > Vivek
>
> Hi Vivek,
>
> I have found the EZ thread where the I2C port1 issue was raised and resolved.
> Would the inclusion of those 2 commits from Cosmin suffice or were there more
> changes required for your setup to work?
>
>
> >> -----Original Message-----
> >> From: Dumitru Ceclan via B4 Relay
> >> <devnull+dumitru.ceclan.analog.com@xxxxxxxxxx>
> >> Sent: Wednesday, March 11, 2026 12:17 AM
> >> To: Tomi Valkeinen <tomi.valkeinen+renesas@xxxxxxxxxxxxxxxx>; Mauro
> >> Carvalho Chehab <mchehab@xxxxxxxxxx>; Sakari Ailus
> >> <sakari.ailus@xxxxxxxxxxxxxxx>; Laurent Pinchart
> >> <laurent.pinchart@xxxxxxxxxxxxxxxx>; Julien Massot
> >> <julien.massot@xxxxxxxxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Niklas
> >> Söderlund <niklas.soderlund@xxxxxxxxxxxx>; Greg Kroah-Hartman
> >> <gregkh@xxxxxxxxxxxxxxxxxxx>; Cosmin Tanislav
> >> <cosmin.tanislav@xxxxxxxxxx>
> >> Cc: mitrutzceclan@xxxxxxxxx; linux-media@xxxxxxxxxxxxxxx; linux-
> >> kernel@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx; linux-
> >> staging@xxxxxxxxxxxxxxx; linux-gpio@xxxxxxxxxxxxxxx; Niklas Söderlund
> >> <niklas.soderlund+renesas@xxxxxxxxxxxx>; Martin Hecht
> >> <Martin.Hecht@xxxxxxxx>; Tomi Valkeinen
> >> <tomi.valkeinen@xxxxxxxxxxxxxxxx>; Cosmin Tanislav
> >> <demonsingur@xxxxxxxxx>; Cory Keitz <ckeitz@xxxxxxxxxx>
> >> Subject: [PATCH v9 00/21] media: i2c: add Maxim GMSL2/3 serializer
> >> and deserializer drivers
> >>
> >> This series adds new drivers for multiple Maxim GMSL2 and GMSL3
> >> devices, replacing the few GMSL2 drivers already in upstream, and
> >> introducing a common framework that can be used to implement such
> >> GMSL chips, which avoids code duplication while also adding support for
> previously unsupported features.
> >>
> >> While the normally acceptable and polite way would be to extend the
> >> current mainline drivers, the choice was made here to add a totally new set of
> drivers.
> >> The current drivers support only a small subset of the possible
> >> features, and only a few devices, so the end result after extending
> >> them would in any case be essentially fully rewritten, new drivers.
> >>
> >> This series depends on support for internal pads, for which a patch
> >> has been added.
> >>
> >> The previous version is at:
> >> https://lore.kernel.org/all/20250718152500.2656391-1-
> >> demonsingur@xxxxxxxxx/
> >>
> >> Since the previous series, Cosmin has left Analog Devices.
> >> Because included changes from previous version are trivial, his
> >> sign-off and tags were retained.
> >>
> >> The following deserializers are supported:
> >> * MAX96712 (already exists in staging)
> >> * MAX96714 (already exists)
> >> * MAX96714F (already exists)
> >> * MAX96714R (GMSL2)
> >> * MAX96716 (GMSL2)
> >> * MAX96724 (already exists as part of existing MAX96712 driver)
> >> * MAX96724F (GMSL2)
> >> * MAX96724R (GMSL2)
> >> * MAX9296A (GMSL2)
> >> * MAX96792A (GMSL3)
> >>
> >> The following serializers are supported:
> >> * MAX96717 (already exists)
> >> * MAX9295A (GMSL2)
> >> * MAX96793 (GMSL3)
> >>
> >> The following list enumerates new features that are supported by the
> >> common framework and their respective chip-specific drivers:
> >> * Full Streams API support. Most deserializers have support for more
> >> than one link, and more than one PHY. Streams support allows
> >> configuration of routing between these links and PHYs.
> >>
> >> * .get_frame_desc() support. Both the serializers and deserializers
> >> implement this to query and provide frame descriptor data. This is
> >> used in features explained in- depth below.
> >>
> >> * .get_mbus_config() support. The deserializers implement this to
> >> allow upstream devices to query the link frequency of its pads.
> >>
> >> * Address translation with I2C ATR for the serializers.
> >>
> >> * I2C ATR translation - some deserializers cannot do muxing since I2C
> >> communication channel masking is not available per-link, and the only
> >> other way to select links is to turn them off, causing link resets.
> >> For such cases, I2C ATR is used to change the address of the
> >> serializers at probe time.
> >>
> >> * Automatic GMSL link version negotiation between GMSL3, GMSL2 6Gbps,
> >> GMSL2 3Gbps.
> >>
> >> * Automatic stream id selection for deserializers which need
> >> serializers to stream on unique stream ids.
> >>
> >> * Automatic VC remapping on the deserializers. VCs are picked so that
> >> if they were unique on the sink pad, they will end up as unique on
> >> the source pad they are routed to too, prioritizing using the same VC
> >> ID as the sink pad, to facilitate the possibility of using tunnel mode.
> >>
> >> * Automatic pixel mode / tunnel mode selection. Tunnel mode is used
> >> when VC IDs do not need to be changed and all hardware supports
> >> tunnel mode, otherwise, pixel mode is used. The serializers are
> >> automatically switched between the two by using a private API.
> >>
> >> * Automatic double mode selection. In pixel mode, double mode can be
> >> used to pack two pixels into a single data unit, optimizing bandwidth
> >> usage. The serializers are automatically set up to support the double
> >> modes determined by the deserializers using a private API.
> >>
> >> * Automatic data padding. In pixel mode, if the data being
> >> transferred uses two different BPPs, data needs to be padded. The
> >> serializers automatically set this up depending on the configured double mode
> settings and incoming data types.
> >>
> >> * Logging. Both the deserializers and serializers implement the V4L2
> >> .log_status() ops to allow debugging of the internal state and
> >> important chip status registers.
> >>
> >> * PHY modes. Deserializer chips commonly have more than a single PHY.
> >> The firmware ports are parsed to determine the modes in which to
> >> configure the PHYs (2x4, 4x2, 1x4+2x2, 2x2+1x4, and variations using fewer
> lanes).
> >>
> >> * Serializer pinctrl. Serializers implement pinctrl to allow setting
> >> configs which would otherwise be inaccessible through GPIO: TX/RX via
> >> GMSL link, pull-up & pull-down (with strength), open-drain & push-pull, slew
> rate, RCLK pin selection.
> >>
> >> * TPG with selectable formats, resolutions and framerates for both
> >> serializers and deserializers.
> >>
> >> The drivers have been tested on the following hardware combinations,
> >> but further testing is welcome to ensure no / minimal breakage:
> >> * Raspberry Pi 5 + MAX9296A + 2xMAX96717 + 2xIMX219
> >> * Raspberry Pi 5 + MAX96714 + 1xMAX96717 + 1xIMX219
> >> * Raspberry Pi 5 + MAX96716A + 2xMAX96717 + 2xIMX219
> >> * Raspberry Pi 5 + MAX96712 + 4xMAX96717 + 4xIMX219
> >> * Raspberry Pi 5 + MAX96724 + 4xMAX96717 + 4xIMX219
> >> * Raspberry Pi 5 + MAX96792A + 1xMAX96793 + 1xMAX96717 + 2xIMX219
> >> * Raspberry Pi 5 + MAX96792A + 2xMAX96717 + 2xIMX219
> >> * Renesas V4H + MAX96712 + 2xMAX96717 + 2xIMX219
> >>
> >> Analog Devices is taking responsibility for the maintenance of these
> >> drivers and common framework, and plans to add support for new
> >> broad-market chips on top of them.
> >>
> >> Special thanks go to Tomi Valkeinen <
> >> tomi.valkeinen+renesas@xxxxxxxxxxxxxxxx>
> >> for testing the drivers, helping debug and coming up with ideas /
> >> implementations for various features.
> >>
> >> The following v4l2-compliance test still fails:
> >> fail: v4l2-test-subdevs.cpp(371): fmt.code == 0 || fmt.code == ~0U
> >> fail: v4l2-test-subdevs.cpp(418): checkMBusFrameFmt(node,
> fmt.format)
> >> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
> >>
> >> As the serializers and deserializers are format agnostic and the
> >> values set are not used to configure anything in the chips, this test
> >> does not make much sense in this context. If needed, a check for the specific
> ~0U value can be added.
> >>
> >> V9:
> >> * split max_des_ops into *_info and *_ops
> >> * use read_poll_timeout macro in *_wait_for_device()
> >> * return read_poll_timeout error -ETIMEDOUT in *_wait_for_device()
> >> * remove use_atr duplicate from max9296a_chip_info, present in
> >> max_des_info
> >> * fix max9296a DPLL register offset
> >> * fix C-PHY DPLL frequency in max9296a and max96724
> >> reported by: Cory Keitz <ckeitz@xxxxxxxxxx>
> >> * use MAX9296A_COMMON_INFO and MAX9296A_COMMON_OPS to
> simplify
> >> probe ops init
> >> * fix borked patches in previous version, actually remove MAX96717 and
> >> MAX96714 drivers
> >>
> >> V8:
> >> * max96717: use the renamed PIN_CONFIG_OUTPUT to _LEVEL
> >> * max96717: use the renamed set_rv ops from struct gpio_chip
> >> * dt-bindings: set minItems lane-polarities to 2
> >> * dt-bindings: "add myself as maintainer" commits were removed
> >> * max_des & max_ser: use a default format for set_routing
> >> * max_des & max_ser: return ENNOTTY in *_frame_interval for non-TPG
> >> pads
> >>
> >> V7:
> >> * dt-bindings: max9296a: use full max96717 compatible
> >> * max9296a: make max96714_rlms_reg_sequence static
> >> * explicitly include linux/bitfield.h
> >> * explicitly depend on I2C and PINCTRL
> >> * sort media_entity_operations
> >> * add has_pad_interdep to media_entity_operations
> >>
> >> V6:
> >> * max9296a: put rlms sequence in max9296a_chip_info
> >> * max_des: reflow stream id a comment
> >> * max_ser: remove exported symbols not used in other modules
> >> * max_ser: init mode to a supported value
> >> * add default routing
> >> * MAX_SERDES_GMSL_3 -> MAX_SERDES_GMSL_3_12GBPS
> >> * guard reg_read/write with CONFIG_VIDEO_ADV_DEBUG
> >> * put exported symbols in MAXIM_SERDES namespace
> >>
> >> V5:
> >> * dt-bindings: max96717: restrict RCLKOUT to pins 2 & 4
> >> * dt-bindings: max96717: remove confusing rclksel pinconf property
> >> * dt-bindings: max96717: remove maxim,gmsl-tx/rx pinconf property
> >> * dt-bindings: max96717: remove gmsl prefix from
> >> maxim,gmsl-tx-id/rx-id
> >> * dt-bindings: max96717: remove minimum: 0
> >> * dt-bindings: max96717: better document slew-rate
> >> * dt-bindings: max96717: better document maxim,jitter-compensation
> >> * dt-bindings: max96717: better document maxim,tx-id/rx-id
> >>
> >> * max_serdes: add default TPG values
> >> * max_serdes: remove MAX_MIPI_FMT macro
> >> * max_serdes: EXPORT_SYMBOL -> EXPORT_SYMBOL_GPL
> >> * max_serdes: remove EXPORT_SYMBOL_GPL from symbols not used in other
> >> modules
> >> * max_serdes: rename symbols/macros/types to have max_serdes prefix
> >> * max_serdes: slim down TPG functions
> >>
> >> * max_des: fix may be used uninitialized errors
> >> * max_des: fix misplaced TPG validation
> >> * max_des: fix setting pipe PHY in tunnel mode for chips that support
> >> both
> >> set_pipe_phy() and set_pipe_tunnel_phy()
> >> * max_des: move doubled_bpp/sink_bpps variables to usage place
> >> * max_des: do not dynamically control PHY enable, letting lanes be in
> >> LP-11 when not streaming
> >> * max_des: refactor get/set_pipe_stream_id() logic
> >> * max_des: remove explicit ret = 0
> >>
> >> * max_ser: make VC remaps not pipe-specific, allocate dynamically
> >>
> >> * max9296a: add missing 1080p30 TPG entry
> >> * max9296a: move BIT() left shift into macro
> >> * max9296a: move BIT() ternary into macro
> >> * max9296a: reuse max_des_ops for chip-specific ops\
> >> * max9296a: document and compress RLMS register writes
> >>
> >> * max96717: restrict RCLKOUT to pins 2 & 4 because of hardware
> >> capabilities
> >> * max96717: add support for XTAL/1, XTAL/2, XTAL/4 clocks
> >> * max96717: set RX_EN/TX_EN automatically
> >> * max96717: reorder custom pinconf flags
> >> * max96717: drop OF dependency
> >>
> >> * drop of_match_ptr
> >> * re-do some indentation
> >> * implement TPG pattern control
> >> * remove pr_info() usage
> >> * inline lane polarity val = 0
> >> * inline returns
> >> * rewrite some Kconfig docs
> >> * split up patches for easier review
> >>
> >> V4:
> >> * max_des: fix infinite version loop
> >> * max_des: fix pipe link id when there are more pipes than links
> >> * max_des: implement setting pipe link
> >> * max_des: do not pass routing to phy update
> >> * max_des: move GMSL version strings to max_serdes
> >> * max_des: split finding existing VC remap from adding a new one
> >> * max_des: add tracking for in-use pipes
> >> * max_des: skip unused pipes when finding / setting pixel/tunnel mode
> >> * max_des: simplify remap code
> >> * max_des: split set_pipe_phy() into set_pipe_tunnel_phy()
> >>
> >> * max_ser: clean up i2c_xlates printing
> >> * max_ser: fix changing serializer address
> >> * max_ser: move non-continuous mode check into max96717 driver
> >>
> >> * max96724: use regmap_set_bits for STREAM_SEL_ALL
> >> * max96724: match surrounding indent for MAX96724_PHY1_ALT_CLOCK
> >> * max96724: fix setting invalid PHY to 1 when PHY 0 is in 4-lane mode
> >> * max96724: remove support for setting pipe phy from max96712
> >> * max96724: fix setting double mode on pipes 4-7
> >> * max96724: drop powerdown gpios
> >>
> >> * max96717: use gpio_chip's set_rv
> >>
> >> * max9296a: switch versions to unsigned int
> >> * max9296a: remove parantheses from MAX9296A_MIPI_PHY18/20
> >> * max9296a: fix printing of PHY packet counts
> >> * max9296a: fix phy_hw_ids size
> >>
> >> * remove usage of cammel case in defines
> >> * move field_get/prep to max_serdes.h
> >> * rework stream id setup
> >> * rework tunnel/pixel mode finding
> >> * rework bpps retrieval
> >> * pass whole subdev state around
> >> * add helper for retrieving a route's hw components / frame desc
> >> * update pipe enable based on active routes
> >> * add support for tunnel-only chips and VC remaps in tunnel mode
> >> * simplify max_get_streams_masks()
> >> * add support for TPG
> >>
> >> V3:
> >> * dt-bindings: drop reflow text patches
> >>
> >> * dt-bindings: max96717: move pinctrl configuration into main file
> >> * dt-bindings: max96717: allow a single level of pins configuration
> >> * dt-bindings: max96717: use regex for matching pins nodes
> >> * dt-bindings: max96717: drop extra allOf in pinctrl configuration
> >> * dt-bindings: max96717: fix i2c-atr channel name regex
> >> * dt-bindings: max96717: limit pinctrl functions to gpio / rclkout
> >> * dt-bindings: max96717: limit pins for gpio / rclkout
> >> * dt-bindings: max96717: add description for bias-pull-up/down
> >> * dt-bindings: max96717: require pins and function properties
> >> * dt-bindings: max96717: turn single compatible strings into an enum
> >>
> >> * dt-bindings: max9296a: include indices in port descriptions
> >> * dt-bindings: max9296a: remove property-less schema from input ports
> >> * dt-bindings: max9296a: use ATR for MAX96716A too, removing MUX
> >> entirely
> >>
> >> * dt-bindings: max96712: include indices in port descriptions
> >> * dt-bindings: max96712: deprecate enable-gpios in favor of
> >> powerdown-gpios
> >> * dt-bindings: max96712: switch from MUX to ATR
> >>
> >> * dt-bindings: max96714: add support for MAX96714R
> >>
> >> * max_des: fix POC NULL check
> >> * max_des: remove index var in POC enable
> >> * max_des: fix writing empty remaps
> >> * max_des: skip mode setting in tunnel mode
> >> * max_des: remove a duplicate source->sd NULL check
> >> * max_des: set pipe tunnel mode even for disabled links
> >>
> >> * max_ser: apply TX ID changes irrespective of serializer ID
> >>
> >> * max9296a: fix typo in BACKTOP22
> >> * max9296a: make register macros more consistent
> >> * max9296a: switch MAX96716 from MUX to ATR
> >> * max9296a: deduplicate max9296a_phy_id() logic
> >> * max9296a: use proper PHY id in remaps
> >> * max9296a: fix DPLL reset clear
> >> * max9296a: limit MAX96714F to GMSL2 3Gbps
> >> * max9296a: add support for MAX96714R
> >> * max9296a: do not write GMSL3 link select registers in GMSL2 devices
> >> * max9296a: use field_prep when setting RX_RATE
> >> * max9296a: simplify setting SEL_STREAM for MAX96714
> >> * max9296a: max96716_set_pipe_phy -> max96716a_set_pipe_phy
> >> * max9296a: fix off-by-one in lane polarity when using
> >> polarity_on_physical_lanes
> >>
> >> * max96724: fix typo in BACKTOP22
> >> * max96724: switch from MUX to ATR
> >> * max96724: add support for powerdown GPIO
> >> * max96724: remove support for tunneling from MAX96712
> >> * max96724: only set tunnel-related bits when in tunnel mode
> >> * max96724: add support for MAX96724F/R
> >> * max96724: oneshot reset links after link selection
> >>
> >> * remove GMSL2 version defaults, set all supported versions
> >> explicitly
> >> * reorder GMSL versions to start from 0
> >> * add support for GMSL2 3Gbps
> >> * support GMSL version finding for devices using MUX / GATE
> >> * add support for deserializers which don't have individual control
> >> of each link's GMSL version
> >> * add support for deserializers that need unique stream ids across
> >> all serializers
> >> * select_link_version -> set_link_version
> >> * select_resets_link -> use_atr
> >>
> >> V2:
> >> * add missing compatible for MAX96717F
> >> * fix embarrassing dt-bindings mistakes
> >> * move MAX9296A/MAX96716/MAX96792A to a separate file as they have
> >> two links / PHYs, and adding those conditionally seems impossible
> >> ---
> >> Cosmin Tanislav (20):
> >> dt-bindings: media: i2c: max96717: add support for I2C ATR
> >> dt-bindings: media: i2c: max96717: add support for pinctrl/pinconf
> >> dt-bindings: media: i2c: max96717: add support for MAX9295A
> >> dt-bindings: media: i2c: max96717: add support for MAX96793
> >> dt-bindings: media: i2c: max96712: use pattern properties for ports
> >> dt-bindings: media: i2c: max96712: add support for I2C ATR
> >> dt-bindings: media: i2c: max96712: add support for POC supplies
> >> dt-bindings: media: i2c: max96712: add support for MAX96724F/R
> >> dt-bindings: media: i2c: max96714: add support for MAX96714R
> >> dt-bindings: media: i2c: add MAX9296A, MAX96716A, MAX96792A
> >> media: i2c: add Maxim GMSL2/3 serializer and deserializer framework
> >> media: i2c: add Maxim GMSL2/3 serializer framework
> >> media: i2c: add Maxim GMSL2/3 deserializer framework
> >> media: i2c: maxim-serdes: add MAX96717 driver
> >> media: i2c: maxim-serdes: add MAX96724 driver
> >> media: i2c: maxim-serdes: add MAX9296A driver
> >> arm64: defconfig: disable deprecated MAX96712 driver
> >> staging: media: remove MAX96712 driver
> >> media: i2c: remove MAX96717 driver
> >> media: i2c: remove MAX96714 driver
> >>
> >> Sakari Ailus (1):
> >> media: mc: Add INTERNAL pad flag
> >>
> >> .../bindings/media/i2c/maxim,max9296a.yaml | 242 ++
> >> .../bindings/media/i2c/maxim,max96712.yaml | 65 +-
> >> .../bindings/media/i2c/maxim,max96714.yaml | 5 +-
> >> .../bindings/media/i2c/maxim,max96717.yaml | 154 +-
> >> .../userspace-api/media/mediactl/media-types.rst | 9 +
> >> MAINTAINERS | 10 +-
> >> arch/arm64/configs/defconfig | 1 -
> >> drivers/media/i2c/Kconfig | 34 +-
> >> drivers/media/i2c/Makefile | 3 +-
> >> drivers/media/i2c/max96714.c | 1017 -------
> >> drivers/media/i2c/max96717.c | 1102 -------
> >> drivers/media/i2c/maxim-serdes/Kconfig | 60 +
> >> drivers/media/i2c/maxim-serdes/Makefile | 6 +
> >> drivers/media/i2c/maxim-serdes/max9296a.c | 1358 +++++++++
> >> drivers/media/i2c/maxim-serdes/max96717.c | 1686 +++++++++++
> >> drivers/media/i2c/maxim-serdes/max96724.c | 1193 ++++++++
> >> drivers/media/i2c/maxim-serdes/max_des.c | 3188
> >> ++++++++++++++++++++
> >> drivers/media/i2c/maxim-serdes/max_des.h | 156 +
> >> drivers/media/i2c/maxim-serdes/max_ser.c | 2138 +++++++++++++
> >> drivers/media/i2c/maxim-serdes/max_ser.h | 147 +
> >> drivers/media/i2c/maxim-serdes/max_serdes.c | 413 +++
> >> drivers/media/i2c/maxim-serdes/max_serdes.h | 183 ++
> >> drivers/media/mc/mc-entity.c | 15 +-
> >> drivers/staging/media/Kconfig | 2 -
> >> drivers/staging/media/Makefile | 1 -
> >> drivers/staging/media/max96712/Kconfig | 14 -
> >> drivers/staging/media/max96712/Makefile | 2 -
> >> drivers/staging/media/max96712/max96712.c | 487 ---
> >> include/uapi/linux/media.h | 1 +
> >> 29 files changed, 11006 insertions(+), 2686 deletions(-)
> >> ---
> >> base-commit: a15a902a91b78f1544760fb52ef0151f83815f81
> >> change-id: 20251107-gmsl2-3_serdes-3f2b885209c3
> >>
> >> Best regards,