From nobody Sun Oct 5 03:35:58 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 E95722571DD; Sat, 9 Aug 2025 22:07:24 +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=1754777247; cv=none; b=p/0BK6j9nN9/aFtv2KYpxb8ZSbz2aOn185xGNPUjwlOQfzAHdyp0hKAXeFwLXEgiORc3ZGfEPucHLSP+5pQg4q+4KMLS8Ij6si5Umzv2F+TNeI1gffX1OkbDEQNyH96kmJnQ0PyK+gP4DsAMen27rbgZkerN2besVcMFgJ4ktPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777247; c=relaxed/simple; bh=9077jS45ov66K1on9LG5qwdx/TQaMaYyQO8CFFXWBRw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A+d3YwGmatzZ79ywN2ypfjdR9YxHblnvJuizuZ89rkJTx8GqL2ab1Vq0FMhUHQ8tlw4teewEM0ldUQ10AbgGAjEe5MLmMx4Wi6yvDupRaO6hFQ0yeTMZVI09OHS1OfZnWFqW9hwbSo1mOKeYtnEEksXezxIwI5XXEUACKyRGb3E= 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=Y5OESgns; 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="Y5OESgns" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3b8db5e9b35so1804042f8f.1; Sat, 09 Aug 2025 15:07:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777243; x=1755382043; 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=ZW/BweFq6h6BGzIKunT0lkLtWiTc0YxNDDXp0NkQeVY=; b=Y5OESgns9LehQ8SzRWqv/vfVn6QCvBWEkRlUzlmeY0blgRG3gwoW1CR1MboSFaEAyJ whDhZrF+r5PTgTmFV9RsR/Cms2bf1aiUOxWKeppfp0Ftdye8UykUQfLiGZkhK/R4NUOr 8qdmdDPT5TcXGQkY5Y97VaF0sMGYOEzZbSe9PL++86YFnBWjLaquj5b0ALu399jowbsY rmkV3nXfp/swQuAC88pQsQr0iZDA94jd3jCxQ8fo+pOEx968OB4+VDmnmspBssswO25M bYe4h8yb6z0riTYLY+A+y/Ueer6hbFaUkNpJqP3+vGOiDrT84rQNbtg3KcUM9koFi6/f SblA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777243; x=1755382043; 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=ZW/BweFq6h6BGzIKunT0lkLtWiTc0YxNDDXp0NkQeVY=; b=DNxMipSF6o++kSvn8DoHwk9WECK40kLlRUAYiKyZRYsCXEsr0Fw7kXPFP5amDZFuu3 hljHqINP2oPUekKlFYYltoecaP548tIpY2I8NmhDvDzM02lvGLa51YcvJGNEIXgzz3oz OcitybvWx90w+2hD2SymR0+XixZ/ZDdO1Zsii/j/QkPgl/7HnaSzXbpo4ThDDtvMgJZl iyWdNfuqO4lDWJhx77KGncX1Z/fKJTex5oj8l1xtMwZJGfW2OcyYr02Xi0BmlHQW7f24 3p79YKrI5DkU8F/6KGKPxRRAOScmFpq2rS4tRFcnkyPRn/y9cvPcICIj2k/8r6PDTZls znSg== X-Forwarded-Encrypted: i=1; AJvYcCUbp5ObuTsguZZi4Lnjqs9ZxjNKqA2KdK39UoxUy6E0ugHy2USHwePkUmlhEIQOos2uhANynsRul2RZ@vger.kernel.org, AJvYcCXlDlCX3YFBOiWIVsyLgvVdJSTd53EDXa7qZ68XW4/8X4/R9WUuBZ5auCNNygx5vpjWuEjXZfa3AH3DcPZS@vger.kernel.org X-Gm-Message-State: AOJu0Ywb0WC1SUT+m84uCvpvuJrZ9cz5Z8pKdbLT6f0/+MM35EZgjtv2 qQS75EMzBKaT9U8DMXy6XcZ9/nHFEg9EqdTnKDZyc9IAq+GtE+mtrw4m X-Gm-Gg: ASbGncvJF1161o1OOEbfjDuO224wodLvWwAquayh9gCqAxPcA2aJPzvx2yPWOj1YZJN dUR1Vfabf7Uaocgdn5w5jyrt3LEKhwnRzmHHgun/XyWOpSkAb3a+GJMYBQiIFDlOyJCMTfEGhn4 F2SVlUt60FaTO5DNUjOLJJNAjaajHGhreXPkCYhUOameO1HtNPQ/tgvss+HbUzo095LZHpkiNR2 ozm0Ytza8uqYzkH0eu9e4cY9OYPTvSoaypWvUrrRpp90kauz29QhSooKXFop2eb6Edrg8asfKsD b/byLFXp1llD4RTurW5Hmw9anSGH7hRYMikVtE1pBKAFA/qLzEGpFf4HbLHROjeQG3RHq4ozUXL la2mbQBs+DyuTna1RdvmQWnYFR1gIqHEA/G9zZV+MaFqmf3tC8WwJ X-Google-Smtp-Source: AGHT+IFCbKO35GJqBIPL/KrGvVKIi81pzj8Hw2/WXDV+/tzXuUd1/uyBWepxvsNclAFVYbO+YdvamQ== X-Received: by 2002:a05:6000:2501:b0:3b8:f2f2:e417 with SMTP id ffacd0b85a97d-3b900b56f7bmr6215960f8f.51.1754777243037; Sat, 09 Aug 2025 15:07:23 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:22 -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 , Jonas Jelonek Subject: [PATCH v5 01/11] i2c: rtl9300: use regmap fields and API for registers Date: Sat, 9 Aug 2025 22:07:02 +0000 Message-ID: <20250809220713.1038947-2-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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. Reviewed-by: Chris Packham Tested-by: Chris Packham # On RTL9302c Signed-off-by: Jonas Jelonek --- 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 2ccc139ffbf6..e6eb6a32fde2 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -23,94 +23,114 @@ 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; - - val =3D chan->bus_freq << RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS; - mask =3D RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK; + int ret; =20 - 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) @@ -121,8 +141,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 @@ -149,52 +168,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; @@ -362,9 +378,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) @@ -383,9 +401,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) >=3D 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) >=3D 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; @@ -402,7 +433,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; @@ -434,11 +464,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 Sun Oct 5 03:35:58 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 93161265CDD; Sat, 9 Aug 2025 22:07:25 +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=1754777247; cv=none; b=Ii6SoqMNVBvS+ufEvApTAF7N8UbzhzEuntCPra5vt/TnilE0d6H7Q4I/OJmF8XWMTZ+u/W783q+4SlvddK1+vO04G9xw0r5skY6m3TO0Rqww3KfSXNgqVD+t6rVo3HhTyvNETvM+uAsgdA0huFrAQM3fJ5/K0ymVnipkRK/wIPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777247; c=relaxed/simple; bh=4DzfJUaj9CMNcniWQN1jZhMrIdrao3Lw4vpRQFHqIck=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j7ef/6TW7lsijwQx0/QWKjcY1GR9zl4WezJvwQvAiCpPRHNRLQ7KZTgXwk8wcdvnpE9urdvArlNoU/v9BqsC8BauF7kIu8SQKN/exGTz8IJsMfM8sGprlGXltf7M1foSbkVPC0v1Er8W/VmLFzSsFtPzpNCn4+y6dbeCsWV9D2w= 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=da2BYuBp; 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="da2BYuBp" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3b8db5e9b35so1804046f8f.1; Sat, 09 Aug 2025 15:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777244; x=1755382044; 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=cq0E/m7mImjpJamMpj0TWXiouXIESM/JDlH94bzicD4=; b=da2BYuBphj4FdS/+n6cPHaSpSK1bOSZdU4qx0LoIantlwJxht1xeyh+OFeRBynMlpx weIhLaq3SDCmS4Qr0hVuzHo0eG1Qu42DmxVIi1Cx49l57Uu8gS4TlEGJ4PvAU/Ie4g0+ Id07Ly1GETQAEzUgcgsrSZmfgiO7nlbyv4x9qYM//aWHNS4ogLBeIRWEXhu0VT/jbzYY KE6t2cpT4cFzSz95RQAdU2pK+8Su/8Z34N5mFq4MX05du9wrDpaZ20ma/ucyZ3FeCQAc kRMGgi14xSLyZSGtPLz+BdOZ5oPsW/4Q5GbinZojAdhZJLcQFrmyLEOmxm1JOyivHQI6 X26w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777244; x=1755382044; 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=cq0E/m7mImjpJamMpj0TWXiouXIESM/JDlH94bzicD4=; b=rDFW1r/ssTPlp1kNOg0jT2rvEdwL3gk6FblSbXRBEejPlQ3HKGorEqEwwnq0+0HaGp cH12xh9w1nw8lArbbZQOiiFjk7mqceeHIgDbJVORyRulq8lMupHzeVMXjReaWSxs+Mfv CSrGL1/vrrbuHdyXmm8IsgFpmqCazmCMTqa5E3M8ujVmky+V5fZLqBoa+yTkN/ncN+pn oGcJxVB/IXsU2j9S7Sx9BwwDcENtdrwNu/+pJ9uDdX9rNzzAZj7h20knAH/IWTKo/k+e R+npYV3WU3xJW46EA/Ta3nC2uS+cgdO6GbJ7IujSBU2It+WGf19UpV60e4ppfzxnPIl4 w8mQ== X-Forwarded-Encrypted: i=1; AJvYcCVoaejkAA91Rf/f8KgiF4YzAVqNjri1Yu/ln8Y0GbkQqxVMi7YL3FvnVO2eMP/wjoHcQpNJhNblnKT4rmfZ@vger.kernel.org, AJvYcCXH1d6sFhMx22qiWA8BdBZBZLJfUARb9ugOcG+RTroQT7F0Uiy6EFo3flvHBaAtpF8GiYTaB9iaAZiV@vger.kernel.org X-Gm-Message-State: AOJu0Yw7oMsb/uWUH0smlPIgy8QnAEOwPq+B7YSd4TjqMYTQ8xhe8DJq Y6YyxA1smWSBqlkD0+F+wLTvoOTjF+CFXwUawaFu6WvTZ3GXphMvcO9N X-Gm-Gg: ASbGncuVESUeu/9wWRljBkb6yYtGvsGiIsstVoyknaDon91gtgYrMZ+ZayiCBspoeUK TRgWbw+KI4ZINBSzsTnGMWRq0/Zaf2jd+MIUeoUiy0yZ4bE53x/rzq+ZIYtPpi+JDugwvq8DQW1 vSM9Fazgy9EQc+mRjOwX+hDL2gOJBqg2NidNFoWe+Py6NQHQcwMR4F5F+mNGLN/WJaFCMclQkip POZGXGEihZesldSydo+1w0tnF5wUOIkVDstgrBs0BjbJxQsJNA0B9FgX0utjh1gz3C9hjrQfawp wpL4wGZ2si3ozQuEPtcNpvKTK5rSnIoW/VxNIJ9fV8ItFlhsiKMvHXmFLXm5TdN8iIFvnbgOeQ4 thGi5vSYvh7AyB1T7A55pal8Y35E1Ie1noNhIVw0Mceuczg7mBA6T X-Google-Smtp-Source: AGHT+IFfEF5W1hbTqfMVzogXGkEZs+k1bew2UPzZx+k+bp+lw0P6M1qwwv/Oc/pH9M0UOn3DRdc2Jw== X-Received: by 2002:a5d:5d11:0:b0:3b7:8832:fde6 with SMTP id ffacd0b85a97d-3b900b2dfbemr6340196f8f.13.1754777243866; Sat, 09 Aug 2025 15:07:23 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:23 -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 , Jonas Jelonek Subject: [PATCH v5 02/11] i2c: rtl9300: fix channel number bound check Date: Sat, 9 Aug 2025 22:07:03 +0000 Message-ID: <20250809220713.1038947-3-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 drv_data->max_nchan) drv_data->max_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) > drv_data->max_nchan) Issue occured on a TP-Link TL-ST1008F v2.0 device (8 SFP+ ports) and fix is tested there. Signed-off-by: Jonas Jelonek --- drivers/i2c/busses/i2c-rtl9300.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index e6eb6a32fde2..68acbb6cc5a4 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -402,7 +402,7 @@ static int rtl9300_i2c_probe(struct platform_device *pd= ev) platform_set_drvdata(pdev, i2c); =20 drv_data =3D (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->de= v); - if (device_get_child_node_count(dev) >=3D drv_data->max_nchan) + 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; --=20 2.48.1 From nobody Sun Oct 5 03:35:58 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 C7FD227CB21; Sat, 9 Aug 2025 22:07:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777248; cv=none; b=iD+M4AnV+bpa3goJ5jZfbW3b1D3HA6BgNs6JNX+MxPEbItQPdU/mmisSQxSRepa2i001p6EgAO0FAxeHahia7VU9BmUYK5hinWLsXQtqPuQH8XLO3Iq1L9N7kjzkwRkQS5J4+Qi6l3Hquce2v5CkCiatsNX9FYL/UxySwMX3LBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777248; c=relaxed/simple; bh=uLUiJYGCViLoh6//R4f4TzVbMp2m+qbFrXAXPYgwb1A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kQG8PAk6L7GBMqH0LkobsU8no2A/9EKVLJkAg9KVwKxP6EgAbKdBEwdTp7cRgQHBZRZmFVH41/56mA0cbcCsnp/cPwUnWKYxdNbrE9Eel05e6/njVzFz4kou+Bcd8ZYJBBHk7HH+HTyrzXSP8xhbmXP9jVb94wpB87xvU821sYU= 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=fPczDFut; arc=none smtp.client-ip=209.85.128.54 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="fPczDFut" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-455b00339c8so20361055e9.3; Sat, 09 Aug 2025 15:07:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777245; x=1755382045; 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=7kzn2VavwCg/R9fAXnI4sg3rxMYADhaGdUBsVN/E+9Y=; b=fPczDFutJ9eME/X9gpYRQbYuG5onOWMG6BLN2dpoDuLoUoxAay0UAiYZBPR13Cdh8w LVUePTB6Xb679sxxKyXX6zpROza/rALVYEWL7QsZqaTPNxukQTRgFK3Xs5IYGiDf9Nx3 2/f7S4ayhgXz4DdqmIEE7rqn9MRgYmPp8Ct0fAr03JF8PXV1uaGjUk/1yS9dNfuekcnm cNgexm+5Lrp9POcgOzM1lSIW9Lp6Bb4K9Qh4MMFxcJ1j92AM2bBi9QMbSpf1v6JsuPRQ 9DM6Hf7xb/AQPqhMJyr3gAtfqDYgWUtgrSJP3nBZUKJjUlDdDSZmJ0/+fmb8xJsbfle8 BmAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777245; x=1755382045; 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=7kzn2VavwCg/R9fAXnI4sg3rxMYADhaGdUBsVN/E+9Y=; b=a3x843LPYP73hCmj1DdPVFh8gimqeGdyIabVA5xhcKWfA1EmstuOEaVj4WySlW4Zo4 tGj7vAAwFJQI5ZheQ1vpdWMoLMrphNSQ9esW1ZtXD3epHUMydTCzBBPhfjvKTv/3as5t 2Ojk9jSfA4Asqmbuxy6gAii+62Hl2HviIdy5nYjMc4wu3ZZHhy9uqK87GPFhUS+Cxn4f SLuIJTN8dadaBxB829ZTj227MH3ekmSmny8lvTHG4x8spl1uJ7JAWiUIBiH2u02NlL5D 2ywaIApwHJd9f9onZMyQXUdhGLkzpjRraeCwW22tyzYogs15811vaK/JvNs5SYJJ/n2/ k2Ag== X-Forwarded-Encrypted: i=1; AJvYcCULcj1KlqKU2pwW3cm61xfqgyAeZ+e7VxuXB7JxrK4y8LHO7F+IRwcSK6qw45GJ9QHNecfhZTIn28RSkSJT@vger.kernel.org, AJvYcCVhsjwLkPNXFUdH3d7tU/VTdUDGByi0ICw+p74UPq2AJeQwTlpU8dz1wyrxv5nxHt8Otn/vzvyDB44N@vger.kernel.org X-Gm-Message-State: AOJu0Yyp/1DSiB8vOtijeWm4B3NCATEuQjMXvRwAmB52qd962bNlBttw b9qXBOnTzQL9K+iijCfupW0qJN+yODBHtWNehVpxlBcwaiVtvCrFW/Ys X-Gm-Gg: ASbGncu68R9aGrU//V3P3S3oMfAP+vGMFNVdLeh79AQ/RFmT/k7e66eQuOch+1v7l38 xTEEZGoc5s8kPEfaUrlT/+NoBVOrbDMtNAyYdx96ommrldtR41VzSvxvZ69Z8aIHSqKS2+s5s2C 8x2TdmyJZe668kqs7l4ZZhYFagcsdHUqHDY1YXfKAtF0GmUaE6plO8upNP1N+Pz5UDtRQ2q5C/h irDnodfJRA1Sr5Y+EOhBTbCGKiXBVElhMtW8ERAbks+/p23DdJf9IM28DVXeyVcYoDddj+g8tWd OlLs6z9P2SFEabjgISwzZ7AJHFuD2vMxhc+GJyvGgTxC0my4Ziedt25bod4KZKp6yPx8GYMlKf+ /dZT3TO3q7H24Ldja0w4c3JSJyezO6/cXsRGOLBdNEchzh8w/E06thFBax34Y0V8= X-Google-Smtp-Source: AGHT+IHhcfI3iNDsGpX67LklxpeP/qm+WDA9k5f41fpIHbHgozCOE5PcOSmdq+6T6i5ilyP4QqtUjQ== X-Received: by 2002:a05:600c:4f94:b0:459:d494:faf9 with SMTP id 5b1f17b1804b1-459f4f3e51dmr78193425e9.10.1754777244691; Sat, 09 Aug 2025 15:07:24 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:24 -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 , Jonas Jelonek Subject: [PATCH v5 03/11] dt-bindings: i2c: realtek,rtl9301-i2c: fix wording and typos Date: Sat, 9 Aug 2025 22:07:04 +0000 Message-ID: <20250809220713.1038947-4-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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) --- .../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 Sun Oct 5 03:35:58 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 387CD27F01E; Sat, 9 Aug 2025 22:07:27 +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=1754777249; cv=none; b=X5CunvJV6sj2l8d2+gpfwA24ozsAsvWh4KZ4bqB3BHnfYvQ9OO4UncZmWKfSDzmjEfiYnwr37Z4uDfxDPMuU0EjFeEPQ7beaURgPhzFIyZ9z9F+RaGHYQ/JehCDTYiEf/C9b56dHkPTd0RjjPC8ugJ+9fwLEVbr58DLOtEosF/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777249; c=relaxed/simple; bh=3YNOkImgwVfI+pWp86k6nUySICHtMkmb2QGA2Puzqd4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nh9UmT+BO0F1Rwpx0IReuX5OTSYhZPxC/Xyfz3JytLzrjMOxTM/ceIVHimRlTw8ed0915QCi0Axk3gCgxmcyRU77hXUDEbURpZusfFJ5sJPlgwPD/UrHAXXZ2xeUarea1YIVYtqFWbFhj1h0auRm/ADy4WFofVdumEL7JUQ/RGA= 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=AmTnU8uC; 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="AmTnU8uC" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-459ebb6bbdfso20669225e9.0; Sat, 09 Aug 2025 15:07:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777245; x=1755382045; 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=X/WttvoUWYXwGmiL1UfJtJUaMU6sMxC7Q9rpNumbg+M=; b=AmTnU8uCxe84Q1yxhAbJmbBZ/1fp/Hpmthb9OLYHgAXHVu9q+um4raYBWn88oqk3eA cZjpqmKHy2LA67Jmd8j3tSk10p4Zuhu6w3iDGE1OYYFAnurZdEvT6h5N0TnYZU4Cy1n9 uOCeN5nIfvyyjYdgJoIFro56S4E/ylIho+zlUWXIoOPWJ5lSXImx9sHRRrB2hMUeKvuj 3ToCA3jZ6t/LEEEERikdC1zj72V2uufY5BUWFrweB0pyCjsNPR96gwpmZC6ozjwXgl5b E27MUv3QET8UL7WZUF49l5rJpLtDdX2FAGPm/EdlvtyYrjwfq6tZjYRRgM6TsSmfQ1WJ Llvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777245; x=1755382045; 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=X/WttvoUWYXwGmiL1UfJtJUaMU6sMxC7Q9rpNumbg+M=; b=g/8v/8g2QnKt7vqj/7KRPLymqM8S6lxjEQr1mde0YSlYGdd6T0gPDozjCT4utFjYvP SV6sCqbSkVVEcz5EA5o+yk7oq1jHocH+3rU3CnBx33UZ++OCYHKAZPJSDjUXpl6dL9Eo HjzCYydB9n74ziKLrxgRW0VZ9dW+LtvdA981NSbzMpcjfr/iH383Gc//8ErFTxMD3ncT NMi5fapKG4U7kmX9aWnysLz8yxyk2yVu3/4A7V3fjpvVBrtHmLkNVHj7EIvdUwDSsVZl 3XRiCcFx5cYHf3gFAhWl6iKyZo/E13bh9YMjac5iwl5+Exjk4dtzN58n05lQQXMwvCOI hPVA== X-Forwarded-Encrypted: i=1; AJvYcCUXTib4jpBFgtzQnNG7Kl0J+Ojwx0ZRKGIxdRvFrV7EI9JqukAk/kdoYdFyw92xsu2h6dO4dwrJqihE@vger.kernel.org, AJvYcCW3zxr7fmsuxcuP7ttKXn+rmlHGReCoarOPKXjn6UgLDbn/fvTaDqvfsPBlSyaGqY5VvlA6uPIxZIzxFqJu@vger.kernel.org X-Gm-Message-State: AOJu0YxZ7uED0ZhqUiZ8f9pc/29cJvomq7SfYUbGgPUMjl7IC7UsBAZb R2aP4jqGFU4eujYLUVtgvjlht73yU1M6IrmppKIws973V4iuxCxFyZDo X-Gm-Gg: ASbGncvSYJrk2QB+4UqhUzfeb573RCJBKsOsETL5JX//4c4CUrcutUbmyi8+KL1tYIS nGBHUpnCC3lXubzhT0wprK1qtXzWTzw32TcfMyfwqkxkPC2lxABrDWpR1XC+Rn/GsC0cUtXtQAr OgAWpwPzoimRzTZOjkaiu/8Z4yw7av20+AAItaZ5dSHnIBu2T6+lTOfUHUAh8eXBwNs0VgBQBYV 3h6HPEwObCCGQoSRelhedsFMrlmmxjZHnnNs26KDRHMraiQGVpUjG7kinjev3SxzEgP1az8uyVh AIfHhJ8TCgaTPBT3UrTCVkUznV6M6us1DO3Jd9CATOYQarzxW5m5o4Cfbdu0lvFoBiLBJBzne+/ +2ybsClqCQ2NimMV2Pyw30C69hYYEbN6XaX7Rvj+n8/tOvv5rM8yD X-Google-Smtp-Source: AGHT+IGNBw7F6+8dYU8pPOC972HlAtxrDQeVu/wHK2hUTk9j9tZzcpTwbbKmt76LVBfUth2QpUAfHg== X-Received: by 2002:a05:600c:1ca8:b0:458:bc3f:6a72 with SMTP id 5b1f17b1804b1-459f4f3f38cmr71221945e9.4.1754777245498; Sat, 09 Aug 2025 15:07:25 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:25 -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 , Jonas Jelonek Subject: [PATCH v5 04/11] i2c: rtl9300: rename internal sda_pin to sda_num Date: Sat, 9 Aug 2025 22:07:05 +0000 Message-ID: <20250809220713.1038947-5-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 --- 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 68acbb6cc5a4..fb1ea2961cfb 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 @@ -240,11 +240,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) { @@ -381,7 +381,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); @@ -421,7 +421,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 @@ -438,11 +438,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; @@ -452,14 +452,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 Sun Oct 5 03:35:58 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 5A64D2BDC32; Sat, 9 Aug 2025 22:07:28 +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=1754777250; cv=none; b=ZtxXd7PRDRiLn0iUfqSK4H3NUX3fIAIlFKgLp0yRHBjrC1eO2rc5QSpxNys8M15Ve9m/EnW1x62UI0majuops1VZE9mPfFY+s4oTJC6LBTgf8KXkVR+dWC+LezFEggvEUlM7tTpOUR01i82T2yKWZ51LaKU39sWCezPy5K1J2yA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777250; c=relaxed/simple; bh=7hiLsYxvYuIF07WUP2WjKckl1lJjtDcB9Xa27kuBacs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sc5rm/cqsVOQhZ5sorM8afUerBrJLnC8vvWvNrtWSYMQZ1y45nUOOBuqh9KO+qca47MSHHTuZtW0PuQ9la89OAHpuE1GnMYdAylzjYUxWu/zVjaBs6aGXf78FzjsyjpP1q8T1YXHwKjYGPetXz/SxDfJ7pOrzHXK0m0/g2PEHXM= 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=eCGKJ8do; 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="eCGKJ8do" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3b783ea502eso2372206f8f.1; Sat, 09 Aug 2025 15:07:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777246; x=1755382046; 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=SUd7o6G3ClNdXfqPmcKfcjQzBdJ4F+0Un9pbWq7cHys=; b=eCGKJ8doKwhjteX9gWVDYPRzNOpgdyzbMyCvKvZNAVeGQntUs/Cjk/ou3GokmaOmqh FQAtO0l9kXXgrHP50GIElVzLuFcKvr1ZmKUADG0M6jf03C8hkOHtvkUTVqtBLFs7VpOr Au9IKbUiUTU4+0xOhrlcMME5MIVJYpnO+XVNWbZq7vMtoGRsagKxjNLIhHteepw70KHJ 7Iz+QavSdY/nuUkdJtl7Fp1er2DTGqeJQOjSlo5mFxq+B59SPPEGTqAwKVEiTnsAyG6c FJEWhFzb0qkpE9RTiLLKOvCYA/lz7w+3aKTQyt4p48jJ+8Ksb7GYvmY9pf2AcIseZpWb n2RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777246; x=1755382046; 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=SUd7o6G3ClNdXfqPmcKfcjQzBdJ4F+0Un9pbWq7cHys=; b=mvWXV90DI3F8MQrwy4HdFXvWKxxRVZH/5KLketCT5q8nqNvfkMsSJi9wAsoy7ICSdU kE2u/5KKHcd+D5H9sp8Fmuy3Nj+FO/fhy/rWa73hP+0ii1/fw7dfs8SgUg3IRPpCOT34 thS2kTAK5laPlKVaLWygoTeV8i3ZCqE+nyY4M8cKl4Ab2D/y1Y2Ht3oTPCI6OpguXeCZ 9Sm0bxtxzLOn2/HC7HnGh027bhMWhFrI7e9XGPj53nZO3PmoesPD/24xGVtaEKbf086O 8V1QoiG5/OsDoAEiNKW8HYxvoTx7xPoom92VoMQWRH/5tZrlzLykLPBGTeRx+bUdR/jW RKsg== X-Forwarded-Encrypted: i=1; AJvYcCX72FFO01qWOWkbAC6u8mXjQDgoa/VTbQw5iG1zR4oHcvwLakgdBRaIuYVQZPPZzZQ91ud8S5yquMOn@vger.kernel.org, AJvYcCX8CmbqsBxW1sZ9GiIzYITH6xFkxiuWutei20Ytxq23NsklCV2fHuRKdcOZdMyzgJe2eF/vRe4+ugzLRP3d@vger.kernel.org X-Gm-Message-State: AOJu0YyIG1NLCufUtxzDidV41ivLeCKltjdZMlHNkIUG6ONVDbqWFSJn uZ7HLemGck5ForD2dizqpsL66goxX1mz4Pnq8U0p2psUHTT5nzyqRqi3 X-Gm-Gg: ASbGnctiaXALSCQSSgp/W0Z6jlmleEnKlzkEA/mShuf/YQNyk7ckUWt9p83IqkarL/u sz5Rm7sf4sM7jmFudJxravtU749d8LRo26dXGoUPnDz0NLisublr1PatFRPTh+JLcEfzcjIuFBS HvEypugwt8J11ltDy0ZwVVYVmCcdHk7K2sCgd8ZPnMEGvqbo5O9DBEltkqdauAk+4unJD/3DnlQ wTnPSgulhpo5phiEnC4gmSFeqZv14WnI/+NWac2bbdU1HrPQeXHXPogz+AwY11fEQzCWXuKOWMR qduA7HMYWSDk4zYM4yZ/APrHKzHpYgif3fqoaR5FTyTQrBOSt4CUme2ktPQ2C/qRSUBMhZKkNVF GONS4u7yFwRFwe+TG+knOkr8l3Wm++bsMueiqYqofNpe/oF+alvdx X-Google-Smtp-Source: AGHT+IGMB7q6qYlAvV6OD8Oy2nOw1bRX7C3gfUPCIchR0IC7F+ia/5nAfafimXjE4Is5ZEJqZB3vSQ== X-Received: by 2002:a05:6000:26d3:b0:3b7:8acf:1887 with SMTP id ffacd0b85a97d-3b8f97e1aedmr9614254f8f.13.1754777246490; Sat, 09 Aug 2025 15:07:26 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:26 -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 , Jonas Jelonek Subject: [PATCH v5 05/11] i2c: rtl9300: check if xfer length is valid Date: Sat, 9 Aug 2025 22:07:06 +0000 Message-ID: <20250809220713.1038947-6-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 make sure a length < 1 or > 16 isn't accepted. While there shouldn't be a length > 16 because this is specified in the i2c_adapter_quirks, a length of 0 may be passed. This is problematic, because the code adopts this value with (len - 1) & 0xf because the corresponding register documentation states that the value in the register is always used + 1 ([1]). Obvious reason for this is to fit allow xfer length of 16 to be specified in this 4-bit wide register field. Another consequence of this is also, that an xfer length of 0 cannot be set. Thus, an explicit check should avoid this. Before, this actually led to writing 0xf into the register, probably causing unintended behaviour. Signed-off-by: Jonas Jelonek --- drivers/i2c/busses/i2c-rtl9300.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index fb1ea2961cfb..35b05fb59f88 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -118,6 +118,9 @@ static int rtl9300_i2c_config_xfer(struct rtl9300_i2c *= i2c, struct rtl9300_i2c_c { int ret; =20 + if (len < 1 || len > 16) + return -EINVAL; + ret =3D regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq); if (ret) return ret; --=20 2.48.1 From nobody Sun Oct 5 03:35:58 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 089862BEC30; Sat, 9 Aug 2025 22:07:28 +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=1754777250; cv=none; b=YgWg/xrgDmDucb57UBtpyjXQdr5cCfmuqFKdEDzzm+qEl7FU+FrLIVeKnSua/K0kikKVj5NM5McB1Moiir8gIywxJ2og49suyPzDTObDxKv1Ir1+bhDGtPOcdnsGZerT0KYfzRV2YgZdRESlXsRfdCXldqR88wDKL6LS8Kt2/kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777250; c=relaxed/simple; bh=Lwh1P7aB9aQVyEzGjesKwYkZt/CYXq2AVwbawpU18Kk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JWSg0ZMSeWQRl9o8ogX8nDub54OKr+oqFm1MGQqVebJnPzXSoCyNTN7v4yl/1v77WDR59Nu+W0yDC9M0HDcM+XDtbw7KdNHmhKpZJKFKjUkPTO0YZzV4kEAbZP5Qr9zRE1w1xw9/VzuS159GQP+Y6fMEdZHeRpm+HqEP3VQO19s= 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=P5kFV9vD; 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="P5kFV9vD" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-458b885d6eeso20478335e9.3; Sat, 09 Aug 2025 15:07:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777247; x=1755382047; 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=l0lsDSBXC+0KNhVISb8yjtzuT6Sl95K4BiEO6oxCv6c=; b=P5kFV9vD/pUXkds0i5UiDKr0s/7+wTVUK0CfPRLYsB9QVUgjpFswlhJVRAgeUH5+7S 9LFGX6ZwwgdZNnyIejcrFdKzdjjMeL3cQ6270Z6Pkqpxnn4YAcsKRVN8CssXQhXMCRrb B/LSGT6kDQcco+UjvQGYGUfhqWpIcWK2YpRUlWPxieVxT5BJRj2drtVNwwdmqwR8mEIE zutNcyAGa4BHomSc467FmPqXyc9dQE2EiPAELClChqKBoeNknX0WAbUvUBJum0V8rjJx gWRhAl257T10mjrPLnrgQlYS+oW+KN0j/lcEIMV5jii5cN1t3HPX5uG7d4+7SuTB0Qd4 bV8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777247; x=1755382047; 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=l0lsDSBXC+0KNhVISb8yjtzuT6Sl95K4BiEO6oxCv6c=; b=uOBhs318HBnAyYOsJOf99aOQPQyA5zdM78FIDxg+jiTtbVCOzokZDdtXmeKyS/kpwp JvUAmGU57CtRn/TGTyFTnPDwP7HEGySZOulvLgZ8Y4rml7C5XnCySYlRBV4qI2tnyty5 OS3VStunIrC9pzVlvFHxg4FJ9hiQFO3kz/JhU3VvHRsWYf1a0pNKKRTVC6QMJzj05Alt u5aFvKnMVMiLyQVV8Ak46Nn5fOPgnEugmv4uUZedTuFX3xSdODGxj7atJzb6JrqbnzdT ri65VK2j+GkuPrExPg4m9y2OphxwyjWCyzP1B10oREIlCyaNMwMbESa7gDYcd8uA3goh //VQ== X-Forwarded-Encrypted: i=1; AJvYcCWnT3xJ3qlcZ2+QJt8LUq04pCJrvRa5FJUgoML9N8OrIzPB/zAEQyNLqFwAoSxbBT0bpRAbxKTwRvQTbmd/@vger.kernel.org, AJvYcCXqct+PtTh6EWgm3vIfUyXezqgUqRZJWg2co+E4AyEduF8ljqjGp/sF2lDssKG/5v+SRPXYxDxi6IOv@vger.kernel.org X-Gm-Message-State: AOJu0Yz8Ozq18Jlh2ATZ2swjJ+9nBetMdxxehLbnKVz6xZeJnaGf7FZ/ 4NaYD9ogFGKHDus+W8PpsQ4RImUkvMu0pQlTgeDlSMj9Jo3+bBXa5kVY X-Gm-Gg: ASbGncslH4gG4dvu2n8qX5XSbIYEpyezl71qRV2NqB7zH+r5gdtIjD0lIheYOir3bsy db3hHHTzk/qpUai75tZhym9pwtvT0Saf0EBu5ZdrFVG6nNLhqqF9sDeTXo+I5JQu+eQqVvmQpt2 TJgTJ/uXtcgJVC4zGCmJeWafge53f43PNCSALuD5jRbsp8pBivztCHyguGBR+PCsARL7OCKZKEj x/l56HhQXxuehYNynWnpolBxcoNzHYzrfrd2TH/GBWS7UM0AZbNv9vlA1/D1uftzK5jhF4REhcH 7OR2/CCRo4/TGgR/fXUCgjEdXBKAZDyo60eX+fXNxOSoL/oZ51BO6wkJ0+8fDzkLbY78AdWLkMd B3/WSBhSSC/jCbX4V7HgUyPhwQCvDQxRHA+roF82NQz/XBJ06LzPv X-Google-Smtp-Source: AGHT+IHgyVNnQq4KFEWeXFXinA1eIh2SOcxOgl0QGI5PcUBpYV27FOS00azRxoN+aBAu5msPTZ6Y3w== X-Received: by 2002:a05:600c:5490:b0:458:bb0e:4181 with SMTP id 5b1f17b1804b1-459f4eb19d7mr75512945e9.10.1754777247338; Sat, 09 Aug 2025 15:07:27 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:27 -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 , Jonas Jelonek Subject: [PATCH v5 06/11] i2c: rtl9300: remove SMBus Quick operation support Date: Sat, 9 Aug 2025 22:07:07 +0000 Message-ID: <20250809220713.1038947-7-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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. Although there are currently no reports of actual issues this caused. However, as an example, i2cdetect by default uses Quick Write operation to probe the bus and this may already write anything to some register of a device, causing unintended behaviour. This could be the cause of a recent brick of one of my DAC cables where there was a checksum mismatch of the EEPROM after having run 'i2cdetect -l' before. 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 may occur in case of a 'Quick' Write which writes unknown data to an unknown register. Signed-off-by: Jonas Jelonek Reviewed-by: Sven Eckelmann --- drivers/i2c/busses/i2c-rtl9300.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 35b05fb59f88..ead5aa6e60f8 100644 --- a/drivers/i2c/busses/i2c-rtl9300.c +++ b/drivers/i2c/busses/i2c-rtl9300.c @@ -251,15 +251,6 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter *= adap, u16 addr, unsigned s } =20 switch (size) { - case I2C_SMBUS_QUICK: - ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 0); - if (ret) - goto out_unlock; - ret =3D rtl9300_i2c_reg_addr_set(i2c, 0, 0); - if (ret) - goto out_unlock; - break; - case I2C_SMBUS_BYTE: if (read_write =3D=3D I2C_SMBUS_WRITE) { ret =3D rtl9300_i2c_config_xfer(i2c, chan, addr, 0); @@ -360,10 +351,9 @@ static int rtl9300_i2c_smbus_xfer(struct i2c_adapter *= adap, u16 addr, unsigned s =20 static u32 rtl9300_i2c_func(struct i2c_adapter *a) { - return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | - I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | - I2C_FUNC_SMBUS_READ_I2C_BLOCK | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK | - I2C_FUNC_SMBUS_BLOCK_DATA; + return I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA | + I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_READ_I2C_BLOCK | + I2C_FUNC_SMBUS_WRITE_I2C_BLOCK | I2C_FUNC_SMBUS_BLOCK_DATA; } =20 static const struct i2c_algorithm rtl9300_i2c_algo =3D { --=20 2.48.1 From nobody Sun Oct 5 03:35:58 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 CE3412BF017; Sat, 9 Aug 2025 22:07:29 +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=1754777251; cv=none; b=aoQg3Wbaq3yAYIqpEQPG0SQuD5kVnvmkE0l6cFGngH4w2Cy6LLkDlZDhD4rptZHBJfnEtznFSaIwhez+WxXtCEfNEGdrXu0ba0TvKeUHF20nboIToAn8ogh4tXWKdIDjPQeHtuThGIYGWzCUV76F/xjtunZ9pQttnaQbqTUGJY4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777251; c=relaxed/simple; bh=LtAV3Ggmq1MbmbqLhrdnZ1+71rqop14zoDhCouihbSY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XN7keV4C+MV2+RmGtrdo2bF7vViSyXrpY5i+qLUyHxnIQ+OVxKE9yyFMhV1RaIsP9v6N2i9UrEBeZZQhqezZEX0nTFKugeV9KUAdKgbEjwPfODkNjVOd7s24Ee9sKgjatAg1OdbMJfmFU67eqXhFUg5fEpRfA8xg9DGFqQFuSos= 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=gKpIEBR0; 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="gKpIEBR0" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-459e39ee7ccso31764195e9.2; Sat, 09 Aug 2025 15:07:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777248; x=1755382048; 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=ZBIwO9q61CBSmV0Wosxz7brI5kc6V0Cyrl6SIW8FpNk=; b=gKpIEBR0tg5dKXi6YD+1Z49N0/9F9cSG67/ZKkCDKqJe9Qv1MCfvzUZj6hvBeMUate 3H++YQ73mKtbFDF4VTfCSMOT0uzLCSokjkEIgrMmQ+puZ3CWiL99RX8Etpf2Vh0iNIff j6Z1CXO8FRIx65fzo5nk3wEnRZu74LhgqIVEWKv9Afd0Dhy1fDHX2t9YuFYpZkHOCRFq oE3HLehM6DiH1/FYYGuMsEFcFrd5kYtBGjWqbfcBDlLJvr/01ezD+3+/iV+pK0jWRGZ0 LJ6krWtqZA6zyJNkOsMvbGxLFlV7+762+xi8zCdmtkNw0rtoTARWPxzhxVx0rACPyTfj hOeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777248; x=1755382048; 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=ZBIwO9q61CBSmV0Wosxz7brI5kc6V0Cyrl6SIW8FpNk=; b=SqtUItddt9+EQAQMw3UApX8VV59OcuqS3O9ueLjzYAg2vGN+vrPlVCbmjx5gkg7Xy2 jA8MMKus383REXGV/GufahxzMOCmBwp95t5/vMHWJy699swmzoGWjTrbkY4DqAvxUywJ fyBe+TAqgDgL308LwSt9Kf8jkRbyQpFPpdOiqCvBUuvApML3ah95aF7H6eCfnL6wHHPe t95Zuz36m/LSPHpmoHz2BXaN2+Kjz7LHChSP1U1t2+dVQwKG87Jryw5PyZ2hTWtIC7Fr XFOWZzE16PJfblG3TfwNLCcwFGzoz+r4SvgkGVO3OlvjRSkb3NiDXHRyHdqXveEdfCRE r2vQ== X-Forwarded-Encrypted: i=1; AJvYcCX1IMUlE1t2K6u6d/md3yPfsNT1Wn7UR3RojLWWLNm6IimJMcD6nLrSgEKMOVA8f1YWH+HG8AubqsrwYOq6@vger.kernel.org, AJvYcCXTwbwKu1tcFjxNFLQS8g4Zb/SjxBxwB92zGvXd+xAQ1AIBCRrXc6Sz4hvKdPd/7wBtj1WLxLOK+8Q2@vger.kernel.org X-Gm-Message-State: AOJu0YwkuTu4cAWQBMl0XQ29ScqoaKlcFfy/t/53o5txTaNTqZkwGsmJ B9ORRknOS0EIPoGp9ERvboQ9N+Wqnjji2Yd7jDX4GPhzD9+qG0FDd98+ X-Gm-Gg: ASbGncuhWqqAgcBFGVld/RTd6tQSEU5aTKBBoGsnUZ2JtsBjuEfjV5/6zx5nyoOQXEe 5d2iNao/NmmHR40PSKcWQiZFTII9gouaXWTDhi3gR7r/v4Tkb+qRT/qrQpV55q14QqG37wQgtc2 hWbF+3Eela17imPY6zwp2We65NIaYiNjNzEZuBJ0wPVxE/L0v2+KnazSMnXXV65CXZYyhfmCRdl CAFXxRhd46jyxQbk2fNjjzSqEKvCEXeMH3Xjfx1YfBgJix5EeGGkBRD6AE9dpRasHQl2ec4KlEv pMwWFj0xtu0feoKxVduLwqi/b3PwHdrGc0rYlkc3ONqBAL/okxxAst3pG1I/UXquhGANrZ5lRbk j9EcIYIknONDd17ShlLDjFB9D9jUZZh0bH8Lf/8sD3gEZfR5nlAwz08/ddpf7HM4= X-Google-Smtp-Source: AGHT+IH7Yr2hoTX0VLBd0WE4u3dpd6TdNKmWTv1kHPZkcG+qGNlEYYMH5tTcvNQfzRsyhdyzzk8GwA== X-Received: by 2002:a05:600c:4f88:b0:456:1923:7549 with SMTP id 5b1f17b1804b1-459f4faf710mr61981025e9.26.1754777248075; Sat, 09 Aug 2025 15:07:28 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:27 -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 , Jonas Jelonek Subject: [PATCH v5 07/11] i2c: rtl9300: move setting SCL frequency to config_io Date: Sat, 9 Aug 2025 22:07:08 +0000 Message-ID: <20250809220713.1038947-8-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 --- 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 ead5aa6e60f8..8e8e98108750 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 Sun Oct 5 03:35:58 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 8C6802C08AB; Sat, 9 Aug 2025 22:07:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777252; cv=none; b=JKXaHU8YIrzGvrHqjXLbnMafaqNvO1ntUw9dezjdy/GNhYhWna7WmY+Wl4qXAdRxBwLXw8NnjeqmRNwC0Xq6aA3WshSv3gGp7yfFM6NZqU32MhAqo51ARLsGRCfnn4hi1IeMh4BdLbiX/vw/2eXvAtiu3wymrhP5URgi9b8p3sY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777252; c=relaxed/simple; bh=d9Fqx107VJcIybGq4n1Vxzc3+DdazYBJ/EY0N505ZKQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SZZnakQ8f6ehmEPrPvpqNXVzAFHBKk9VFXCSWGxLsrLvPdINbpnc2GXelqCnWtkLRyk5GLEUyTs+ZmdLf7Nu30f6SCM2ev1v81qs6XAuaFCbMec6upXQN6YjKWEEqlPwZqXYBGxVq+Rwaln45Olu9cVV44kBNKUPGw/UTrJPhC4= 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=PRHYrhmU; arc=none smtp.client-ip=209.85.128.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="PRHYrhmU" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-455fdfb5d04so16289015e9.2; Sat, 09 Aug 2025 15:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777249; x=1755382049; 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=/K8OtcDmjcXKP7Q/zHwb78jnIB7QQkghM+5rjTymugM=; b=PRHYrhmUK69W3aDRFWOheQPAGlf50EUXs9H1nUm9VYyuMER2UYB50ofX462SyuoBsi MnjwFwV9MVUvqdwZuUCtUwQ8Hh1f3IOzW18MDQvA3XoaL3G5J90ycRMjKs1d5bPR24CC v2clOw9oBBl2MuT/6EJpUjMhTNPWlorZQ5gHJUVaghRtqIBklQM/TIGG+vyJKHS7wQye H4zyKjpktYpSJdB+pXUDdDLa9vNq0Rpm3Demg5crLP3VoAUuchDfeP2Xr/nZx4nLuDaa y/163i2t3y1T5cOkthL3d2d7jsfoY1Xqfq0t+5vkQENNQwQR9BL/R4H7kp3akgQm/vB3 tPcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777249; x=1755382049; 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=/K8OtcDmjcXKP7Q/zHwb78jnIB7QQkghM+5rjTymugM=; b=OFoG1c4Jif6fwEA/EwnH1y2AqniwdV8eD6gfOiHRfhyv/FDmbJXNTMOaAE4DsI6unT jwZIx0mXFYgWCQjYZR99KcS84dF3Utws7MY8xrfZmEDOOLCfslcm3c6vAaDOxnEndw/x 2x+7u9IHVqCVdcWJzq7U7R1zoYGPls0F5QaI4biOE/+lTuYFVmXtPpXruEOLCBJHdH93 /JBIerfh1BrY2i8IaaB2fQYBn+S5CngThm/4l6CZOVUcq5RVp2pKoWEl0shSep5bDr6N 5IJTl3kCSqM+GCPST/Xhw+56/mdzZ23WfiCYP/5o5Ntk5uuSnd84G/SRHj5G7X/Kx/7y 8vfg== X-Forwarded-Encrypted: i=1; AJvYcCWlEj7QsE+lOfgmY9oqnOhqP4iDVmXNnMZJBojRDG9YUmSl5gtO1TVW8uBbicrX0pwAuUVumrKnYR4bN0Bp@vger.kernel.org, AJvYcCXugSbe57QGU+mQa3wPWqynh6aBjvyNC7jenuNbro0p3XAIzIYy1d6ygyG3Rp5YyyiZxlZjMZuS+4Rl@vger.kernel.org X-Gm-Message-State: AOJu0Yyl3kne940diYJEkLNDyY1W+pq3G/9dkZJrsz4SGN3VKvi5tNIH KUA4vqOP+BshGS4Mcv7aFXKEvvRdO7jkhkylAIaG1XQgc+rL6IEEUjPN X-Gm-Gg: ASbGncsX8YkVzXEeAbMXIQ69v1siXO6JZZmNbXksvZXufd4vRR3lsXZOELgv8XZ04zp hYor0AAPdw94yw2e3wCog8vLb0bl9+lxu52TlgrQhGoKzIZqAP550mUbgHZrHMyq5cuCRMe88kq n8Babd7Sf9LECViUSA20FpGfdb+kpY2K1X5vAjQJ4lMbxwGplOPAIzdsg3ZiPLFLH541dMnAgBm oOi/Xzqu8h8QgUOM/hA2Xw/sjC6yFJeS4i28EojfrYTHQGD7IZuU7Ce/ibTl7wtx+GDpDVHV6GE 5W1Pa2X69b7CNyJO6Pcy6+Gvz8yogAPH2LOPMAFWBf5UKge4XHAoJF8dnIZH5E7mkTUzRKNxovJ 2/qjnFTLc29tReXqeenkNjpWEfcYtymonSXUzgx2ZXR+3N8lAYKZ2 X-Google-Smtp-Source: AGHT+IGcsOWmRX1H5y2ocIaMEpPgz1i8f4PBQCi9Impo/5QnNyty+MngSnnJ/DU7YlSB8ixg/WYidw== X-Received: by 2002:a05:600c:4509:b0:456:496:2100 with SMTP id 5b1f17b1804b1-459f4f2bac3mr81310235e9.31.1754777248808; Sat, 09 Aug 2025 15:07:28 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:28 -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 , Jonas Jelonek Subject: [PATCH v5 08/11] i2c: rtl9300: do not set read mode on every transfer Date: Sat, 9 Aug 2025 22:07:09 +0000 Message-ID: <20250809220713.1038947-9-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 --- 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 8e8e98108750..4d3fcb5efc36 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 Sun Oct 5 03:35:58 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 3D7B02C15A5; Sat, 9 Aug 2025 22:07:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; cv=none; b=snojtuLTR/njJ+y1puDmWZIsB/lXJP2ls8X4f8m1xnQ2kUuAH6xM42fWcU4K/Osp//47sA8ZcH2O954wm+o4sEW56309coGxWLFYsp5izprbzBUC1QdtIjbMy9AaXyU/h7XuM11AaFMNbTSaH176/dcq6TlCguuxqeWW00La0Gg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; c=relaxed/simple; bh=mTWW1yuPjpkc2uS7XtCgY2pDhOG+KYBfJZEGYpXEYzY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DNwR12lVGM7EJk94Ka6gpiMYKPfveF7wHHYfISTYEkDxF18tadedI1RoWTV5xyGbmdxwd9EtH/nw9HP+73VMxpiv2Jq3zriTjMA18z/2q3RKyUMsExSXFRFVm7pM32IUfNdEmsLzLLCyAlH4tn161xlrlnpmgPFKKJVQwupx0rU= 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=cSgGVLGe; arc=none smtp.client-ip=209.85.221.53 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="cSgGVLGe" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3b8d0f1fb49so1866259f8f.2; Sat, 09 Aug 2025 15:07:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777250; x=1755382050; 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=5xGRv/lBdbHM3fCwC3NEjo77I6iBTwDCL/Z14PcKO4U=; b=cSgGVLGe6W7FgN2/31aRNk4qkTPmXZEBXjdpEKQGv3c+WQ+IRW5OtRnF2e9rwjgvKK eJeysLQwDXuOWxRJ8tPorbNzgnaFr0UcHo4ryIqF2u+OeDN5Kke7whfZd78bFuR5IqSf K4IOeKVbLarYkp6ScvqJoSfitbVPRCI9ZanNwYbEBM0ODHoBXx+N6Qzx2mqIR6LZSsvU lcJcmv1g6q0oDYi2SYQglTI4wP7HXOkfbOQDevResMKqgXg1mWRMtfaHBJEIR4nUZKSU vaIb0Xn+6ZkL/ZOH7DO/3sRL1iAlrGDUCaLHXWATM8EklPUd0tWK/7kVIk5h3/rbHrPj uNnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777250; x=1755382050; 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=5xGRv/lBdbHM3fCwC3NEjo77I6iBTwDCL/Z14PcKO4U=; b=Sqz2ExUvJluiNkUqhgxlhbF0azLsm+mhqSI6g/G6Ang/D+DK7sN9SzYMyJHwn5YErQ 8sGAhC6bBcn3HV+HLQF86MWbC1sibQ4jvf7H7tNjR/XoD1ZBenAZpVrapAGzVleMpf+B uAUxALT9oNyXLDa6AEq/m7tJbnuoLbe0FH/hEaDDKl6TLNJXzh3FkZ1ScoHJjGT05eB+ QoeAcDDrTL4eyawwRmRQLtUveprkTh39IW1wEt0YyOal+y95eoW4wdc1ZKnkj1hbts+4 IuWTCQFzRm4C4P7C6VPN3IOwWujqU18Pg2Ud4U+LIoLAiUXmGNh2A+0/ZxZlDeKG63EL KwQw== X-Forwarded-Encrypted: i=1; AJvYcCVna+8YcremHVR6n33C6edlMZodLwP0AkH9wFlp9/0otFJK75XEbYLFRP81B5xTqzZWVf+5l5gwgyLw87ft@vger.kernel.org, AJvYcCWd87Npwhd3AjoHcev2jkfkHPpx00u63YyyWOsOIa5rna2jrpcFCHN5looTd+avthkqklstmf+iEVrq@vger.kernel.org X-Gm-Message-State: AOJu0Yyd3J2cesw5vv3s48Hv5XdtXRdfCfHnaMLQ21iywyqFIGjXl1Ra 7hweIk1lPlm3phCeGTeUG0IB1UWbMPqeOCwa6pN2JXGc+Qq81gbiOJzc X-Gm-Gg: ASbGncvgKE5eRdzCspHLsPoT743xPtEW4/H3JJRRcqvQ4+ZwVB2+6pkOPDs+s1MEO1A eBkx1sGdPfvmEWMQITNCUG+uGp7Yfe2GKf+aMTFotfBOZccW6ZZukEIR9QpNTkFePzTb1bIMkVF aK2YLttPsRdRplk9C/+XOt945EObfyVS9TY5q6vT2cvWvm+qaeJ+Vgu/dA0USrIz1tqhRrSF1RT UJhFqSvcs37laYbAi4ydvqFVCKu5NjkX95oWTzYI7/zqnpFksIpWntOCeacAH4wHkd4jbYTU6Ya zSEOf/R9gqJPqj8evwNn1SiZy21w6tUswkFFwKinf1Znxy/015Lvn0ziWa9jLscRs0K3FFn/GNb X+uvrKvwno/IRX/MoDSW6LheLrUsEC2l2hCc5X2PIiRs9Zr+Feu0Z X-Google-Smtp-Source: AGHT+IHfRrqdAw9YEbkvpmoKz3MAIH97GoyYgR+iPu629ffODtyDGna3+R5lFpjQsc2CIbkdHngr7g== X-Received: by 2002:a05:6000:22c4:b0:3b7:93df:39d0 with SMTP id ffacd0b85a97d-3b9009402e9mr8186524f8f.15.1754777249637; Sat, 09 Aug 2025 15:07:29 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07:29 -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 , Jonas Jelonek Subject: [PATCH v5 09/11] i2c: rtl9300: separate xfer configuration and execution Date: Sat, 9 Aug 2025 22:07:10 +0000 Message-ID: <20250809220713.1038947-10-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 --- 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 4d3fcb5efc36..73eb35052077 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 Sun Oct 5 03:35:58 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 37E9A2C159F; Sat, 9 Aug 2025 22:07:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; cv=none; b=l54m/i/Uz9WuS1DRksepVCSrpGsIdHcVXupjlqRDVlkrBrhGTbDe2HNWC6aeK0cKwzejRLXGJCadB44LYHfLpkRDJXon5sowtlmjYFXNDJ6Y4Ykr8j8C9361eCQe51AKYcDq3elbAx8MtAfr4Ybe1R25hX8+iIttQfd2j8v8nUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; c=relaxed/simple; bh=OiTvHe/YwVq40QflTkfW2ighoOEPUM9bFIryaTWGZpw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rht3EingTamXaXGdnJ5FSI55aJhXElaJDJq6GQLEJRme/fuUBrZvuUUSz8mBf/PifLmKjdgZuSKrVCsOFMIgdYXjx+1S9DzA+Cp2tEjG2wijAcRFR4wNFddZX26Q35+z1l2kmR2ibnm+KYjutyMlAA91JnlgQtVneDlF67uEe2w= 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=V5wgPwHj; arc=none smtp.client-ip=209.85.221.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="V5wgPwHj" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3b78127c5d1so2038004f8f.3; Sat, 09 Aug 2025 15:07:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777250; x=1755382050; 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=x01HofB2oYI2ircIKHe7vh/ImG5DHrPLvnb6TS22PdE=; b=V5wgPwHjKxZHvsoeT5ReCyHBKf1ulQqzP1rNl9EJ9smOSDkZEhtrM796we7Tot8Fqd yo0e3Ppx3hLWOt6nYMn59F/1V6Yla+hCWQfwBifeOr7ygko/JgZRBPJ9AikSW14IW1+0 AUoTVni+17KZKuVeqCP8TjVvR0eU2a8LgvhPyBwm5YfvVq31UIqQveOLrlfetcnVrJzU 8HtDsweQJbdbg6Frki6fw72KE5bVDSyM2Wn1ayvHgGIzCahdEzQBMYZM06iWHc3qRGNl NwDXkaFFTMuOk+1TIyQsTKZf/dTfqrD/EIe0BUadRvPXfexKM+z4qTr96AtvoPWCGF6w qDhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777250; x=1755382050; 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=x01HofB2oYI2ircIKHe7vh/ImG5DHrPLvnb6TS22PdE=; b=h6OAetZz14SRX8v/dCGaFYfukHJr7E+Ij1MTJlNhJ7RHikX++x1hI4UybXuiTyv64Q XnS7lBwamg+HPbVKoCbgQWbjk6jJ3fbmb3z0tTlII/Oz6Bd2ppRcR6PEWadgHJSKc5Y1 DBE7nlCkNmFczVCoHPh3dORo+aXa41oFiaBHDUHA0T/EFlK4eZWmuJwjbEdqNrGXbBz4 DHZwKJ4lzyBFInAJwY5kn+/bF1JlF5zPVrzGCv7Ap0ukfTVEYBiG3ixpoIOY1Od2ZUwu wCY+wwBhdoPiLpHtr0b6RewgztBuFfFNjaZ3bD6h+QROS3EypD5Ob3L9cBgjdfgkJBMn VwrA== X-Forwarded-Encrypted: i=1; AJvYcCU9HU2SYwsrvOs4Tzv27QlSkVgKIPDhm8y6oQFFM+RKcYvYcy42yR8bkxBJOBwVnqld/foIvZDBGgbqNifi@vger.kernel.org, AJvYcCWFmZ5IgzXwbg2UBJkr67HboB3iSd/+aN/WJ1MWSSBXj393mF4LJqRmvl7AuO/m/MJzdknIMPYAxqNQ@vger.kernel.org X-Gm-Message-State: AOJu0YyI5DH4gz9ESFnHU5+TcDJdoOs7KKYdNbyR/n0hkWBEc3/phU85 E5xjgoe47/pi/U/13No/aznp/XoAGh4ypfIa3RSXaS+enELHhvHmTl50 X-Gm-Gg: ASbGnctQB9Gclwfj4dyb3bzKIxlh7st45su2k44ufJmZ7h56IGQdZFw9Ga8+WetfQhW 2mbeR0lJl6nFWgTlWxPSVGACf3siDy8Ia1VB//58sNNKutFTG/gzqH/evedBco4gpEWNm5NAAZS syx7jGAtw7w4rIIQlr0dpro9yhRMt8yGlW0UBmpyiOn46QRWdQM5q1rYQEjnPQQPKMuBnoQvg9G 8fAs21tSS3dhp0Yd5k2wtYh1j8SWq6CipaBqLYSI2KyrPgwghnGknKfmsFcdt28o8W3J/Zd8/Mn A/Nn7jVjkzHQ+XkEqLvj2VPb6XiBsrAfzu6ERFWq3ks/Qa/gxXODr3P3pSaZdFdtk//NF1hzz3F sC6PvPpS48icFn/KsQUG7F3a/TvnpAFEY3YMfwW8RzomEbKsiW8gX X-Google-Smtp-Source: AGHT+IEmXde2Gk5rzK8CHUGvozU5YhGWQ6QBDAU/8Wk/1x26jBWFGKkqYGWNUUoXj+RdGzQ7ISVKTw== X-Received: by 2002:a05:6000:22c4:b0:3b7:93df:39d0 with SMTP id ffacd0b85a97d-3b9009402e9mr8186547f8f.15.1754777250413; Sat, 09 Aug 2025 15:07:30 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07: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 , Jonas Jelonek Subject: [PATCH v5 10/11] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support Date: Sat, 9 Aug 2025 22:07:11 +0000 Message-ID: <20250809220713.1038947-11-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 Realtek-internal ID of the defined I2C controller/master. This is required, in particular for RTL9310, to describe the correct I2C master. Require this property for RTL9310. Add compatibles for known SoC variants RTL9311, RTL9312 and RTL9313. Signed-off-by: Jonas Jelonek Reviewed-by: Rob Herring (Arm) --- .../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 Sun Oct 5 03:35:58 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 1B11327F01E; Sat, 9 Aug 2025 22:07:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; cv=none; b=mRcE2oXPXLjoPQBSAHSCTUgVDEibsfJC9GF81TE/rxtrx+VZI6AWR4OmOOGc6XL5l1UAoMIVf+MSnF5vSrQ9l4NVSnmyX+V+tCEREGUWSyNwkSOz/fIUdBjkMFH+QC0mkyjfozrBtKbcIXLv19hU0NRG4+aHFBS3wzCpscf6hC8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754777254; c=relaxed/simple; bh=6HxnUXJK8O1U1WuNfcv5GH2nLItJooeBfor6X3/mvbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aNLFrbmsH+msWnY3mRZzePJEiG1vq9skAWsNC/esQFLxFvgUZldewoN68v0QKFqWYWltQKRBL4H8Nc4l+ecvTXxqVyt4SoN86rO3obTTKSRGp98df2L4xTn1ysPK54GtawaeA/AF3mk2xUUsX64lOkq13z/htxSujOjYFtavinw= 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=QGt1tGNI; arc=none smtp.client-ip=209.85.128.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="QGt1tGNI" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-459fdc391c6so5901765e9.3; Sat, 09 Aug 2025 15:07:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754777251; x=1755382051; 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=wWpjHs7ykbW0YIc/oCOnMZ+8cCSXnOchuMfyTyVJRVE=; b=QGt1tGNI3dkclSEkLk1gMcT0t9U0EVrenQhu9GV0CagM2ihTtPnek+uI+sKBlk0DCh hOER/WUe4rqMRnOae65RYYvP9zeE1jqhR4fLEstf2wPkYHmn/2/Uks8FKquzH+y68Rb5 kreBJdA21w7RDinXapj5+wuO3lwgczVCuPwhtnEb0susQDESCUuybfttH0vzOq4k910Z XxWSsrQdVaNRSuBJSBttvnwRKLxsFw29fXNbmDbg9ssBJ0gXIkrmqNABJJtT5RpAEhll kOq7hKhJoRDqIuz/PFKBdkbo++XYfNLWCOfl0udeWjgGkO1VqWiBz+cXTeTuYYcDfQ5s DT8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754777251; x=1755382051; 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=wWpjHs7ykbW0YIc/oCOnMZ+8cCSXnOchuMfyTyVJRVE=; b=FkRshj2fB+jvxCtj645m1MPQUXF6BGTpcB2SGU508OgB2yyjF8FERUu/mtjsCPvmDN kbqLAsYhZyrvuLMRPQMLZjZnHpfiyQRcAFlnYVy6EBJedzCDSWX82J78jPnDq52cpWu6 lyUf8b4gLqLalteJwLKx2e+hJNnGlmy9tnXYexi7og1PTCSAG3GsTqmg9+6IJY79NhOI /yagWNMbBFRpUDFvMit+OGxEvR7ITi4uA+A9bbr8oyNCZUmRTm73PzmzJQmYtcHKoOin v9fRDC9aPLdyYmeTx4pZa0AB/c37WpHW28dJ84d/mfCyhWtmA3vSYeQ8+FvC+2SNCK1i DSsQ== X-Forwarded-Encrypted: i=1; AJvYcCUlak5cfvC4kX7ckJCcGdydhXTJFQ6CTGMaItqcDF3S3lA6V6RxvYM3D5CJ20+fMvXNir1uOnK8Qua8qG8B@vger.kernel.org, AJvYcCWNPzs9lElVgRq3EGY8or1qEedzgrxqFBuAW/mG/cmreoD56QC/sst/x1MPMJrBqABnViNbPGipq29N@vger.kernel.org X-Gm-Message-State: AOJu0YzvLp7S24rlrBJ3q8tYoWQadqr3ZJBN2FWSmqY++bm7OSLSGnn8 zdEHG+YQrqg6/fMjWqsTa0U20uTwdIUJ9kyTCsmIqBkrcQ5MOxrCvi86 X-Gm-Gg: ASbGncuS6nS7kGVm2njKLnZ6LxU9efFbnMvlosqPfY6Hq5EvSMR5IEeGNbFUYvsAqm8 fTy+sxELp8/wLR97VJkdA/nHDqsR0hzKvlesF7g8ox7V2y+63An3yHbBZE8Bqmn+/WZrEW+QTP4 ZfWLzSTGVOFsqvNJ2jCFL5I2et+FDsGDyTxPvZm5OeR8pCseagXEez/37RBrmCcbL/xHU5uIVZI Cm/KiGgJqc5hcECz3U+7v1GFUYa+1DszwlC5DeZDD0EJQxwOV1ClVrCA/4msbmEBIyhjgg5xkr3 v+j++fjS9sGtbylfUp97DsB1w+B7i37+lBM91IT1XvzUHhqWoogxnukFc3yTV93CGC+wUivFwWq 0hzPa3nZ+jdYBcMYsNOVB9EtlXR/2xaJ+9XdW1H0gwFkAyphXx8uf X-Google-Smtp-Source: AGHT+IECIrrSwA3ODnkDgN8SWUlKitBgEfY1pKD6EAJxqBqQI5YNPbwu0mmG9XMqjjIvJFnC4WIoMw== X-Received: by 2002:a05:600c:3508:b0:459:df48:3b19 with SMTP id 5b1f17b1804b1-459f4f9b87dmr72849915e9.18.1754777251156; Sat, 09 Aug 2025 15:07:31 -0700 (PDT) Received: from builder.. (188-9-142-46.pool.kielnet.net. [46.142.9.188]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed0ecsm145592185e9.4.2025.08.09.15.07.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Aug 2025 15:07: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 , Jonas Jelonek Subject: [PATCH v5 11/11] i2c: rtl9300: add support for RTL9310 I2C controller Date: Sat, 9 Aug 2025 22:07:12 +0000 Message-ID: <20250809220713.1038947-12-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250809220713.1038947-1-jelonek.jonas@gmail.com> References: <20250809220713.1038947-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 --- drivers/i2c/busses/i2c-rtl9300.c | 44 ++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9= 300.c index 73eb35052077..2261a08e07a6 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; }; @@ -96,6 +98,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; @@ -112,6 +120,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; @@ -125,7 +138,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 @@ -383,6 +396,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); @@ -478,12 +495,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