[PATCH linux dev-4.10 v2 3/3] drivers/hwmon: max31785 Set fan fault response based on dev tree
Christopher Bostic
cbostic at linux.vnet.ibm.com
Tue Jun 20 07:18:39 AEST 2017
On 6/19/17 4:10 PM, Christopher Bostic wrote:
>
>
> On 6/16/17 1:18 AM, Joel Stanley wrote:
>> On Fri, Jun 16, 2017 at 5:30 AM, Christopher Bostic
>> <cbostic at linux.vnet.ibm.com> wrote:
>>> Check for the optional device tree property 'fault-max-fan'. If
>>> present, configure hardware for 100% PWM fan duty cycle on fault
>>> condition.
>>>
>>> Signed-off-by: Christopher Bostic <cbostic at linux.vnet.ibm.com>
>>> ---
>>> drivers/hwmon/max31785.c | 38 ++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 38 insertions(+)
>>>
>>> diff --git a/drivers/hwmon/max31785.c b/drivers/hwmon/max31785.c
>>> index fc03b7c..a67d5e5 100644
>>> --- a/drivers/hwmon/max31785.c
>>> +++ b/drivers/hwmon/max31785.c
>>> @@ -38,6 +38,7 @@
>>> #define MAX31785_REG_MFR_ID 0x99
>>> #define MAX31785_REG_MFR_MODEL 0x9a
>>> #define MAX31785_REG_MFR_REVISION 0x9b
>>> +#define MAX31785_REG_MFR_FAULT_RESP 0xd9
>>> #define MAX31785_REG_MFR_FAN_CONFIG 0xf1
>>> #define MAX31785_REG_READ_FAN_PWM 0xf3
>>>
>>> @@ -51,6 +52,9 @@
>>> /* Fan Status register bits */
>>> #define MAX31785_FAN_STATUS_FAULT_MASK 0x80
>>>
>>> +/* Fault response register bits */
>>> +#define MAX31785_FAULT_RESP_PIN_MONITOR 0x01
>> It's a bit, so use BIT(0).
>>
>> The bit is called "FAULT_PIN_MONITOR". Please use that naming in your
>> code.
>
> Hi Joel,
>
> OK will make those updates.
>>
>>> +
>>> /* Fan Command constants */
>>> #define MAX31785_FAN_COMMAND_PWM_RATIO 40
>>>
>>> @@ -762,6 +766,36 @@ static int max31785_get_capabilities(struct
>>> max31785 *data)
>>> return 0;
>>> }
>>>
>>> +static int max31785_init_fault_resp(struct i2c_client *client)
>>> +{
>>> + struct device_node *np = client->dev.of_node;
>>> + int page;
>>> + int rc;
>>> +
>>> + if (np && of_get_property(np, "fault-max-fan", NULL)) {
>>> + /* TODO: number of fans/pages is platform dependent */
>>> + for (page = 0; page < 4; page++) {
>> The datasheet says "this bit is only valid for pages 0 to 5. Other
>> pages return 0".
>>
>> Is there a reason you only apply it to the first four pages, and not
>> the fifth (index 4) and sixth (index 5)?
>
> Was thinking in terms of Witherspoon which only uses fans 0 - 3.
> Clearly not a generic
> solution.
>>
>> If you intended to apply this for all 6 supported pages, you could set
>> page 255, and have the condition applied for all of the valid pages.
>
> I'll use this approach.
>
Hi Joel,
Actually, from the spec sheet I have on the max31785 it appears page 255
doesn't allow access to the fault register, 0xd9.
My spec version is 19-5703; Rev 3; 8/12
Unless I missed something in a later revision I'll apply the fault mode
for all 6 supported pages.
Thanks,
> Chris
>>
>> If you only set it for the first four pages on purpose then please add
>> a comment to say that. However, I think we should fix the binding so
>> the pages can be selected. I will review the bindings separately.
>>
>> Cheers,
>>
>> Joel
>>
>>
>>> +
>>> + /* set max fans on fault */
>>> + rc = max31785_set_page(client, page);
>>> + if (rc < 0)
>>> + return rc;
>>> +
>>> + rc = i2c_smbus_read_byte_data(client,
>>> + MAX31785_REG_MFR_FAULT_RESP);
>>> + if (rc < 0)
>>> + return rc;
>>> +
>>> + rc |= MAX31785_FAULT_RESP_PIN_MONITOR;
>>
>>
>>> + rc = i2c_smbus_write_byte_data(client,
>>> + MAX31785_REG_MFR_FAULT_RESP, rc);
>>> + }
>>> + return rc;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>> static int max31785_probe(struct i2c_client *client,
>>> const struct i2c_device_id *id)
>>> {
>>> @@ -783,6 +817,10 @@ static int max31785_probe(struct i2c_client
>>> *client,
>>> data->client = client;
>>> mutex_init(&data->lock);
>>>
>>> + rc = max31785_init_fault_resp(client);
>>> + if (rc)
>>> + return rc;
>>> +
>>> rc = max31785_init_fans(data);
>>> if (rc)
>>> return rc;
>>> --
>>> 1.8.2.2
>>>
>
More information about the openbmc
mailing list