Skip to content

Conversation

@changchingyew
Copy link
Owner

No description provided.

Sakari Ailus and others added 30 commits October 14, 2025 07:36
Internal source pads will be used as routing endpoints in V4L2
[GS]_ROUTING IOCTLs, to indicate that the stream begins in the entity.
Internal source pads are pads that have both SINK and INTERNAL flags set.

Also prevent creating links to pads that have been flagged as internal and
initialising SOURCE pads with INTERNAL flag set.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Analog Devices is taking responsability for the maintenance of the Maxim
GMSL2/3 devices.
Add myself to the maintainers list and to the device tree bindings.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
MAX96717 is capable of address translation for the connected I2C slaves.

Add support for I2C ATR while keeping I2C gate for compatibility to
support this usecase.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
MAX96717 is capable of configuring various pin properties.

Add pinctrl/pinconf properties to support this usecase.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
MAX9295A is an older variant of the MAX96717 which does not support
tunnel mode.

Document the compatibility.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
MAX96793 is a newer variant of the MAX96717 which also supports GMSL3
links.

Document this compatibility.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Analog Devices is taking responsability for the maintenance of the Maxim
GMSL2/3 devices.
Add myself to the maintainers list and to the device tree bindings.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Acked-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
The MAX96712 and MAX96724 support up to 4 separate PHYs, depending on
the selected PHY configuration. Use patternProperties to document this.

The input ports are all the same, use patternProperties for them.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
MAX96712 and MAX96724 have more than one GMSL2 link, and each link is
capable of connecting to a separate serializer. If these serializers
have the same CFG pins configuration, they will also have the same I2C
address, causing conflicts unless the deserializer changes the address
of the connected serializers.

The MAX96712 and MAX96724 support changing the I2C address of the
connected serializers.

Document this capability.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
The GMSL links can carry power to the serializer when using coaxial
cables.

Document this capability.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
MAX96724F/MAX96724R are a lower capability variant of the MAX96724 which
only support a fixed rate of 3Gbps in the forward direction.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Analog Devices is taking responsability for the maintenance of the Maxim
GMSL2/3 devices.
Add myself to the maintainers list and to the device tree bindings.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
MAX96714R is a lower capability variant of the MAX96714 which only
supports a fixed rate of 3Gbps in the forward direction.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
The MAX9296A deserializer converts single or dual serial inputs to MIPI
CSI-2 outputs. The GMSL2 links operate at a fixed rate of 3Gbps or 6Gbps
in the forward direction and 187.5Mbps in the reverse direction.
In GMSL1 mode, each serial link can be paired with 3.12Gbps or 1.5Gbps
GMSL1 serializers or operate up to 4.5Gbps with GMSL2 serializers with
GMSL1 backward compatibility. The MAX9296A supports mixed GMSL2 and
GMSL1 links. The serial inputs operate independently, allowing videos
with different timings and resolutions to be received on each input.

MAX96716A supports both tunnel and pixel mode.
MAX96792A supports both tunnel and pixel mode, and has two GMSL3 links.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
These drivers are meant to be used as a common framework for Maxim
GMSL2/3 serializers and deserializers.

This framework enables support for the following new features across
all the chips:
 * Full Streams API support
 * .get_frame_desc()
 * .get_mbus_config()
 * I2C ATR
 * automatic GMSL link version negotiation
 * automatic stream id selection
 * automatic VC remapping
 * automatic pixel mode / tunnel mode selection
 * automatic double mode selection / data padding
 * logging of internal state and chip status registers via .log_status()
 * PHY modes
 * serializer pinctrl
 * TPG

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
These drivers are meant to be used as a common framework for Maxim
GMSL2/3 serializers.

This framework enables support for the following new features across
all the chips:
 * Full Streams API support
 * .get_frame_desc()
 * .get_mbus_config()
 * I2C ATR
 * automatic GMSL link version negotiation
 * automatic stream id selection
 * automatic VC remapping
 * automatic pixel mode / tunnel mode selection
 * automatic double mode selection / data padding
 * logging of internal state and chip status registers via .log_status()
 * PHY modes
 * serializer pinctrl
 * TPG

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
These drivers are meant to be used as a common framework for Maxim
GMSL2/3 deserializer.

This framework enables support for the following new features across
all the chips:
 * Full Streams API support
 * .get_frame_desc()
 * .get_mbus_config()
 * I2C ATR
 * automatic GMSL link version negotiation
 * automatic stream id selection
 * automatic VC remapping
 * automatic pixel mode / tunnel mode selection
 * automatic double mode selection / data padding
 * logging of internal state and chip status registers via .log_status()
 * PHY modes
 * serializer pinctrl
 * TPG

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Add a new MAX96717 driver that also supports MAX9295A, MAX96717F and
MAX96793.

Integrate it with the common serializer framework, while keeping
compatibility with existing usecases, avoiding code duplication, and
also enabling more features across all chips.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Add a new MAX96724 driver that also supports MAX96712, MAX96724F
and MAX96724R.

Integrate it with the common deserializer framework, while keeping
compatibility with existing usecases, avoiding code duplication, and
also enabling more features across all chips.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Tested-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Add a new MAX9296A driver that also supports MAX96714, MAX96714F,
MAX96714R, MAX96716A and MAX96792A.

Integrate it with the common Deserializer framework, while keeping
compatibility with existing usecases, avoiding code duplication, and
also enabling more features across all chips.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
The staging MAX96712 driver will be removed as its functionality has
been moved to the MAX96724 driver which makes use of the Maxim
GMSL2/3 deserializer framework.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Remove the staging MAX96712 driver.
Its functionality has been moved to the MAX96724 driver which makes use
of the Maxim GMSL2/3 deserializer framework.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Acked-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
The previous MAX96717 driver has been removed and its functionality has
been moved to a MAX96717 driver which makes use of the Maxim GMSL2/3
serializer framework.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
The previous MAX96714 driver has been removed and its functionality has
been moved to the MAX9296A driver which makes use of the Maxim GMSL2/3
serializer framework.

Signed-off-by: Cosmin Tanislav <demonsingur@gmail.com>
Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
Parse fwnode to check data lanes

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
khaiwenng and others added 20 commits October 15, 2025 02:33
Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In GMSL case, if device is not found as described in SSDT,
it will trigger unbind_subdev, which there are no subdev to
be unbind to begin with. Directly return to avoid calling
unbind or unregister_subdev to prevent kenel panic.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Add logs to print out sub devices that are pending to be bound
onto notifier

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Look for secondary fwnode in v4l2_subdev_get_fwnode_pad_1_to_1

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
fwnode does not support i2c-atr nodes structure.
points to parent fwnode instead.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Work for GMSL case. Need further checking on other use case

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In ACPI, ATR and MUX adapter are created dynamically
by drivers, there are no pre-allocated resource in ACPI namespace.
Adding identifier so that acpi driver can handle devices that
resides on ATR and MUX adapter.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In ACPI table, devices that should residing on parent MUX or ATR
adapters have dependencies on parent devices. Hence, clear the
dependencies if the adapter created is based by parent through
ATR or MUX. ACPI driver can then call register client for the
devices

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
pinconf_generic_dt_xxx only handled OF node, calling it in ACPI might
cause failure.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Retrieve adapter id from fwnode for static i2c adapter numbering.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Utilize i2c_add_numbered_adapter if static numbering is obtained from
FWnode.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
…izer

Retrieve and use the ID for child MUX Adapter if ID is found in FWnode.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
… streaming

Starting second stream in max_des will override the masking for first stream.
Instead of re-write all streams, only write to current selection of stream.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
use_atr should be in max_des_ops, instead of chip_info

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Register does not show the reflect the status of first pipe.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Index used for BACKTOP22 to configure PHY and stream ID used for
RX50_STR_SEL is incorrect. Update to use correct value.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In ACPI, there are no child node named i2c-gate available. instead,
store i2c-gate information in property

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In GMSL case, field is not propagated to Serializer.

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In case driver does not have v4l2-control that stores link frequency,
try to retrieve link frequency from pad

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
In case driver does not have v4l2-control that stores link frequency,
try to retrieve link frequency from pad

Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>

return adapter_pool;

kfree(adapter_pool->adapters);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we cannot reach this line.

err_free_adapter_pool:
i2c_atr_free_adapter_pool(adapter_pool);
return ret;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line between the functions


static void i2c_atr_free_adapter_pool(struct i2c_atr_adapter_pool *adapter_pool)
{
kfree(adapter_pool->adapters);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need to check for null pointers before freeing them? if we do or if there's no harm kfree a nullptr, then we can use this function in line 167?

@changchingyew changchingyew force-pushed the 6.17-maxim-serdes-v7 branch 2 times, most recently from d483493 to a94ae6f Compare November 6, 2025 05:26
Signed-off-by: He, Pengpeng <pengpengx.he@intel.com>
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants