From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 ADBDA2B2D7; Sun, 24 Aug 2025 11:34:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035274; cv=none; b=JzEHadhunPXJWSFnHHKHRt7by0E0FGIBC+OWc54Y9shNvPs8rPevWx0mJs6zkrpnGPiP8ovWcAKmSrvdUdMWATvzSl0tWy6bOKQ1ZYoCzmgRfP6si4bH8JHksYJRgg5vMz3QUzp+EqkpKJXeQlIxNuQUrn34WOjEmzOM6KrJsR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035274; c=relaxed/simple; bh=Y4VrVsctznpA3d6zQ5f7c9ZAHxYHXmHRz3iJoJmb+MU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VszsLRt6fuVYcCXQA8UDiTcygyq3NUkw6zWD80z8WmOkQpkuSWT4NIBPvlW40EFNGsXgKyA1kpkbhQ/LPVDIAidQcicbJa4xUzD7VHoPQJoFRHBz/uldRAzegwzKWsw2GSFUpFiQtta7BGUFwwb/Jl+ZWDFrNdaZkVg/DFUDzGY= 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=l7qc+e2Z; arc=none smtp.client-ip=209.85.128.45 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="l7qc+e2Z" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-45a1b0c82eeso29266915e9.3; Sun, 24 Aug 2025 04:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035271; x=1756640071; 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; bh=KfOYpGHEdfYkC71vUp6gZRWfFSWO3whbK1R7EckfiZQ=; b=l7qc+e2Ze/J1Pg3ZMId9UNWUco0lgigQVJ36Wq+7QN+wkFeyBNzRFs4M/ao0FxtCOX yFUut4mD6vh/Pm1MbO3yhyw3/5de33LSK1rvHlIwQPJz3M453EvgXI/qOolm+UBCgC5U 7OrBYvoGBhP9SMY7kWxlUAxrHRndWdcbZMnC/g0lqDgn/oU4N3+e/4ZvLm578DlZoELU aFzuFmOXhkQG5QlRYj0gJ9TSXEzwzDJGLxHwh9jnTcKsrxP+4GGD7DkiJCt9uDNi85pf j0ttXEBfH1lH/WW4ig1BAxTd9yuJpDciJm7bzRU456r7RrfPjB9wfD7e8Kd0YDei+Cwo QtEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035271; x=1756640071; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KfOYpGHEdfYkC71vUp6gZRWfFSWO3whbK1R7EckfiZQ=; b=Row3ayKxnaZ4qDpgYvEmH07WIsY62HujesqQjPE651KtzGILbG9dX+/Zrtu4A8akCR Nw2pSeKGvvrRhWJRz5slLT79gwJo53ryRtA+SegQHUVR2/4VOGVKHjj/eZGkr9rNWyoY KTHInFdZB4TCuLEAj1DH5Dx0H/V8C4g/Rxe/Nu55mFy/ylMoAL0vazB7iXgYrKoEFxpX uL+MVaswDpIoZgTFI85amkPUPG3CJUJOOOu9bzQ2UFcjtrfYtfPJExzu31BrwlSmJGF/ PLse9z9uwfGXdfXZWTKBdmobkCCfZxhji1/xUnnGwpEcGoY3YbS/Bkd2ciyyLsMwF7XM ED4A== X-Forwarded-Encrypted: i=1; AJvYcCUP4QD0TsglfFC2fMdthJ0TXhfMkGQxWGt1L5N/ArEoCkGmISaME+nw86MXt7osPw948s3ILCuKDiv5mUn5@vger.kernel.org, AJvYcCWpj6NVzTcRkG2MsOGqBlBP5X8aZJ1nTiwQkk6CDQIbz//TzWISDUBhKgwaV6w70E9elRqazjer@vger.kernel.org, AJvYcCXD3TKxdFIqQ1o0Am1n65q+mHr093Pgcj6I0PhnY2zBF/lsrbEferBFw8WP2GK9NGN2lw7VJ3oyDiap@vger.kernel.org X-Gm-Message-State: AOJu0YxwCHt4y5Nf+mk2RvZ6Aat/8pwYOS+5kbZUyZuBm+6fRcdHDtm+ RYpdCjsga4AuU7B2N1akckpTXtoQlaSTVN9+PGGUAO57FrmASSfs+eTX X-Gm-Gg: ASbGncthrtnHO/E7cLBfypVlYPZlI9XdXHMo53A3OEKyv26l9w3WhvzdL/PAEhiOghT K/P9rRI2O5z5yfNSa1ExwgSg+RrV4D5s1chsUIrj3XSjFoVQBSOpFt812hLypMktBSLdmVACz5W B2ePXOELlGQb+5al9d2Q5UtFDE/lr7RgnhL25ol/g+ZNOT0DKPLma8NU/VwETBj56fMrQ/BT0kD jtFmhiGtdg5xqqFPfuWCNEWeoxsivmciDZnOsZ3wGZBaXbgPDHNZYqSoiZpWnQlpCm5UTzBfSOH 7xSmJ1JTtURHSEilDYduhFfKTftYr5kt/jUhdDVzk+JYjVJ1X/F8675PKrOAM3gyq7jzt1gARZw LuE/LrI7wAauTPCRmiTzAO+RzK8BpGxGEBHJOSHAuThgAQKMDU3Rr6JM= X-Google-Smtp-Source: AGHT+IHVLi35AXLVhZybVFL7JSkg4+AiuIcyS1PuReQfFInSNhBjxd4y6dfYrb2AkQqRDX+qiiwFwA== X-Received: by 2002:a05:600c:c48e:b0:45b:5f3d:aa3d with SMTP id 5b1f17b1804b1-45b5f6bde93mr4564625e9.21.1756035270752; Sun, 24 Aug 2025 04:34:30 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:30 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek , stable@vger.kernel.org Subject: [PATCH v6 01/12] i2c: rtl9300: fix channel number bound check Date: Sun, 24 Aug 2025 11:33:37 +0000 Message-ID: <20250824113348.263475-2-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Fix the current check for number of channels (child nodes in the device tree). Before, this was: if (device_get_child_node_count(dev) >=3D RTL9300_I2C_MUX_NCHAN) RTL9300_I2C_MUX_NCHAN gives the maximum number of channels so checking with '>=3D' isn't correct because it doesn't allow the last channel number. Thus, fix it to: if (device_get_child_node_count(dev) > RTL9300_I2C_MUX_NCHAN) Issue occured on a TP-Link TL-ST1008F v2.0 device (8 SFP+ ports) and fix is tested there. Fixes: c366be720235 ("i2c: Add driver for the RTL9300 I2C controller") Cc: # v6.13+ Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen =3D RTL9300_I2C_MUX_NCHAN) + if (device_get_child_node_count(dev) > RTL9300_I2C_MUX_NCHAN) return dev_err_probe(dev, -EINVAL, "Too many channels\n"); =20 device_for_each_child_node(dev, child) { --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 6BF9E1DC198; Sun, 24 Aug 2025 11:34:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035275; cv=none; b=bc/SExm3qcBfBVb8dHS9Sz9WJtvk7jqSIRWq7fNGPV/ciE53CzrwjsBM83sAcMXNaxTVjpR04pwL9k84/+kg86EMMm1HDeM8DmsPFVgBgHyQEP5jnonLn7ZvHqsWUI3eMj1DHieID19ScIC9FBC/2a5dtlGpJbKJf8HtUUipNTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035275; c=relaxed/simple; bh=M/j3jg6iSNlGkf6wyCuJOna6CpDQLgph69HL/obvbno=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XHbqP6obBcr5zKxUMG4Z2pV/tZEV4ejLSpFqjJAi26CMqp+TGeo6NNTGwjDHtqoBUPoIrtp89rzrCAW/blV+rxJoWoSwlkQpf1vvjEcSNTjCscfj27UaYOvKFpqNtZ/MqfIK3pxUzEuJp8ydHO3IcG4EZAEQGykGhPZ39tcU5x4= 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=KiekYStG; arc=none smtp.client-ip=209.85.128.49 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="KiekYStG" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45b4d89217aso17512975e9.2; Sun, 24 Aug 2025 04:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035272; x=1756640072; 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; bh=qQv5kNpDRuyJXRv/R9Pqr7iIwNZy1Lxb15S6N4mI6JI=; b=KiekYStGTxVav4+cXTEphUC/iXoXFGfrrFoubsdk6FxKNrPVoJWjm45koiiDAc4rK/ kVq10WNJgF6cr2a03B/EmFEA69vn6r+KakCNK0nvFrMMb5LY8sx7EZXONnYRtE7LSwbW aE2YI+HutoIcKY0DjPjRUvC5j2q9zoI6o9MWk5xgkjNjXgSZTXSn5ejHwXuIr4vi7RG/ Pj4zVkrvQze3c5fCk6RMVteH68RKi5OcFv5qiiFPI4/KyoTXJLZuNLUtOleizQxSRZ2M cQjWcnZ4arC4Ut8NY/PBtFJ+fWQrT50XegK0wzAsuDI41vVIJtF6BMS+wFfF0P+U4Bv9 Q7ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035272; x=1756640072; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qQv5kNpDRuyJXRv/R9Pqr7iIwNZy1Lxb15S6N4mI6JI=; b=B5oLBE6KPnOlSVyV0hGNvgLJ4tREcf8wb5rpbx4kwEEMyHR4AKD7vlBAwbz4c6yLBp 63wDr/e0ub7WSfKR7zVtz03hWoKla0uKld3Gvtyw9+zRWl59v3500P9tekTawwlhzFDG SC/iu6fBg6D9yyiNSjx+fuAaBn7TwqQ0dhj7ETitoYBsR/o77j5huqB5xhiUlR3mc/1l oSBWmIh83A6j17+FuxkG/pOmJPwI7QleZy2XcBaoKtqzsI6rpNc302tTELpBfBqsHWUq /OF3yTCGjIOdSEWucbccIlZQNqh0l/Fhtur6AG7s93Q0DH7r+ANcRo0yjnJlZDxRTmzf wfIA== X-Forwarded-Encrypted: i=1; AJvYcCUuX/lUkt+alAvqz6lgn51vqalMbMM9SZUFF0xLUKE3s/c4kvvJYt8VbbGmnduYqtF+0s/JKcDEzKIU8p4h@vger.kernel.org, AJvYcCWBtbgHXMcryfMT/lYsj0ntSYJDWfin9yczCQQKlCvzGrBcmFUEqogFICSA/RJGkur6ljLweFUF@vger.kernel.org, AJvYcCWWaGMPCUZ3+BJXNR79d8o5ypOvviLvCbLmGzoew0aEftRqxGAgpGQvtCj7Tjd3vtCXeMAJDL2z4jPW@vger.kernel.org X-Gm-Message-State: AOJu0YwKc1cyu6JTMO0G5t2+UIOL9+6ppW5a+oyazf51Ir6YRS3/hTd3 RwYA/OpG33lBfWpn2R7CKGsXndGaSh3WemijfT22CyD+2FLOFb5fjXlu X-Gm-Gg: ASbGncs6Vw/W3zJlrVD/BWvWK7AzuI+Hh3BuEpeOg+2jnJSApPdDHoVX+AsHnulBBw5 Wads7ngRJeHyB1D79Q5Bn4qFPFC73O8RYovZtuW8HwuqJHg9hlHGNNFXNg/VDSsPJJkVDntanuu j/Jyklp5oQmbx+xFKA24HCvQdmu3J92foCLUe6bZqFbbX3+vXktXF3Z8DjszG7at/aR5PBAsy3j 24oR+5MLEXMwzCZfbDtzedRgwMLnxZZCsgUH+Pr0JqKLijCLkhJ1jF/4iT+jU7QrebShgDPZQ/g y57HWAVPXJmox+avfgDW7O0QYOmIanrmw1vpCavEUfcqabupPB3DgpdrxSH/C9ItlWfrfZW77y+ TWretUv+TCzk8sA1gmVEz/MNeyuab29pUj1hJqUFEIdMq2L7lqwCGrKU= X-Google-Smtp-Source: AGHT+IEou+mkIjKMMneneCupHg/VUQE5pHLMfdEnWTGUjiK7lFROxhFimii6vBYaul2mMqZx+SZLxQ== X-Received: by 2002:a05:600c:46c5:b0:458:a7fa:211d with SMTP id 5b1f17b1804b1-45b517e95a3mr65342325e9.29.1756035271563; Sun, 24 Aug 2025 04:34:31 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:31 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek , stable@vger.kernel.org Subject: [PATCH v6 02/12] i2c: rtl9300: ensure data length is within supported range Date: Sun, 24 Aug 2025 11:33:38 +0000 Message-ID: <20250824113348.263475-3-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Add an explicit check for the xfer length to 'rtl9300_i2c_config_xfer' to ensure the data length isn't within the supported range. In particular a data length of 0 is not supported by the hardware and causes unintended or destructive behaviour. This limitation becomes obvious when looking at the register documentation [1]. 4 bits are reserved for DATA_WIDTH and the value of these 4 bits is used as N + 1, allowing a data length range of 1 <=3D len <=3D 16. Affected by this is the SMBus Quick Operation which works with a data length of 0. Passing 0 as the length causes an underflow of the value due to: (len - 1) & 0xf and effectively specifying a transfer length of 16 via the registers. This causes a 16-byte write operation instead of a Quick Write. For example, on SFP modules without write-protected EEPROM this soft-bricks them by overwriting some initial bytes. For completeness, also add a quirk for the zero length. [1] https://svanheule.net/realtek/longan/register/i2c_mst1_ctrl2 Fixes: c366be720235 ("i2c: Add driver for the RTL9300 I2C controller") Cc: # v6.13+ Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen 16) + return -EINVAL; + val =3D chan->bus_freq << RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS; mask =3D RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK; =20 @@ -352,7 +355,7 @@ static const struct i2c_algorithm rtl9300_i2c_algo =3D { }; =20 static struct i2c_adapter_quirks rtl9300_i2c_quirks =3D { - .flags =3D I2C_AQ_NO_CLK_STRETCH, + .flags =3D I2C_AQ_NO_CLK_STRETCH | I2C_AQ_NO_ZERO_LEN, .max_read_len =3D 16, .max_write_len =3D 16, }; --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 2ED512D6E43; Sun, 24 Aug 2025 11:34:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035275; cv=none; b=QHH2Ex3jZ4BjGpvUanXvzm5N+BPLgiJRIROyYDffDElB2hYxUwZpHmjIJCDRJXtzz2oP70AHH2rnOXjznz9UFwfdJuIhUXfagIhpusAg22fxZMjIP6DSBl36VbzwUluQQknGRaRa7oeyvBRMfKOCCv+mCdbDHMv1Hcq9SD3fnTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035275; c=relaxed/simple; bh=1nTD6kaiOz1BwPdoG6SRg+ZHJMGWjjwl4nJ0Vx0Jy+g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tiU16EUelxNljtrQi6hTHp7lwfKv9pCS7cWeNP9M5fyh7frwT+mH+wbULmsCW/f55IadDDRVW4hrvqgUqY80pxnd9EBNUIt8SZ7ajexz6Qgnrwi5vEon/lXcyHXM7E/WSItmSV91n0Uc1cj7glLebbgaiIz03yCbTYlvEsRt4BU= 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=l8RL/D/w; arc=none smtp.client-ip=209.85.221.52 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="l8RL/D/w" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3c68ac7e238so878943f8f.1; Sun, 24 Aug 2025 04:34:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035272; x=1756640072; 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; bh=//U63PD85OTzt0jQ8Gnj2XRbWc63AN05K4R5o5HvqLs=; b=l8RL/D/wrSxRhYfI3NMA0d1OspVIvZIGFTEMamX/Gx9WJmO4sQmYhoEoP9BfQYzbSX Wfxi3n1c9tUP4y1R5e+gfaa+eC2VdO1beEmLwXZoQyOsuRQFSkQgDiVNXOiP342vlxYc sJiTGULhcNWbpyWkumRjQWdE4jfGnVyaT1iTeqHMOjBF/pVU0R5Av0GyK3R49YTtuH8C ioH2CGeBUBrjPWt8jSlFf/fLUlf+BTfFnZr1FnOQMmE9u39vVExFEszX0+1bCYE89Zah gILTceQwAFXgSePjduwvUwDYqnVvzcK/MWhzm0oeHaTA6BIE5cggC7VdSbh++/1oMPCy J46A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035272; x=1756640072; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=//U63PD85OTzt0jQ8Gnj2XRbWc63AN05K4R5o5HvqLs=; b=LmOXsj5BtlXAZiS34PupRAvMlCEX9KXErohrW81VK7O/u+7gyqk3mcc0KMo6kC9BKU k0FBO6tcqLqlH0oFIiufkSgd0piRAWmq0Fzfao1KeGc45sgCWcl81qsJZaBBS4Rr8pBz 8gG2CHWf12ZzpP0e/unvxpQAfShE1AAKHcpAqrnmb4igxliWkhl/qUDGHumZ5ww0jI+U +Q6/wJSrzYEy8hXqnrxNAI+KI+paMwM8x4R1hO6PwBf2OsX/UOt0W4JfKw0NeopSOKT1 Hxb2Fq7C75vSuThKSuqrWegG35yYk2iCeweeZhMsLJ8Z/bdhbAKoVFFwZBcdhpoL/O1Q sOAw== X-Forwarded-Encrypted: i=1; AJvYcCUHHdDX4jbPca9j0lzOAV/savFVrVkir3MTIcxLlJpv7zalye4lkFgEnf6YDDdn6ipY9dqsfLN+QkoHZDl0@vger.kernel.org, AJvYcCX3VzWF/ZMFg9fOI6bQH9RhHeibc5kit2cJyA2cNVJE2QX230bHRgEL3a2l7jSFoSbh8Gpaoq95@vger.kernel.org, AJvYcCX7fE4B3/H2UrKYBF1luYeYp57Upao4BInj7iVz+7KwV5crsbloIMbmJjcN6s0gTzrZrQDthe03vo6G@vger.kernel.org X-Gm-Message-State: AOJu0Yyyz7LY+uLFNT+8rSP0KL4piwD5EntrNetHg8dcMDTU18E3JNdi oYiHFka6s4qxrSj37ud7klyd8RHgPSTXnrblrGjHpu7LksdAcZoRNBDj X-Gm-Gg: ASbGncsT5zOeDZTs/SgTOdzAVpY4eelRjfy9Ew1Vk9Fd0HtgrN4X7SUxtdHZ2/jpWLB K82b2c3o5UYybJg/z0/lQwnrlijNDGi2eDfx25kBuOGj2ITnU4FbX0VzVg30lfREfrxB226hzsq 0C6BxLP2P7/A4tYJAecSYgHCzockodbKP1MizQ4DrXq2Dd8SKvFIzgBqhUt04YAKP0bov0RMGYj o4cSZdj+oBjfu8aD3pulk+40uCUk50vSel7Rcm1M/L3ZY0sHwrScIq7/h3Fs9IOJKkxmVYQ6ckH ++dNixCrGDZhn90uKa20fxNt6S5hSYqquCbR4VK44+0HtaWQpUGx+yc68sgdGGRs/B17d0931uc eliOmPukq7PEvmN1gGAeid6ynbP4FaW5vw2phXq+I1vdTU/RTW+eoQl4= X-Google-Smtp-Source: AGHT+IGhK7O+VRYHUuH7vcoRK7FHXcK79OpXkdum2Hajv5qhQMsTVibXGh+4YF6xCrQ/jikHvKVyUw== X-Received: by 2002:a05:6000:4387:b0:3bb:bd05:7bef with SMTP id ffacd0b85a97d-3c5dbf69bfbmr7314649f8f.24.1756035272319; Sun, 24 Aug 2025 04:34:32 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:32 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek , stable@vger.kernel.org Subject: [PATCH v6 03/12] i2c: rtl9300: remove broken SMBus Quick operation support Date: Sun, 24 Aug 2025 11:33:39 +0000 Message-ID: <20250824113348.263475-4-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Remove the SMBus Quick operation from this driver because it is not natively supported by the hardware and is wrongly implemented in the driver. The I2C controllers in Realtek RTL9300 and RTL9310 are SMBus-compliant but there doesn't seem to be native support for the SMBus Quick operation. It is not explicitly mentioned in the documentation but looking at the registers which configure an SMBus transaction, one can see that the data length cannot be set to 0. This suggests that the hardware doesn't allow any SMBus message without data bytes (except for those it does on it's own, see SMBus Block Read). The current implementation of SMBus Quick operation passes a length of 0 (which is actually invalid). Before the fix of a bug in a previous commit, this led to a read operation of 16 bytes from any register (the one of a former transaction or any other value. This caused issues like soft-bricked SFP modules after a simple probe with i2cdetect which uses Quick by default. Running this with SFP modules whose EEPROM isn't write-protected, some of the initial bytes are overwritten because a 16-byte write operation is executed instead of a Quick Write. (This temporarily soft-bricked one of my DAC cables.) Because SMBus Quick operation is obviously not supported on these controllers (because a length of 0 cannot be set, even when no register address is set), remove that instead of claiming there is support. There also shouldn't be any kind of emulated 'Quick' which just does another kind of operation in the background. Otherwise, specific issues occur in case of a 'Quick' Write which actually writes unknown data to an unknown register. Fixes: c366be720235 ("i2c: Add driver for the RTL9300 I2C controller") Cc: # v6.13+ Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 04/12] i2c: rtl9300: use regmap fields and API for registers Date: Sun, 24 Aug 2025 11:33:40 +0000 Message-ID: <20250824113348.263475-5-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Adapt the RTL9300 I2C controller driver to use more of the regmap API, especially make use of reg_field and regmap_field instead of macros to represent registers. Most register operations are performed through regmap_field_* API then. Handle SCL selection using separate chip-specific functions since this is already known to differ between the Realtek SoC families in such a way that this cannot be properly handled using just a different reg_field. This makes it easier to add support for newer generations or to handle differences between specific revisions within a series. Just by defining a separate driver data structure with the corresponding register field definitions and linking it to a new compatible. Signed-off-by: Jonas Jelonek Reviewed-by: Chris Packham Tested-by: Chris Packham # On RTL9302c Tested-by: Sven Eckelmann Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen regmap, i2c->reg_base + RTL9300_I2C_MST_C= TRL2, mask, val); + ret =3D regmap_field_write(i2c->fields[F_MEM_ADDR_WIDTH], len); if (ret) return ret; =20 - val =3D reg << RTL9300_I2C_MST_CTRL1_MEM_ADDR_OFS; - mask =3D RTL9300_I2C_MST_CTRL1_MEM_ADDR_MASK; + return regmap_field_write(i2c->fields[F_MEM_ADDR], reg); +} =20 - return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CT= RL1, mask, val); +static int rtl9300_i2c_select_scl(struct rtl9300_i2c *i2c, u8 scl) +{ + return regmap_field_write(i2c->fields[F_SCL_SEL], 1); } =20 static int rtl9300_i2c_config_io(struct rtl9300_i2c *i2c, u8 sda_pin) { + struct rtl9300_i2c_drv_data *drv_data; int ret; - u32 val, mask; =20 - ret =3D regmap_update_bits(i2c->regmap, RTL9300_I2C_MST_GLB_CTRL, BIT(sda= _pin), BIT(sda_pin)); + drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); + + ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(sda_pin), BI= T(sda_pin)); if (ret) return ret; =20 - val =3D (sda_pin << RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_OFS) | - RTL9300_I2C_MST_CTRL1_GPIO_SCL_SEL; - mask =3D RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_MASK | RTL9300_I2C_MST_CTRL1_G= PIO_SCL_SEL; + ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], sda_pin); + if (ret) + return ret; =20 - return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CT= RL1, mask, val); + return drv_data->select_scl(i2c, 0); } =20 static int rtl9300_i2c_config_xfer(struct rtl9300_i2c *i2c, struct rtl9300= _i2c_chan *chan, u16 addr, u16 len) { - u32 val, mask; + int ret; =20 if (len < 1 || len > 16) return -EINVAL; =20 - val =3D chan->bus_freq << RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS; - mask =3D RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK; - - val |=3D addr << RTL9300_I2C_MST_CTRL2_DEV_ADDR_OFS; - mask |=3D RTL9300_I2C_MST_CTRL2_DEV_ADDR_MASK; + ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); + if (ret) + return ret; =20 - val |=3D ((len - 1) & 0xf) << RTL9300_I2C_MST_CTRL2_DATA_WIDTH_OFS; - mask |=3D RTL9300_I2C_MST_CTRL2_DATA_WIDTH_MASK; + ret =3D regmap_field_write(i2c->fields[F_DEV_ADDR], addr); + if (ret) + return ret; =20 - mask |=3D RTL9300_I2C_MST_CTRL2_RD_MODE; + ret =3D regmap_field_write(i2c->fields[F_DATA_WIDTH], (len - 1) & 0xf); + if (ret) + return ret; =20 - return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CT= RL2, mask, val); + return regmap_field_write(i2c->fields[F_RD_MODE], 0); } =20 static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, int len) @@ -124,8 +144,7 @@ static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8= *buf, int len) if (len > 16) return -EIO; =20 - ret =3D regmap_bulk_read(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DAT= A_WORD0, - vals, ARRAY_SIZE(vals)); + ret =3D regmap_bulk_read(i2c->regmap, i2c->data_reg, vals, ARRAY_SIZE(val= s)); if (ret) return ret; =20 @@ -152,52 +171,49 @@ static int rtl9300_i2c_write(struct rtl9300_i2c *i2c,= u8 *buf, int len) vals[reg] |=3D buf[i] << shift; } =20 - return regmap_bulk_write(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DAT= A_WORD0, - vals, ARRAY_SIZE(vals)); + return regmap_bulk_write(i2c->regmap, i2c->data_reg, vals, ARRAY_SIZE(val= s)); } =20 static int rtl9300_i2c_writel(struct rtl9300_i2c *i2c, u32 data) { - return regmap_write(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DATA_WOR= D0, data); + return regmap_write(i2c->regmap, i2c->data_reg, data); } =20 static int rtl9300_i2c_execute_xfer(struct rtl9300_i2c *i2c, char read_wri= te, int size, union i2c_smbus_data *data, int len) { - u32 val, mask; + u32 val; int ret; =20 - val =3D read_write =3D=3D I2C_SMBUS_WRITE ? RTL9300_I2C_MST_CTRL1_RWOP : = 0; - mask =3D RTL9300_I2C_MST_CTRL1_RWOP; - - val |=3D RTL9300_I2C_MST_CTRL1_I2C_TRIG; - mask |=3D RTL9300_I2C_MST_CTRL1_I2C_TRIG; + ret =3D regmap_field_write(i2c->fields[F_RWOP], read_write =3D=3D I2C_SMB= US_WRITE); + if (ret) + return ret; =20 - ret =3D regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_C= TRL1, mask, val); + ret =3D regmap_field_write(i2c->fields[F_I2C_TRIG], 1); if (ret) return ret; =20 - ret =3D regmap_read_poll_timeout(i2c->regmap, i2c->reg_base + RTL9300_I2C= _MST_CTRL1, - val, !(val & RTL9300_I2C_MST_CTRL1_I2C_TRIG), 100, 100000); + ret =3D regmap_field_read_poll_timeout(i2c->fields[F_I2C_TRIG], val, !val= , 100, 100000); if (ret) return ret; =20 - if (val & RTL9300_I2C_MST_CTRL1_I2C_FAIL) + ret =3D regmap_field_read(i2c->fields[F_I2C_FAIL], &val); + if (ret) + return ret; + if (val) return -EIO; =20 if (read_write =3D=3D I2C_SMBUS_READ) { switch (size) { case I2C_SMBUS_BYTE: case I2C_SMBUS_BYTE_DATA: - ret =3D regmap_read(i2c->regmap, - i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0, &val); + ret =3D regmap_read(i2c->regmap, i2c->data_reg, &val); if (ret) return ret; data->byte =3D val & 0xff; break; case I2C_SMBUS_WORD_DATA: - ret =3D regmap_read(i2c->regmap, - i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0, &val); + ret =3D regmap_read(i2c->regmap, i2c->data_reg, &val); if (ret) return ret; data->word =3D val & 0xffff; @@ -355,9 +371,11 @@ static int rtl9300_i2c_probe(struct platform_device *p= dev) { struct device *dev =3D &pdev->dev; struct rtl9300_i2c *i2c; + struct fwnode_handle *child; + struct rtl9300_i2c_drv_data *drv_data; + struct reg_field fields[F_NUM_FIELDS]; u32 clock_freq, sda_pin; int ret, i =3D 0; - struct fwnode_handle *child; =20 i2c =3D devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL); if (!i2c) @@ -376,9 +394,22 @@ static int rtl9300_i2c_probe(struct platform_device *p= dev) =20 platform_set_drvdata(pdev, i2c); =20 - if (device_get_child_node_count(dev) > RTL9300_I2C_MUX_NCHAN) + drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); + if (device_get_child_node_count(dev) > drv_data->max_nchan) return dev_err_probe(dev, -EINVAL, "Too many channels\n"); =20 + i2c->data_reg =3D i2c->reg_base + drv_data->data_reg; + for (i =3D 0; i < F_NUM_FIELDS; i++) { + fields[i] =3D drv_data->field_desc[i].field; + if (drv_data->field_desc[i].scope =3D=3D REG_SCOPE_MASTER) + fields[i].reg +=3D i2c->reg_base; + } + ret =3D devm_regmap_field_bulk_alloc(dev, i2c->regmap, i2c->fields, + fields, F_NUM_FIELDS); + if (ret) + return ret; + + i =3D 0; device_for_each_child_node(dev, child) { struct rtl9300_i2c_chan *chan =3D &i2c->chans[i]; struct i2c_adapter *adap =3D &chan->adap; @@ -395,7 +426,6 @@ static int rtl9300_i2c_probe(struct platform_device *pd= ev) case I2C_MAX_STANDARD_MODE_FREQ: chan->bus_freq =3D RTL9300_I2C_STD_FREQ; break; - case I2C_MAX_FAST_MODE_FREQ: chan->bus_freq =3D RTL9300_I2C_FAST_FREQ; break; @@ -427,11 +457,37 @@ static int rtl9300_i2c_probe(struct platform_device *= pdev) return 0; } =20 +#define GLB_REG_FIELD(reg, msb, lsb) \ + { .field =3D REG_FIELD(reg, msb, lsb), .scope =3D REG_SCOPE_GLOBAL } +#define MST_REG_FIELD(reg, msb, lsb) \ + { .field =3D REG_FIELD(reg, msb, lsb), .scope =3D REG_SCOPE_MASTER } + +static const struct rtl9300_i2c_drv_data rtl9300_i2c_drv_data =3D { + .field_desc =3D { + [F_MEM_ADDR] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 8, 31), + [F_SDA_OUT_SEL] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 4, 6), + [F_SCL_SEL] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 3, 3), + [F_RWOP] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 2, 2), + [F_I2C_FAIL] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 1, 1), + [F_I2C_TRIG] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 0, 0), + [F_RD_MODE] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 15, 15), + [F_DEV_ADDR] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 8, 14), + [F_DATA_WIDTH] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 4, 7), + [F_MEM_ADDR_WIDTH] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 2, 3), + [F_SCL_FREQ] =3D MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 0, 1), + [F_SDA_SEL] =3D GLB_REG_FIELD(RTL9300_I2C_MST_GLB_CTRL, 0, 7), + }, + .select_scl =3D rtl9300_i2c_select_scl, + .data_reg =3D RTL9300_I2C_MST_DATA_WORD0, + .max_nchan =3D RTL9300_I2C_MUX_NCHAN, +}; + + static const struct of_device_id i2c_rtl9300_dt_ids[] =3D { - { .compatible =3D "realtek,rtl9301-i2c" }, - { .compatible =3D "realtek,rtl9302b-i2c" }, - { .compatible =3D "realtek,rtl9302c-i2c" }, - { .compatible =3D "realtek,rtl9303-i2c" }, + { .compatible =3D "realtek,rtl9301-i2c", .data =3D (void *) &rtl9300_i2c_= drv_data }, + { .compatible =3D "realtek,rtl9302b-i2c", .data =3D (void *) &rtl9300_i2c= _drv_data }, + { .compatible =3D "realtek,rtl9302c-i2c", .data =3D (void *) &rtl9300_i2c= _drv_data }, + { .compatible =3D "realtek,rtl9303-i2c", .data =3D (void *) &rtl9300_i2c_= drv_data }, {} }; MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids); --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 B3A802D7DED; Sun, 24 Aug 2025 11:34:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035278; cv=none; b=SIrX9Kho0VMvVd+y1o+4YefSqiRriXZCYjBRTzmNMtA6e5V8F72d7dO+WCUyUuIY2KEtEL45CvwbKJoT5RfrlevAwn1YRimKMMjg1Yfn9ywF1qRrVh4208Qdj13HRattcwEqBu+izKjhKxlEBfiJS86qc+i4j3zv/Zwd0sp/oKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035278; c=relaxed/simple; bh=6iSaw1vxtbsqPx4P+khU61Cqtxm9jhLHfZYWON2oBlE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WpLB+Ki2a5r6qgAT+Qjfp8HDw/SZb/eUXsE0n7n8PJQvlHFK8StlrfN1Q5A61rHLgnav5HW+rk7BN+S2QPMOQLJtYJxzgfQtgdQ5vyqPot8T/Ta0pTk8DGUTa41Fz8M6cgSjQfZ7c7UntA0Wgsp3R2NmoOsdxrlSYuY9HGoFZFM= 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=FfO4u1nW; arc=none smtp.client-ip=209.85.128.49 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="FfO4u1nW" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45b577eb4dbso9082445e9.2; Sun, 24 Aug 2025 04:34:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035274; x=1756640074; 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; bh=LGRpPfiF+QCSSlKfaNedQV7hPKGK7aNfXLZMjnYO71Q=; b=FfO4u1nWdZ1VLiMe/+Dmbo2iqDn5tMpgbENnyU72LQnjr3vgE4hAsJXd2CMHZ5UdC3 UNObHR8KzOQFT/HhelMAxgCtKcaPV71+gMRsAqe2EnTgK37YQ7FcN5kdtaKYyPkhqWBG tFGQ5iOYwxpMtHS/jd+dUgStoDHQg2K2aAd2j62bV4Md750bqccZLjEubwNl3VlqhMOS vDnGarn144L/M9zBE//Ayw0S7LBGfcD9c/RXNrCNs7gqtUIARtlkc1p1Lltp/M1JKFyn ov0XDe0Ermh+ZprZoxs413H3LpvGOY/VmLfJaYagkFpjud2uZnjclI7oxQhGk/cA5f3R wC3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035274; x=1756640074; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LGRpPfiF+QCSSlKfaNedQV7hPKGK7aNfXLZMjnYO71Q=; b=AsroRmSPB1nK8bGEw+iW05i0qjqGch0o6W8dm1BQkOvyIc+YGkzd/WaJt10AvaYk6A hhgH47+7pywULBikWf0Z7lbTReTcbyCVXaWQ9ZwWoRcRBzeBbX9UwG+hfT0/ZMYlcRpS O6AWNHc/SaNkBrdglRgq0nwNrUeA9lWEc22fFZpMiITqH9HwuANMkkpPaOoIm0SD1D6z iQ7mh2h6DstkpYuCzWDSlHrG1eaML61laYIfmVfg/oS+FHJpy1FmTrmrWN0ZLWblNgnq DD9f0BGVyw0257M5bZMgTSjQsSHRosix7BTYV32VXG9UQ++oyTq9U0nFW1nP+VfceE/p Xlbg== X-Forwarded-Encrypted: i=1; AJvYcCVPbdG34aKSr1xJOBtZ7SAX/a18czdQ63d5knsA8FJGrrZZ9ffmRTLgj1Onyj8PdVpTILyDfO55+K7zGIVl@vger.kernel.org, AJvYcCXYYo+2h4kxAsq/10kphpYc0ihOkqiJtRJ+jG9F/4ENsL+H2ncmJHdewdz8++7BqmAR2aNxnWpTvEmF@vger.kernel.org X-Gm-Message-State: AOJu0YyIk4T+6RYRFwyN68oUrx7/6QIyB3RWN5IMYo3cpy5S+22/QoFM nqrgrjN7r9NcciMSv6CeGM1KUnf00ldjK82U6qg8VqvV8vTT2CSpggtw X-Gm-Gg: ASbGnct1T0xObeWcidyYPxrbcx6zVO38jDk5678pKDvJnbmrXqZ1LJLPZO9sm5vX1Ys RuoPaxc93ID72xqeUaFx/yXaG/GqEeMsZLgfsm/jGrL6oqsuBkhvo9UoLgu36ONWeJtzW4nqkOa UavmuaUEVqUOoPhJwS7xa/aTw9AS3eLWrL1Tu+aGmNfQcVTxSyvi+J7EvLmjN+EnGbzmMi7T3Rh BLA+k+ga7Zd6+dbtRITrWDyI24dNKRMh/OkBT/QWA9ajpGTXGDpiF0EyLMO2486SN1WlbknjHrZ ZBEJazaFloGifLa9O3jXFfNV7OVgDEJErbpAPjFYS7AzBmWgCgrQlfx213LGCrXAbSOxW+CRFXK WVD4kfS/ZJtTxRYaoJDOWMpbqw2yTkti0YzpgkBhyv3sqZO6Ylddk2ck= X-Google-Smtp-Source: AGHT+IHz8R5/qXaWr52x6eKVSUtfT+nYVdlDxRNLQUuUUK14n/OlU1Y2kEalBBPtgAQS2Yp+L4Dm9Q== X-Received: by 2002:a05:600c:19cb:b0:458:6733:fb5c with SMTP id 5b1f17b1804b1-45b517d2751mr71413665e9.28.1756035273881; Sun, 24 Aug 2025 04:34:33 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:33 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 05/12] dt-bindings: i2c: realtek,rtl9301-i2c: fix wording and typos Date: Sun, 24 Aug 2025 11:33:41 +0000 Message-ID: <20250824113348.263475-6-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Fix wording of binding description to use plural because there is not only a single RTL9300 SoC. RTL9300 describes a whole family of Realtek SoCs. Add missing word 'of' in description of reg property. Change 'SDA pin' to 'SDA line number' because the property must contain the SDA (channel) number ranging from 0-7 instead of a real pin number. Signed-off-by: Jonas Jelonek Reviewed-by: Rob Herring (Arm) Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen =20 description: - The RTL9300 SoC has two I2C controllers. Each of these has an SCL line (= which + RTL9300 SoCs have two I2C controllers. Each of these has an SCL line (wh= ich if not-used for SCL can be a GPIO). There are 8 common SDA lines that ca= n be assigned to either I2C controller. =20 @@ -27,7 +27,7 @@ properties: =20 reg: items: - - description: Register offset and size this I2C controller. + - description: Register offset and size of this I2C controller. =20 "#address-cells": const: 1 @@ -42,7 +42,7 @@ patternProperties: =20 properties: reg: - description: The SDA pin associated with the I2C bus. + description: The SDA line number associated with the I2C bus. maxItems: 1 =20 required: --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.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 2A7B12D94AF; Sun, 24 Aug 2025 11:34:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035280; cv=none; b=FYXoIWzxhEIad3tvWq82zreBDwkS06wT3yLNMmi5GVXVBMXsSP/9cNAKGEPdqf1SKkvnQb5f01St6j8f8m1pMIv7qEiX87PLXefn1ZYBoY8BEEc1f1D73aiOlvhucaaVqNJIa7nIDU4E/7x5sba6eW3IED4cXTHadPpqZHdBYWk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035280; c=relaxed/simple; bh=47i90oI8w96X07HMTvKU9lfgyYxuwalbzpZu3cH+DkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HBUWn/jYpsh4oTTQ2y9+HVVLUFaPSZfeoFFiqdR8ULHeXhFR+hLbrCHSSJoC7LvNCXBviL5hpLAZO6xv7NKIy4NWZz4bsjN0xK3zxbImECjV5xYxX5dz7hvP9q03k6Km4avp8dQ2ZtYJYl6qhEwP2m5c8rdLE3fbDKbNaVW0NQo= 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=OEiR4MuB; arc=none smtp.client-ip=209.85.221.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="OEiR4MuB" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3c79f0a606fso585658f8f.0; Sun, 24 Aug 2025 04:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035275; x=1756640075; 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; bh=qfsoRA8pDslrbI1hhUyS/52BVTAd4hsWRjGzfgmiIgI=; b=OEiR4MuBqJbKAtZA9SSXIm8ONgkieIzYYckfJb2xu7y5Zh49Oq570MKyY0/6c0av7p qByqaZQnFmcm5VW1T5qhwOIJo9+Tbr/2ppQ8R/yW9UIhrQdI99Ezu4vPBsZvd8vxjEge esAbEZy6jaOxCXlJ5Q8OCojB+7xEiddIxS0fXXdiULGrNJFvoAViDpWyA1EsbQGNL/a4 Zu2fayqVQBifqOgh8v2wezqAktC1lV6k33EyQT9YMxNcis/SsF7DyMqEr98nWeWJ5oVC wwo8brMbwEwrTqDnsYqg1hTtsrOMMEIT2luwq5tnkOyDcaGAB1E0FmriR++vp3Ccq8Nt p2ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035275; x=1756640075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qfsoRA8pDslrbI1hhUyS/52BVTAd4hsWRjGzfgmiIgI=; b=E+2eJk3H5SYRyMWhNQbyVUvlOnfDfhyioB8ReHUe+EKjqzuByU9fueV20RWzUkeE6E pUUDwtKghnFKOLPhNyZELROaOoLc0bNtm9qBlLbFAu4Ylgfa0x36XBhJtV29w3QNceFY TVZHBQB04S4VF7rjr/GgixhEbl4vqppE2UJoGLjBT577wWYEkJuZ8qW/brGnZURRGqkp KRYMYNqVSZy2IfDycUM3kFsJRp3bbqEh2zWeUMteifntZW3DfPETgWZQhh9XhcVywdim Ms+NUymilJLQLAiOdZFvHk02E2NARlEslTvm72uB0dqbtFLzfT2ko2NXk1J1SkwDU/c1 Ha3w== X-Forwarded-Encrypted: i=1; AJvYcCU3saGN1/osWvUiKIYsSsMrEF5lVn5tz8J61Nvob1SVdJHgZuSehCLE5FVw4RHGktXN+0bGH6tyawCsE1ER@vger.kernel.org, AJvYcCWl6YWdgM/cxWDO3enaLkRgt6oLwx02WsnLN6BdPibDVQeylTMwFsu8xwO6si+TPAkTs8SL1IKXTQOW@vger.kernel.org X-Gm-Message-State: AOJu0Yxih9AgUKn77KGC88xjFZXX4XfHGT4hKSlwLdnz1RnlaBs7HkiY 3bhceLxJ2Fzxm6+A8zDyOvnq+/Pi8cr8skQypah4DBlNPJbY6pUb40jZ X-Gm-Gg: ASbGnctj5i2QA1OmXqmp/39/UVkyRCIDbRJHRVMJjAn9HvIxiqakLRntR+oUgycTQA2 Ab7wu1yP+Az0xTgKEAeZm2pclXysgJPMwQrso+wtJLOO9uZaYqySszSSvKtMFvfOnyz5QSiPK5Y YNln4IUGg360xF4cx780cAJrD5/X33FyiZBkh36SD+3YFX56kueVC8zcPrdn+RlW/xQrGGq+I2s 5p2GnXV+yv9DqCTKH+i8V2ycisL/tXfAUeANG40SG8u36CoEJX/M4B3X8zrTMZ8jGylPPi3Mz9c qNoxcQi32jaZoRHdpsjoNmpODQBUeVzsWAta9DCYY/JlfIKCoT7Y+BqjWmc28wzpO/QwegtD92Y 4U66ih1a72bRwlL+lU1SXgCua1Am0a7WqrH2RRd5+P89uMHZPdfp26Go= X-Google-Smtp-Source: AGHT+IEIumGPD3s3+qWkOWX79dztIdQIgnp9CLQuqnHstWNzR7vX5AsLP4sC58TFgCXYE8ZWyS5x8A== X-Received: by 2002:a05:6000:288e:b0:3b7:9214:6d73 with SMTP id ffacd0b85a97d-3c5dbf69b9dmr7093158f8f.20.1756035274614; Sun, 24 Aug 2025 04:34:34 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:34 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 06/12] i2c: rtl9300: rename internal sda_pin to sda_num Date: Sun, 24 Aug 2025 11:33:42 +0000 Message-ID: <20250824113348.263475-7-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Rename the internally used 'sda_pin' to 'sda_num' to make it clear that this is NOT the actual pin number of the GPIO pin but rather the logical SDA channel number. Although the alternate function SDA_Y is sometimes given with the GPIO number, this is not always the case. Thus, avoid any confusion or misconfiguration by giving the variable the correct name. This follows the description change in the devicetree bindings. Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen de= v); =20 - ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(sda_pin), BI= T(sda_pin)); + ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(sda_num), BI= T(sda_num)); if (ret) return ret; =20 - ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], sda_pin); + ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], sda_num); if (ret) return ret; =20 @@ -243,11 +243,11 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter = *adap, u16 addr, unsigned s int len =3D 0, ret; =20 mutex_lock(&i2c->lock); - if (chan->sda_pin !=3D i2c->sda_pin) { + if (chan->sda_num !=3D i2c->sda_num) { ret =3D rtl9300_i2c_config_io(i2c, chan->sda_pin); if (ret) goto out_unlock; - i2c->sda_pin =3D chan->sda_pin; + i2c->sda_num =3D chan->sda_num; } =20 switch (size) { @@ -374,7 +374,7 @@ static int rtl9300_i2c_probe(struct platform_device *pd= ev) struct fwnode_handle *child; struct rtl9300_i2c_drv_data *drv_data; struct reg_field fields[F_NUM_FIELDS]; - u32 clock_freq, sda_pin; + u32 clock_freq, sda_num; int ret, i =3D 0; =20 i2c =3D devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL); @@ -414,7 +414,7 @@ static int rtl9300_i2c_probe(struct platform_device *pd= ev) struct rtl9300_i2c_chan *chan =3D &i2c->chans[i]; struct i2c_adapter *adap =3D &chan->adap; =20 - ret =3D fwnode_property_read_u32(child, "reg", &sda_pin); + ret =3D fwnode_property_read_u32(child, "reg", &sda_num); if (ret) return ret; =20 @@ -431,11 +431,11 @@ static int rtl9300_i2c_probe(struct platform_device *= pdev) break; default: dev_warn(i2c->dev, "SDA%d clock-frequency %d not supported using defaul= t\n", - sda_pin, clock_freq); + sda_num, clock_freq); break; } =20 - chan->sda_pin =3D sda_pin; + chan->sda_num =3D sda_num; chan->i2c =3D i2c; adap =3D &i2c->chans[i].adap; adap->owner =3D THIS_MODULE; @@ -445,14 +445,14 @@ static int rtl9300_i2c_probe(struct platform_device *= pdev) adap->dev.parent =3D dev; i2c_set_adapdata(adap, chan); adap->dev.of_node =3D to_of_node(child); - snprintf(adap->name, sizeof(adap->name), "%s SDA%d\n", dev_name(dev), sd= a_pin); + snprintf(adap->name, sizeof(adap->name), "%s SDA%d\n", dev_name(dev), sd= a_num); i++; =20 ret =3D devm_i2c_add_adapter(dev, adap); if (ret) return ret; } - i2c->sda_pin =3D 0xff; + i2c->sda_num =3D 0xff; =20 return 0; } --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 2CC942D8763; Sun, 24 Aug 2025 11:34:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035278; cv=none; b=rIMymgysU2fdzmPfLtJcdzIwvL6tUu9RX4mA22zB62FqJsC/62bTRwni5ZulJKbL1ihMYdObQKJ44pc4AV2m5k+wJJmitphMO6sX/oC5iV1aauA/Hw0z54X4lmEWlbt97R7KGOEN2Mirfo+1tD9nvSvYpEGXlnRTHpipxQOKJ+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035278; c=relaxed/simple; bh=mC0Hz8rKvpYmxinqi8UXJUT5q7HWthragLXxi/PIwvs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=glE+d7MsAo8rNIY8DwMgO3ebbxXAxZhiIY3EgPvwd1wZaIlpZKFBzgvtc64lG3BlqZYV/8G/Q3l8kBdaRPE0T9X3dtGbryWDmPlNiPFiNkurLoP4sgcIjLXp3VeKANtNFiPvi7In2uSTx3S8LLrErRh/hZ7jQgAfHfM+YtEREtQ= 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=G2v71Kjr; arc=none smtp.client-ip=209.85.128.44 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="G2v71Kjr" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-45a1b05ac1eso19113915e9.1; Sun, 24 Aug 2025 04:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035275; x=1756640075; 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; bh=9qBKoTaVCO++BPStbErBm/tCDRfQKKXA8YQ+sxntbw8=; b=G2v71Kjr9DpCTV+mWq7qlKteFu7u5/gOAcnVHbFU7J0b0d69bEDQPB1XiNCYv8YVAM 0+hJunFFB+ZpmubxTFR/KAiAaP3MCRjBZGZ9AN2v1mzixN4LRQnZbbmvNlEjoqxYRn+C wR7T8y9fcbhD+ggnzCqpfYmYg5RjPMUiB7Bi5oIdzmILfFY4WDB6Il4MBp+9xpyFl/q0 65K8EXfnY/ZA+GjtgEynXau/vf1ZJmXY9NiQl3KZQyL/QNGlcXX4tyqcc/51n7pYNYEq vBnyJ0mMyokLwmCzStZH3RkpnKn5AOFj5VFUlxGBF5wbZy4VdyCmbo2bf81O+Zl12+DC EC2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035275; x=1756640075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9qBKoTaVCO++BPStbErBm/tCDRfQKKXA8YQ+sxntbw8=; b=UUfXrljiDaGmb43NGAKYC5RSBIg60YoDLwC6KkjweLrH6Tm+Kd3bF2ZhZYSgIg1NAj 8qLCM0p4+qtwCnsXv8fUcw0uKQ2BETwjDdcMuqYPwod9klOdMhDavDfW4e6lr0LlxJnx 6+4owVzsWYIv8o0bfBJy8Saj8S0zbWUMWWkNKQUP326o0y2Y0sjhJONQZP3gCCtKvOq3 MYdlo5DF357F1Ti6/+AB6HMVHQoPwdepwYeCcH+ZhKneqs2+iV9wXM1KxwVxWGteRjlA JITuq/Z4RB1M1c5PbP0Jrgnr1Fkhrkt3gRtr8Ub0c4+5ln7E0SCN+zlFbhiyhT30iEnJ A9DQ== X-Forwarded-Encrypted: i=1; AJvYcCW1IK11RmdLiNB3Xq/l6tJ5QiF2Ik2e7y0T0jg8zZBp1vQ8aZv4gMY6eNHqKGmIZAkoCCOhlSJ39c1CSlLm@vger.kernel.org, AJvYcCX1Kl6rnmdP08OAG16nCXhKjITIzFFLL+18ZN+Af68Jbp3YAv0bq8pMSVyC3SH7oC0NrQZHnBppgaU3@vger.kernel.org X-Gm-Message-State: AOJu0Yzgn2QIZLGM2rTfaJ6CkfnAlbN7Xp0L9PdvBAZqZcXCnDrNjS8r goWS1hwosMZTlFsQDt1DvAVcIvff+CfjUbyu8r5tfGhmGhgPuDgdB2Du X-Gm-Gg: ASbGncunzZCMFmTUPCYncsI5mS8RxtDCovcWPO186CEmldZb85BgOr9KJGE59a7S+el SRMbZasSOlQtfjOCA75UdPRmrQ+gHbnmd+zy3M+E5Jwg0ySHZ1yCjL6UhZJ0Gchc49Ok6fwqO1f soHLyCDvSxM3D0aKpsgGy/FxMVjxmLDLdERJddgghs/9aBYN2uyjG4MClJvtbqWa+EpeAY2k2d3 mHEhXHdJ80bQu63CESGRQFTb5NK+91JYUyYmPpM4uOxKphXT5jkovzeJrDwW9+k7VyAmX4LKfii s0x4DU9FPfqDXUzQiuq47dkbfOMcNwF4gjYMpAoPgSuVtmK1MpzHOU2E2IPIVDtUk4XW2npZc4V jQIgW2tiu7bCdiOvCNVOjfcvt8Zh9ENfi29HriBbKvHHGU88UFffhw3w= X-Google-Smtp-Source: AGHT+IGzJU1raJzm4fuF3QZJv3Ip9ef69juRGbQ4YYy3QaQlOSG18TNf7XWR639yjPYNOqYpAK7Teg== X-Received: by 2002:a05:600c:8b6e:b0:45b:47e1:ef6c with SMTP id 5b1f17b1804b1-45b5c086835mr21265585e9.35.1756035275338; Sun, 24 Aug 2025 04:34:35 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:35 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 07/12] i2c: rtl9300: move setting SCL frequency to config_io Date: Sun, 24 Aug 2025 11:33:43 +0000 Message-ID: <20250824113348.263475-8-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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 register operation to set the SCL frequency to the rtl9300_i2c_config_io function instead of the rtl9300_i2c_config_xfer function. This rather belongs there next to selecting the current SDA output line. Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen fields[F_SCL_SEL], 1); } =20 -static int rtl9300_i2c_config_io(struct rtl9300_i2c *i2c, u8 sda_pin) +static int rtl9300_i2c_config_io(struct rtl9300_i2c *i2c, struct rtl9300_i= 2c_chan *chan) { struct rtl9300_i2c_drv_data *drv_data; int ret; =20 drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); =20 - ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(sda_num), BI= T(sda_num)); + ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(chan->sda_nu= m), + BIT(chan->sda_num)); if (ret) return ret; =20 - ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], sda_num); + ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], chan->sda_num); + if (ret) + return ret; + + ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); if (ret) return ret; =20 @@ -121,10 +126,6 @@ static int rtl9300_i2c_config_xfer(struct rtl9300_i2c = *i2c, struct rtl9300_i2c_c if (len < 1 || len > 16) return -EINVAL; =20 - ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); - if (ret) - return ret; - ret =3D regmap_field_write(i2c->fields[F_DEV_ADDR], addr); if (ret) return ret; @@ -244,7 +245,7 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter *a= dap, u16 addr, unsigned s =20 mutex_lock(&i2c->lock); if (chan->sda_num !=3D i2c->sda_num) { - ret =3D rtl9300_i2c_config_io(i2c, chan->sda_pin); + ret =3D rtl9300_i2c_config_io(i2c, chan); if (ret) goto out_unlock; i2c->sda_num =3D chan->sda_num; --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (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 D586A2D94A7; Sun, 24 Aug 2025 11:34:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035279; cv=none; b=JvFg+/gOhueGgPSVem7ResWFnUcSO+2AJtvuPUT8qQdjZtJ41+upEr7+PL8XIejduLwyfttpCzvy85oic386CnDN0L7997rhn8nmw7rlcVf/zO+8lohNnm+1TQkSkQV0B5yyPBrdHfSpq/JJ5GZ5ZVWx1YZ4ak1QwkFfgY68Y98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035279; c=relaxed/simple; bh=uXOQzsvisidMTejvI94J0qvQEiJkNo3pjmJXqyu0+Is=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AeHuLu3Rt8H7pyEzv8kJOnuqghRkykNu6/tKMk8Lo1Q/zaNGKOlNGOSiIVDAG4DxS+AnIj0Mo670Efl8pFNiI2zrM7p0KOqJcZMdihj48zaHn4Yq7rrDA4MnyNLSbkW68Sb2+TVJMM+pMqsM+WJO181F9tkN+/tyAiMaWV4UNr0= 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=TMQje+U0; arc=none smtp.client-ip=209.85.221.48 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="TMQje+U0" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3c68ac7e1c4so742141f8f.2; Sun, 24 Aug 2025 04:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035276; x=1756640076; 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; bh=BXInjrAUVFtdJ7jdGX5n89+iobAWzmPRxkVQU5xCijk=; b=TMQje+U0kMbJE2PkxAHzGdwSTGyVscoGp+nOy8z5E5MJqdd/lxgiPpMhUXOqRc/BDW okOqthqmxZ62+3YfYMcpnI/AFQJk0Hp7nNrRQrWa40rH7lBZ9pw87jnilaHEiMlrjgLK Vy73Zl2d3/mRXkhA0vVG/CCQ4wj39+cHzgQdWJEwlk3s0rTaK6t8oC1IDTG67VTmK4ai pd4a+SGJPPjRKwcJmSH1o/J+6PG4Ifs56/+8JrNPPg9GQxN98w0H5sEda/smN4A3e9WY lBwQ70C/r93Hjew2TO6IcseMwv4v8CRZq2TSihhf5rxUxF8nT/HMIi9l+fgJLApaMgNc deNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035276; x=1756640076; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BXInjrAUVFtdJ7jdGX5n89+iobAWzmPRxkVQU5xCijk=; b=B97LhjaR2DY+IBgmkfzQUrrH/L9ROABwOu+TB38S1doIlmtQWkVWsvKcdxR1FC3hDI PbzTPD9qqhPpeJmESI/l5ke91EQuFeZm2qbBL4ntuHUBPGcq8DguLR6jgHV1Crxulp/D CIaXFd79EFr1JM48LlqIV5ehuZDCJcnL3DDQoEPL6O6X0Y1ZHh9B8V6ikOdLrFAkKAw+ i7YzLf5lC7vkcIRYnCNg7eWYFLGQjWq9tAk0qysjBwIn6chEe6PlmyqPda8oPBO0HXp3 uLiOm24DBjTfkocgPfGp5XqjSUduNmqvYWHcUnXcqcv2V4iqYfjXwWvmQCsguXiB0JeR DZEw== X-Forwarded-Encrypted: i=1; AJvYcCVs1YfulWSPu9zK1gujW5GTE5VZuxaIExTFtdy0VJdYbpU/4vYIKZxmmrBxIQpb6o0T789xd7co4Ed4@vger.kernel.org, AJvYcCW5C6JMdSFmTkyxNPsH4NfmE6QFsZRvXAxF2zsJKZ15su9iMWLCcNwsDQHh7jQSMk6vo9zmJlsjJlIc5r8N@vger.kernel.org X-Gm-Message-State: AOJu0YypoVZkY4BjIcN5Wsl2Sk8v4WSEtvvkN5YhwEpCkFwh6kIHFypT nm94eggV+OqkIxR1pkUx8s4PZ3LambVP+GdWhirjwDUQ99e0iZYzl2Qy X-Gm-Gg: ASbGncuIXOYttm3Em0dqxhepmXJdNnuRIDTYhW15mhRo03dcIuxIUlgZ7IsB/bdlpKO wy0Gq65UCje5WZVH1d8mQPrborPirGmkKbw6Y/6n14weOKXQgFfUMEwEC+2VZyxepPlSCpLThx9 1ZigsK20g5eLTCxF9A9ZgqRmKAwAzawn0bI9NOqlDXB+qk1FYlp8Ns8N0AsejDbczaUIwnjJUtk G3chM7bS6hUJ4zH2tK0aw7go0imInseKn3RfwAFbQKdeAMPtZqLT8Fc7MbSsocVveMti1ToG7zZ EBFYb2NMHxnRvyxcD2p64FEMCGwtl/p4qaXfhCy6T0rzdCkzYySbvNaPeA0NwNIsgj6UWkioN6M UorDbBy3fzS9F2i7vrTtShMQfbe15Kap9TeMQMI6xUkrda1XNI+rSPrE= X-Google-Smtp-Source: AGHT+IHQmalW3s3vLdIFJfWQvnDjSiL7qp9Bpr+YNwRc5jN9UdWNNROhlZ/hg0D9NYlBLZGIn0VhXw== X-Received: by 2002:a5d:5f8b:0:b0:3c7:9b1b:e294 with SMTP id ffacd0b85a97d-3c79b1be60bmr3532012f8f.58.1756035276077; Sun, 24 Aug 2025 04:34:36 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:35 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 08/12] i2c: rtl9300: do not set read mode on every transfer Date: Sun, 24 Aug 2025 11:33:44 +0000 Message-ID: <20250824113348.263475-9-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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 operation to set the read mode from config_xfer to probe. The I2C controller of RTL9300 and RTL9310 support a legacy message mode for READs with 'Read Address Data' instead of the standard format 'Write Address ; Read Data'. There is no way to pass that via smbus_xfer, thus there is no point in supported this in the driver and moreover no point in setting this on every transaction. Setting this once in the probe call is sufficient. Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen fields[F_DATA_WIDTH], (len - 1) & 0xf); - if (ret) - return ret; - - return regmap_field_write(i2c->fields[F_RD_MODE], 0); + return regmap_field_write(i2c->fields[F_DATA_WIDTH], (len - 1) & 0xf); } =20 static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, int len) @@ -455,6 +451,11 @@ static int rtl9300_i2c_probe(struct platform_device *p= dev) } i2c->sda_num =3D 0xff; =20 + /* only use standard read format */ + ret =3D regmap_field_write(i2c->fields[F_RD_MODE], 0); + if (ret) + return ret; + return 0; } =20 --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 F30242D97A6; Sun, 24 Aug 2025 11:34:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035281; cv=none; b=hIW/XVyVvFgfBmsfV5d0Vclt0WkUJR2AHDJrNqufyKa3JaGmwm22v2aoJqvO17L43/gIlSuxFpeHg7VQSYt4lmNq5I+Uq4SkizZXw0HbijSMXMRx67aNnFpAjwBmi7QdB3ENz2vxg45mg/Vb1ieH3WJVd2E6VTwd6+/EOGuZZvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035281; c=relaxed/simple; bh=wSmTVHEJhgpd0W2GlqinGQU4Ox02CeUAHST0NffqZlg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mu8m5551jhB974hg4E9tHmquNC3aZf7JjaR+N4JNa0sZdxWKPoQytDZLOOFnd4ku6WLXSGcjQZF4WhDd4NgEWmN1ZPd5n8cMbPkZo3SSDhk70/3p5EDc64w/TIkaawY6WdXnmdaKH7IdRQTNRwGzqiAMW9SZIrgTlm58/zE3evQ= 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=LSZj3YRt; arc=none smtp.client-ip=209.85.128.51 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="LSZj3YRt" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-45a1b065d58so29436205e9.1; Sun, 24 Aug 2025 04:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035277; x=1756640077; 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; bh=UAQbZJxhNRQHD+n6kLrxQ0/ZHE57KMRPqriXHO0Ez54=; b=LSZj3YRtVRRnM9CIJ2DBRBQtygAiU9KHY+v6NpfR/Kks+Q4EcbYswcR/HjdIsIPblo z+xuQ/wWGzWdPHCQhMPaoyh0oYsNgPA8w6GVHNF8KyIWRm3Ech/ehRquUKpgKHKy4yFZ dsrHqArnuLsS+hMqQ1hPLD4JinlN2USOpFBHtpEoVK3RpOEtM0GY6k0MnxvxaI0QIWtC NucGgLB/zJ7D1x+g4LVL6cbyM8g/eH6Tkzbip8KmurKolYwRcJLTX8vytY0QE9yyMZlD tArHKi/kB/eREIw9weFvxlLEfybZfjP7pejqW1FSoYhZiZ0MGcnbp4SrBmkOEd/ewhZm 2vFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035277; x=1756640077; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UAQbZJxhNRQHD+n6kLrxQ0/ZHE57KMRPqriXHO0Ez54=; b=ZCnsYruilrd+rTw2O/HDjBugCufSNKUe4uTR+UbVKhqxntGZu8BpxWmOW81HiHzhRj 7W+q7gKvUU6sBd/c5AuFtCAQ1tR6vGNL0QExNFswfGYODm642The5zwB5/JTbfgVYr7o MthxWsMzavh4FApzHdd6r/hwICOFbpBMuLpU1v3pk1f+BVxXZl31ZceKH6tvtY97j1rc Aysodv5t8Ohdh7w6X8s5cM1ohhWVrfuepgi0YIn7vxAp5r601euAsPLbydY8C9HMkqD0 fRKf0uWh+PzCMh1ZnTP+7ONwFdcydVTGMjJd2e+iHsdkw5RyoFW+cmeCW4nydX1ol5VP RxAA== X-Forwarded-Encrypted: i=1; AJvYcCUG15i9NPo/XNjPRQlOQZNs8GB3JdJ+gUeaHtuxUZcXiLxQvv4FHOVxBzw67X4Yuc1O8yi98OaY+ecT@vger.kernel.org, AJvYcCUtEUiJLhOgnTZIfydCemhrsDCnfWkMLqLZIG96yU35tNCe6KpA7L1bA1kPMHYqJoD90oeLo6TwQpOhIBZM@vger.kernel.org X-Gm-Message-State: AOJu0YyNN0kbGLk5z/sGhTIK5EL7koDCFILmhPMTZC3hAgWK+C2NAToS LEDy76dLKVSnahGaHNh6m/kczgnT8JAN4iAvXF6BtIVR0OlLig4C/7t8b4NTqA== X-Gm-Gg: ASbGncvMxuPuOKLERy7kTZYADAWhlFmeLozanr/Wd303bE4T1bE4v8b/ukfClC2qCOk Vbk6vWdc6zuRXofjt1Nketk1+etpkw0cy2tysWN09VHvItdfOluaVcMkZimm5Gsmbk4BLnOKLuQ zq7WbQOvNzUkUbqicX/xUTkmhAQ3sqa8BTMOUCdOgweI0JXE+QmIEPVdJ/Ee37w/tJKvE5FM8Kj 12S/Pk8o6waEvCglSMVLViUx0nlopD0UxxB7vg7yMjmIkB57IDNfkDdhrDPtqQWfAPqj+eleblb K/vTxOZZLHCHukT25gzmEC3CurWynqhCQ2PMQJ0JPS9RWUff7adLTRRuleVQTjCHkEZXWHi2HUc 40zVZSs5IMrfjOFcWiZH/0E6DcZvFt9ESJhruVJkxFcBGE5n865Tnk4vmUB0dJq527A== X-Google-Smtp-Source: AGHT+IGR0CLOw1yg2bSATb6rYPsZFT2YMaz22iPH8N6YPfnbFbtZ0UQo6KR6AkGxSp1VoLejldFriA== X-Received: by 2002:a05:600c:5491:b0:459:d9a2:e927 with SMTP id 5b1f17b1804b1-45b51798f8fmr80358975e9.5.1756035276831; Sun, 24 Aug 2025 04:34:36 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:36 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 09/12] i2c: rtl9300: separate xfer configuration and execution Date: Sun, 24 Aug 2025 11:33:45 +0000 Message-ID: <20250824113348.263475-10-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" So far, the rtl9300_i2c_smbus_xfer code is quite a mess with function calls distributed over the whole function setting different values in different cases. Calls to rtl9300_i2c_config_xfer and rtl9300_i2c_reg_addr_set are used in every case-block with varying values whose meaning is not instantly obvious. In some cases, there are additional calls within these case-blocks doing more things. This is in general a bad design and especially really bad for readability and maintainability because it distributes changes or issues to multiple locations due to the same function being called with different hardcoded values in different places. To have a good structure, setting different parameters based on the desired operation should not be interleaved with applying these parameters to the hardware registers. Or in different words, the parameter site should be mixed with the call site. Thus, separate configuration and execution of an SMBus xfer within rtl9300_i2c_smbus_xfer to improve readability and maintainability. Add a new 'struct rtl9300_i2c_xfer' to carry the required parameters for an xfer which are configured based on the input parameters within a single switch-case block, without having any function calls within this block. The function calls to actually apply these values to the hardware registers then appear below in a single place and just operate on the passed instance of 'struct rtl9300_i2c_xfer'. These are 'rtl9300_i2c_prepare_xfer' which combines applying all parameters of the xfer to the corresponding register, and 'rtl9300_i2c_do_xfer' which actually executes the xfer and does post-processing if needed. Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen #include #include +#include =20 enum rtl9300_bus_freq { RTL9300_I2C_STD_FREQ, @@ -71,6 +72,22 @@ struct rtl9300_i2c { struct mutex lock; }; =20 +enum rtl9300_i2c_xfer_type { + RTL9300_I2C_XFER_BYTE, + RTL9300_I2C_XFER_WORD, + RTL9300_I2C_XFER_BLOCK, +}; + +struct rtl9300_i2c_xfer { + enum rtl9300_i2c_xfer_type type; + u16 dev_addr; + u8 reg_addr; + u8 reg_addr_len; + u8 *data; + u8 data_len; + bool write; +}; + #define RTL9300_I2C_MST_CTRL1 0x0 #define RTL9300_I2C_MST_CTRL2 0x4 #define RTL9300_I2C_MST_DATA_WORD0 0x8 @@ -95,45 +112,37 @@ static int rtl9300_i2c_select_scl(struct rtl9300_i2c *= i2c, u8 scl) return regmap_field_write(i2c->fields[F_SCL_SEL], 1); } =20 -static int rtl9300_i2c_config_io(struct rtl9300_i2c *i2c, struct rtl9300_i= 2c_chan *chan) +static int rtl9300_i2c_config_chan(struct rtl9300_i2c *i2c, struct rtl9300= _i2c_chan *chan) { struct rtl9300_i2c_drv_data *drv_data; int ret; =20 - drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); + if (i2c->sda_num =3D=3D chan->sda_num) + return 0; =20 - ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(chan->sda_nu= m), - BIT(chan->sda_num)); + ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); if (ret) return ret; =20 - ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], chan->sda_num); + drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); + ret =3D drv_data->select_scl(i2c, 0); if (ret) return ret; =20 - ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); + ret =3D regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(chan->sda_nu= m), + BIT(chan->sda_num)); if (ret) return ret; =20 - return drv_data->select_scl(i2c, 0); -} - -static int rtl9300_i2c_config_xfer(struct rtl9300_i2c *i2c, struct rtl9300= _i2c_chan *chan, - u16 addr, u16 len) -{ - int ret; - - if (len < 1 || len > 16) - return -EINVAL; - - ret =3D regmap_field_write(i2c->fields[F_DEV_ADDR], addr); + ret =3D regmap_field_write(i2c->fields[F_SDA_OUT_SEL], chan->sda_num); if (ret) return ret; =20 - return regmap_field_write(i2c->fields[F_DATA_WIDTH], (len - 1) & 0xf); + i2c->sda_num =3D chan->sda_num; + return 0; } =20 -static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, int len) +static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, u8 len) { u32 vals[4] =3D {}; int i, ret; @@ -153,7 +162,7 @@ static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8= *buf, int len) return 0; } =20 -static int rtl9300_i2c_write(struct rtl9300_i2c *i2c, u8 *buf, int len) +static int rtl9300_i2c_write(struct rtl9300_i2c *i2c, u8 *buf, u8 len) { u32 vals[4] =3D {}; int i; @@ -176,16 +185,51 @@ static int rtl9300_i2c_writel(struct rtl9300_i2c *i2c= , u32 data) return regmap_write(i2c->regmap, i2c->data_reg, data); } =20 -static int rtl9300_i2c_execute_xfer(struct rtl9300_i2c *i2c, char read_wri= te, - int size, union i2c_smbus_data *data, int len) +static int rtl9300_i2c_prepare_xfer(struct rtl9300_i2c *i2c, struct rtl930= 0_i2c_xfer *xfer) { - u32 val; int ret; =20 - ret =3D regmap_field_write(i2c->fields[F_RWOP], read_write =3D=3D I2C_SMB= US_WRITE); + if (xfer->data_len < 1 || xfer->data_len > 16) + return -EINVAL; + + ret =3D regmap_field_write(i2c->fields[F_DEV_ADDR], xfer->dev_addr); + if (ret) + return ret; + + ret =3D rtl9300_i2c_reg_addr_set(i2c, xfer->reg_addr, xfer->reg_addr_len); + if (ret) + return ret; + + ret =3D regmap_field_write(i2c->fields[F_RWOP], xfer->write); + if (ret) + return ret; + + ret =3D regmap_field_write(i2c->fields[F_DATA_WIDTH], (xfer->data_len - 1= ) & 0xf); if (ret) return ret; =20 + if (xfer->write) { + switch (xfer->type) { + case RTL9300_I2C_XFER_BYTE: + ret =3D rtl9300_i2c_writel(i2c, *xfer->data); + break; + case RTL9300_I2C_XFER_WORD: + ret =3D rtl9300_i2c_writel(i2c, get_unaligned((const u16 *)xfer->data)); + break; + default: + ret =3D rtl9300_i2c_write(i2c, xfer->data, xfer->data_len); + break; + } + } + + return ret; +} + +static int rtl9300_i2c_do_xfer(struct rtl9300_i2c *i2c, struct rtl9300_i2c= _xfer *xfer) +{ + u32 val; + int ret; + ret =3D regmap_field_write(i2c->fields[F_I2C_TRIG], 1); if (ret) return ret; @@ -200,28 +244,24 @@ static int rtl9300_i2c_execute_xfer(struct rtl9300_i2= c *i2c, char read_write, if (val) return -EIO; =20 - if (read_write =3D=3D I2C_SMBUS_READ) { - switch (size) { - case I2C_SMBUS_BYTE: - case I2C_SMBUS_BYTE_DATA: + if (!xfer->write) { + switch (xfer->type) { + case RTL9300_I2C_XFER_BYTE: ret =3D regmap_read(i2c->regmap, i2c->data_reg, &val); if (ret) return ret; - data->byte =3D val & 0xff; + + *xfer->data =3D val & 0xff; break; - case I2C_SMBUS_WORD_DATA: + case RTL9300_I2C_XFER_WORD: ret =3D regmap_read(i2c->regmap, i2c->data_reg, &val); if (ret) return ret; - data->word =3D val & 0xffff; - break; - case I2C_SMBUS_I2C_BLOCK_DATA: - ret =3D rtl9300_i2c_read(i2c, &data->block[1], len); - if (ret) - return ret; + + put_unaligned(val & 0xffff, (u16*)xfer->data); break; default: - ret =3D rtl9300_i2c_read(i2c, &data->block[0], len); + ret =3D rtl9300_i2c_read(i2c, xfer->data, xfer->data_len); if (ret) return ret; break; @@ -237,108 +277,62 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter= *adap, u16 addr, unsigned s { struct rtl9300_i2c_chan *chan =3D i2c_get_adapdata(adap); struct rtl9300_i2c *i2c =3D chan->i2c; - int len =3D 0, ret; + struct rtl9300_i2c_xfer xfer =3D {0}; + int ret; + + if (addr > 0x7f) + return -EINVAL; =20 mutex_lock(&i2c->lock); - if (chan->sda_num !=3D i2c->sda_num) { - ret =3D rtl9300_i2c_config_io(i2c, chan); - if (ret) - goto out_unlock; - i2c->sda_num =3D chan->sda_num; - } + + ret =3D rtl9300_i2c_config_chan(i2c, chan); + if (ret) + goto out_unlock; + + xfer.dev_addr =3D addr & 0x7f; + xfer.write =3D (read_write =3D=3D I2C_SMBUS_WRITE); + xfer.reg_addr =3D command; + xfer.reg_addr_len =3D 1; =20 switch (size) { case I2C_SMBUS_BYTE: - if (read_write =3D=3D I2C_SMBUS_WRITE) { - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 0); - if (ret) - goto out_unlock; - ret =3D rtl9300_i2c_reg_addr_set(i2c, command, 1); - if (ret) - goto out_unlock; - } else { - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 1); - if (ret) - goto out_unlock; - ret =3D rtl9300_i2c_reg_addr_set(i2c, 0, 0); - if (ret) - goto out_unlock; - } + xfer.data =3D (read_write =3D=3D I2C_SMBUS_READ) ? &data->byte : &comman= d; + xfer.data_len =3D 1; + xfer.reg_addr =3D 0; + xfer.reg_addr_len =3D 0; + xfer.type =3D RTL9300_I2C_XFER_BYTE; break; - case I2C_SMBUS_BYTE_DATA: - ret =3D rtl9300_i2c_reg_addr_set(i2c, command, 1); - if (ret) - goto out_unlock; - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 1); - if (ret) - goto out_unlock; - if (read_write =3D=3D I2C_SMBUS_WRITE) { - ret =3D rtl9300_i2c_writel(i2c, data->byte); - if (ret) - goto out_unlock; - } + xfer.data =3D &data->byte; + xfer.data_len =3D 1; + xfer.type =3D RTL9300_I2C_XFER_BYTE; break; - case I2C_SMBUS_WORD_DATA: - ret =3D rtl9300_i2c_reg_addr_set(i2c, command, 1); - if (ret) - goto out_unlock; - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 2); - if (ret) - goto out_unlock; - if (read_write =3D=3D I2C_SMBUS_WRITE) { - ret =3D rtl9300_i2c_writel(i2c, data->word); - if (ret) - goto out_unlock; - } + xfer.data =3D (u8 *)&data->word; + xfer.data_len =3D 2; + xfer.type =3D RTL9300_I2C_XFER_WORD; break; - case I2C_SMBUS_BLOCK_DATA: - ret =3D rtl9300_i2c_reg_addr_set(i2c, command, 1); - if (ret) - goto out_unlock; - if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX) { - ret =3D -EINVAL; - goto out_unlock; - } - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, data->block[0] + 1); - if (ret) - goto out_unlock; - if (read_write =3D=3D I2C_SMBUS_WRITE) { - ret =3D rtl9300_i2c_write(i2c, &data->block[0], data->block[0] + 1); - if (ret) - goto out_unlock; - } - len =3D data->block[0] + 1; + xfer.data =3D &data->block[0]; + xfer.data_len =3D data->block[0] + 1; + xfer.type =3D RTL9300_I2C_XFER_BLOCK; break; - case I2C_SMBUS_I2C_BLOCK_DATA: - ret =3D rtl9300_i2c_reg_addr_set(i2c, command, 1); - if (ret) - goto out_unlock; - if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX) { - ret =3D -EINVAL; - goto out_unlock; - } - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, data->block[0]); - if (ret) - goto out_unlock; - if (read_write =3D=3D I2C_SMBUS_WRITE) { - ret =3D rtl9300_i2c_write(i2c, &data->block[1], data->block[0]); - if (ret) - goto out_unlock; - } - len =3D data->block[0]; + xfer.data =3D &data->block[1]; + xfer.data_len =3D data->block[0]; + xfer.type =3D RTL9300_I2C_XFER_BLOCK; break; - default: dev_err(&adap->dev, "Unsupported transaction %d\n", size); ret =3D -EOPNOTSUPP; goto out_unlock; } =20 - ret =3D rtl9300_i2c_execute_xfer(i2c, read_write, size, data, len); + ret =3D rtl9300_i2c_prepare_xfer(i2c, &xfer); + if (ret) + goto out_unlock; + + ret =3D rtl9300_i2c_do_xfer(i2c, &xfer); =20 out_unlock: mutex_unlock(&i2c->lock); --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 564512DAFA9; Sun, 24 Aug 2025 11:34:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035282; cv=none; b=oJVJNAhTcqCnyRaXZMCBRHRUtkUot7wDLBLZfmN3mO7R1lyBC1sq2l6SeWVkO8xhj3K1mYWRdfAxt44rZVFgV+JVXzJ+SOcpg2LBDV0tGEIi4BqmaFr2qXcXgPHXskDuDmTsTOy6TTcW7IttlyWbGzZULmKVVGauiqULJIGlNKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035282; c=relaxed/simple; bh=EfrOytfcbQeQJZZreuoZDcC87F2iv+7pZRcAuuZIEPY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J/KwpOI65o+QzVdXzXTvpAtU5M5ylBgGN98YlTJzkngFVKa5ubbiQw7HVhrf6dKptrs3ygDW22ILRCgRTTxHAwEc9TQTp8Ce3UWhiG0kOSNhXwGZv1fFC0ehFw51YyHof5rdmmSx35ffMSM0Pprd/pILvQJxUq87XB7wic86iso= 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=gZzduMEi; arc=none smtp.client-ip=209.85.128.43 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="gZzduMEi" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-45a1b065d58so29436275e9.1; Sun, 24 Aug 2025 04:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035278; x=1756640078; 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; bh=VRyI/FYoRek6yvet85HPVtC+4+M4ibWnCCCn/CkLLEI=; b=gZzduMEitlkt8haJVS1O162vFIqMM1r9i4CRxbdyG90jce8WwtCDPmnhLZyrA65WZS sEgYwM2gd2E/qi93UypQPLv/NiRXpffxuQYbUes6424AUaJvtXTRNS0wO3mJnTt1ifv3 krq37qSBMAyGunDtWweyaIQlkCemmBX62glJQPkK0Yv69djqwxtDptIFatnTNabpg2P3 IAy0e27kh7KdaBp41uZLNJVAmVtJd9tM1gJYL8+wg838OoZNosJr1ahWAk41mdA6bfCf YkZzPebcYX0s63CEBV6erlrePv/12dApjENfi1mG6zA7lex20XPrrwFUGMJ/AN9Wl1m0 2ikg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035278; x=1756640078; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VRyI/FYoRek6yvet85HPVtC+4+M4ibWnCCCn/CkLLEI=; b=R6BAKBMqpznVZHq6oZsriOmv/NOf/jVRHtdo/c1Lb5gi90Hs4VcyrMVQPITjfhpoP9 Q6rcKiHZ86E37cJPP/6Z3eU746QPTLvwdWEJbd6rNbxScuLxVu63MXxqiOEw4mokXbeF 2dBkWaz5YOvn7m2X4RwoFMAwy3rlT98ICK91TzU41qdGRLd6d9NPT9ChHae39rGHRb/J fxU2ezDiFhLW5mXasGq2rVY7HuE3dDmcn8fvigxOCFwW1fC389MnDRScviahgzLCV/lj axIYJ55yiDElzTO7f/J+SKZ0vFF/2AyUMsncn/kGmWEBYmkbcZU9iUGgRDy/ePNeqmz3 8vGw== X-Forwarded-Encrypted: i=1; AJvYcCVe40nuPxhYEpv8v6Y4biGZ+tjTc/yQmTrPCl9m1C6yQnzu0K7GV+pM319SOBGsBW8Nj3IGYsw9ztN4YhkA@vger.kernel.org, AJvYcCXDs5gBvTJxfn7o+/SvxBObF9G3GygR876Sj0jKf6fQ1czpTHPCDWe/VRZ4VFgXHyYStwAGfDbYtCNu@vger.kernel.org X-Gm-Message-State: AOJu0YxBClqIt5ZPoaCEnfw+4XFWfW9T4Sq6LqySpy0xMRdqpmqdUBa3 kZMVwxDiU7hCV+eueGwnR7qlK8X0aEf7XOghqki2+1dyq1ppdQzXcYLL X-Gm-Gg: ASbGncvL18CP/97m6CtHwMiTUULKncu0P/VcGcIJIaWCGRzpVQBJcnFs42Pw6ILtLTx sNO+mUQBzn4nO0+otgvuGQ8tSGAyK9xqarzS2/ynkgYf21aT/7EwfTbeN+RmL+s2+gtVtD+GcA8 mmy6g8BA+5ZmdiyOUyzFZq9RNRqBgLSIlpoUj0Vyxz1kV68fLnMNxJfIgrcn8kDJDcNgf21PEvs aHiEW2ZZ/VdOdQ1QyAukK1hHIqx/sgh2UmxIkveC//DSNab6aAjj9PBD/lRkHdNx1G9sa+3v/OP mPiG9MzM5UZdsBzqv1wAa2CifysBxCl4lgvxEo+/rg+As2iqJkDLEJa0o/rJwmcAjq2Q2mzMz4C 4Iw4og4k8h52JhrPJunitaMminlv6bjRYv/eTVmqNu5p8wmd6j97oMVc= X-Google-Smtp-Source: AGHT+IEIxK407BN/nRZ47kkeNtQIUEKEBZTDjo32BZ50MJRc8XdZoKJKX3cAQ7qj5VwtcSvGH/BJPw== X-Received: by 2002:a05:600c:3b8e:b0:459:d780:3604 with SMTP id 5b1f17b1804b1-45b5723940bmr46755675e9.3.1756035277711; Sun, 24 Aug 2025 04:34:37 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:37 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 10/12] i2c: rtl9300: use scoped guard instead of explicit lock/unlock Date: Sun, 24 Aug 2025 11:33:46 +0000 Message-ID: <20250824113348.263475-11-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Use the scoped guard infrastructure which unlocks a mutex automatically when the guard goes out of scope, instead of explicity lock/unlock. This simplifies the code and control flow in rtl9300_i2c_smbus_xfer and removes the need of using goto in error cases to unlock before returning. Signed-off-by: Jonas Jelonek Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen lock), mut= ex_unlock(&_T->lock)) + enum rtl9300_i2c_xfer_type { RTL9300_I2C_XFER_BYTE, RTL9300_I2C_XFER_WORD, @@ -283,11 +285,11 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter = *adap, u16 addr, unsigned s if (addr > 0x7f) return -EINVAL; =20 - mutex_lock(&i2c->lock); + guard(rtl9300_i2c)(i2c); =20 ret =3D rtl9300_i2c_config_chan(i2c, chan); if (ret) - goto out_unlock; + return ret; =20 xfer.dev_addr =3D addr & 0x7f; xfer.write =3D (read_write =3D=3D I2C_SMBUS_WRITE); @@ -324,20 +326,14 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter = *adap, u16 addr, unsigned s break; default: dev_err(&adap->dev, "Unsupported transaction %d\n", size); - ret =3D -EOPNOTSUPP; - goto out_unlock; + return -EOPNOTSUPP; } =20 ret =3D rtl9300_i2c_prepare_xfer(i2c, &xfer); if (ret) - goto out_unlock; - - ret =3D rtl9300_i2c_do_xfer(i2c, &xfer); - -out_unlock: - mutex_unlock(&i2c->lock); + return ret; =20 - return ret; + return rtl9300_i2c_do_xfer(i2c, &xfer); } =20 static u32 rtl9300_i2c_func(struct i2c_adapter *a) --=20 2.48.1 From nobody Fri Oct 3 21:53:30 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 5A2952DAFB1; Sun, 24 Aug 2025 11:34:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035282; cv=none; b=U9+S12cIhgTO4bBSLeAQVKCVP8HBzi4oxN3bRAW16QruFizmmLpONyk30lY+FiRQgliqeoKuxfUxEZ4BDwxNJZppYWCBPlBLMGbR+Is0yuL1bqiHWofyb/R9WKZBxYAelNLYOJDZr2J3w6HyZ5OcvbwtqwSi5N1W5P5/KX6EU5g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756035282; c=relaxed/simple; bh=C8jprGhvwgNFwqx9JXIf4GUQj2+9HFsGRgb2FpChXxM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EvrgWGeqJEtdghWQ1yM04QV7otqepNb1y2BWN4Mqj3iZCjHuhw7VY+m//MxPhjTU2xUNayi/NJ8H0WDD9xdNDJmdbayJFyHg+MgK2aiW8Ntu26suePP92gzjO7Qg6nUzF2wwx2GtXnEvugGtTVtp7kdLJtCZ4GT2lR3/cqFCvBY= 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=KYPpcCWZ; arc=none smtp.client-ip=209.85.221.50 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="KYPpcCWZ" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3c68ac7e238so878990f8f.1; Sun, 24 Aug 2025 04:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756035278; x=1756640078; 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; bh=zeZs0XJJdh2SbqJW5bpVt1AZYdGyUD1UAVS4r4zgBDM=; b=KYPpcCWZVQB6hlqqFY+fFXQ3AMmDoXlzan7Kw5vuMhgbsO7k5sXmmhl74lScKrODCJ QnTTpRwxCIa/eFGUorbTiM7kA9I8fqeTJD90jQwWxOc3K/38fq29PLxSLWEe80Kd3mOK xZwyC68+/+xfKSYrF+qJ29+us6hW62FCX41jbpHeGBWjJKclV/wUnIWHkOkzaVXXhL8P iorVv7TVz7fFKv+Xa22TTt3KQa9WRkWGUSp0yDKtZ1IfggRTVeurDu/SkikZb2LbQakT Ob6WJn0pmk22mUbpA2rLLj1z5O2pkfdTh0keO6be4tUS6Fi9uPVJ2sUDUmaiESKeQnkF J79A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756035278; x=1756640078; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zeZs0XJJdh2SbqJW5bpVt1AZYdGyUD1UAVS4r4zgBDM=; b=SIImXPdx2QiK6qyi/4ibW9UJ0/hpRPtS1B2oyAUQHRZTOxIFgfqSmCKtz5I7M/HavJ 4tvSSaHkPy4kXxVE6pDAoJsmErEgHN3hKDwXwV3QTCIOOudRdOE2DqX/8xn+WvMDKPf5 MyKpLHSLxUL+yy2MXWXgFXwO8IZ8gT/S8HnbR13lL/6hbNq+HaKNvXgShjxYGTWlfZqt TFtJd25buRKzY2dxJ2e00GRPkUgPjaTSx//p5IJAS4IT7AhiMoIvCtNMRX8l+4k80Mj6 WdO7rhsWQTNGKdxY99NMJlhe3TCmB8nAAN2CPJtObQ/aqMrNv05ckdgb8AZmxMMQis6D ghSQ== X-Forwarded-Encrypted: i=1; AJvYcCVT0JZeqVJ6I8WaoCKxMZTLxHMzYE2zE5Jnj+Q8UBXHqoKT/KAigXwGhmSU0rsbtIFe+wLXUCJcrzLBrLGW@vger.kernel.org, AJvYcCXWMl5pfJX5owQyba2VnkWzjxJ7eU3ZmQSDD+BoMLq9//1grE9arQjbZzf72ffScHsuimM3LWBkpQcV@vger.kernel.org X-Gm-Message-State: AOJu0YzV3DDlrb6NfZsufiwzaOoZSWjuyaWf2ACpTz1bBpO7G9WhnxSg VA5Ls5NKMuXo3XKA1qfcDAjo9qmSIQ2QgRB2CQZtQmwiRWcUByDMfk9F X-Gm-Gg: ASbGnctGXbZcY6zfOqH2X2njEZ5wzN6NJAD4CugD6r20e9qFbm13KJta2T4WtPRbWN7 XVEETPjtRQoIEoVspCq0+xKSvi5KgDS4MrXtfWPVLg2z1vpy1tP7/MBGyBXJW44ZObNa57aPaQD 0RIsnk0/Gi0XjPNoznR6ymeGfvf89W27blA/+gEGCrA81yjSojNehWlepWJFFDtqrINQq1CYF2G 85nCwg2/58iwG4IMk/2ZW4K5r8cMCrKdrkfe2/T+YvWcyNq67bTuRgPtE/DtkgDyQHADK0R65mM 3XTIMKZ6D4Fejtd8pohD8+5G7JuO+x6hLSPtfWfMa6z/q50H0Zg/zRAp9/pQI4ECpiIPCUHW+HM B0GlMoQiJLqTiCC/MaRCGBsxeJ1qjNfVuuRwsSKIan9daCEcW0KebWas= X-Google-Smtp-Source: AGHT+IFaNZBlLfDzFG6fpMxFZLJa6/ZW1p2M73HbTSPFER9nKnVrqHAhuR0HjpOvPDiVLUZv8W2G9A== X-Received: by 2002:a05:600c:3b18:b0:459:db5a:b0b9 with SMTP id 5b1f17b1804b1-45b517cfb8cmr67775305e9.28.1756035278454; Sun, 24 Aug 2025 04:34:38 -0700 (PDT) Received: from builder.. (197-10-142-46.pool.kielnet.net. [46.142.10.197]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b5757453fsm66470895e9.14.2025.08.24.04.34.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Aug 2025 04:34:38 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 11/12] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support Date: Sun, 24 Aug 2025 11:33:47 +0000 Message-ID: <20250824113348.263475-12-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Adjust the regex for child-node address to account for the fact that RTL9310 supports 12 instead of only 8 SDA lines. Also, narrow this per variant. Add a vendor-specific property to explicitly specify the SCL line number of the defined I2C controller/master. This is required, in particular for RTL9310, to operate on the correct SCL for each controller. Require this property to be specified for RTL9310. Add compatibles for known SoC variants RTL9311, RTL9312 and RTL9313. Signed-off-by: Jonas Jelonek Reviewed-by: Rob Herring (Arm) Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen To: Chris Packham , Andi Shyti , Rob Herring , Krzysztof Kozlowski Cc: linux-i2c@vger.kernel.org, Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Wolfram Sang , Jonas Jelonek Subject: [PATCH v6 12/12] i2c: rtl9300: add support for RTL9310 I2C controller Date: Sun, 24 Aug 2025 11:33:48 +0000 Message-ID: <20250824113348.263475-13-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250824113348.263475-1-jelonek.jonas@gmail.com> References: <20250824113348.263475-1-jelonek.jonas@gmail.com> 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" Add support for the internal I2C controllers of RTL9310 series based SoCs to the driver for RTL9300. Add register definitions, chip-specific functions and compatible strings for known RTL9310-based SoCs RTL9311, RTL9312 and RTL9313. Make use of a new device tree property 'realtek,scl' which needs to be specified in case both or only the second master is used. This is required due how the register layout changed in contrast to RTL9300, which has SCL selection in a global register instead of a master-specific one. Signed-off-by: Jonas Jelonek Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On=20 Tested-by: Markus Stockhausen fields[F_SCL_SEL], 1); } =20 +static int rtl9310_i2c_select_scl(struct rtl9300_i2c *i2c, u8 scl) +{ + return regmap_field_update_bits(i2c->fields[F_SCL_SEL], BIT(scl), BIT(scl= )); +} + static int rtl9300_i2c_config_chan(struct rtl9300_i2c *i2c, struct rtl9300= _i2c_chan *chan) { struct rtl9300_i2c_drv_data *drv_data; @@ -127,7 +140,7 @@ static int rtl9300_i2c_config_chan(struct rtl9300_i2c *= i2c, struct rtl9300_i2c_c return ret; =20 drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); - ret =3D drv_data->select_scl(i2c, 0); + ret =3D drv_data->select_scl(i2c, i2c->scl_num); if (ret) return ret; =20 @@ -379,6 +392,10 @@ static int rtl9300_i2c_probe(struct platform_device *p= dev) if (ret) return ret; =20 + ret =3D device_property_read_u8(dev, "realtek,scl", &i2c->scl_num); + if (ret || i2c->scl_num !=3D 1) + i2c->scl_num =3D 0; + platform_set_drvdata(pdev, i2c); =20 drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); @@ -474,12 +491,35 @@ static const struct rtl9300_i2c_drv_data rtl9300_i2c_= drv_data =3D { .max_nchan =3D RTL9300_I2C_MUX_NCHAN, }; =20 +static const struct rtl9300_i2c_drv_data rtl9310_i2c_drv_data =3D { + .field_desc =3D { + [F_SCL_SEL] =3D GLB_REG_FIELD(RTL9310_I2C_MST_IF_SEL, 12, 13), + [F_SDA_SEL] =3D GLB_REG_FIELD(RTL9310_I2C_MST_IF_SEL, 0, 11), + [F_SCL_FREQ] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 30, 31), + [F_DEV_ADDR] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 11, 17), + [F_SDA_OUT_SEL] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 18, 21), + [F_MEM_ADDR_WIDTH] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 9, 10), + [F_DATA_WIDTH] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 5, 8), + [F_RD_MODE] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 4, 4), + [F_RWOP] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 2, 2), + [F_I2C_FAIL] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 1, 1), + [F_I2C_TRIG] =3D MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 0, 0), + [F_MEM_ADDR] =3D MST_REG_FIELD(RTL9310_I2C_MST_MEMADDR_CTRL, 0, 23), + }, + .select_scl =3D rtl9310_i2c_select_scl, + .data_reg =3D RTL9310_I2C_MST_DATA_CTRL, + .max_nchan =3D RTL9310_I2C_MUX_NCHAN, +}; =20 static const struct of_device_id i2c_rtl9300_dt_ids[] =3D { { .compatible =3D "realtek,rtl9301-i2c", .data =3D (void *) &rtl9300_i2c_= drv_data }, { .compatible =3D "realtek,rtl9302b-i2c", .data =3D (void *) &rtl9300_i2c= _drv_data }, { .compatible =3D "realtek,rtl9302c-i2c", .data =3D (void *) &rtl9300_i2c= _drv_data }, { .compatible =3D "realtek,rtl9303-i2c", .data =3D (void *) &rtl9300_i2c_= drv_data }, + { .compatible =3D "realtek,rtl9310-i2c", .data =3D (void *) &rtl9310_i2c_= drv_data }, + { .compatible =3D "realtek,rtl9311-i2c", .data =3D (void *) &rtl9310_i2c_= drv_data }, + { .compatible =3D "realtek,rtl9312-i2c", .data =3D (void *) &rtl9310_i2c_= drv_data }, + { .compatible =3D "realtek,rtl9313-i2c", .data =3D (void *) &rtl9310_i2c_= drv_data }, {} }; MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids); --=20 2.48.1