From 6ad3258cd34295611e871edf5e8474d4aa79af59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Tue, 4 Aug 2020 15:39:16 +0200 Subject: libcamera: sysfs: Add helper to lookup sysfs path of a character device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a helper function to lookup the sysfs path of a character device. Store the function in a new libcamera::sysfs namespace as there is not class to host it. Suggested-by: Laurent Pinchart Signed-off-by: Niklas Söderlund Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/libcamera/sysfs.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/libcamera/sysfs.cpp (limited to 'src/libcamera/sysfs.cpp') diff --git a/src/libcamera/sysfs.cpp b/src/libcamera/sysfs.cpp new file mode 100644 index 00000000..398df2c2 --- /dev/null +++ b/src/libcamera/sysfs.cpp @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2020, Google Inc. + * + * sysfs.cpp - Miscellaneous utility functions to access sysfs + */ + +#include "libcamera/internal/sysfs.h" + +#include +#include +#include + +#include "libcamera/internal/log.h" + +/** + * \file sysfs.h + * \brief Miscellaneous utility functions to access sysfs + */ + +namespace libcamera { + +LOG_DEFINE_CATEGORY(SysFs); + +namespace sysfs { + +/** + * \brief Retrieve the sysfs path for a character device + * \param[in] deviceNode Path to character device node + * \return The sysfs path on success or an empty string on failure + */ +std::string charDevPath(const std::string &deviceNode) +{ + struct stat st; + int ret = stat(deviceNode.c_str(), &st); + if (ret < 0) { + ret = -errno; + LOG(SysFs, Error) + << "Unable to stat '" << deviceNode << "': " + << strerror(-ret); + return {}; + } + + std::ostringstream dev("/sys/dev/char/", std::ios_base::ate); + dev << major(st.st_rdev) << ":" << minor(st.st_rdev); + + return dev.str(); +} + +} /* namespace sysfs */ + +} /* namespace libcamera */ -- cgit v1.2.1