[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:10:16 AEST 2017
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.
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