Skip to content

Commit c2b8ee6

Browse files
committed
Remove 0017; MAX9295 GPIO tunneling consolidated into 0016
Rename GPIO tunneling patches to include 'max9295' in filename. Consolidate GPIO tunneling register config from separate max9295 patch into the max96712 support patch. Update max96712 patches with ESYNC GPIO tunneling support across all JetPack versions (5.0.2, 5.1.2, 6.0, 6.1, 6.2, 6.2.1, 7.0, 7.1).
1 parent 518bf98 commit c2b8ee6

20 files changed

Lines changed: 462 additions & 634 deletions

kernel/nvidia/5.0.2/0015-Add-GPIO-tunneling-for-the-external-sync-support.patch

Lines changed: 0 additions & 87 deletions
This file was deleted.
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
From f44c0d640f10125458ec3f65403b50cda607c49d Mon Sep 17 00:00:00 2001
2+
From: Nikolai-L <nikolai.lyskov@realsenseai.com>
3+
Date: Sun, 1 Feb 2026 10:30:13 +0200
4+
Subject: [PATCH] Add max9295 GPIO tunneling for the external sync support
5+
6+
Add MAX9295A serializer GPIO tunneling / ESYNC register configuration
7+
for MAX96712A external sync support.
8+
9+
Includes max9295_setup_gpio_tunneling() export for MAX96712A usage.
10+
11+
Signed-off-by: ejgoldik <ehud.joseph.goldik@realsenseai.com>
12+
---
13+
drivers/media/i2c/max9295.c | 67 +++++++++++++++++++++++++++++++++++++++++++++
14+
include/media/max9295.h | 3 +++
15+
2 files changed, 70 insertions(+)
16+
17+
diff --git a/drivers/media/i2c/max9295.c b/drivers/media/i2c/max9295.c
18+
index 4b03b1ef8..d7226af6e 100644
19+
--- a/drivers/media/i2c/max9295.c
20+
+++ b/drivers/media/i2c/max9295.c
21+
@@ -34,6 +34,10 @@
22+
#define MAX9295_CTRL0_ADDR 0x10
23+
#define MAX9295_SRC_CTRL_ADDR 0x2BF
24+
#define MAX9295_SRC_PWDN_ADDR 0x02BE
25+
+#define MAX9295_2C0_ADDR 0x02C0
26+
+#define MAX9295_2C1_ADDR 0x02C1
27+
+#define MAX9295_2C2_ADDR 0x02C2
28+
+#define MAX9295_2C3_ADDR 0x02C3
29+
#define MAX9295_SRC_OUT_RCLK_ADDR 0x3F1
30+
#define MAX9295_START_PIPE_ADDR 0x311
31+
#define MAX9295_PIPE_EN_ADDR 0x2
32+
@@ -94,7 +98,15 @@
33+
34+
#define MAX9295_RESET_ALL 0x80
35+
#define MAX9295_RESET_SRC 0x60
36+
+#define MAX9295_RESET_ESYNC 0x77
37+
+
38+
#define MAX9295_PWDN_GPIO 0x90
39+
+#define MAX9295_PWDN_ESYNC_EXT 0x24
40+
+
41+
+#define MAX9295_2C0_ESYNC 0x57
42+
+#define MAX9295_2C1_ESYNC 0x05
43+
+#define MAX9295_2C2_ESYNC 0x1F
44+
+#define MAX9295_2C3_ESYNC 0x5F
45+
46+
#define MAX9295_MAX_PIPES 0x4
47+
48+
@@ -383,6 +395,61 @@ error:
49+
}
50+
EXPORT_SYMBOL(max9295_setup_control);
51+
52+
+int max9295_setup_gpio_tunneling(struct device *dev)
53+
+{
54+
+ struct max9295 *priv = dev_get_drvdata(dev);
55+
+ int err = 0;
56+
+ unsigned int readback = 0;
57+
+
58+
+ mutex_lock(&priv->lock);
59+
+
60+
+ dev_info(dev, "%s: writing GPIO tunneling registers\n", __func__);
61+
+
62+
+ /* Configure ESYNC registers for MAX96712A deserializer */
63+
+ max9295_write_reg(dev, MAX9295_SRC_PWDN_ADDR, MAX9295_PWDN_ESYNC_EXT);
64+
+ regmap_read(priv->regmap, MAX9295_SRC_PWDN_ADDR, &readback);
65+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
66+
+ __func__, MAX9295_SRC_PWDN_ADDR, MAX9295_PWDN_ESYNC_EXT,
67+
+ readback, (readback == MAX9295_PWDN_ESYNC_EXT) ? "OK" : "MISMATCH");
68+
+
69+
+ max9295_write_reg(dev, MAX9295_SRC_CTRL_ADDR, MAX9295_RESET_ESYNC);
70+
+ regmap_read(priv->regmap, MAX9295_SRC_CTRL_ADDR, &readback);
71+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
72+
+ __func__, MAX9295_SRC_CTRL_ADDR, MAX9295_RESET_ESYNC,
73+
+ readback, (readback == MAX9295_RESET_ESYNC) ? "OK" : "MISMATCH");
74+
+
75+
+ max9295_write_reg(dev, MAX9295_2C0_ADDR, MAX9295_2C0_ESYNC);
76+
+ regmap_read(priv->regmap, MAX9295_2C0_ADDR, &readback);
77+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
78+
+ __func__, MAX9295_2C0_ADDR, MAX9295_2C0_ESYNC,
79+
+ readback, (readback == MAX9295_2C0_ESYNC) ? "OK" : "MISMATCH");
80+
+
81+
+ max9295_write_reg(dev, MAX9295_2C1_ADDR, MAX9295_2C1_ESYNC);
82+
+ regmap_read(priv->regmap, MAX9295_2C1_ADDR, &readback);
83+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
84+
+ __func__, MAX9295_2C1_ADDR, MAX9295_2C1_ESYNC,
85+
+ readback, (readback == MAX9295_2C1_ESYNC) ? "OK" : "MISMATCH");
86+
+
87+
+ max9295_write_reg(dev, MAX9295_2C2_ADDR, MAX9295_2C2_ESYNC);
88+
+ regmap_read(priv->regmap, MAX9295_2C2_ADDR, &readback);
89+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
90+
+ __func__, MAX9295_2C2_ADDR, MAX9295_2C2_ESYNC,
91+
+ readback, (readback == MAX9295_2C2_ESYNC) ? "OK" : "MISMATCH");
92+
+
93+
+ max9295_write_reg(dev, MAX9295_2C3_ADDR, MAX9295_2C3_ESYNC);
94+
+ regmap_read(priv->regmap, MAX9295_2C3_ADDR, &readback);
95+
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
96+
+ __func__, MAX9295_2C3_ADDR, MAX9295_2C3_ESYNC,
97+
+ readback, (readback == MAX9295_2C3_ESYNC) ? "OK" : "MISMATCH");
98+
+
99+
+ dev_info(dev, "%s: GPIO tunneling register config done\n", __func__);
100+
+
101+
+ mutex_unlock(&priv->lock);
102+
+
103+
+ return err;
104+
+}
105+
+EXPORT_SYMBOL(max9295_setup_gpio_tunneling);
106+
+
107+
int max9295_reset_control(struct device *dev)
108+
{
109+
struct max9295 *priv = dev_get_drvdata(dev);
110+
diff --git a/include/media/max9295.h b/include/media/max9295.h
111+
index bea15c414..6099859d2 100644
112+
--- a/include/media/max9295.h
113+
+++ b/include/media/max9295.h
114+
@@ -99,6 +99,9 @@ int max9295_sdev_unpair(struct device *dev, struct device *s_dev);
115+
int max9295_setup_streaming(struct device *dev);
116+
117+
int max9295_init_settings(struct device *dev);
118+
+
119+
+int max9295_setup_gpio_tunneling(struct device *dev);
120+
+
121+
/** @} */
122+
123+
#endif /* __MAX9295_H__ */
124+
--
125+
2.43.0

kernel/nvidia/5.0.2/0016-Adding-max96712-support-for-D4xx.patch

Lines changed: 4 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -3,93 +3,12 @@ From: ipilchin1 <inga.pilchin@realsenseai.com>
33
Date: Sun, 22 Mar 2026 14:15:30 +0200
44
Subject: [PATCH] Adding max96712 support for D4xx
55

6-
Add GPIO tunneling register configuration for MAX9295A serializer
7-
and MAX96712A deserializer to support external synchronization.
6+
Add MAX96712 deserializer driver support for D4XX cameras.
87

98
Signed-off-by: ejgoldik <ehud.joseph.goldik@realsenseai.com>
109
---
11-
drivers/media/i2c/max9295.c | 52 +++++++-
12-
drivers/media/i2c/max96712.c | 383 +++++++++++++++++++++++++++++++++++-
13-
include/media/max9295.h | 3 +
14-
3 files changed, 435 insertions(+), 6 deletions(-)
15-
16-
diff --git a/drivers/media/i2c/max9295.c b/drivers/media/i2c/max9295.c
17-
index 51e02edd7..d7226af6e 100644
18-
--- a/drivers/media/i2c/max9295.c
19-
+++ b/drivers/media/i2c/max9295.c
20-
@@ -35,6 +35,9 @@
21-
#define MAX9295_SRC_CTRL_ADDR 0x2BF
22-
#define MAX9295_SRC_PWDN_ADDR 0x02BE
23-
#define MAX9295_2C0_ADDR 0x02C0
24-
+#define MAX9295_2C1_ADDR 0x02C1
25-
+#define MAX9295_2C2_ADDR 0x02C2
26-
+#define MAX9295_2C3_ADDR 0x02C3
27-
#define MAX9295_SRC_OUT_RCLK_ADDR 0x3F1
28-
#define MAX9295_START_PIPE_ADDR 0x311
29-
#define MAX9295_PIPE_EN_ADDR 0x2
30-
@@ -99,8 +102,12 @@
31-
32-
#define MAX9295_PWDN_GPIO 0x90
33-
#define MAX9295_PWDN_ESYNC 0x04
34-
+#define MAX9295_PWDN_ESYNC_EXT 0x24
35-
36-
#define MAX9295_2C0_ESYNC 0x57
37-
+#define MAX9295_2C1_ESYNC 0x05
38-
+#define MAX9295_2C2_ESYNC 0x1F
39-
+#define MAX9295_2C3_ESYNC 0x5F
40-
41-
#define MAX9295_MAX_PIPES 0x4
42-
43-
@@ -383,6 +390,49 @@ error:
44-
}
45-
EXPORT_SYMBOL(max9295_setup_control);
46-
47-
+int max9295_setup_gpio_tunneling(struct device *dev)
48-
+{
49-
+ struct max9295 *priv = dev_get_drvdata(dev);
50-
+ int err = 0;
51-
+ unsigned int readback = 0;
52-
+
53-
+ mutex_lock(&priv->lock);
54-
+
55-
+ dev_info(dev, "%s: writing GPIO tunneling registers\n", __func__);
56-
+
57-
+ /* Override ESYNC config for MAX96712A deserializer */
58-
+ max9295_write_reg(dev, MAX9295_SRC_PWDN_ADDR, MAX9295_PWDN_ESYNC_EXT);
59-
+ regmap_read(priv->regmap, MAX9295_SRC_PWDN_ADDR, &readback);
60-
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
61-
+ __func__, MAX9295_SRC_PWDN_ADDR, MAX9295_PWDN_ESYNC_EXT,
62-
+ readback, (readback == MAX9295_PWDN_ESYNC_EXT) ? "OK" : "MISMATCH");
63-
+
64-
+ max9295_write_reg(dev, MAX9295_2C1_ADDR, MAX9295_2C1_ESYNC);
65-
+ regmap_read(priv->regmap, MAX9295_2C1_ADDR, &readback);
66-
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
67-
+ __func__, MAX9295_2C1_ADDR, MAX9295_2C1_ESYNC,
68-
+ readback, (readback == MAX9295_2C1_ESYNC) ? "OK" : "MISMATCH");
69-
+
70-
+ max9295_write_reg(dev, MAX9295_2C2_ADDR, MAX9295_2C2_ESYNC);
71-
+ regmap_read(priv->regmap, MAX9295_2C2_ADDR, &readback);
72-
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
73-
+ __func__, MAX9295_2C2_ADDR, MAX9295_2C2_ESYNC,
74-
+ readback, (readback == MAX9295_2C2_ESYNC) ? "OK" : "MISMATCH");
75-
+
76-
+ max9295_write_reg(dev, MAX9295_2C3_ADDR, MAX9295_2C3_ESYNC);
77-
+ regmap_read(priv->regmap, MAX9295_2C3_ADDR, &readback);
78-
+ dev_info(dev, "%s: reg 0x%04x written 0x%02x readback 0x%02x %s\n",
79-
+ __func__, MAX9295_2C3_ADDR, MAX9295_2C3_ESYNC,
80-
+ readback, (readback == MAX9295_2C3_ESYNC) ? "OK" : "MISMATCH");
81-
+
82-
+ dev_info(dev, "%s: GPIO tunneling register config done\n", __func__);
83-
+
84-
+ mutex_unlock(&priv->lock);
85-
+
86-
+ return err;
87-
+}
88-
+EXPORT_SYMBOL(max9295_setup_gpio_tunneling);
89-
+
90-
int max9295_reset_control(struct device *dev)
91-
{
92-
struct max9295 *priv = dev_get_drvdata(dev);
10+
drivers/media/i2c/max96712.c | 319 ++++++++++++++++++++++++++++++++++-
11+
1 file changed, 317 insertions(+), 2 deletions(-)
9312

9413
diff --git a/drivers/media/i2c/max96712.c b/drivers/media/i2c/max96712.c
9514
index 8081385f0..52836c0d7 100644
@@ -557,18 +476,5 @@ index 8081385f0..52836c0d7 100644
557476
.probe = max96712_probe,
558477
.remove = max96712_remove,
559478
.id_table = max96712_id,
560-
diff --git a/include/media/max9295.h b/include/media/max9295.h
561-
index bea15c414..6099859d2 100644
562-
--- a/include/media/max9295.h
563-
+++ b/include/media/max9295.h
564-
@@ -99,6 +99,9 @@ int max9295_sdev_unpair(struct device *dev, struct device *s_dev);
565-
int max9295_setup_streaming(struct device *dev);
566-
567-
int max9295_init_settings(struct device *dev);
568-
+
569-
+int max9295_setup_gpio_tunneling(struct device *dev);
570-
+
571-
/** @} */
572-
573-
#endif /* __MAX9295_H__ */
574479
--
480+
2.43.0

0 commit comments

Comments
 (0)