All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eddie James <eajames@linux.vnet.ibm.com>
To: Guenter Roeck <linux@roeck-us.net>, Eddie James <eajames@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org,
	linux-fsi@lists.ozlabs.org, devicetree@vger.kernel.org,
	jdelvare@suse.com, alistair@popple.id.au, joel@jms.id.au,
	jk@ozlabs.org, robh+dt@kernel.org
Subject: Re: [PATCH 3/3] hwmon: (occ) Add new temperature sensor type
Date: Wed, 6 May 2020 10:58:26 -0500	[thread overview]
Message-ID: <68296e99-bd7e-03dd-073d-03487b7a265e@linux.vnet.ibm.com> (raw)
In-Reply-To: <20200506155704.GA30543@roeck-us.net>


On 5/6/20 10:57 AM, Guenter Roeck wrote:
> On Fri, May 01, 2020 at 10:08:33AM -0500, Eddie James wrote:
>> The latest version of the On-Chip Controller (OCC) has a different
>> format for the temperature sensor data. Add a new temperature sensor
>> version to handle this data.
>>
>> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> For my reference:
>
> Acked-by: Guenter Roeck <linux@roeck-us.net>
>
> I assume this depends on at least patch 2 of the series, so we'll have
> to wait for that to be accepted.


Thanks Guenter. Yes that's correct.

Eddie


>
> Guenter
>
>> ---
>>   drivers/hwmon/occ/common.c | 75 ++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 75 insertions(+)
>>
>> diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c
>> index 30e18eb60da7..52af0e728232 100644
>> --- a/drivers/hwmon/occ/common.c
>> +++ b/drivers/hwmon/occ/common.c
>> @@ -41,6 +41,14 @@ struct temp_sensor_2 {
>>   	u8 value;
>>   } __packed;
>>   
>> +struct temp_sensor_10 {
>> +	u32 sensor_id;
>> +	u8 fru_type;
>> +	u8 value;
>> +	u8 throttle;
>> +	u8 reserved;
>> +} __packed;
>> +
>>   struct freq_sensor_1 {
>>   	u16 sensor_id;
>>   	u16 value;
>> @@ -307,6 +315,60 @@ static ssize_t occ_show_temp_2(struct device *dev,
>>   	return snprintf(buf, PAGE_SIZE - 1, "%u\n", val);
>>   }
>>   
>> +static ssize_t occ_show_temp_10(struct device *dev,
>> +				struct device_attribute *attr, char *buf)
>> +{
>> +	int rc;
>> +	u32 val = 0;
>> +	struct temp_sensor_10 *temp;
>> +	struct occ *occ = dev_get_drvdata(dev);
>> +	struct occ_sensors *sensors = &occ->sensors;
>> +	struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
>> +
>> +	rc = occ_update_response(occ);
>> +	if (rc)
>> +		return rc;
>> +
>> +	temp = ((struct temp_sensor_10 *)sensors->temp.data) + sattr->index;
>> +
>> +	switch (sattr->nr) {
>> +	case 0:
>> +		val = get_unaligned_be32(&temp->sensor_id);
>> +		break;
>> +	case 1:
>> +		val = temp->value;
>> +		if (val == OCC_TEMP_SENSOR_FAULT)
>> +			return -EREMOTEIO;
>> +
>> +		/*
>> +		 * VRM doesn't return temperature, only alarm bit. This
>> +		 * attribute maps to tempX_alarm instead of tempX_input for
>> +		 * VRM
>> +		 */
>> +		if (temp->fru_type != OCC_FRU_TYPE_VRM) {
>> +			/* sensor not ready */
>> +			if (val == 0)
>> +				return -EAGAIN;
>> +
>> +			val *= 1000;
>> +		}
>> +		break;
>> +	case 2:
>> +		val = temp->fru_type;
>> +		break;
>> +	case 3:
>> +		val = temp->value == OCC_TEMP_SENSOR_FAULT;
>> +		break;
>> +	case 4:
>> +		val = temp->throttle * 1000;
>> +		break;
>> +	default:
>> +		return -EINVAL;
>> +	}
>> +
>> +	return snprintf(buf, PAGE_SIZE - 1, "%u\n", val);
>> +}
>> +
>>   static ssize_t occ_show_freq_1(struct device *dev,
>>   			       struct device_attribute *attr, char *buf)
>>   {
>> @@ -745,6 +807,10 @@ static int occ_setup_sensor_attrs(struct occ *occ)
>>   		num_attrs += (sensors->temp.num_sensors * 4);
>>   		show_temp = occ_show_temp_2;
>>   		break;
>> +	case 0x10:
>> +		num_attrs += (sensors->temp.num_sensors * 5);
>> +		show_temp = occ_show_temp_10;
>> +		break;
>>   	default:
>>   		sensors->temp.num_sensors = 0;
>>   	}
>> @@ -844,6 +910,15 @@ static int occ_setup_sensor_attrs(struct occ *occ)
>>   			attr->sensor = OCC_INIT_ATTR(attr->name, 0444,
>>   						     show_temp, NULL, 3, i);
>>   			attr++;
>> +
>> +			if (sensors->temp.version == 0x10) {
>> +				snprintf(attr->name, sizeof(attr->name),
>> +					 "temp%d_max", s);
>> +				attr->sensor = OCC_INIT_ATTR(attr->name, 0444,
>> +							     show_temp, NULL,
>> +							     4, i);
>> +				attr++;
>> +			}
>>   		}
>>   	}
>>   

      reply	other threads:[~2020-05-06 15:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-01 15:08 [PATCH 0/3] occ: Add support for P10 Eddie James
2020-05-01 15:08 ` [PATCH 1/3] dt-bindings: fsi: Add P10 OCC device documentation Eddie James
2020-05-12 20:57   ` Rob Herring
2020-05-01 15:08 ` [PATCH 2/3] fsi: occ: Add support for P10 Eddie James
2020-07-19 22:13   ` Guenter Roeck
2020-07-20  4:47     ` Joel Stanley
2020-07-20 14:36       ` Guenter Roeck
2020-05-01 15:08 ` [PATCH 3/3] hwmon: (occ) Add new temperature sensor type Eddie James
2020-05-06 15:57   ` Guenter Roeck
2020-05-06 15:58     ` Eddie James [this message]

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=68296e99-bd7e-03dd-073d-03487b7a265e@linux.vnet.ibm.com \
    --to=eajames@linux.vnet.ibm.com \
    --cc=alistair@popple.id.au \
    --cc=devicetree@vger.kernel.org \
    --cc=eajames@linux.ibm.com \
    --cc=jdelvare@suse.com \
    --cc=jk@ozlabs.org \
    --cc=joel@jms.id.au \
    --cc=linux-fsi@lists.ozlabs.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=robh+dt@kernel.org \
    /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.