Message ID | 20241105-csi_dcmipp_mp25-v2-0-b9fc8a7273c2@foss.st.com |
---|---|
Headers | show |
Series | media: stm32: introduction of CSI / DCMIPP for STM32MP25 | expand |
On Di, 2024-11-05 at 08:49 +0100, Alain Volmat wrote: > The STM32 CSI controller is tightly coupled with the DCMIPP and act as an > input stage to receive data coming from the sensor and transferring > them into the DCMIPP. > > Signed-off-by: Alain Volmat <alain.volmat@foss.st.com> > > --- > v2: correct data-lanes handling, using values 1 & 2 > update yaml filename in MAINTAINERS > --- > MAINTAINERS | 8 + > drivers/media/platform/st/stm32/Kconfig | 14 + > drivers/media/platform/st/stm32/Makefile | 1 + > drivers/media/platform/st/stm32/stm32-csi.c | 1144 +++++++++++++++++++++++++++ > 4 files changed, 1167 insertions(+) > [...] > diff --git a/drivers/media/platform/st/stm32/stm32-csi.c b/drivers/media/platform/st/stm32/stm32-csi.c > new file mode 100644 > index 0000000000000000000000000000000000000000..c7f47472c6b3699e94113ce0f38b280a2e45ce15 > --- /dev/null > +++ b/drivers/media/platform/st/stm32/stm32-csi.c > @@ -0,0 +1,1144 @@ [...] > +static int stm32_csi_get_resources(struct stm32_csi_dev *csidev, > + struct platform_device *pdev) > +{ > + int irq, ret; > + > + csidev->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); > + if (IS_ERR(csidev->base)) > + return dev_err_probe(&pdev->dev, PTR_ERR(csidev->base), > + "Failed to ioremap resource\n"); > + > + csidev->pclk = devm_clk_get(&pdev->dev, "pclk"); > + if (IS_ERR(csidev->pclk)) > + return dev_err_probe(&pdev->dev, PTR_ERR(csidev->pclk), > + "Couldn't get pclk\n"); > + > + csidev->txesc = devm_clk_get(&pdev->dev, "txesc"); > + if (IS_ERR(csidev->txesc)) > + return dev_err_probe(&pdev->dev, PTR_ERR(csidev->txesc), > + "Couldn't get txesc\n"); > + > + csidev->csi2phy = devm_clk_get(&pdev->dev, "csi2phy"); > + if (IS_ERR(csidev->csi2phy)) > + return dev_err_probe(&pdev->dev, PTR_ERR(csidev->csi2phy), > + "Couldn't get csi2phy\n"); Consider using devm_clk_bulk_get(). > + csidev->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL); > + if (IS_ERR(csidev->rstc)) > + return dev_err_probe(&pdev->dev, PTR_ERR(csidev->rstc), > + "Couldn't get reset control\n"); If this wasn't in a separate function, rstc wouldn't have to be stored on csidev as it's only ever used in stm32_csi_probe(). > + > + csidev->supplies[0].supply = "vdd"; > + csidev->supplies[1].supply = "vdda18"; > + ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(csidev->supplies), > + csidev->supplies); > + if (ret) > + return dev_err_probe(&pdev->dev, ret, > + "Failed to request regulator vdd\n"); > + > + irq = platform_get_irq(pdev, 0); > + if (irq < 0) > + return irq; > + > + ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, > + stm32_csi_irq_thread, IRQF_ONESHOT, > + dev_name(&pdev->dev), csidev); > + if (ret) > + return dev_err_probe(&pdev->dev, ret, > + "Unable to request irq"); > + > + return 0; > +} regards Philipp
This series introduces the camera pipeline support for the STM32MP25 SOC. The STM32MP25 has 3 pipelines, fed from a single camera input which can be either parallel or csi. This series adds the basic support for the 1st pipe (dump) which, in term of features is same as the one featured on the STM32MP13 SOC. It focuses on introduction of the CSI input stage for the DCMIPP, and the CSI specific new control code for the DCMIPP. One of the subdev of the DCMIPP, dcmipp_parallel is now renamed as dcmipp_input since it allows to not only control the parallel but also the csi interface. Signed-off-by: Alain Volmat <alain.volmat@foss.st.com> --- Alain Volmat (15): media: stm32: dcmipp: correct dma_set_mask_and_coherent mask value dt-bindings: media: add description of stm32 csi media: stm32: csi: addition of the STM32 CSI driver media: stm32: dcmipp: use v4l2_subdev_is_streaming media: stm32: dcmipp: replace s_stream with enable/disable_streams media: stm32: dcmipp: rename dcmipp_parallel into dcmipp_input media: stm32: dcmipp: add support for csi input into dcmipp-input media: stm32: dcmipp: add bayer 10~14 bits formats media: stm32: dcmipp: add 1X16 RGB / YUV formats support media: stm32: dcmipp: avoid duplicated format on enum in bytecap media: stm32: dcmipp: fill media ctl hw_revision field dt-bindings: media: add the stm32mp25 compatible of DCMIPP media: stm32: dcmipp: add core support for the stm32mp25 arm64: dts: st: add csi & dcmipp node in stm32mp25 arm64: dts: st: enable imx335/csi/dcmipp pipeline on stm32mp257f-ev1 .../devicetree/bindings/media/st,stm32-dcmipp.yaml | 53 +- .../bindings/media/st,stm32mp25-csi.yaml | 125 +++ MAINTAINERS | 8 + arch/arm64/boot/dts/st/stm32mp251.dtsi | 23 + arch/arm64/boot/dts/st/stm32mp257f-ev1.dts | 85 ++ drivers/media/platform/st/stm32/Kconfig | 14 + drivers/media/platform/st/stm32/Makefile | 1 + drivers/media/platform/st/stm32/stm32-csi.c | 1144 ++++++++++++++++++++ .../media/platform/st/stm32/stm32-dcmipp/Makefile | 2 +- .../st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 128 ++- .../st/stm32/stm32-dcmipp/dcmipp-byteproc.c | 119 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 4 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 116 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-input.c | 540 +++++++++ .../st/stm32/stm32-dcmipp/dcmipp-parallel.c | 440 -------- 15 files changed, 2226 insertions(+), 576 deletions(-) --- base-commit: 9852d85ec9d492ebef56dc5f229416c925758edc change-id: 20241007-csi_dcmipp_mp25-7779601f57da Best regards,