From 2ad832fa6e9c06b671d61aac3cf9eac5a36a6b86 Mon Sep 17 00:00:00 2001 From: Jacopo Mondi Date: Fri, 28 Aug 2020 17:39:53 +0200 Subject: libcamera: raspberrypi: dmaheaps: Improve device open Improve the device opening at class construction time by testing all the available device paths and printout the appropriate error message. While at it, initialize dmaHeapHandle_ to -1 and check for its value at destruction time. Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham Signed-off-by: Jacopo Mondi --- src/libcamera/pipeline/raspberrypi/dma_heaps.cpp | 28 +++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp b/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp index 6769c046..4d5dd6cb 100644 --- a/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp +++ b/src/libcamera/pipeline/raspberrypi/dma_heaps.cpp @@ -7,6 +7,7 @@ #include "dma_heaps.h" +#include #include #include #include @@ -22,8 +23,10 @@ * Annoyingly, should the cma heap size be specified on the kernel command line * instead of DT, the heap gets named "reserved" instead. */ -#define DMA_HEAP_CMA_NAME "/dev/dma_heap/linux,cma" -#define DMA_HEAP_CMA_ALT_NAME "/dev/dma_heap/reserved" +static constexpr std::array heapNames = { + "/dev/dma_heap/linux,cma", + "/dev/dma_heap/reserved" +}; namespace libcamera { @@ -32,19 +35,28 @@ LOG_DECLARE_CATEGORY(RPI) namespace RPi { DmaHeap::DmaHeap() + : dmaHeapHandle_(-1) { - dmaHeapHandle_ = ::open(DMA_HEAP_CMA_NAME, O_RDWR, 0); - if (dmaHeapHandle_ == -1) { - dmaHeapHandle_ = ::open(DMA_HEAP_CMA_ALT_NAME, O_RDWR, 0); - if (dmaHeapHandle_ == -1) { - LOG(RPI, Error) << "Could not open dmaHeap device"; + for (const char *name : heapNames) { + int ret = ::open(name, O_RDWR, 0); + if (ret < 0) { + ret = errno; + LOG(RPI, Debug) << "Failed to open " << name << ": " + << strerror(ret); + continue; } + + dmaHeapHandle_ = ret; + break; } + + if (dmaHeapHandle_ < 0) + LOG(RPI, Error) << "Could not open any dmaHeap device"; } DmaHeap::~DmaHeap() { - if (dmaHeapHandle_) + if (dmaHeapHandle_ > -1) ::close(dmaHeapHandle_); } -- cgit v1.2.1