Linux Hardware Monitor development
 help / color / mirror / Atom feed
From: Quentin Schulz <quentin.schulz@cherry.de>
To: Farouk Bouabid <farouk.bouabid@cherry.de>,
	Andi Shyti <andi.shyti@kernel.org>, Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>, Peter Rosin <peda@axentia.se>,
	Jean Delvare <jdelvare@suse.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Heiko Stuebner <heiko@sntech.de>,
	Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: linux-i2c@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org,
	Andi Shyti <andi.shyti@kernel.org>
Subject: Re: [PATCH v6 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
Date: Mon, 12 Aug 2024 11:24:13 +0200	[thread overview]
Message-ID: <728a8e06-81f1-4771-8031-ea043b9baf20@cherry.de> (raw)
In-Reply-To: <20240725-dev-mule-i2c-mux-v6-2-f9f6d7b60fb2@cherry.de>

Hi all,

Gentle ping.

+To Wolfram Sang

@Wolfram I see that you're the one merging most patches in in 
drivers/i2c/muxes recently but ./scripts/get_maintainer.pl doesn't 
return your mail address for the patches in that folder hence why you 
weren't explicitly added (we used b4 prep --auto-to-cc)

I assume this is due to:
https://elixir.bootlin.com/linux/v6.10.2/source/MAINTAINERS#L10339
which according to
https://elixir.bootlin.com/linux/v6.10.2/source/MAINTAINERS#L36
means everything that is a direct child from drivers/i2c but not deeper 
than that. Is this expected?

+Cc Andi Shyti, since patches that weren't committed by Wolfram seems to 
have been by Andi. Though I'm not entirely sure which entry in 
MAINTAINERS shows that responsibility? Are we missing an update to 
MAINTAINERS or is there an issue in how we get the maintainers for those 
patches somehow?

Looking forward to receiving feedback on those patches, thanks!

For the original link of the patch series if somehow it didn't make it 
to your inboxes:
https://lore.kernel.org/linux-i2c/20240725-dev-mule-i2c-mux-v6-0-f9f6d7b60fb2@cherry.de/

Cheers,
Quentin

On 7/25/24 3:27 PM, Farouk Bouabid wrote:
> Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> among which an amc6821 and devices that are reachable through an I2C-mux.
> The devices on the mux can be selected by writing the appropriate device
> number to an I2C config register (amc6821 reg 0xff).
> 
> This driver is expected to be probed as a platform device with amc6821
> as its parent i2c device.
> 
> Add support for the mule-i2c-mux platform driver. The amc6821 driver
> support for the mux will be added in a later commit.
> 
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> ---
>   drivers/i2c/muxes/Kconfig        |  16 ++++
>   drivers/i2c/muxes/Makefile       |   1 +
>   drivers/i2c/muxes/i2c-mux-mule.c | 155 +++++++++++++++++++++++++++++++++++++++
>   3 files changed, 172 insertions(+)
> 
> diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig
> index db1b9057612a..6d2f66810cdc 100644
> --- a/drivers/i2c/muxes/Kconfig
> +++ b/drivers/i2c/muxes/Kconfig
> @@ -119,4 +119,20 @@ config I2C_MUX_MLXCPLD
>   	  This driver can also be built as a module.  If so, the module
>   	  will be called i2c-mux-mlxcpld.
>   
> +config I2C_MUX_MULE
> +	tristate "Theobroma Systems Mule I2C device multiplexer"
> +	depends on OF && SENSORS_AMC6821
> +	help
> +	  Mule is an MCU that emulates a set of I2C devices, among which
> +	  devices that are reachable through an I2C-mux. The devices on the mux
> +	  can be selected by writing the appropriate device number to an I2C
> +	  configuration register.
> +
> +	  If you say yes to this option, support will be included for a
> +	  Theobroma Systems Mule I2C multiplexer. This driver provides access to
> +	  I2C devices connected on this mux.
> +
> +	  This driver can also be built as a module.  If so, the module
> +	  will be called i2c-mux-mule.
> +
>   endmenu
> diff --git a/drivers/i2c/muxes/Makefile b/drivers/i2c/muxes/Makefile
> index 6d9d865e8518..4b24f49515a7 100644
> --- a/drivers/i2c/muxes/Makefile
> +++ b/drivers/i2c/muxes/Makefile
> @@ -10,6 +10,7 @@ obj-$(CONFIG_I2C_MUX_GPIO)	+= i2c-mux-gpio.o
>   obj-$(CONFIG_I2C_MUX_GPMUX)	+= i2c-mux-gpmux.o
>   obj-$(CONFIG_I2C_MUX_LTC4306)	+= i2c-mux-ltc4306.o
>   obj-$(CONFIG_I2C_MUX_MLXCPLD)	+= i2c-mux-mlxcpld.o
> +obj-$(CONFIG_I2C_MUX_MULE)	+= i2c-mux-mule.o
>   obj-$(CONFIG_I2C_MUX_PCA9541)	+= i2c-mux-pca9541.o
>   obj-$(CONFIG_I2C_MUX_PCA954x)	+= i2c-mux-pca954x.o
>   obj-$(CONFIG_I2C_MUX_PINCTRL)	+= i2c-mux-pinctrl.o
> diff --git a/drivers/i2c/muxes/i2c-mux-mule.c b/drivers/i2c/muxes/i2c-mux-mule.c
> new file mode 100644
> index 000000000000..062596869651
> --- /dev/null
> +++ b/drivers/i2c/muxes/i2c-mux-mule.c
> @@ -0,0 +1,155 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Theobroma Systems Mule I2C device multiplexer
> + *
> + * Copyright (C) 2024 Theobroma Systems Design und Consulting GmbH
> + */
> +
> +#include <linux/i2c-mux.h>
> +#include <linux/i2c.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
> +#include <linux/property.h>
> +#include <linux/regmap.h>
> +
> +#define MUX_CONFIG_REG  0xff
> +#define MUX_DEFAULT_DEV 0x0
> +
> +struct mule_i2c_reg_mux {
> +	struct regmap *regmap;
> +};
> +
> +static inline int __mux_select(struct regmap *regmap, u32 dev)
> +{
> +	return regmap_write(regmap, MUX_CONFIG_REG, dev);
> +}
> +
> +static int mux_select(struct i2c_mux_core *muxc, u32 dev)
> +{
> +	struct mule_i2c_reg_mux *mux = muxc->priv;
> +
> +	return __mux_select(mux->regmap, dev);
> +}
> +
> +static int mux_deselect(struct i2c_mux_core *muxc, u32 dev)
> +{
> +	return mux_select(muxc, MUX_DEFAULT_DEV);
> +}
> +
> +static void mux_remove(void *data)
> +{
> +	struct i2c_mux_core *muxc = data;
> +
> +	i2c_mux_del_adapters(muxc);
> +
> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
> +}
> +
> +static int mule_i2c_mux_probe(struct platform_device *pdev)
> +{
> +	struct device *mux_dev = &pdev->dev;
> +	struct mule_i2c_reg_mux *priv;
> +	struct i2c_client *client;
> +	struct i2c_mux_core *muxc;
> +	struct device_node *dev;
> +	unsigned int readback;
> +	int ndev, ret;
> +	bool old_fw;
> +
> +	/* Count devices on the mux */
> +	ndev = of_get_child_count(mux_dev->of_node);
> +	dev_dbg(mux_dev, "%d devices on the mux\n", ndev);
> +
> +	client = to_i2c_client(mux_dev->parent);
> +
> +	muxc = i2c_mux_alloc(client->adapter, mux_dev, ndev, sizeof(*priv),
> +			     I2C_MUX_LOCKED, mux_select, mux_deselect);
> +	if (!muxc)
> +		return dev_err_probe(mux_dev, -ENOMEM,
> +				     "Failed to allocate mux struct\n");
> +
> +	priv = i2c_mux_priv(muxc);
> +
> +	priv->regmap = dev_get_regmap(mux_dev->parent, NULL);
> +	if (IS_ERR(priv->regmap))
> +		return dev_err_probe(mux_dev, PTR_ERR(priv->regmap),
> +				     "No parent i2c register map\n");
> +
> +	platform_set_drvdata(pdev, muxc);
> +
> +	/*
> +	 * MUX_DEFAULT_DEV is guaranteed to exist on all old and new mule fw.
> +	 * mule fw without mux support will accept write ops to the
> +	 * config register, but readback returns 0xff (register not updated).
> +	 */
> +	ret = mux_select(muxc, MUX_DEFAULT_DEV);
> +	if (ret)
> +		return dev_err_probe(mux_dev, ret,
> +				     "Failed to write config register\n");
> +
> +	ret = regmap_read(priv->regmap, MUX_CONFIG_REG, &readback);
> +	if (ret)
> +		return dev_err_probe(mux_dev, ret,
> +				     "Failed to read config register\n");
> +
> +	old_fw = (readback != MUX_DEFAULT_DEV);
> +
> +	ret = devm_add_action_or_reset(mux_dev, mux_remove, muxc);
> +	if (ret)
> +		return dev_err_probe(mux_dev, ret,
> +				     "Failed to register mux remove\n");
> +
> +	/* Create device adapters */
> +	for_each_child_of_node(mux_dev->of_node, dev) {
> +		u32 reg;
> +
> +		ret = of_property_read_u32(dev, "reg", &reg);
> +		if (ret)
> +			return dev_err_probe(mux_dev, ret,
> +					     "No reg property found for %s\n",
> +					     of_node_full_name(dev));
> +
> +		if (old_fw && reg != 0) {
> +			dev_warn(mux_dev,
> +				 "Mux is not supported, please update Mule FW\n");
> +			continue;
> +		}
> +
> +		ret = mux_select(muxc, reg);
> +		if (ret) {
> +			dev_warn(mux_dev,
> +				 "Device %d not supported, please update Mule FW\n", reg);
> +			continue;
> +		}
> +
> +		ret = i2c_mux_add_adapter(muxc, 0, reg);
> +		if (ret)
> +			return dev_err_probe(mux_dev, ret,
> +					     "Failed to add i2c mux adapter %d\n", reg);
> +	}
> +
> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
> +
> +	return 0;
> +}
> +
> +static const struct of_device_id mule_i2c_mux_of_match[] = {
> +	{.compatible = "tsd,mule-i2c-mux",},
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, mule_i2c_mux_of_match);
> +
> +static struct platform_driver mule_i2c_mux_driver = {
> +	.driver		= {
> +		.name	= "mule-i2c-mux",
> +		.of_match_table = mule_i2c_mux_of_match,
> +	},
> +	.probe		= mule_i2c_mux_probe,
> +};
> +
> +module_platform_driver(mule_i2c_mux_driver);
> +
> +MODULE_AUTHOR("Farouk Bouabid <farouk.bouabid@cherry.de>");
> +MODULE_DESCRIPTION("I2C mux driver for Theobroma Systems Mule");
> +MODULE_LICENSE("GPL");
> 

  reply	other threads:[~2024-08-12  9:24 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-25 13:27 [PATCH v6 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
2024-07-25 13:27 ` [PATCH v6 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
2024-08-31 21:05   ` Wolfram Sang
2024-07-25 13:27 ` [PATCH v6 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
2024-08-12  9:24   ` Quentin Schulz [this message]
2024-08-12  9:29     ` Krzysztof Kozlowski
2024-08-12 10:06       ` Wolfram Sang
2024-08-12 11:37         ` Krzysztof Kozlowski
2024-08-12 12:21           ` Wolfram Sang
2024-08-12 13:13             ` Krzysztof Kozlowski
2024-08-12 13:28               ` Guenter Roeck
2024-08-12 17:37               ` Wolfram Sang
2024-08-31 20:57   ` Wolfram Sang
2024-07-25 13:27 ` [PATCH v6 3/8] dt-bindings: hwmon: add support for ti,amc6821 Farouk Bouabid
2024-07-30 16:10   ` Rob Herring (Arm)
2024-07-31 15:11   ` Guenter Roeck
2024-07-25 13:27 ` [PATCH v6 4/8] hwmon: (amc6821) add support for tsd,mule Farouk Bouabid
2024-07-25 14:02   ` Guenter Roeck
2024-07-31 15:12   ` Guenter Roeck
2024-08-12 11:38     ` Krzysztof Kozlowski
2024-08-12 11:58       ` Quentin Schulz
2024-08-12 13:10         ` Krzysztof Kozlowski
2024-08-12 13:21       ` Guenter Roeck
2024-08-12 13:24         ` Krzysztof Kozlowski
2024-07-25 13:27 ` [PATCH v6 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
2024-07-25 13:27 ` [PATCH v6 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
2024-07-25 13:27 ` [PATCH v6 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
2024-07-25 13:27 ` [PATCH v6 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=728a8e06-81f1-4771-8031-ea043b9baf20@cherry.de \
    --to=quentin.schulz@cherry.de \
    --cc=andi.shyti@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=farouk.bouabid@cherry.de \
    --cc=heiko@sntech.de \
    --cc=jdelvare@suse.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux@roeck-us.net \
    --cc=peda@axentia.se \
    --cc=robh@kernel.org \
    --cc=wsa+renesas@sang-engineering.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox