All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Ben Collins <bcollins@watter.com>
Cc: "David Lechner" <dlechner@baylibre.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] iio: mcp9600: Add support for thermocouple-type
Date: Sat, 16 Aug 2025 11:11:25 +0100	[thread overview]
Message-ID: <20250816111125.65fcbb09@jic23-huawei> (raw)
In-Reply-To: <20250815164627.22002-5-bcollins@watter.com>

On Fri, 15 Aug 2025 16:46:06 +0000
Ben Collins <bcollins@watter.com> wrote:

> dt-bindings documentation for this driver claims to support
> thermocouple-type, but the driver does not actually make use of
> the property.
> 
> Implement usage of the property to configure the chip for the
> selected thermocouple-type.
> 
> Signed-off-by: Ben Collins <bcollins@watter.com>
Hi Ben,

Just one trivial thing inline.

Thanks

Jonathan

> ---
>  drivers/iio/temperature/mcp9600.c | 69 +++++++++++++++++++++++++++++++
>  1 file changed, 69 insertions(+)
> 
> diff --git a/drivers/iio/temperature/mcp9600.c b/drivers/iio/temperature/mcp9600.c
> index c18ae17b6d82f..361572a241f06 100644
> --- a/drivers/iio/temperature/mcp9600.c
> +++ b/drivers/iio/temperature/mcp9600.c
> @@ -22,11 +22,15 @@
>  #include <linux/iio/events.h>
>  #include <linux/iio/iio.h>
>  
> +#include <dt-bindings/iio/temperature/thermocouple.h>
> +
>  /* MCP9600 registers */
>  #define MCP9600_HOT_JUNCTION		0x00
>  #define MCP9600_COLD_JUNCTION		0x02
>  #define MCP9600_STATUS			0x04
>  #define MCP9600_STATUS_ALERT(x)		BIT(x)
> +#define MCP9600_SENSOR_CFG		0x05
> +#define MCP9600_SENSOR_TYPE_MASK	GENMASK(6, 4)
>  #define MCP9600_ALERT_CFG1		0x08
>  #define MCP9600_ALERT_CFG(x)		(MCP9600_ALERT_CFG1 + (x - 1))
>  #define MCP9600_ALERT_CFG_ENABLE	BIT(0)
> @@ -66,6 +70,30 @@ static const char * const mcp9600_alert_name[MCP9600_ALERT_COUNT] = {
>  	[MCP9600_ALERT4] = "alert4",
>  };
>  
> +/* Map between dt-bindings enum and the chip's type value */
> +static const unsigned int mcp9600_type_map[] = {
> +	[THERMOCOUPLE_TYPE_K] = 0,
> +	[THERMOCOUPLE_TYPE_J] = 1,
> +	[THERMOCOUPLE_TYPE_T] = 2,
> +	[THERMOCOUPLE_TYPE_N] = 3,
> +	[THERMOCOUPLE_TYPE_S] = 4,
> +	[THERMOCOUPLE_TYPE_E] = 5,
> +	[THERMOCOUPLE_TYPE_B] = 6,
> +	[THERMOCOUPLE_TYPE_R] = 7,
> +};
> +
> +/* Map thermocouple type to a char for for iio info in sysfs */
> +static const int mcp9600_tc_types[] = {
> +	[THERMOCOUPLE_TYPE_K] = 'K',
> +	[THERMOCOUPLE_TYPE_J] = 'J',
> +	[THERMOCOUPLE_TYPE_T] = 'T',
> +	[THERMOCOUPLE_TYPE_N] = 'N',
> +	[THERMOCOUPLE_TYPE_S] = 'S',
> +	[THERMOCOUPLE_TYPE_E] = 'E',
> +	[THERMOCOUPLE_TYPE_B] = 'B',
> +	[THERMOCOUPLE_TYPE_R] = 'R',
> +};
> +
>  static const struct iio_event_spec mcp9600_events[] = {
>  	{
>  		.type = IIO_EV_TYPE_THRESH,
> @@ -89,6 +117,7 @@ static const struct iio_event_spec mcp9600_events[] = {
>  			.type = IIO_TEMP,				       \
>  			.address = MCP9600_HOT_JUNCTION,		       \
>  			.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |	       \
> +					      BIT(IIO_CHAN_INFO_THERMOCOUPLE_TYPE) | \
>  					      BIT(IIO_CHAN_INFO_SCALE),	       \
>  			.event_spec = &mcp9600_events[hj_ev_spec_off],	       \
>  			.num_event_specs = hj_num_ev,			       \
> @@ -131,6 +160,7 @@ struct mcp_chip_info {
>  
>  struct mcp9600_data {
>  	struct i2c_client *client;
> +	u32 thermocouple_type;
>  };
>  
>  static int mcp9600_read(struct mcp9600_data *data,
> @@ -165,11 +195,32 @@ static int mcp9600_read_raw(struct iio_dev *indio_dev,
>  		*val = 62;
>  		*val2 = 500000;
>  		return IIO_VAL_INT_PLUS_MICRO;
> +	case IIO_CHAN_INFO_THERMOCOUPLE_TYPE:
> +		*val = mcp9600_tc_types[data->thermocouple_type];
> +		return IIO_VAL_CHAR;
>  	default:
>  		return -EINVAL;
>  	}
>  }
>  
> +static int mcp9600_config(struct mcp9600_data *data)
> +{
> +	struct i2c_client *client = data->client;
> +	int ret;
> +	u8 cfg;
> +
> +	cfg  = FIELD_PREP(MCP9600_SENSOR_TYPE_MASK,
> +			  mcp9600_type_map[data->thermocouple_type]);
> +
> +	ret = i2c_smbus_write_byte_data(client, MCP9600_SENSOR_CFG, cfg);
> +	if (ret < 0) {
> +		dev_err(&client->dev, "Failed to set sensor configuration\n");

Only called from probe so use return dev_err_probe() here


> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
>  static int mcp9600_get_alert_index(int channel2, enum iio_event_direction dir)
>  {
>  	if (channel2 == IIO_MOD_TEMP_AMBIENT) {
> @@ -453,6 +504,24 @@ static int mcp9600_probe(struct i2c_client *client)
>  	data = iio_priv(indio_dev);
>  	data->client = client;
>  
> +	/* Accept type from dt with default of Type-K. */
> +	data->thermocouple_type = THERMOCOUPLE_TYPE_K;
> +	ret = device_property_read_u32(&client->dev, "thermocouple-type",
> +				       &data->thermocouple_type);
> +	if (ret < 0 && ret != -EINVAL)
> +		return dev_err_probe(&client->dev, ret,
> +				     "Error reading thermocouple-type property\n");
> +
> +	if (data->thermocouple_type >= ARRAY_SIZE(mcp9600_type_map))
> +		return dev_err_probe(&client->dev, -EINVAL,
> +				     "Invalid thermocouple-type property %u.\n",
> +				     data->thermocouple_type);
> +
> +	/* Set initial config. */
> +	ret = mcp9600_config(data);
> +	if (ret < 0)
> +		return ret;
> +
>  	ch_sel = mcp9600_probe_alerts(indio_dev);
>  	if (ch_sel < 0)
>  		return ch_sel;


  reply	other threads:[~2025-08-16 10:11 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-15 16:46 [PATCH 0/5] iio: mcp9600: Features and improvements Ben Collins
2025-08-15 16:46 ` [PATCH 1/5] dt-bindings: iio: mcp9600: Add compatible for microchip,mcp9601 Ben Collins
2025-08-16  9:58   ` Jonathan Cameron
2025-08-16 18:55     ` David Lechner
2025-08-17 16:37       ` Ben Collins
2025-08-17 16:51         ` David Lechner
2025-08-17 17:34           ` Ben Collins
2025-08-17 17:59             ` David Lechner
2025-08-17 21:02               ` Ben Collins
2025-08-17 21:10                 ` Ben Collins
2025-08-18  6:42                   ` Krzysztof Kozlowski
2025-08-15 16:46 ` [PATCH 2/5] iio: mcp9600: White space cleanup for tab alignment Ben Collins
2025-08-16  9:59   ` Jonathan Cameron
2025-08-15 16:46 ` [PATCH 3/5] iio: mcp9600: Recognize chip id for mcp9601 Ben Collins
2025-08-16  8:46   ` kernel test robot
2025-08-16 10:02     ` Jonathan Cameron
2025-08-18 15:06       ` Nathan Chancellor
2025-08-18 15:11         ` Ben Collins
2025-08-18 15:18         ` Jonathan Cameron
2025-08-16 10:04   ` Jonathan Cameron
2025-08-15 16:46 ` [PATCH 4/5] iio: mcp9600: Add support for thermocouple-type Ben Collins
2025-08-16 10:11   ` Jonathan Cameron [this message]
2025-08-16 13:18     ` Ben Collins
2025-08-16 15:09       ` Jonathan Cameron
2025-08-16 18:24   ` David Lechner
2025-08-17  2:54     ` Ben Collins
2025-08-17  3:32       ` David Lechner
2025-08-15 16:46 ` [PATCH 5/5] iio: mcp9600: Add support for IIR filter Ben Collins
2025-08-16 10:15   ` Jonathan Cameron
2025-08-16 17:22   ` David Lechner
2025-08-16 10:07 ` [PATCH 0/5] iio: mcp9600: Features and improvements Jonathan Cameron

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=20250816111125.65fcbb09@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=andy@kernel.org \
    --cc=bcollins@watter.com \
    --cc=dlechner@baylibre.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.