From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Bingbu Cao <bingbu.cao@intel.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
Sasha Levin <sashal@kernel.org>,
yong.zhi@intel.com, djrscally@gmail.com, mchehab@kernel.org,
linux-media@vger.kernel.org
Subject: [PATCH AUTOSEL 6.3 35/44] media: ipu3-cio2: support multiple sensors and VCMs with same HID
Date: Sun, 30 Apr 2023 22:56:23 -0400 [thread overview]
Message-ID: <20230501025632.3253067-35-sashal@kernel.org> (raw)
In-Reply-To: <20230501025632.3253067-1-sashal@kernel.org>
From: Bingbu Cao <bingbu.cao@intel.com>
[ Upstream commit 567f97bd381fd79fa8563808118fc757cb6fa4ff ]
In current cio2-bridge, it is using the hid name to register software
node and software node will create kobject and sysfs entry according to
the node name, if there are multiple sensors and VCMs which are sharing
same HID name, it will cause the software nodes registration failure:
sysfs: cannot create duplicate filename '/kernel/software_nodes/dw9714'
...
Call Trace:
software_node_register_nodes
cio2_bridge_init
...
kobject_add_internal failed for dw9714 with -EEXIST,
don't try to register things with the same name in the same directory.
One solution is appending the sensor link(Mipi Port) in SSDB as suffix
of the node name to fix this problem.
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/media/pci/intel/ipu3/cio2-bridge.c | 15 +++++++++++----
drivers/media/pci/intel/ipu3/cio2-bridge.h | 3 ++-
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.c b/drivers/media/pci/intel/ipu3/cio2-bridge.c
index dfefe0d8aa959..45427a3a3a252 100644
--- a/drivers/media/pci/intel/ipu3/cio2-bridge.c
+++ b/drivers/media/pci/intel/ipu3/cio2-bridge.c
@@ -212,6 +212,7 @@ static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,
struct cio2_sensor *sensor)
{
struct software_node *nodes = sensor->swnodes;
+ char vcm_name[ACPI_ID_LEN + 4];
cio2_bridge_init_swnode_names(sensor);
@@ -229,9 +230,13 @@ static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,
sensor->node_names.endpoint,
&nodes[SWNODE_CIO2_PORT],
sensor->cio2_properties);
- if (sensor->ssdb.vcmtype)
- nodes[SWNODE_VCM] =
- NODE_VCM(cio2_vcm_types[sensor->ssdb.vcmtype - 1]);
+ if (sensor->ssdb.vcmtype) {
+ /* append ssdb.link to distinguish VCM nodes with same HID */
+ snprintf(vcm_name, sizeof(vcm_name), "%s-%u",
+ cio2_vcm_types[sensor->ssdb.vcmtype - 1],
+ sensor->ssdb.link);
+ nodes[SWNODE_VCM] = NODE_VCM(vcm_name);
+ }
cio2_bridge_init_swnode_group(sensor);
}
@@ -295,7 +300,6 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
}
sensor = &bridge->sensors[bridge->n_sensors];
- strscpy(sensor->name, cfg->hid, sizeof(sensor->name));
ret = cio2_bridge_read_acpi_buffer(adev, "SSDB",
&sensor->ssdb,
@@ -303,6 +307,9 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
if (ret)
goto err_put_adev;
+ snprintf(sensor->name, sizeof(sensor->name), "%s-%u",
+ cfg->hid, sensor->ssdb.link);
+
if (sensor->ssdb.vcmtype > ARRAY_SIZE(cio2_vcm_types)) {
dev_warn(&adev->dev, "Unknown VCM type %d\n",
sensor->ssdb.vcmtype);
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.h b/drivers/media/pci/intel/ipu3/cio2-bridge.h
index b93b749c65bda..b76ed8a641e20 100644
--- a/drivers/media/pci/intel/ipu3/cio2-bridge.h
+++ b/drivers/media/pci/intel/ipu3/cio2-bridge.h
@@ -113,7 +113,8 @@ struct cio2_sensor_config {
};
struct cio2_sensor {
- char name[ACPI_ID_LEN];
+ /* append ssdb.link(u8) in "-%u" format as suffix of HID */
+ char name[ACPI_ID_LEN + 4];
struct acpi_device *adev;
struct i2c_client *vcm_i2c_client;
--
2.39.2
next prev parent reply other threads:[~2023-05-01 3:00 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-01 2:55 [PATCH AUTOSEL 6.3 01/44] drm/displayid: add displayid_get_header() and check bounds better Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 02/44] drm/amd/display: populate subvp cmd info only for the top pipe Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 03/44] drm/amd/display: Correct DML calculation to align HW formula Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 04/44] drm/amd/display: enable DPG when disabling plane for phantom pipe Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 05/44] platform/x86: x86-android-tablets: Add Acer Iconia One 7 B1-750 data Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 06/44] drm/amd/display: Enable HostVM based on rIOMMU active Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 07/44] drm/amd/display: Use DC_LOG_DC in the trasform pixel function Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 08/44] regmap: cache: Return error in cache sync operations for REGCACHE_NONE Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 09/44] remoteproc: imx_dsp_rproc: Add custom memory copy implementation for i.MX DSP Cores Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 10/44] arm64: dts: qcom: msm8996: Add missing DWC3 quirks Sasha Levin
2023-05-01 2:55 ` [PATCH AUTOSEL 6.3 11/44] accel/habanalabs: postpone mem_mgr IDR destruction to hpriv_release() Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 12/44] drm/amd/display: reallocate DET for dual displays with high pixel rate ratio Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 13/44] media: imx-jpeg: Bounds check sizeimage access Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 14/44] media: cx23885: Fix a null-ptr-deref bug in buffer_prepare() and buffer_finish() Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 15/44] media: pci: tw68: Fix null-ptr-deref bug in buf prepare and finish Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 16/44] media: pvrusb2: VIDEO_PVRUSB2 depends on DVB_CORE to use dvb_* symbols Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 17/44] platform/x86/intel: vsec: Explicitly enable capabilities Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 18/44] ACPI: processor: Check for null return of devm_kzalloc() in fch_misc_setup() Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 19/44] drm/rockchip: dw_hdmi: cleanup drm encoder during unbind Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 20/44] memstick: r592: Fix UAF bug in r592_remove due to race condition Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 21/44] arm64: dts: imx8mq-librem5: Remove dis_u3_susphy_quirk from usb_dwc3_0 Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 22/44] firmware: arm_sdei: Fix sleep from invalid context BUG Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 23/44] ACPI: EC: Fix oops when removing custom query handlers Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 24/44] drm/amd/display: fixed dcn30+ underflow issue Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 25/44] remoteproc: stm32_rproc: Add mutex protection for workqueue Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 26/44] accel/ivpu: Remove D3hot delay for Meteorlake Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 27/44] drm/tegra: Avoid potential 32-bit integer overflow Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 28/44] drm/msm/dp: Clean up handling of DP AUX interrupts Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 29/44] ACPICA: Avoid undefined behavior: applying zero offset to null pointer Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 30/44] ACPICA: ACPICA: check null return of ACPI_ALLOCATE_ZEROED in acpi_db_display_objects Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 31/44] arm64: dts: qcom: sdm845-polaris: Drop inexistent properties Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 32/44] arm64: dts: qcom: sm6115-j606f: Add ramoops node Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 33/44] irqchip/gicv3: Workaround for NVIDIA erratum T241-FABRIC-4 Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 34/44] media: cros-ec-cec: Don't exit early in .remove() callback Sasha Levin
2023-05-01 15:26 ` Uwe Kleine-König
2023-05-18 17:02 ` Sasha Levin
2023-05-01 2:56 ` Sasha Levin [this message]
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 36/44] ACPI: video: Remove desktops without backlight DMI quirks Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 37/44] drm/amd/display: Correct DML calculation to follow HW SPEC Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 38/44] drm/amd: Fix an out of bounds error in BIOS parser Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 39/44] drm/amdgpu: Fix sdma v4 sw fini error Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 40/44] media: Prefer designated initializers over memset for subdev pad ops Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 41/44] drm/amdgpu: Enable IH retry CAM on GFX9 Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 42/44] media: mediatek: vcodec: Fix potential array out-of-bounds in decoder queue_setup Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 43/44] platform/x86/amd: pmc: Fix memory leak in amd_pmc_stb_debugfs_open_v2() Sasha Levin
2023-05-01 2:56 ` [PATCH AUTOSEL 6.3 44/44] hwmon: (nzxt-smart2) add another USB ID Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230501025632.3253067-35-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=bingbu.cao@intel.com \
--cc=djrscally@gmail.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=stable@vger.kernel.org \
--cc=yong.zhi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox