Skip to content

Commit 0b2d455

Browse files
josuahkartben
authored andcommitted
drivers: video: hotfix: force use of constant value for 'source_dev'
In Clang 16 run with some flags, the compiler does not accept a static const variables as struct initializer. This caused build errors in only some contexts. Always use the devicetree macros to access the source device node as a workaround. Signed-off-by: Josuah Demangeon <[email protected]>
1 parent a15b663 commit 0b2d455

6 files changed

+24
-15
lines changed

drivers/video/video_emul_rx.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,11 @@ int emul_rx_init(const struct device *dev)
269269
return 0;
270270
}
271271

272+
#define SOURCE_DEV(n) DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 0, 0)))
273+
272274
#define EMUL_RX_DEFINE(n) \
273275
static const struct emul_rx_config emul_rx_cfg_##n = { \
274-
.source_dev = \
275-
DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 0, 0))), \
276+
.source_dev = SOURCE_DEV(n), \
276277
}; \
277278
\
278279
static struct emul_rx_data emul_rx_data_##n = { \
@@ -282,6 +283,6 @@ int emul_rx_init(const struct device *dev)
282283
DEVICE_DT_INST_DEFINE(n, &emul_rx_init, NULL, &emul_rx_data_##n, &emul_rx_cfg_##n, \
283284
POST_KERNEL, CONFIG_VIDEO_INIT_PRIORITY, &emul_rx_driver_api); \
284285
\
285-
VIDEO_DEVICE_DEFINE(emul_rx_##n, DEVICE_DT_INST_GET(n), emul_rx_cfg_##n.source_dev);
286+
VIDEO_DEVICE_DEFINE(emul_rx_##n, DEVICE_DT_INST_GET(n), SOURCE_DEV(n));
286287

287288
DT_INST_FOREACH_STATUS_OKAY(EMUL_RX_DEFINE)

drivers/video/video_esp32_dvp.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -428,9 +428,11 @@ static DEVICE_API(video, esp32_driver_api) = {
428428

429429
PINCTRL_DT_INST_DEFINE(0);
430430

431+
#define SOURCE_DEV(n) DEVICE_DT_GET(DT_INST_PHANDLE(n, source))
432+
431433
static const struct video_esp32_config esp32_config = {
432434
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(0),
433-
.source_dev = DEVICE_DT_GET(DT_INST_PHANDLE(0, source)),
435+
.source_dev = SOURCE_DEV(0),
434436
.dma_dev = ESP32_DT_INST_DMA_CTLR(0, rx),
435437
.rx_dma_channel = DT_INST_DMAS_CELL_BY_NAME(0, rx, channel),
436438
.data_width = DT_INST_PROP_OR(0, data_width, 8),
@@ -450,7 +452,7 @@ static struct video_esp32_data esp32_data = {0};
450452
DEVICE_DT_INST_DEFINE(0, video_esp32_init, NULL, &esp32_data, &esp32_config, POST_KERNEL,
451453
CONFIG_VIDEO_INIT_PRIORITY, &esp32_driver_api);
452454

453-
VIDEO_DEVICE_DEFINE(esp32, DEVICE_DT_INST_GET(0), esp32_config.source_dev);
455+
VIDEO_DEVICE_DEFINE(esp32, DEVICE_DT_INST_GET(0), SOURCE_DEV(0));
454456

455457
static int video_esp32_cam_init_master_clock(void)
456458
{

drivers/video/video_mcux_csi.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -456,9 +456,11 @@ static DEVICE_API(video, video_mcux_csi_driver_api) = {
456456
#if 1 /* Unique Instance */
457457
PINCTRL_DT_INST_DEFINE(0);
458458

459+
#define SOURCE_DEV(n) DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 0, 0)))
460+
459461
static const struct video_mcux_csi_config video_mcux_csi_config_0 = {
460462
.base = (CSI_Type *)DT_INST_REG_ADDR(0),
461-
.source_dev = DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(0, 0, 0))),
463+
.source_dev = SOURCE_DEV(0),
462464
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(0),
463465
};
464466

@@ -481,6 +483,6 @@ DEVICE_DT_INST_DEFINE(0, &video_mcux_csi_init_0, NULL, &video_mcux_csi_data_0,
481483
&video_mcux_csi_config_0, POST_KERNEL, CONFIG_VIDEO_MCUX_CSI_INIT_PRIORITY,
482484
&video_mcux_csi_driver_api);
483485

484-
VIDEO_DEVICE_DEFINE(csi, DEVICE_DT_INST_GET(0), video_mcux_csi_config_0.source_dev);
486+
VIDEO_DEVICE_DEFINE(csi, DEVICE_DT_INST_GET(0), SOURCE_DEV(0));
485487

486488
#endif

drivers/video/video_mcux_mipi_csi2rx.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ static int mipi_csi2rx_init(const struct device *dev)
320320
return mipi_csi2rx_update_settings(dev, VIDEO_EP_ALL);
321321
}
322322

323+
#define SOURCE_DEV(n) DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 1, 0)))
324+
323325
#define MIPI_CSI2RX_INIT(n) \
324326
static struct mipi_csi2rx_data mipi_csi2rx_data_##n = { \
325327
.csi2rxConfig.laneNum = DT_PROP_LEN(DT_INST_ENDPOINT_BY_ID(n, 1, 0), data_lanes), \
@@ -331,15 +333,13 @@ static int mipi_csi2rx_init(const struct device *dev)
331333
\
332334
static const struct mipi_csi2rx_config mipi_csi2rx_config_##n = { \
333335
.base = (MIPI_CSI2RX_Type *)DT_INST_REG_ADDR(n), \
334-
.sensor_dev = \
335-
DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 1, 0))), \
336+
.sensor_dev = SOURCE_DEV(n), \
336337
}; \
337338
\
338339
DEVICE_DT_INST_DEFINE(n, &mipi_csi2rx_init, NULL, &mipi_csi2rx_data_##n, \
339340
&mipi_csi2rx_config_##n, POST_KERNEL, CONFIG_VIDEO_INIT_PRIORITY, \
340341
&mipi_csi2rx_driver_api); \
341342
\
342-
VIDEO_DEVICE_DEFINE(mipi_csi2rx_##n, DEVICE_DT_INST_GET(n), \
343-
mipi_csi2rx_config_##n.sensor_dev);
343+
VIDEO_DEVICE_DEFINE(mipi_csi2rx_##n, DEVICE_DT_INST_GET(n), SOURCE_DEV(n));
344344

345345
DT_INST_FOREACH_STATUS_OKAY(MIPI_CSI2RX_INIT)

drivers/video/video_mcux_smartdma.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,13 @@ static DEVICE_API(video, nxp_video_sdma_api) = {
365365
.flush = nxp_video_sdma_flush
366366
};
367367

368+
#define SOURCE_DEV(inst) DEVICE_DT_GET(DT_INST_PHANDLE(inst, sensor))
369+
368370
#define NXP_VIDEO_SDMA_INIT(inst) \
369371
PINCTRL_DT_INST_DEFINE(inst); \
370372
const struct nxp_video_sdma_config sdma_config_##inst = { \
371373
.dma_dev = DEVICE_DT_GET(DT_INST_PARENT(inst)), \
372-
.sensor_dev = DEVICE_DT_GET(DT_INST_PHANDLE(inst, sensor)), \
374+
.sensor_dev = SOURCE_DEV(n), \
373375
.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \
374376
.vsync_pin = DT_INST_PROP(inst, vsync_pin), \
375377
.hsync_pin = DT_INST_PROP(inst, hsync_pin), \
@@ -383,6 +385,6 @@ static DEVICE_API(video, nxp_video_sdma_api) = {
383385
&sdma_config_##inst, POST_KERNEL, \
384386
CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &nxp_video_sdma_api); \
385387
\
386-
VIDEO_DEVICE_DEFINE(sdma_##inst, DEVICE_DT_INST_GET(inst), sdma_config_##inst.sensor_dev);
388+
VIDEO_DEVICE_DEFINE(sdma_##inst, DEVICE_DT_INST_GET(inst), SOURCE_DEV(inst));
387389

388390
DT_INST_FOREACH_STATUS_OKAY(NXP_VIDEO_SDMA_INIT)

drivers/video/video_stm32_dcmi.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -436,14 +436,16 @@ static struct video_stm32_dcmi_data video_stm32_dcmi_data_0 = {
436436
},
437437
};
438438

439+
#define SOURCE_DEV(n) DEVICE_DT_GET(DT_INST_PHANDLE(n, sensor))
440+
439441
static const struct video_stm32_dcmi_config video_stm32_dcmi_config_0 = {
440442
.pclken = {
441443
.enr = DT_INST_CLOCKS_CELL(0, bits),
442444
.bus = DT_INST_CLOCKS_CELL(0, bus)
443445
},
444446
.irq_config = video_stm32_dcmi_irq_config_func,
445447
.pctrl = PINCTRL_DT_INST_DEV_CONFIG_GET(0),
446-
.sensor_dev = DEVICE_DT_GET(DT_INST_PHANDLE(0, sensor)),
448+
.sensor_dev = SOURCE_DEV(0),
447449
DCMI_DMA_CHANNEL(0, PERIPHERAL, MEMORY)
448450
};
449451

@@ -500,4 +502,4 @@ DEVICE_DT_INST_DEFINE(0, &video_stm32_dcmi_init,
500502
POST_KERNEL, CONFIG_VIDEO_INIT_PRIORITY,
501503
&video_stm32_dcmi_driver_api);
502504

503-
VIDEO_DEVICE_DEFINE(dcmi, DEVICE_DT_INST_GET(0), video_stm32_dcmi_config_0.sensor_dev);
505+
VIDEO_DEVICE_DEFINE(dcmi, DEVICE_DT_INST_GET(0), SOURCE_DEV(0));

0 commit comments

Comments
 (0)