From nobody Wed Oct 1 21:27:08 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 EB23F2DAFDD for ; Sat, 27 Sep 2025 10:19:54 +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=1758968398; cv=none; b=Cl+PDTNEYI1ziHJ3eG+1JVWWDVcltJPNoxY9oyigirW4CYsyS9rYrWhQPf+i6i6zr//yZ3ds3SzNLfUkYc8BYU52lV1l5KpMgOk88NJbEKbMS5RPx/ni6O4XoE3xE9aBSSwFaBi6I9ldIu2mfeoswbHUP0/VzdM67sFN/V5KmPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968398; c=relaxed/simple; bh=e1QmY1QLK1yolowpwxNvclifAJinhERgzj4RMDddsB8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X3u7Ce0CSZ96cnSc39kbpo89tk6qou4ZwafSwJaoFLQ0kUbfICI6ipElX64bRUp+KT+deoXRr1EMNzuFIkdd7LAfcKbqRUDZcc5zAL1kzddO7C9UmhGZpDTJVbavGTj0YI3jtfFEPA9rx7yzUPlu6+aUdBcdPNtgkW457rV1PZk= 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=BDXLUEoH; 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="BDXLUEoH" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-46e2562e8cbso23746635e9.1 for ; Sat, 27 Sep 2025 03:19:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968393; x=1759573193; 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=od1k1bZUO2AlNGRYR4IfvamUlDJTyLsYC0w2AJXA07Q=; b=BDXLUEoHgppZXzCDhmuG/dVLmN0pnM3Opz2ojDb4DfJSFid93qO1AdiMNRMvqPuvGe cEY8dtEVyr/I6HKAb61xPqprc8twMAaSg9Xbnz+bSrdKF8dv+j41ZWk0lKRI1EV9BtrU iEoY2GnuVo6ECpVzONFYG8VRvWtRX6C3snEjWibTlsv40a+m66TAxlwQOjKcAvJkdtJp CXsOkAi5SXqKkfxayrJB2A++oYvN1DwgeYDjBi64BMHziQ4Pi8yE38GHB2FVke/Qchnv edirVmA7zaH4KUNPQsiS2NubTng4uYyha2cJCbkzcfDhcdIvs4DQSUlNPyyTx1ES3shg AWyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968393; x=1759573193; 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=od1k1bZUO2AlNGRYR4IfvamUlDJTyLsYC0w2AJXA07Q=; b=moqElP7ktOMRVXO2938H+Q/NRblLX+ICNzo8sQGgfyv51kW3xIgSRXx0jrevyWzrkU KlDCDYfrJKWHlbEzuMHYIZ6BUaeMs+W5z88mlYPYinvwrxFUOLR7kuBgRmjDc3WBEuBl hTOHb17Y5P2LNqx2WBbERQmHgebeW3oQezymBKSlr5FYLEmttlhq1J6SxWB/UNF3dulQ 9zV//ot/kpa1qrreQMJGfyrfZWtLOm45KqhN2y10PQjZKMF6syRG02nYmYIoGY5ZusoZ SzVRQ2drDdQSOhsYCNufjeFubtvFZNEgd3DSLz1JmJjt+OoJ5++5pMlWa5WEWoDDCXw2 Fjpw== X-Forwarded-Encrypted: i=1; AJvYcCUFOxCjL3RucSMMe5ZFTC4llXmA5n009U26gcJ2ukjfPIa3JnUTpb/EQVVbt8FZFJs81hsYa49epDqPDkg=@vger.kernel.org X-Gm-Message-State: AOJu0YwX/axgEhMIFY3R4+YyrKxu42BHjtQQx4uOZveZMQ4eeh0Gim1l VOwDTMYSsgMR3z1Gdp7+NJNcAN6QpDfcuERtBn1rfe6XgLSTHtAd3gVK X-Gm-Gg: ASbGncshTbpHLyQEA4O6HNqOr3fxkDJ4k9889UmevZLMePxC4ns9k3z+Gnv+i7fzovH mvl7txLlQaCgefbYYXrAqO2/XwouRPmEjw90I4o8Klr91jj6SJ9gQmRm44e0Y9hmhTrFCCJFKE+ dLdWYaluBpTOMe2+c32aPWiTZA7yDSjkfwaH+35TUSf+xuz81Bz+sf3aWSWQAfEaQYjwlPUO+Nn tIZKLjJ2YlgSBQU3LFdm+bbxOHbHgTT5wQFBctFjj+id1a4Lp7d8/PjQ9T2s/JpsAnC5DMzwVIo tpnrjVLRrsmS0U59bguji02nDgTvRt4vcTrJWVRkGf/e/NGQ18qbAdgqWsxwxItlyF6k+au54JI LmAbmpPEX3Xczw/nKpfMspkXalw== X-Google-Smtp-Source: AGHT+IFx0loLSGADa5zYBOANkYEuu39yK6GPJPG1h6g5b/JDPys1GsX9gkcBWGmOZwYgfYSVTP59XQ== X-Received: by 2002:a05:600c:3493:b0:45f:27f7:e1 with SMTP id 5b1f17b1804b1-46e32a04d9amr107773915e9.25.1758968392459; Sat, 27 Sep 2025 03:19:52 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:52 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 1/9] i2c: rtl9300: use regmap fields and API for registers Date: Sat, 27 Sep 2025 10:19:23 +0000 Message-ID: <20250927101931.71575-2-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 Tested-by: Sven Eckelmann Reviewed-by: Chris Packham Tested-by: Chris Packham # On RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 192 ++++++++++++++++++++----------- 1 file changed, 124 insertions(+), 68 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 9e6232075137..8483bab72146 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -23,97 +23,117 @@ struct rtl9300_i2c_chan { u8 sda_pin; }; =20 +enum rtl9300_i2c_reg_scope { + REG_SCOPE_GLOBAL, + REG_SCOPE_MASTER, +}; + +struct rtl9300_i2c_reg_field { + struct reg_field field; + enum rtl9300_i2c_reg_scope scope; +}; + +enum rtl9300_i2c_reg_fields { + F_DATA_WIDTH =3D 0, + F_DEV_ADDR, + F_I2C_FAIL, + F_I2C_TRIG, + F_MEM_ADDR, + F_MEM_ADDR_WIDTH, + F_RD_MODE, + F_RWOP, + F_SCL_FREQ, + F_SCL_SEL, + F_SDA_OUT_SEL, + F_SDA_SEL, + + /* keep last */ + F_NUM_FIELDS +}; + +struct rtl9300_i2c_drv_data { + struct rtl9300_i2c_reg_field field_desc[F_NUM_FIELDS]; + int (*select_scl)(struct rtl9300_i2c *i2c, u8 scl); + u32 data_reg; + u8 max_nchan; +}; + #define RTL9300_I2C_MUX_NCHAN 8 =20 struct rtl9300_i2c { struct regmap *regmap; struct device *dev; struct rtl9300_i2c_chan chans[RTL9300_I2C_MUX_NCHAN]; + struct regmap_field *fields[F_NUM_FIELDS]; u32 reg_base; + u32 data_reg; u8 sda_pin; struct mutex lock; }; =20 #define RTL9300_I2C_MST_CTRL1 0x0 -#define RTL9300_I2C_MST_CTRL1_MEM_ADDR_OFS 8 -#define RTL9300_I2C_MST_CTRL1_MEM_ADDR_MASK GENMASK(31, 8) -#define RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_OFS 4 -#define RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_MASK GENMASK(6, 4) -#define RTL9300_I2C_MST_CTRL1_GPIO_SCL_SEL BIT(3) -#define RTL9300_I2C_MST_CTRL1_RWOP BIT(2) -#define RTL9300_I2C_MST_CTRL1_I2C_FAIL BIT(1) -#define RTL9300_I2C_MST_CTRL1_I2C_TRIG BIT(0) #define RTL9300_I2C_MST_CTRL2 0x4 -#define RTL9300_I2C_MST_CTRL2_RD_MODE BIT(15) -#define RTL9300_I2C_MST_CTRL2_DEV_ADDR_OFS 8 -#define RTL9300_I2C_MST_CTRL2_DEV_ADDR_MASK GENMASK(14, 8) -#define RTL9300_I2C_MST_CTRL2_DATA_WIDTH_OFS 4 -#define RTL9300_I2C_MST_CTRL2_DATA_WIDTH_MASK GENMASK(7, 4) -#define RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_OFS 2 -#define RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_MASK GENMASK(3, 2) -#define RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS 0 -#define RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK GENMASK(1, 0) #define RTL9300_I2C_MST_DATA_WORD0 0x8 #define RTL9300_I2C_MST_DATA_WORD1 0xc #define RTL9300_I2C_MST_DATA_WORD2 0x10 #define RTL9300_I2C_MST_DATA_WORD3 0x14 - #define RTL9300_I2C_MST_GLB_CTRL 0x384 =20 static int rtl9300_i2c_reg_addr_set(struct rtl9300_i2c *i2c, u32 reg, u16 = len) { - u32 val, mask; int ret; =20 - val =3D len << RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_OFS; - mask =3D RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_MASK; - - ret =3D regmap_update_bits(i2c->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 Wed Oct 1 21:27:08 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 EB2B82DBF40 for ; Sat, 27 Sep 2025 10:19:54 +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=1758968396; cv=none; b=UknmmSP8SZN+y9jR0Y9919TRQFWPLGjecEd6jZ9mPGoqKrE2p/P0GB7PgRI+QUNFf0KEE2JVnl9SXWrnm+aC36oboLpxePSFsKAF1FwkUWikitrtM7wBlaCuhSkelk8aewJHbrS7dd/e+Y67ZRgNCtJ2OlJzwZq5NcmFAr4xIAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968396; c=relaxed/simple; bh=Ll33ycNIWhblme6tiFpLduL39Kk1FOG/s0GEQJ/3Kkc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uoem/85W7JMAOdUziPYkLWZJejvT9IlzJ3n+AOPmDN1vA/pImZqiCG/1t+1t0Jut0TNPFG3LOuqsVVamUdOE+i8hT+fT0uCNJM/ASn4jTM8g00rnIBgqH4sfeQ0WqbmsdgmvT2ugrXf+YrNDVM4uwqLTQvDTQytdbOxdAVNRRx4= 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=VCxh5mSX; 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="VCxh5mSX" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-46e3cdc1a6aso10935815e9.1 for ; Sat, 27 Sep 2025 03:19:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968393; x=1759573193; 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=MY8qwrmK4KpRQmuFNf2j7FLHohlWWrtwD6aQcm5+d3A=; b=VCxh5mSXp6YFxWxhvZF/eXOvLoXZVPfzEUnhEWCA+ZGlWotT5GxjwOnkKcuLfPfpjt APgGQOZnGidI9Ksl8b8BisH2rmD2jCwODIPZKd//hiNfL3tszjPphKaqQKQPeAIWBRBU 8mXhmXW/EDo2Dg5NLoQVWFKx8pyNVKg0NiS1S5UfflGEgQH3TGM+0rJA7u3T1UI8jVt0 QyzJfZCoHU/toGjg2fZxuFKSlLMHN9gwnylXBR3BWL8P08PTdqBC1JGwa2EwgItVKt+B gBoFaDgOoRP+9hmDHN4/hDRZqLlFNCo2th3T+dOBjqlXm1woAhkj06wVmW9FPnLXbbhO QLhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968393; x=1759573193; 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=MY8qwrmK4KpRQmuFNf2j7FLHohlWWrtwD6aQcm5+d3A=; b=Gi1FWQkTC8WqVVXIaO4hInM2iF99NbMtEUA0nSQTTKAC/5n2bmERW/P3pj5/PSJhWv L1ElANYvx9L/wi8IdnoBaN/2STULjzDd7nJpZxoO7WF103l+P7LXPB9/ZeHo6gsdCfFP kF8V5qBC5XwneNLpF6M3Av8SfapIVUtrUgSdLsNX+9kr58xe6qB1hnjGg+93/9YwTa8f wCIlh+UMJQz6lcM5qXObEpZdrg/4VBhggp/HZYh1unj+vstJGZwEv6LVCW+mVJ3GT7w6 atvvV+zdbMa+JyQGO6CS2+uHyU0MlnzTXQWt2Ah0iIuF2qQ2BtX/8N0Rc6VWoKb8an6y ycrg== X-Forwarded-Encrypted: i=1; AJvYcCVC5CbvOFqNVmyE/cKoUWvJnIOvldMZrw5v49q9sO16m29Fg3ZUJFuB45/sWPclH/6Vc+VV8lypVtdwhh0=@vger.kernel.org X-Gm-Message-State: AOJu0Yzol9icwmjCJkUj4rZdEPCas0YMzGhRBIYH5W5d0XqfFzZlI/pM P8PUnGPECg2uOwBFdgexNUgPwgXD/3kWkNMKQUqW4dmQTzTpK2cNGLpF X-Gm-Gg: ASbGncs2rBLhN/HROFJGunZoZVbk5Qbz2oFmjnmIViR8Le+XlKjQeQGoKdvHMukJ3da FvaeNCALoe4AFb/phVMreFo5AFuhpeeWYmO0vvt2YRRKYhbLryjCtn532bUHXBx5A63bLSG3zX6 w8VtiURAsuzus4RxJUxVD/2/u+BT3hVIb0SvZtjeEIGyahth4+6WEDt/GW3KJsW+u16RptsT2Np SYRIposv2h8voOEJ1RIRxf7cX7WBHeoXmIvVbx8IwVI15PWnxypCgkiQ7S3ChLoD+yVWvDH26C+ J4L/nG0unJijDC2+9YGVjozsa1fgQ9fZyrycSWYjatKhEfCYbbZcTQY0u3R5KInnUWIVf/k4xLS Bfw001a4KzNVvOW4TKFpGnAu3Tw== X-Google-Smtp-Source: AGHT+IFpE7u1hb0c6ERBtQLksaMcu5MDMAPKnwbnjik5UI72iAiOV9cKZ6u9YBPwPSSZTgtI/keoHw== X-Received: by 2002:a05:600c:b99:b0:45d:dbf0:4831 with SMTP id 5b1f17b1804b1-46e33e3e4b6mr78278235e9.0.1758968393264; Sat, 27 Sep 2025 03:19:53 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:53 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 2/9] dt-bindings: i2c: realtek,rtl9301-i2c: fix wording and typos Date: Sat, 27 Sep 2025 10:19:24 +0000 Message-ID: <20250927101931.71575-3-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 RTL9302C = based board Tested-by: Markus Stockhausen --- .../devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml= b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml index 69ac5db8b914..274e2ab8b612 100644 --- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml +++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml @@ -10,7 +10,7 @@ maintainers: - Chris Packham =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 Wed Oct 1 21:27:08 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.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 051222DC321 for ; Sat, 27 Sep 2025 10:19:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968397; cv=none; b=hxmEbVEaoY/1FUWn/YSt697ftsOkc4WvBcqpbBWuCgLQ8X/1a2HLTo3qzB6Zf3gc/jxnR9Yfg6tU3aQ3MJrCMOZuBoRi1KsTRJV1w1gsgfysDgM+SWOnNlzT2JLai5b2c/oLrweZgbAFSxCYMsD4IUViZHwIdvev+1QY2nd5bho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968397; c=relaxed/simple; bh=2GCjGAmxaqdnNa1gX1x/7BofCtSlrnlXaasLQu8+NAQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PJIBub9TaWmMzfUEOn6SXgHUvs216pl/bEvtFipcaWcvwC38Agv31B6SkkbEauLekAIXAMR8GPpGva4wZegq78xeSiG5e50oEqgBDbyxPBfRz1mCtU+c9XNqa7vZaFxK3JgRU0aHDH6gWwSonKjGHtt/CNfVXAKuS6WhUkOcv38= 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=bP/VAWSM; arc=none smtp.client-ip=209.85.128.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="bP/VAWSM" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-46b303f755aso26929765e9.1 for ; Sat, 27 Sep 2025 03:19:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968394; x=1759573194; 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=TkmZ10FKl6mvyrUUIGFDD4hFu3/JPG8wZl/qSp4EmOc=; b=bP/VAWSMqB55oeYURZmfjNDOf042IizeOn7w+Uio8MEVBnx5CV/H0mBdAJmn8fMzr6 +l4G9XtrZZSyHqTJ2lVP96/GaCiCg2NA6+WKX+33K7RR/ZIjLB940IqqCOYJn+I03ITz OMC7BBdW2mH10fR006msqYI77nJq3OtYaKggY3gmCXDQAhaTdYYJcPITfImbwWXJQ/Yh 1IdqHZktVX5W+slKLEl4B0lEaTMoqgdQAIU5Q63D5DU7ABRsf4Z3LmSK5HWmZ0XUP9Nx dSB6fvy6hd8GY4ARea3K7aP8m6BFHmtV0JH1bXOt/gYWnAxL8cTEXSG23trbsukn86yM WAzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968394; x=1759573194; 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=TkmZ10FKl6mvyrUUIGFDD4hFu3/JPG8wZl/qSp4EmOc=; b=Y20LJHd0rA3rFhQSFotStKMpI8w7txana+ThH0NVqKC5qH5pc3KcdXicOdD246gzqr viUrd38wX1EZ1p5pcDbJijRJG9hGJHa3i5RV5oTYvKka/5SzabA4O6MLtuR9F/fvPojP ELIkE1B0D3gR74PSLdNlysDkPBEFJNQb4sqReArtRyR3bwbIG3ba954qTQKU+BqUvitl 1mA7fBnYqbwcbd5uwt/kd2GRyDxYN3VIH741sUPauQs5Qio5onrGVBDrAyy0bXtrQHWR gOSGT0fZnOUYmndGpxAKCePuLwdIdBbmPtghQ4cPxhCFzazmGzeI1fcyQjqnTUf3G9X3 PCVQ== X-Forwarded-Encrypted: i=1; AJvYcCXraUPcXuieXcHWaixikc0cF/NhAKVgCQPXJkkx0C8b/wSnIBZE8xcvxrmy20vSX46nYEyFkM5fTctRM4M=@vger.kernel.org X-Gm-Message-State: AOJu0YzTeaH8m1awafUHWB/eUSPJ+BTlX4QWFcb8UEwZxk86Ug8zqVeZ K7hsvloWCG3unEkKGostC7ilrXO9S8AwbijQcqixu8DrXwKwatlIQKjo X-Gm-Gg: ASbGncueBId/slp/QzB7i2lKk4vG5bMqKksg3ETlcjOuykrcDb3B4XWPBeb07R3Ia/R FRbfOPRnPqmioeBnFL9lrvvNgy2lxgbS4/aDAy49wzDDwnFAn2Ivw8h5w1e2XLSQ7M6nKVtDBsf B0XPU2WFD9324bsA9TFQ5huNNtAG1UqGghI2Q9WAmIh6dSIbNWowXyMg8TObcXKw2hPbnh2En0t g+oKqC6DxGxIbF8v8GbGHMvOBMg8wME8CeBJrN8m3I/eVoSKi3bQFhkoBHU3xdPVu6ao3TOFMbs WGPvXfz0/HIISn8nsFeAQhxu1KY4KcT/SunYNAyOGJ4kkBLOk9wUbDsCfub/n/sV1wVhRovfeZO nPo0BOTlDXV06flaWEHYffafGp8Crsie7esHG X-Google-Smtp-Source: AGHT+IGByWoLUV1V8F16lY7u769X5HERThmpzD3uDRavVtTlHtIfq3MErm0URpRpds2ISq5txohP6Q== X-Received: by 2002:adf:a314:0:b0:40f:5eb7:f231 with SMTP id ffacd0b85a97d-40f5eb7f303mr5454210f8f.18.1758968394175; Sat, 27 Sep 2025 03:19:54 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:53 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 3/9] i2c: rtl9300: rename internal sda_pin to sda_num Date: Sat, 27 Sep 2025 10:19:25 +0000 Message-ID: <20250927101931.71575-4-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 8483bab72146..f9b5ac7670c2 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -20,7 +20,7 @@ struct rtl9300_i2c_chan { struct i2c_adapter adap; struct rtl9300_i2c *i2c; enum rtl9300_bus_freq bus_freq; - u8 sda_pin; + u8 sda_num; }; =20 enum rtl9300_i2c_reg_scope { @@ -67,7 +67,7 @@ struct rtl9300_i2c { struct regmap_field *fields[F_NUM_FIELDS]; u32 reg_base; u32 data_reg; - u8 sda_pin; + u8 sda_num; struct mutex lock; }; =20 @@ -102,11 +102,11 @@ static int rtl9300_i2c_config_io(struct rtl9300_i2c *= i2c, u8 sda_pin) =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_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 Wed Oct 1 21:27:08 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 216D82DAFC7 for ; Sat, 27 Sep 2025 10:19:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968399; cv=none; b=YdoFiEysbLndvIXNARINWhRizJYVSpKMFbDmCK9xZjxS10j4P/os5tuDqXvJfMRnz92CTTYXgfcpQWe+hCz3eNlKZ99e6Sh7tN0V28XuzS1Xq2C4Id1oHPtiyvmwDgPwpAnX3s/Bgd2szdfhEqk320vqjHUNSf0nezIArL67Vpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968399; c=relaxed/simple; bh=AFqIY5K8sOwwkDorLtwVJ59nbbKz5t+8UF9iXhMSMFU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MNpHRdDs4c/uxCKGnjVXoUdVeQwR6wxGhwxVpsqL8i418+gtsOpyPWpBO6Qg8vOcMEnbvDhZImWrF+Uz2lm42WDzuHDfzlH7mb/lp0nWYl5xjc5g9ATKX/y9aip0qh014m12n43sis5w2jxQ7PQ1NM9+XtCDOYftjhIcijm5OI0= 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=mTG+P9bp; arc=none smtp.client-ip=209.85.128.46 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="mTG+P9bp" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-46e34bd8eb2so30478535e9.3 for ; Sat, 27 Sep 2025 03:19:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968395; x=1759573195; 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=o66Q1Lw8zZ/26/utPV4SsAzNqR677/9mko2KdXqHbnM=; b=mTG+P9bpf5rmJhoKUVsAzK+FljAR2t17kLkLREn4VD3jmO3B8y+JkF7q9H3VhAbHWW Jtvdphv9dxlTTHJeZq4x/sWVbPHgoZ4u44OG6pdiMxtEG20pt5EX/JU6fqR11PkO0bNE H5PvsIz4nOSxVSzfRwPUn3XkE1wLGmUGZMwKImv4RHWsRzMUD0bcyM9EzBLhYmUH7QN7 KhLaBD42PPs0+Fw4PUK5ONgFxIalw3WBfpaTRj+jFqVEIu05x4M7hmgOSbRfjCNOyqQx OWOrY90ZdsLwGu5fC1HZWU6sSymsrZywAUy3fhOBclBgJx1R2TIlJ3sECA41rTst1QW/ v0eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968395; x=1759573195; 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=o66Q1Lw8zZ/26/utPV4SsAzNqR677/9mko2KdXqHbnM=; b=bMcjnqc2xL0hzjCLhqmeG5qlgbpMB20kouHpmdmVaNQagf3mWvolTxZqdEXjvj5HBc liU0f9J7Zd4BR74nQVyLwMNn0ta5rsVASrtuskRP6XMCG4TnLztChbvzrscu2xtZXT4Y 90lF9UXkqsmemxLxsUCUfxsNyxmeTjH/14K4uTboMzqdbcxq1HPbq604VcrzlNtCzBLN Wt9+ryZRVfDDiytMdfjaeFpGzILq5vGY8k4wMUtUa4FT5i9inDlqBB+5GjtooO9dxEpm wXSiN+oqloMDz2d2FqUsDqauYSGpPHRZlc5dn5MwkLEH+56DaJEfmNbVXLnD7ED55WIA ZCug== X-Forwarded-Encrypted: i=1; AJvYcCWoWzuS+lUpl+/zrIg7s0C0bwt4To0hTZwlOZq82zvv9eBd10vu778dwJ7c0VXDJ8HF+Ok7HVBvGeAxRN8=@vger.kernel.org X-Gm-Message-State: AOJu0YzAOBAVU212vOO9aQMl8EgJvs0jXyrHlC9gD2FSHndHTVL+mfLa l8wb10Xpf+/ZfFR35WY5JQ99vNUPW0oTaHs9AJzL1co7BPbJmfmBos2H X-Gm-Gg: ASbGncszr/HQc0wp7it7IEqbvBcMsF2H2G4kUldSx28NeitiXONCIJoa4Lywr7nil14 zEPKu/YtQZF6CeK1+el/82fEpNGmecqaxmvBjRRIQiM0agKHUGwkQCw0XiVgR1bviVMflynIKtA 2bJeiPFdVIIZG230spfSyFFL2kP4L1eQzu/d9UxYvALtgHKQRPM3RBx48O7GeupK0QfgIyOzswA f30yMLWQJ3QjNWEhCi47kEANXccUNe3/U79QNdydG+16h/WS6cKWF/OW0bMLzrbb6HLFm1LSFM3 HUwK70O84ckNvlum0uH9ET3KELIy4MFIXAmxE3uKrITZhFYtZ+soa6W0JP28KKOwXVDGZbym9s/ tC1YgotDydv5LWdvqvhSSnY82Qw== X-Google-Smtp-Source: AGHT+IHe0P30TIqJc5jzWG4ZW7xpsDOP1YRoCBAYFr8Rur6oa5IEqVG9QR5Dt70ub2sEreCWyQXVbA== X-Received: by 2002:a05:600c:a00e:b0:46e:436c:2191 with SMTP id 5b1f17b1804b1-46e436c2314mr32525825e9.25.1758968395038; Sat, 27 Sep 2025 03:19:55 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:54 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 4/9] i2c: rtl9300: move setting SCL frequency to config_io Date: Sat, 27 Sep 2025 10:19:26 +0000 Message-ID: <20250927101931.71575-5-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index f9b5ac7670c2..4177cfb77094 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -95,18 +95,23 @@ static int rtl9300_i2c_select_scl(struct rtl9300_i2c *i= 2c, 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) +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 Wed Oct 1 21:27:08 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 C10D22DC760 for ; Sat, 27 Sep 2025 10:19:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968399; cv=none; b=j/+9PV0v5tbztgFGURwqXiTV+1kxR3nM5fFwt1MTc3K7czbHPeoivgsCAeGFxpYcm1pTS0XGtW7GOtYhr+AzPFd4cGlJeRWgoQD9tpjvtCtyVxjRdGcI0hH+qy48d5MLdaHsvr0nRe/0r/X4+5/a5GlQt6VMogyZ4rGicT04GOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968399; c=relaxed/simple; bh=326M5U9OojDe1lhkwFS7orxwbfULH69OkT0S7OD+L1E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WEKynSsY1TQgoI+uq9+RBL6Qz5AlXZCYsLobrN+AnC707aqXxZO1MlQQS/FolP517N4fQ8ux1W+ENwyJC6OhM65sg5FjDi/VdF1vGSeYX7BoCgvLPVW0ngi8vs9L42Sypo0gjD3Wv5L+tiWhQzq57McaiJPLRvXDCUXgG2oRVG0= 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=eMaV/Y71; arc=none smtp.client-ip=209.85.221.46 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="eMaV/Y71" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3f44000626bso1848751f8f.3 for ; Sat, 27 Sep 2025 03:19:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968396; x=1759573196; 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=yqzVllIT2yt3PFzcaYved+nt+MYV4oPu8rzPsTcO43Y=; b=eMaV/Y71Rzj372UWE1RNgkZ5L33Tt3z9CuImbQn3fp51qT6oe5NkIEKvZtdYHRSLYw duXVPozQXsx5IcvZ1UTAdkRGW+eZK1nb196rHItcqIYUtMeWf+MtaVyY+Exuq1pJP0JS Nf95AWH59j1cq4FYxzNcWzTqm+MbHotOaKyomNT58kEJey25NCU4/DZBegl8TWPKoyXi nN3yrOxfrM3EMlnZOdMcYvKQ6btcmFRGg1qfE7UUB5mc46G2q6+hh85NmkthW+qtAZtt tApL0v6BN6frzhJZT486TMAABdS4ruPftr+eOv9ykm7Ekm+2tW2fDACNlQhRsp3/OCtG /dJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968396; x=1759573196; 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=yqzVllIT2yt3PFzcaYved+nt+MYV4oPu8rzPsTcO43Y=; b=lwCTHSrgLXW4SI1S1V/oko/3hcctZzslMokNjjxHvdB0lRcTq4AUI4pBJEEQNMAv9Q GXU0XxslbnzFCHbKJaW82cFl8aRq6t09nSGbLHGANvH3MMk75IC1asAzKN6Z6DHOpurF p+y2wPei4uDmSEGvYnfQsSB0X9zeWdPkEa3xKs8bIInVoRowI4HVT/mKWa8YB+1mJm2w +nuH/Ba2F2h6E2yGwRu3kG+7TKCt/cNpzoL07/4zCQkLXnTlACSggq9HMIkB8hfkRq39 jo4YVp8bI80skJy0mXJMwYa/VX4mJUH2u7ChHtLkp78K0wn7LmIAoFODE1amYnnahQoM rIfQ== X-Forwarded-Encrypted: i=1; AJvYcCU7SA1f8wsohCZUmsSWAlUmR/X9z57N+NJrNrIy/nFSn5USdJOa3ID6e9MPebJ06SbWlhyfvfMBKw4Bbm0=@vger.kernel.org X-Gm-Message-State: AOJu0Yxrmx8Gf4GkspDjGhwEFP3j0DwG/Y7u/hmQJIockDF2K0sM7yfe BKRtSqTjsrjRkbNsbuvs0IyFtp8/PAHKxSf1CFCf6rJwBK8uupb3ODLI X-Gm-Gg: ASbGncuLfm89YDV07gc35Rty2e+HgMffKmX/yPbYKjpymbsK0l2Mtd+nPOnPkznkaMZ LfPPJt2u2S82TC+WzjwALTB1hzrNg0qc6uBAJOnJVLA3Jmg2f27wP5xxXkK+zgge5Jv7t3HJDEB Pq7NB+VvIYlG88FmNdwEB19v9TRj4/rLo5t+CwPN/mDBWgfW4Lt+K+nJ6HC0Bms6HlR+iKsxxcm 61yb60uUmNcMLOgSgu8jDsOdp4a9LVIZMcqcdEJIH0+BTP//FDsp+eOUercva5nok8zycoEhJw7 wwTpX+bp9zIBJfUg8BmWaFuQJuTIppmm0qy8MBb7MAY80IijsmpPeQ+oLNB8eu+ZbDPPPBJm54W 8Y8UgBoZ13S/Xws8JRyMGim8IpfryrtZhO9tjKKNuaL4IipQ= X-Google-Smtp-Source: AGHT+IFAsWfz2Bl+A4ZnhASqCHsS21AQzzQRIZnk49NpIw2IBtriEVs8A+GhcQx5gH3GaYTnBlylYQ== X-Received: by 2002:a05:6000:2382:b0:3e7:4893:f9be with SMTP id ffacd0b85a97d-40e42502eacmr8947239f8f.12.1758968395884; Sat, 27 Sep 2025 03:19:55 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:55 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 5/9] i2c: rtl9300: do not set read mode on every transfer Date: Sat, 27 Sep 2025 10:19:27 +0000 Message-ID: <20250927101931.71575-6-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 4177cfb77094..9e3517b09b3d 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -130,11 +130,7 @@ static int rtl9300_i2c_config_xfer(struct rtl9300_i2c = *i2c, struct rtl9300_i2c_c if (ret) return ret; =20 - ret =3D regmap_field_write(i2c->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 Wed Oct 1 21:27:08 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 9BE452DC359 for ; Sat, 27 Sep 2025 10:19:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968401; cv=none; b=FojydIDTZcgOaqHT42k0A+QcyM4Rt6BkeNaQg2e3vTaEDEFVLF4C2Cp8UFP0qvDpnyhicwW2NHuEMiK/t38dMAlfdKoIE+XZC8FWWIsN1NyGtDlLMfFUhMO8bNPRl8WMzFWfipmLNYHK5+EX90xWX0uTLyL3lYWqZOptCCUOv8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968401; c=relaxed/simple; bh=GPOFKt13/FNDlZX7rRsEbrM35HRXtQFY1CfTF4pC0u0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t+biB3MHDfHPr+bbpgbK/zLrb2JHldiRscAK5qnUxFhPRN96kux0hnpsyUExiWaA896EG7WBwLEI605f9692UdWwmQV3L5r4nQzuGDGOUVyIiEAdkpiCx477fH5COWaxH/Z8uOzyKh4hultZMEGQOniYCcYAbnhwoTtvXlrTSHM= 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=idkBWKWV; arc=none smtp.client-ip=209.85.221.41 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="idkBWKWV" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3ee15505cdeso2396707f8f.0 for ; Sat, 27 Sep 2025 03:19:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968397; x=1759573197; 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=X3jDFjCLGk6E0Gk7i6q1zKlf4ViBoITsu0/4LLG3MPo=; b=idkBWKWVpQ4tMGEj1GLW3VD2wjXWtWw75FgqCChzxtfuhDjsZGm+EAppes0bJ/LUPj A5wBCERjDvZzGSo81Hk8/Hj9fmAFs5pFQiPc2IlmMCzxJ09n5XcC9P+7QFiwEFMcmmeN DH3SFqKquXvzD/mfZe/on8nPyOd9fT3sxubsbtF8EbqreTMr2ZQHkkjpK0a/xeoSut07 bilEwYs5u4mob6eFiYMSKZt3y77K9qRRIfXiwK1jM+kIW6OD5ynOI4BMaCvcxD01Bibs cfHmB3Z9WYHrVk3NXLzac1+Th1KQeKPGyBqpoWWkoZg8duAljdQtW3DFhCpQfu/y213b XoYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968397; x=1759573197; 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=X3jDFjCLGk6E0Gk7i6q1zKlf4ViBoITsu0/4LLG3MPo=; b=KYk68I9yYon1kXMuVKGLL71ZmKs/TXnKUFkVdv+PGxzMl6NyHEeMRKP3uVIHgDCiWK FwJZBcZ9waIJqaufLqiW25qwTGsQh3fSTirIDq4Fr866sdonnJDFCbGzJdnFqCHsoXuW B8oGH6ylNwvkyfkMs7AmKofI5d1N8mYuzt+SmbaJjKrDG31bcXy+MFBHOGzxDxOU9jTn 3EotXDaDhnFJY6Lt0pGcF87Zu9H3Vk18uGK1XZ9VvIkroo6CvaLhX5qBL3ujZ+slHHlT pDDWkTts8I6uobjFLJ2YdSFd7cGK2tdQ5WWUw89i+PfgXYEhmeC+zE8AQ35F/QM64mNn lhIg== X-Forwarded-Encrypted: i=1; AJvYcCXaEOf4mGjlRJosybJ7FwdFFsDEB+nN1BMhzM50NlGSmM8rx6a8t3CnGvhANtBfqmouqNHIi1CxSoLj3mY=@vger.kernel.org X-Gm-Message-State: AOJu0YzO3qrI6cJK1Fe3rsFZshpTU7qQXArnzEAmTNfTLJwYh77y/8qG XD039HGl3Ghekhizy/25/J/SN5dZ2+hf+6KeAtFEOeJIg14abGg7P2GZ X-Gm-Gg: ASbGncvI5aGW90A5Xdg41nOUv/zXojmXWETepMVwddnIYJrceTZiOKCJ1LHjnhUtcAL 9jpHua2P/JWSt6cQ7iPKqzlXkZGRw3ch1K9TG0FBAQn9Ta07rKyDTuCsIA0gOYibObkzRGvFd4H 8PJ2xbPJT18IsiM/MAEUVTx0UYXlW1AilC4QELMUITo51TPWG+zGfDfrGPQdh6MAx8cyPRE+Bh9 siBL4exfBGOJdzEijMM70kM96A4kXgZCVydpA1kskoogSV8lPWGfvBGOwIxrRVCn6RdFT3QdW16 cwCiv/9s6SREoj47jN2glosutSdO7EA3VEShuBowoUpw6cydRmJ/Pc1NHujLKB1gciikA+IE4S7 5NxsJm4Dht7hLACk0xQ1KaEqREw== X-Google-Smtp-Source: AGHT+IHspJtw1GEvOoHGCezyHnQZVeNd53wLMqlHiEQisV4rfUFYCXSX76raqLBX16/A0A2mZYY55Q== X-Received: by 2002:a05:6000:1acc:b0:3fa:ebaf:4c53 with SMTP id ffacd0b85a97d-418077a5f34mr2097194f8f.29.1758968396746; Sat, 27 Sep 2025 03:19:56 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:56 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 6/9] i2c: rtl9300: separate xfer configuration and execution Date: Sat, 27 Sep 2025 10:19:28 +0000 Message-ID: <20250927101931.71575-7-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 234 +++++++++++++++---------------- 1 file changed, 114 insertions(+), 120 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 9e3517b09b3d..fb3ebbd46a18 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -8,6 +8,7 @@ #include #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 Wed Oct 1 21:27:08 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (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 8BDA12DCF52 for ; Sat, 27 Sep 2025 10:19:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968401; cv=none; b=NzYU2L43FNFxRECQyf+OcgiNWlFQ5ee9JDOzKP5ZgCikVGGn8SlwOXYtqcosvFw3qTmeygnS+uAcTw3JUyAIJjsrh8+cXLc5SH3YCQdgrOgiZ8L/nsF110ShZUhmix0eP0LdkWhM2h2NKxs0vquzCZzVopswWAI/nZ4L2DglDP4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968401; c=relaxed/simple; bh=vEHdMu4fZDG0pv0OrxT4yCsQ2r9RoDo1W3KJXPI34so=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SrzETHC8QQVoSyHvMQzxYOlWYTaHdjsV0INTEPpJA8/iJaS4oqJ9HzorsOWPuDCmrGEAE69PJ6ljCtbU7AT7EJOLbEr6LhvY5+1/Zk/J/3u5I2e2I2Da6iaPIY3rp83BtvwTLfbGoL5bTxUplYe8LNODpGpDTk/FKNKhxeTkJ7U= 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=F0tRh976; arc=none smtp.client-ip=209.85.221.41 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="F0tRh976" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3b9edf4cf6cso3036059f8f.3 for ; Sat, 27 Sep 2025 03:19:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968398; x=1759573198; 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=rVYljPZ7zSakciHIair+w4BKANbFUIx4H7fyvtM/0P4=; b=F0tRh976BZ5xb+VRYPxhpmSejlxQOjKfJVJLJhcMffxMcaAnBfPbghveIDhEb6A/Vj rolAVWhJfbYlTzwzyUzHkMWrvnSH74wDlNxjtyA8cLJId7LfZUqgm8cx+Z7gNa53o3T8 k1FywAJlWGvbKBv1EDizPm5hqZGK5yUtHVTZhriYX+nIyBnfioXbWEva9IWaAg5DB0C4 GVCIDazAkS3XQlifiVw2HoR6emLRQXm8B1Xr25iSZsrxWS+k4DmHmV0JYCrIzgfPK6hU IfhsO4vYNhmoKVXON+YMREKcrhAUr/f1AZZ4fhry4eMNW0DHUPZWl8EbqtRHr0t0Undt TZjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968398; x=1759573198; 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=rVYljPZ7zSakciHIair+w4BKANbFUIx4H7fyvtM/0P4=; b=jHYSdnvnRlRO0VSGnXhPsOOhDwcz2T3fAznzdiMLU0IBC2o8f4XT11RL6zYqV13STm 5JC0a3wWGxX+X0+SkyK14K7zUruDsSSABF1WY7hT3Ydk4HsIx0CRsCmhQAbKtJ+NKTsZ H/wxnJNqYs7jmfNwnUC1MZgy4mCI3nM0ezB4m+USxuf36X0z+eibM3EoixtfGF9FKAWe QovIWIZbf1TKMnQ+X+ZQEeqkuXBPLmlr3yDo3Rq9PSdzJXOvkPG2iw/ycDpBlRlcvfr3 aapB/t1IGOgYKsDLIrh2qnALrKeEUMWuU9edsusnjUIR0Ov1BchNzftlfidb75KgV3mc Wacg== X-Forwarded-Encrypted: i=1; AJvYcCUAgIMTcegv5Skldp1mR4VVOBvXZcZk/Gi/8zErmbgUTrEqeMVojW6/NdhS1LjlHyXerUxzUitkszsYjI0=@vger.kernel.org X-Gm-Message-State: AOJu0YxmP6GYW1TAQJaH9OMdua4oO8H08NC2UusSPMnFpRDxsew/u9ZA Yi1GtNKi01RxznCnGb+Otix1HFuqmLLWxp74l85q+imoY++rhw/ZTQgo X-Gm-Gg: ASbGncv7HgxpzvuRpxDbuKtyjm71DLuHfpwEKy2T8sIFCR3W+6TqZlUCfMRoV2irwVA Ayod+ntbLUxgBqqj+59EMFQqcjadQrrwSNNE/DAaa3jPTmCxVkT+BOdaxusQnmV/9/OZ8YY0LF4 jB8yM96yXrFJp/q5lMjwXmxppUP1UkDbJfbid62Z++s3X9tFs3QfssirJJB5EYOYoBOlObYnb0t BBMFyruNVa9V0Q7orCGASh3r2Y3QYUqp4sgPvG191Kk1NRnIat/h4YaSzLSWGBYu4au+5mWXCaH 8RuVF0eKe+n93Bh9h6zSEkvU3OasCEBYPMDkmca3rMd03PR7aEi3kYwhWglBbLORLs1gD0UEVy8 PydmTyeSJaVujdeORSkjxxzjeW19gxkmg+Lqz X-Google-Smtp-Source: AGHT+IG/vuR/CAo50CO49IE9FciQlvcGqdjye9qI1zbG5s4qjXYiiVKt3c5dUTv9WyX4imP3L+OHVQ== X-Received: by 2002:a05:6000:26c9:b0:3eb:5e99:cbd3 with SMTP id ffacd0b85a97d-40e46514db2mr8969382f8f.2.1758968397541; Sat, 27 Sep 2025 03:19:57 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:57 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 7/9] i2c: rtl9300: use scoped guard instead of explicit lock/unlock Date: Sat, 27 Sep 2025 10:19:29 +0000 Message-ID: <20250927101931.71575-8-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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 explicit lock and 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 RTL9302C = based board Tested-by: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index fb3ebbd46a18..c67463228604 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -72,6 +72,8 @@ struct rtl9300_i2c { struct mutex lock; }; =20 +DEFINE_GUARD(rtl9300_i2c, struct rtl9300_i2c *, mutex_lock(&_T->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 Wed Oct 1 21:27:08 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 5B3CB2DE70B for ; Sat, 27 Sep 2025 10:20:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968402; cv=none; b=dLMflD0NOW9syFOhL3EEk/IbVFhfzqRfQ4+KvQfohK6MCfCimyoBLYo3Rd5ryLeanILKqmnr4YDhBnZV1MbhokPi+b1xvNytAimwd6Noo++IGc+sDK/EuktYx3uOpscMQFbaHAMCV3UpeGy46ndnIWlQSSli0JlWQrF0OzTNQ3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968402; c=relaxed/simple; bh=gnOswjnbXmBMi405dgP0uHVoleNWn/lcXZxumvVI8g0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fmkv0mcjIB/oPc64VjOlwzESWqcKzCnTogzVZFfNxeFPdc1nYwL8kJLOUR4Eq1jp34QWkpbtntJX82DZA42mIBsqGVcTHCmDA7Nk6+pOh9b08Z9OlR/4LG37sEGnoe2RDMoSmhlGmDKKR/Lm7e1rHaklk1pMzLIpHaOZpNfPjPg= 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=LcR4V6GQ; arc=none smtp.client-ip=209.85.128.41 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="LcR4V6GQ" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-46e34052bb7so30413815e9.2 for ; Sat, 27 Sep 2025 03:20:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968398; x=1759573198; 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=uocL+F5w2WClnJd2wZcawwJDtccp4StZfUc4QhYk9C0=; b=LcR4V6GQoKe83eph8G2njkD1GuVDqlzFQXraTj4z95DcsUi1YldCVgkdQbk1wD9xpR JgWWBFYrjKkzk3hwRhVaPQEMhPpWCcbfX7CL7H1LQbWYdXDYUFfHn+xPt/3V4jD2P3js gNz6FpGd11raz87G8NbZ+ofyJyP2lDrJBAcdXaubxkIOUsZgopWvdpr0UFdVGsQACo9s 4j4gOPGHcMip85WSgcUI+CXmxL+2p0aLw8TTJTJArhXvpyXfbBJ6wBL41DoWWD0N0wXY 4kWkNw2hFTgIY0sXZTOPp/ACLJa5eOVUS9oOV/khhOBtDPum3bQQFXCpSZzyCu2fUWUW jb0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968398; x=1759573198; 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=uocL+F5w2WClnJd2wZcawwJDtccp4StZfUc4QhYk9C0=; b=vO+ajoa6YFZjVfiRL0N3u84JwoEoQ8ko2pvbn8SwQ49arPMTpJarVB5y8EqC4jMgRl Im4AEonMTpaSeCBsQiTWBwiTclNABu71TQZTFFysQKs31dkDRIOXGKm2jPKqd8RE2GPL Im+nerzEohrpJtozd0zQxq10JZkhwPZEtVW3Cp3wMv+4/S6rA4d481XHYfH5kD9wKg/O k/bVVvbTn9JcPDXTe3pFoqDnbY+LN/GenPZsX6QQWgPcmMnTtuRTKv8k6GGqRUTUTxPx PEdwKM7GeRk+Ez19WNGf6uN11lMp+H4rv66E6wgf05PHHzQwnDZUP7S5AOnYqcolkXco Cdjg== X-Forwarded-Encrypted: i=1; AJvYcCUYrZHjf+fA9JIlLKMdiJ6tgfBjoacsCG0KeRk9vL+NDLvqCGgcBHByiHvKAFZ1+Jab/jb9yNw/hs3XvYk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx6dV2PNNyvnFd95JpxMdjheCzEQPp2oFd1qWAjwCn/K253X0gD OqHSqQgLDT3aqjG+sRlaNdH6k0ENV6viHqe0voNFfSyzRFlr7Ys1SMay X-Gm-Gg: ASbGncvOn48aP1EtGLopqHhuJEhgrNldd8EMxLtejhDws0ut1TQ+kWciwPNEeHqHoEY T/8/ZlzhEnxYIICRA3Im5BFaDTGZH3vQHFQ47t1BTPgIzPuaet4K6pMJITnddGPfBQBty8wRN6d IfncNyWhw9FdXIeYcqZPxrNnquOP7Aq6ewlDtKM8aQCI1k1mo0ZvJOGcfWjr5kJ6kUva91bU9I/ YX/H8Uo2wiMueGyjMhBwoY7dqqiUssglniASxeiMXK1xvWWMYISdydODanRo+7EjpweyCC/OCFO dhV064PcKT8yIAD8mmL/JvFDOMEwo5T+2bFJAjEHO02T3mUFIkgLXLHTjbQO+4xaxSaeCeto7zm so4JsCtD1O7TbK9Ihransy68eHIEZjCFvB6cB X-Google-Smtp-Source: AGHT+IET2Tr0s3n8VDek3rlo7bkHPvQJdlDvKrOgoXx4qdDl/ZQ+KDgju6tIIVWGP2X02sVMgrwrgA== X-Received: by 2002:a05:600c:c176:b0:46e:32a5:bd8d with SMTP id 5b1f17b1804b1-46e32a5bdb6mr89196585e9.3.1758968398332; Sat, 27 Sep 2025 03:19:58 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:58 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 8/9] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support Date: Sat, 27 Sep 2025 10:19:30 +0000 Message-ID: <20250927101931.71575-9-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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: Markus Stockhausen --- .../bindings/i2c/realtek,rtl9301-i2c.yaml | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml= b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml index 274e2ab8b612..17ce39c19ab1 100644 --- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml +++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml @@ -13,6 +13,8 @@ description: 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. + RTL9310 SoCs have equal capabilities but support 12 common SDA lines whi= ch + can be assigned to either I2C controller. =20 properties: compatible: @@ -23,7 +25,15 @@ properties: - realtek,rtl9302c-i2c - realtek,rtl9303-i2c - const: realtek,rtl9301-i2c - - const: realtek,rtl9301-i2c + - items: + - enum: + - realtek,rtl9311-i2c + - realtek,rtl9312-i2c + - realtek,rtl9313-i2c + - const: realtek,rtl9310-i2c + - enum: + - realtek,rtl9301-i2c + - realtek,rtl9310-i2c =20 reg: items: @@ -35,8 +45,14 @@ properties: "#size-cells": const: 0 =20 + realtek,scl: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + The SCL line number of this I2C controller. + enum: [ 0, 1 ] + patternProperties: - '^i2c@[0-7]$': + '^i2c@[0-9ab]$': $ref: /schemas/i2c/i2c-controller.yaml unevaluatedProperties: false =20 @@ -48,6 +64,25 @@ patternProperties: required: - reg =20 + +allOf: + - if: + properties: + compatible: + contains: + const: realtek,rtl9310-i2c + then: + required: + - realtek,scl + - if: + properties: + compatible: + contains: + const: realtek,rtl9301-i2c + then: + patternProperties: + '^i2c@[89ab]$': false + required: - compatible - reg --=20 2.48.1 From nobody Wed Oct 1 21:27:08 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 23C532DEA96 for ; Sat, 27 Sep 2025 10:20:00 +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=1758968403; cv=none; b=I2TsHn5jaUembuINvttWCXJQL4cS3SWzQtcu3Mh9UL+h+/mo8gYVocVK+UGflvTt1p2+bvQDr5PN28HmKOnmDKiVAwiLZNALCQAd6KB4+sPcqNjgm0OqKgDsBnvv4CfccwmbN1eXVOYQMzbNQoZVkITxtdreKOgIreQiJ4TRK0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758968403; c=relaxed/simple; bh=Zluq7HloLfLQBFo3Tg6KXCaz/jydY9sbOSlGs2FWraQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E0hlh9OY0qp03q2py++noW9F8XTcmps0A1kAbnRdnKJJ107dMKeIDh5H1GIaCUMyZ3w//BF5svlR3VAJIrXVhpoXQ4O5aXIwFVb1wd7XWxKk6UfRS0aRt1+8FTyb/FiLVSNW5iOATtmyB0RfVHhg7YJNMMWwRlRwGfp/sc5Svtk= 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=C8Lg86cr; 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="C8Lg86cr" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-46e414f90ceso12896015e9.0 for ; Sat, 27 Sep 2025 03:20:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758968399; x=1759573199; 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=OiRuXA5cFSB3WTl30jlWEwLCI0MV2cwTejEF+1ySiq0=; b=C8Lg86crPokWvYPuuLCKDm/p7b8kjRkEO5IF4R96SzVVSEmKTv/24c5BMUDPVkq7NK Ar6BkQnQueY+v8+jjVKNsocTYlk5JpWwMQ2Pjxs/dR6SH7FkydJ09HEwyBleEKlkfTrI bTwajcHNHOXxm2BeefPUUxeEm68Y3MTe+KM2/8/egMVxxZ+hz8niZmqHFDQcinQCTzwl PuaYUKUBRu3P+yNift5Rh6SvRoiwPfQt8Hn4IMyIzOz8R1uLtZOZvDoyck1soGcQCr2E 9SY7egx10hDQ1zQ59s9xP1YM2EvH0FU+22xCa+tHcBNpnypzFXNAgJm0ltvWERsuQbe/ 9+1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758968399; x=1759573199; 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=OiRuXA5cFSB3WTl30jlWEwLCI0MV2cwTejEF+1ySiq0=; b=sInqMejNkovmVqXmwpTTuY50aH+uNv8A4fkqmgDzlF/ZwERpL13qMocsLBN59WlDXq OAlW1S/E6/ykxBSBrMCiJo66sPXwE9rVUKwH5zOAy+bsPjCnKmaD7l1Dd4PVor978KDu Jr5MPj1VTAjYuR5S6STH9GIqcgtldAtaa+fauUYZqbfHOr87ztVd215j2x7BI2xw1Cp+ 0g7VueBvwR236hAeqO8xq/kbqBMlSIxUVSFtjcnl8KrVumzXu8QXNPW1R+A7HjV3HEp8 wZCSs80NqDAfJxWfVpuLb4oh/euUAYbwAmOof1kze2mWPMC/w8o9Ny3s8qJs6mls2Mxq fTgA== X-Forwarded-Encrypted: i=1; AJvYcCUlS9JhS9m3NYS9m3vxqb5fU747xJV4zzTYC6ZRB7EqV3Hnyc6BeyXeiZYWntaDYdnm/RKrPoW6C5Z8Wy4=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6dvd7m/Zygk12jc6FtMM0KrZhmG4jzgUGdQ8EKn8U/VuO4OLv Z25lRqHPkP7C0KCA0lQPCfLrzJf1laXSL74kbxHNbzISYBYEu7wbATu0 X-Gm-Gg: ASbGncsRNRiQ4Bjo7hUbXyDucHIYGXyVLEtaxyyz+AAr7Um+mrW7EP5Vf9SKX1gGte2 /RoaH8eI6/aqLU/kq5xFYs16V8y9o3Jp2IQvXBVy0iRi0o3GATCqrMYEioevB7vOTXhchW11j9j wb0po3LcTg3r8etSkHzZyokmU/SiUCkTwWYYd6tQQnVdM+MMDKzcB/vhvF5e2/vlgcathOUCXsi uqp2zATXta/xp/zAZ0CQ6nLuyMy7ZJXAZQ3OaSKxmrU9+NcEi13qug9wpigQ/87w1diE8zSbw6D kKJTceZeWqq7gHsgRj8tr+ev6LWB22zHSqhlcunKapNy4jf6iHWdHvv1Pb+xnB/arMkrWe+A7Qh DCwqOmAMhiG90h+T2pkYVHhHiWl9F3iqa0waI X-Google-Smtp-Source: AGHT+IGgMN3T1X3hnUqeVwF68LTx312CsE8ahdhgtBGmMZG2KR2xgSdUgBVfMeKbjYPSYaobiWJQsw== X-Received: by 2002:a05:6000:615:b0:3f1:2d30:cb5c with SMTP id ffacd0b85a97d-40e451f8c69mr9666361f8f.23.1758968399161; Sat, 27 Sep 2025 03:19:59 -0700 (PDT) Received: from builder.. ([2001:9e8:f11a:4416:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-46e32c31df7sm53416435e9.4.2025.09.27.03.19.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Sep 2025 03:19:58 -0700 (PDT) From: Jonas Jelonek To: Chris Packham , Andi Shyti , Wolfram Sang Cc: linux-i2c@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Stockhausen , Sven Eckelmann , Harshal Gohel , Jonas Jelonek Subject: [PATCH v8 9/9] i2c: rtl9300: add support for RTL9310 I2C controller Date: Sat, 27 Sep 2025 10:19:31 +0000 Message-ID: <20250927101931.71575-10-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250927101931.71575-1-jelonek.jonas@gmail.com> References: <20250927101931.71575-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: Markus Stockhausen --- drivers/i2c/busses/i2c-rtl9300.c | 47 ++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index c67463228604..4723e48cfe18 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -60,14 +60,16 @@ struct rtl9300_i2c_drv_data { }; =20 #define RTL9300_I2C_MUX_NCHAN 8 +#define RTL9310_I2C_MUX_NCHAN 12 =20 struct rtl9300_i2c { struct regmap *regmap; struct device *dev; - struct rtl9300_i2c_chan chans[RTL9300_I2C_MUX_NCHAN]; + struct rtl9300_i2c_chan chans[RTL9310_I2C_MUX_NCHAN]; struct regmap_field *fields[F_NUM_FIELDS]; u32 reg_base; u32 data_reg; + u8 scl_num; u8 sda_num; struct mutex lock; }; @@ -98,6 +100,12 @@ struct rtl9300_i2c_xfer { #define RTL9300_I2C_MST_DATA_WORD3 0x14 #define RTL9300_I2C_MST_GLB_CTRL 0x384 =20 +#define RTL9310_I2C_MST_IF_CTRL 0x1004 +#define RTL9310_I2C_MST_IF_SEL 0x1008 +#define RTL9310_I2C_MST_CTRL 0x0 +#define RTL9310_I2C_MST_MEMADDR_CTRL 0x4 +#define RTL9310_I2C_MST_DATA_CTRL 0x8 + static int rtl9300_i2c_reg_addr_set(struct rtl9300_i2c *i2c, u32 reg, u16 = len) { int ret; @@ -114,6 +122,11 @@ 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 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 @@ -361,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_num; + u32 clock_freq, scl_num, sda_num; int ret, i =3D 0; =20 i2c =3D devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL); @@ -379,6 +392,11 @@ static int rtl9300_i2c_probe(struct platform_device *p= dev) if (ret) return ret; =20 + ret =3D device_property_read_u32(dev, "realtek,scl", &scl_num); + if (ret || scl_num !=3D 1) + scl_num =3D 0; + i2c->scl_num =3D (u8)scl_num; + platform_set_drvdata(pdev, i2c); =20 drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); @@ -474,12 +492,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