Imaging ACPI configuration and upstream GMSL driver - #2
Open
changchingyew wants to merge 52 commits into
Open
Conversation
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 <[email protected]> Reviewed-by: Tomi Valkeinen <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Reviewed-by: Rob Herring (Arm) <[email protected]>
MAX96717 is capable of configuring various pin properties. Add pinctrl/pinconf properties to support this usecase. Signed-off-by: Cosmin Tanislav <[email protected]> Reviewed-by: Rob Herring (Arm) <[email protected]>
MAX9295A is an older variant of the MAX96717 which does not support tunnel mode. Document the compatibility. Signed-off-by: Cosmin Tanislav <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
MAX96793 is a newer variant of the MAX96717 which also supports GMSL3 links. Document this compatibility. Signed-off-by: Cosmin Tanislav <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Acked-by: Niklas Söderlund <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Reviewed-by: Niklas Söderlund <[email protected]> Reviewed-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Reviewed-by: Rob Herring (Arm) <[email protected]>
The GMSL links can carry power to the serializer when using coaxial cables. Document this capability. Signed-off-by: Cosmin Tanislav <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Reviewed-by: Niklas Söderlund <[email protected]> Reviewed-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]> Reviewed-by: Niklas Söderlund <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]> Acked-by: Rob Herring (Arm) <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]> Tested-by: Niklas Söderlund <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]> Acked-by: Niklas Söderlund <[email protected]>
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 <[email protected]>
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 <[email protected]>
Signed-off-by: Khai Wen Ng <[email protected]>
Signed-off-by: Khai Wen Ng <[email protected]>
Signed-off-by: Khai Wen Ng <[email protected]>
Signed-off-by: Yew, Chang Ching <[email protected]>
Parse fwnode to check data lanes Signed-off-by: Khai Wen Ng <[email protected]>
Signed-off-by: Khai Wen Ng <[email protected]>
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 <[email protected]>
Add logs to print out sub devices that are pending to be bound onto notifier Signed-off-by: Khai Wen Ng <[email protected]>
Look for secondary fwnode in v4l2_subdev_get_fwnode_pad_1_to_1 Signed-off-by: Khai Wen Ng <[email protected]>
fwnode does not support i2c-atr nodes structure. points to parent fwnode instead. Signed-off-by: Khai Wen Ng <[email protected]>
Work for GMSL case. Need further checking on other use case Signed-off-by: Khai Wen Ng <[email protected]>
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 <[email protected]>
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 <[email protected]>
pinconf_generic_dt_xxx only handled OF node, calling it in ACPI might cause failure. Signed-off-by: Khai Wen Ng <[email protected]>
Retrieve adapter id from fwnode for static i2c adapter numbering. Signed-off-by: Khai Wen Ng <[email protected]>
Utilize i2c_add_numbered_adapter if static numbering is obtained from FWnode. Signed-off-by: Khai Wen Ng <[email protected]>
…izer Retrieve and use the ID for child MUX Adapter if ID is found in FWnode. Signed-off-by: Khai Wen Ng <[email protected]>
… 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 <[email protected]>
use_atr should be in max_des_ops, instead of chip_info Signed-off-by: Khai Wen Ng <[email protected]>
Register does not show the reflect the status of first pipe. Signed-off-by: Khai Wen Ng <[email protected]>
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 <[email protected]>
In ACPI, there are no child node named i2c-gate available. instead, store i2c-gate information in property Signed-off-by: Khai Wen Ng <[email protected]>
In GMSL case, field is not propagated to Serializer. Signed-off-by: Khai Wen Ng <[email protected]>
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 <[email protected]>
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 <[email protected]>
changchingyew
force-pushed
the
6.17-maxim-serdes-v7
branch
from
October 17, 2025 03:06
7e55674 to
d5f2d7f
Compare
jluiI
reviewed
Oct 30, 2025
|
|
||
| return adapter_pool; | ||
|
|
||
| kfree(adapter_pool->adapters); |
| err_free_adapter_pool: | ||
| i2c_atr_free_adapter_pool(adapter_pool); | ||
| return ret; | ||
| } |
|
|
||
| static void i2c_atr_free_adapter_pool(struct i2c_atr_adapter_pool *adapter_pool) | ||
| { | ||
| kfree(adapter_pool->adapters); |
There was a problem hiding this comment.
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
force-pushed
the
6.17-maxim-serdes-v7
branch
2 times, most recently
from
November 6, 2025 05:26
d483493 to
a94ae6f
Compare
Signed-off-by: He, Pengpeng <[email protected]> Signed-off-by: Yew, Chang Ching <[email protected]>
Signed-off-by: Yew, Chang Ching <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.