Skip to content

Commit 9736b6a

Browse files
authored
[RSDEV-6494] - Fix rmmod/modprobe after camera disconnect (#393)
- Removed "ser_prim" from xavier device tree thus removing the ser address change to 0x42 - Added slight cleanup when probe fails, so next probe attempt will start cleanly Signed-off-by: ejgoldik <ehud.joseph.goldik@realsenseai.com>
1 parent d1d4669 commit 9736b6a

2 files changed

Lines changed: 13 additions & 13 deletions

File tree

hardware/realsense/tegra194-camera-d4xx-single.dtsi

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,10 @@
9292
reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;
9393
};
9494

95-
ser_prim: max9295_prim@40 {
96-
status = "ok";
97-
reg = <0x40>;
98-
compatible = "maxim,max9295";
99-
is-prim-ser;
100-
};
10195

102-
ser_a: max9295_a@42 {
96+
ser_a: max9295_a@40 {
10397
compatible = "maxim,max9295";
104-
reg = <0x42>;
98+
reg = <0x40>;
10599
maxim,gmsl-dser-device = <&dser>;
106100
};
107101

kernel/realsense/d4xx.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3780,34 +3780,40 @@ static int ds5_serdes_setup(struct ds5 *state)
37803780
ret = max9295_sdev_pair(state->ser_dev, &state->g_ctx);
37813781
if (ret) {
37823782
dev_err(&c->dev, "gmsl ser pairing failed\n");
3783-
return ret;
3783+
goto serdes_setup_end;
37843784
}
37853785

37863786
/* Register sensor to deserializer dev */
37873787
ret = state->dser_ops->sdev_register(state->dser_dev, &state->g_ctx);
37883788
if (ret) {
37893789
dev_err(&c->dev, "gmsl deserializer register failed\n");
3790-
return ret;
3790+
goto serdes_setup_end;
37913791
}
37923792

37933793
ret = ds5_gmsl_serdes_setup(state);
37943794
if (ret) {
37953795
dev_err(&c->dev, "%s gmsl serdes setup failed\n", __func__);
3796-
return ret;
3796+
goto serdes_setup_end;
37973797
}
37983798

37993799
ret = max9295_init_settings(state->ser_dev);
38003800
if (ret) {
38013801
dev_warn(&c->dev, "%s, failed to init max9295 settings\n",
38023802
__func__);
3803-
return ret;
3803+
goto serdes_setup_end;
38043804
}
38053805

38063806
ret = state->dser_ops->init_settings(state->dser_dev);
38073807
if (ret) {
38083808
dev_warn(&c->dev, "%s, failed to init %s settings\n",
38093809
__func__, state->dser_ops->name);
3810-
return ret;
3810+
goto serdes_setup_end;
3811+
}
3812+
3813+
serdes_setup_end:
3814+
if (ret) {
3815+
max9295_sdev_unpair(state->ser_dev, state->g_ctx.s_dev);
3816+
state->dser_ops->sdev_unregister(state->dser_dev, state->g_ctx.s_dev);
38113817
}
38123818

38133819
return ret;

0 commit comments

Comments
 (0)