From nobody Mon Sep 28 09:57:52 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CD4423ABBF for ; Sun, 23 Aug 2026 16:34:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502883; cv=none; b=OIOkuYrp63/Im4LESAuSx6JCYSF37NdOGcVkMi22R2woylInqA+yIkZNN8l5adVkMBtU+TmUFuoGSwLWg7u9ctuBm+U9iynzCJEg+nMreVPT6I7mb727IuddAxcHY7fcopSE+/0VS+aE4kCzBnAW9MAa0sR0SWU2Xv7ahlTPRx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502883; c=relaxed/simple; bh=02ybAsaiwsvWoQcNLX0GyaEbVxLKweh93ot9JkZWSS8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FB3SJxHau29RBNoob8whK38EZamGw1izPg6kMJ9fnphSu/zp5d5wST2Sxqr8SPjOangnaNOMhplD+ZN8Y+pwV2PqmIARMI2PkWTZ/6lA76CVfdYAkT8xN/vDsQ0zv67sZ0Rh2KtozX31nGOyPkv+i6tEWRicG4mn7+OVO7w07EQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Bxh28NaE; arc=none smtp.client-ip=209.85.215.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bxh28NaE" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-cbee3777e1cso1558388a12.3 for ; Sun, 23 Aug 2026 09:34:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787502882; x=1788107682; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8sTClNBlu3puMMXbF+SQ5upo6RgBShUKol0pOMHxtJA=; b=Bxh28NaE3pZmwYRPHlFnO0NJjlRoBW6i7MJTKXjWYJeZg7H5rItuAXsbWfUjtlEwLL l7M5JnVUwdlj7U+4zfIeqOD3Cr+x0f3Q5yzGxa2kitvN/BHlvZNpSPcjQ9Wo89fV2z0V 9BlAeL5GgGoRv0puyS3IZ6dHhiiLod53PErWCiEdCkwXfkW3oqN9xuz2E6IPOVHhlQFn X3BCVEuSF53EDE78fqvtIPR9zjuEvofvhrKS/emlHAJc+p6qViczQFWbbyXbE6JqdEwS FwKswdnXW8g9zZaClVu2x1dUwXnm5UTWlhdKuXjHloyTnXxIJy8x3SCuUFdAptIBtXFk toPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787502882; x=1788107682; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=8sTClNBlu3puMMXbF+SQ5upo6RgBShUKol0pOMHxtJA=; b=musDe0ecSXNjSeM+Hi8+oJkud0hmj1r4DpliAOtHyOPqXOzuiOsgwN1PNywXGqXbfF 7R5Ki66ALMfRq0mPmruPlFzeSehZbTmU/9WdX14PTRvXHoRHvsMxAQ1v88ZUb7jaLRCt Ur05NzDhjGkPoDJAX8236GYTB7+ayEclOELg/zf8sqKq0rhsrJaD8SP9RUq7Ws1+vP9o FLyaRs7fi0f7KqlkACgkeexU8qxkf4v8hDs5neyQq7phhE3NhcKgHq0C9NWWqb60rcr6 th9OHdrCiESLVB2r3+T99YeQF/pLqI/9qlb8k1SByTzlbNXIXKUriarYHGstp9UHAR3f OqDg== X-Forwarded-Encrypted: i=1; AHgh+RrJ93ZaDGu2uPjeilgSR4B4niQ0J65C76v3K/OBY/B18Zm2/TbTbaaAcmUujbJzx7SzU/pkeiBkU1YxkNk=@vger.kernel.org X-Gm-Message-State: AFuF++kpu2sfenv64Ip7qYsMveDrsjbItnb2jELxKcNcmnSR225oiVoX 2w5AUnPpV+IAN3Dh7CrJVC7CuYeyA+LGSHsbp4EMAR37ilB4qeaTuJ+s X-Gm-Gg: AR+sD12DjZSLcMF4Xp6eLVW5qOg12CiWUZUyBWip9A3LPqOFP9ZXR+s+Byh4To0nS6c BUBS9+Qg4JEpUHqyrCgzq38KbWiHdJcL7AhsOZqQ3Jwy0JkxfBdTAwRhiPY9kJpzahzIOepWJ0H JlcqbRu4JmM9zVGGfEEzJiz5lSd0eDepwKaKfsFiFqzxaIgWPZamhXW6T4eHcSdUgSAXQK0iPUd i/bknjFgMsPRiezAGIg108aZruzUnA4OXOZTm4w9srW8DNyC7opqBBRhz0demaArJk6oxCoPo96 C/PaokLkQuTfa6KuMsDt+tqk/UvDUpYfZbszb6X9aTINHfPDrhPT/gV8RCEcCUUql8EwzLmKEjo WBsqcqhqyN2oafONs+n5LSjzTtVqZ7CjBxJGT2vonL5H2nsbfi1rFamGvTMRsvR/7txvCxztMUd RknIP2GgZhvLdpj8uPWXUKyskIDj/hFaJXdRAX0x/wBekZ4DCOf+gerfqVj0Cy2FIL0sArPVemP ZUO0Nw8elPR7Y3XmGx37K66vLgw4UUSpw7WsYrXKuPFbJNSqLd7iqjGejZM9MWppCkfOdKtPC34 Uo9er0qA8UCfdMR35Bwt X-Received: by 2002:a17:90b:1b0b:b0:37f:e1b6:4c7d with SMTP id 98e67ed59e1d1-395c35ac458mr32281415a91.6.1787502881613; Sun, 23 Aug 2026 09:34:41 -0700 (PDT) Received: from Mac.net (198-27-228-154.fiber.dynamic.sonic.net. [198.27.228.154]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-141860ef75esm17084319c88.7.2026.08.23.09.34.40 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 23 Aug 2026 09:34:41 -0700 (PDT) From: Ahmad Byagowi To: Andi Shyti Cc: Peter Rosin , Jakub Kicinski , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Ahmad Byagowi Subject: [PATCH v7 1/3] i2c: mux: Fix channel node leak on adapter add failure Date: Sun, 23 Aug 2026 09:34:36 -0700 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" i2c_mux_add_adapter() takes a reference to the Device Tree channel node before registering the new adapter. If adapter registration fails, the error path frees the private data without dropping that reference. Release the channel node before freeing the private data. Fixes: bc45449b1444 ("i2c/of: Automatically populate i2c mux busses from de= vice tree data.") Signed-off-by: Ahmad Byagowi Acked-by: Peter Rosin --- drivers/i2c/i2c-mux.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 681a201c239b..68a4c34b5987 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -408,6 +408,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, return 0; =20 err_free_priv: + of_node_put(priv->adap.dev.of_node); kfree(priv); return ret; } --=20 2.50.1 (Apple Git-155) From nobody Mon Sep 28 09:57:52 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C873310645 for ; Sun, 23 Aug 2026 16:34:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502884; cv=none; b=pQw8fY5LpkPPRWe17zSOmCAgZsm9uMYkxr9GAg3E37fBWJehwr4tQLhgzV1iZm2gqSa0Lo2m+iaKwa5MwW5qarAbcvLh1dGXOpzarUg3R/UxM0SH52iUOtCAtQ/YZwxQFfyxXTvZ5Oc1OQSJQRveV/8cN0L9586I6L14RdUQK3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502884; c=relaxed/simple; bh=EJfCCTqbNqMzi71//u8ytAzKCePxjJyYif64TVPjsjw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g19g6x+jUkDtPzQ0BDUvh8HX4PFmSn+mmwPm7VE5XTTQ2jeJ/6DTcJeyI0HUfkIkrQJ6wtMgRilO71rHDWVbWfVQHecRQgK+mEY4aVV91gdaHbas794f/hc8mxrM2lwJDXmsNDlGZ2OBZUKeWzkrAdOIJz/ln7BrsoRpHE6kaWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ljlU2ird; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ljlU2ird" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-84e04df8c46so3467351b3a.2 for ; Sun, 23 Aug 2026 09:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787502883; x=1788107683; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=TSuRlPLvqVhvoFr/a6EcJQdMGwGvdr0Nq8RIhTw4Mzs=; b=ljlU2irdobs7Z9q9OYTc3DUhrumb+MjXY+9SO/sQbsCM/piWuUKPVNwAEyOE8HP0GR 9jAS5997RxBS7ORxKTmFOHTvrMT0Fb4CRheGAX3UEWGT4cNmuMHXaTTvzFrB7cKh6M6E +CG1sVuLePjDCnswVNTmCzoIBvyjjWU8IEY6Y/rpiX9vG2r28fg1Vu61gQCR8J++aBmC IubKcvSPfmMzJ786b7aPuAdyjhuaQ4L0+fs+3Hznu00YPmNXcGxRfTf+RCF9QsaqdiVN gWuoDzmSZqgjMPsRPotmtFDUFzRJOl/x4HlQnmAwhyzl1tg29tdxxTUQTLP/+0TyqWxG O9lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787502883; x=1788107683; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=TSuRlPLvqVhvoFr/a6EcJQdMGwGvdr0Nq8RIhTw4Mzs=; b=Tj8WjTPz60Tc57ZdcT5l4fjezHwPzorJKh8gJuKEWe8ToDL09MvvbyiDrWDnP71LF/ s33Rj4bjK5AsV0sQ2wd0boZmb9j+9YKUPlP6baXbjvL//U1xoHy1RbGDEdviUn+belLQ 1ktdCRAlXDZ3cZIKQnJir67/p4pPicrczYcZAs6KCA/k4Y27bx2HWaSSISPMxx3BSKxo iNlO4NVvwPoehOP1UNNXrAp3wBccgQ/iktBJqBlPziiwYTco7oymVKgR6nlbCXvGVxuy C0GBR6JcJM3GsDYHfqTjAj+7JKElWVGGrFIrYbL1yXvscflFX9uMIc0/5yKcc2nwtIXh SIRg== X-Forwarded-Encrypted: i=1; AHgh+RpdRvf3ngdm5RnNQJtEjKX8eHctGMc/qGlK/PBCCTICewRE12viM2C0Py/pD97pSY2TFR/CEixvdYHJC6U=@vger.kernel.org X-Gm-Message-State: AFuF++lHRo85Y34Cj510NdeQobTkIFGQYRMzt0o8NlTsR7ZT9hPoTXnz ejIKD5Q7yD1makIqiOxkreWRx7pP+puQ6IKha2Kt275T68F7pqq0zElz6nPub1ko X-Gm-Gg: AR+sD10eH6RrGS0EtlkdALt0cwMBZQGzv4guahl+UVuf0/n3jDqlmjZU4YeQ+6XKced cO+EmDwfU6bvb2Qm+FWAPS/TH929CGduL22VDjp2cw06v79DLLFZ/q4/1FwjsRl8JoDcju8rHYJ 0VxtPlBhej93UxW3cL42BPWD9w6EBumPWSNAYpQ9fRH2BS4o2T8WbvAxNsR2CuolriaOyiFafJt S0L6RLpPK52/GjD0FmOZKeaLYXzYBFijSlm1ygWJhrxwzBcF+VlOovqMg7FIifIzmvDB8B/a+EN AvLtQ/Sft5QfcPevCUc00zi1zpqKVcq00bTFgoXLzGTMNMBLwwej6V2ZBiDifhTAcnUZrtkKjRb 6A9FZ+Pn8isHj2rfQpcY6VMPsr2DiPYeI2yA8DSRlIXC1XjUwMyuFSLUXjBFuuINpD64iaWBd2m VoJ6kOUlfklJqXkExnmv5+wqIklwVgGj4Y/saZdR8z1iOYHTynD/bIZQJnJxZMqC0M9Usrdm1Vn d36ShZaESB9Hma6nnvgjQZHJL7rkUulBmvKwoNBB8ujnJMkH/QAbcljmwqcoM/QiT4albkyGwX4 E/N/2g6C5ug7D9bre2M19H8Q4fXpiVo= X-Received: by 2002:a05:6a20:ac43:b0:3c3:935a:af2c with SMTP id adf61e73a8af0-3cd2fd03751mr41714282637.3.1787502882736; Sun, 23 Aug 2026 09:34:42 -0700 (PDT) Received: from Mac.net (198-27-228-154.fiber.dynamic.sonic.net. [198.27.228.154]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-141860ef75esm17084319c88.7.2026.08.23.09.34.41 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 23 Aug 2026 09:34:42 -0700 (PDT) From: Ahmad Byagowi To: Andi Shyti Cc: Peter Rosin , Jakub Kicinski , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Ahmad Byagowi Subject: [PATCH v7 2/3] i2c: mux: Factor out channel node lookup Date: Sun, 23 Aug 2026 09:34:37 -0700 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move the existing Device Tree channel-node lookup into a helper in preparation for using generic firmware-node operations. This is a pure refactoring with no functional change. Signed-off-by: Ahmad Byagowi --- drivers/i2c/i2c-mux.c | 84 +++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 68a4c34b5987..a8b94b97a725 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -264,6 +264,51 @@ static const struct i2c_lock_operations i2c_parent_loc= k_ops =3D { .unlock_bus =3D i2c_parent_unlock_bus, }; =20 +static struct device_node * +i2c_mux_get_channel_node(struct i2c_mux_core *muxc, u32 chan_id) +{ + struct device_node *dev_node =3D muxc->dev->of_node; + struct device_node *mux_node, *child =3D NULL; + u32 reg; + int ret; + + if (!dev_node) + return NULL; + + if (muxc->arbitrator) + mux_node =3D of_get_child_by_name(dev_node, "i2c-arb"); + else if (muxc->gate) + mux_node =3D of_get_child_by_name(dev_node, "i2c-gate"); + else + mux_node =3D of_get_child_by_name(dev_node, "i2c-mux"); + + if (mux_node) { + /* A "reg" property indicates an old-style DT entry */ + if (!of_property_read_u32(mux_node, "reg", ®)) { + of_node_put(mux_node); + mux_node =3D NULL; + } + } + + if (!mux_node) + mux_node =3D of_node_get(dev_node); + else if (muxc->arbitrator || muxc->gate) + child =3D of_node_get(mux_node); + + if (!child) { + for_each_child_of_node(mux_node, child) { + ret =3D of_property_read_u32(child, "reg", ®); + if (ret) + continue; + if (chan_id =3D=3D reg) + break; + } + } + + of_node_put(mux_node); + return child; +} + int i2c_mux_add_adapter(struct i2c_mux_core *muxc, u32 force_nr, u32 chan_id) { @@ -327,44 +372,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, * Try to populate the mux adapter's of_node, expands to * nothing if !CONFIG_OF. */ - if (muxc->dev->of_node) { - struct device_node *dev_node =3D muxc->dev->of_node; - struct device_node *mux_node, *child =3D NULL; - u32 reg; - - if (muxc->arbitrator) - mux_node =3D of_get_child_by_name(dev_node, "i2c-arb"); - else if (muxc->gate) - mux_node =3D of_get_child_by_name(dev_node, "i2c-gate"); - else - mux_node =3D of_get_child_by_name(dev_node, "i2c-mux"); - - if (mux_node) { - /* A "reg" property indicates an old-style DT entry */ - if (!of_property_read_u32(mux_node, "reg", ®)) { - of_node_put(mux_node); - mux_node =3D NULL; - } - } - - if (!mux_node) - mux_node =3D of_node_get(dev_node); - else if (muxc->arbitrator || muxc->gate) - child =3D of_node_get(mux_node); - - if (!child) { - for_each_child_of_node(mux_node, child) { - ret =3D of_property_read_u32(child, "reg", ®); - if (ret) - continue; - if (chan_id =3D=3D reg) - break; - } - } - - priv->adap.dev.of_node =3D child; - of_node_put(mux_node); - } + priv->adap.dev.of_node =3D i2c_mux_get_channel_node(muxc, chan_id); =20 /* * Associate the mux channel with an ACPI node. --=20 2.50.1 (Apple Git-155) From nobody Mon Sep 28 09:57:52 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA9092D7DC6 for ; Sun, 23 Aug 2026 16:34:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502887; cv=none; b=ZP5SKiZeCVTd5N3M3uuojlU/bMdZT1eHepFDP7UmzKMBCd1MJ/ouhXO132qfeYQia/peRLBU7yRV9AVpxoz1mYCukh/yY5VY0d+B0yrLa9vDFYYuiijWotZIH2XNG5+OqECukDtk1o+ir5nQ4HOIFgY82Pc4AeaYFK65SE7vSqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787502887; c=relaxed/simple; bh=HUYvrAXW6ktdAawFO9BGSNSafLNtS5sykuLnjS6hzPU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eLH6WVoffmiWgQRPYWfBYh/9DjTtWQRTCd5xGrh1f8ThZKAE504jMMY4PcmRzzSnpnHE56GYnSRpfKOiFBJjDY1uZx6J79TZoUHMQaGBIAAUOCF3BKEdsUF3gfMr98o5ATJ7yGw+dYKKYoT79Erse0RE+nwGm/zipXiD+trMzTw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A2zYf7qW; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A2zYf7qW" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-38e88b60121so1987022a91.3 for ; Sun, 23 Aug 2026 09:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787502884; x=1788107684; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GxGKUYSLhGHGkrvjs/JDyLU+7Ol+Ws3V83G2cQ2UfpU=; b=A2zYf7qWs9x/jOWQrxU+qooeXt95Y8s8kUJ87ciFHIDELzVyXfXxf/BMT/3aEoo43G E26BeXXC2Xps/X1SY0KrkFgGnCeUOUwCb8CED6aO/N1AxmxMwciOL5qFgwmON8xVSHJr OQtNgBQGG5pmtmrcG7N5EQWuPS8m8SbGkJCYrd/lkg25gdix4H0ShodpFL24rMD3uHqK jzrjz3KjGa1oUbu4IsjeIBcV7Ps/AI5GVybK4xcwn4QFqm/ewOA+hjzEcnT8b0G6GVhd cWu8snQkXj4QU46yIADWn9baGsYB3y/Um2OZvAGWnx8jZrw1P39S/yNnBwMY/mh7U6a0 MDeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787502884; x=1788107684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=GxGKUYSLhGHGkrvjs/JDyLU+7Ol+Ws3V83G2cQ2UfpU=; b=VwFQngl4BoFolSpVubt0PQ9Se/cIsKB+DwywmvUOya+c9Mc7Br3XDXggk8/jFnokmJ cv3sHroBgJ7LGyGoIll0OZHFpIUrZMbnzQGzvp7xsMIi8+pv+a6UK+RZY0HVe6vQZDxv OEF9oZyLVOoiKu5bfY74jR1RNyJyikp9Q9Hm93LVJxoFtpv9Zt+Yfrf30HDP8N37I3uL zDwypvX6wxD7HZl/zaUdzx7KIAa2ylWa+lkljunFFPFRuT4Y1uVBm2Ji8KAIly1FV4mB z6N7YA/o1EuFk4KoV1YMiy/WzZbgFZCdzrp1XnsetHi2JmXOaEV/CtMDwKVP9gZddycs bv+Q== X-Forwarded-Encrypted: i=1; AHgh+RrrcmdsHT+fiKsJTDPCLO+PH613hZM9bnC+VgDT4TqHgwO88g57EK+oG5I5CepNHIRzqLQqdXfM24MRdZE=@vger.kernel.org X-Gm-Message-State: AFuF++n0kWcA1VkasknIrN9pyRbVsMTSVSO+Cbnjv7DvM/F1k1tLcXKB tBQ1pMy2Pw3Qqcmr1N25JAi1LlCj9PhXCK9xdYfe19cc5ltJ8gM7w4S1Venvug== X-Gm-Gg: AR+sD10qe5pea1AknvG7sYSGqoWm9D70vYPcENlXBA64SzIbWKQgmXqapIE1hg6kd0q gd1sp73noPqjOHuXO2/uwLOLUNZ/gECsPIpe1SOj66sBPKnsI2j0jbuHP8vp+5G418JoTL+kuRa ih6VVy1gctfuIMid8sBaoVjxHzoZdSr3ribtshShlLY0wgzsszwFNH7DTs4gosDssdQvQyAHF4E X82pekUSv/89Ie/89KueQCtdYuypgJZ1fxTnL643lousUQ3ZEjzqJO7VsRPrjIX4OZeN+Gy0M0D pgDRSa+jLIkZC+YOZk5nAfT1TdD3z2CRbE5n7hMrCD9m4vfoZJn7+W4cUIRvgGaJj9bDDl1TqQ0 0GKguJQoVB6YuIdIYdyElLNJTIHfflP5kLUjkqcSzRTgkjYxfQw82KxyyzxA5lo0KAWtfNhN3Lv Ns+pDuG5uTXOcMMcSKPPoHdM/34XGrpd53QdVQFN8mjKlVCpY3c82ORer6+zZU17s7KlRwFCzjG 9KTH0ykvkrbWDghdjwUx0IifEpRe8JJX3h6F/0JO3Uv1XnMMrsEk6m5vLDul4gp/USrnaUFHfKp jf1E371RLg2Zt5xSk/Gs X-Received: by 2002:a17:90b:5790:b0:38e:9045:babe with SMTP id 98e67ed59e1d1-395deecf08fmr24060528a91.7.1787502884014; Sun, 23 Aug 2026 09:34:44 -0700 (PDT) Received: from Mac.net (198-27-228-154.fiber.dynamic.sonic.net. [198.27.228.154]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-141860ef75esm17084319c88.7.2026.08.23.09.34.42 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 23 Aug 2026 09:34:43 -0700 (PDT) From: Ahmad Byagowi To: Andi Shyti Cc: Peter Rosin , Jakub Kicinski , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Ahmad Byagowi Subject: [PATCH v7 3/3] i2c: mux: Propagate software nodes to channel adapters Date: Sun, 23 Aug 2026 09:34:38 -0700 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Device Tree channel nodes are associated with the adapters created by i2c-mux, but equivalent software-node descriptions are not. Use generic firmware-node operations for the existing channel lookup and accept either an OF node or a software node. Associate the returned node with the adapter so child I2C devices can be instantiated from software-node properties. Save the adapter firmware node before adapter deletion and release the reference afterwards, following the lifetime pattern in i2c-atr. Signed-off-by: Ahmad Byagowi --- drivers/i2c/i2c-mux.c | 45 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index a8b94b97a725..b37d36d3b121 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include =20 @@ -264,40 +265,40 @@ static const struct i2c_lock_operations i2c_parent_lo= ck_ops =3D { .unlock_bus =3D i2c_parent_unlock_bus, }; =20 -static struct device_node * +static struct fwnode_handle * i2c_mux_get_channel_node(struct i2c_mux_core *muxc, u32 chan_id) { - struct device_node *dev_node =3D muxc->dev->of_node; - struct device_node *mux_node, *child =3D NULL; + struct fwnode_handle *dev_node =3D dev_fwnode(muxc->dev); + struct fwnode_handle *mux_node, *child =3D NULL; u32 reg; int ret; =20 - if (!dev_node) + if (!is_of_node(dev_node) && !is_software_node(dev_node)) return NULL; =20 if (muxc->arbitrator) - mux_node =3D of_get_child_by_name(dev_node, "i2c-arb"); + mux_node =3D fwnode_get_named_child_node(dev_node, "i2c-arb"); else if (muxc->gate) - mux_node =3D of_get_child_by_name(dev_node, "i2c-gate"); + mux_node =3D fwnode_get_named_child_node(dev_node, "i2c-gate"); else - mux_node =3D of_get_child_by_name(dev_node, "i2c-mux"); + mux_node =3D fwnode_get_named_child_node(dev_node, "i2c-mux"); =20 if (mux_node) { - /* A "reg" property indicates an old-style DT entry */ - if (!of_property_read_u32(mux_node, "reg", ®)) { - of_node_put(mux_node); + /* A "reg" property indicates an old-style firmware entry. */ + if (!fwnode_property_read_u32(mux_node, "reg", ®)) { + fwnode_handle_put(mux_node); mux_node =3D NULL; } } =20 if (!mux_node) - mux_node =3D of_node_get(dev_node); + mux_node =3D fwnode_handle_get(dev_node); else if (muxc->arbitrator || muxc->gate) - child =3D of_node_get(mux_node); + child =3D fwnode_handle_get(mux_node); =20 if (!child) { - for_each_child_of_node(mux_node, child) { - ret =3D of_property_read_u32(child, "reg", ®); + fwnode_for_each_child_node(mux_node, child) { + ret =3D fwnode_property_read_u32(child, "reg", ®); if (ret) continue; if (chan_id =3D=3D reg) @@ -305,7 +306,7 @@ i2c_mux_get_channel_node(struct i2c_mux_core *muxc, u32= chan_id) } } =20 - of_node_put(mux_node); + fwnode_handle_put(mux_node); return child; } =20 @@ -368,11 +369,9 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, else priv->adap.lock_ops =3D &i2c_parent_lock_ops; =20 - /* - * Try to populate the mux adapter's of_node, expands to - * nothing if !CONFIG_OF. - */ - priv->adap.dev.of_node =3D i2c_mux_get_channel_node(muxc, chan_id); + /* Associate the mux adapter with its OF or software-node channel. */ + device_set_node(&priv->adap.dev, + i2c_mux_get_channel_node(muxc, chan_id)); =20 /* * Associate the mux channel with an ACPI node. @@ -416,7 +415,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, return 0; =20 err_free_priv: - of_node_put(priv->adap.dev.of_node); + fwnode_handle_put(dev_fwnode(&priv->adap.dev)); kfree(priv); return ret; } @@ -429,7 +428,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) while (muxc->num_adapters) { struct i2c_adapter *adap =3D muxc->adapter[--muxc->num_adapters]; struct i2c_mux_priv *priv =3D adap->algo_data; - struct device_node *np =3D adap->dev.of_node; + struct fwnode_handle *fwnode =3D dev_fwnode(&adap->dev); =20 muxc->adapter[muxc->num_adapters] =3D NULL; =20 @@ -439,7 +438,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) =20 sysfs_remove_link(&priv->adap.dev.kobj, "mux_device"); i2c_del_adapter(adap); - of_node_put(np); + fwnode_handle_put(fwnode); kfree(priv); } } --=20 2.50.1 (Apple Git-155)