Skip to contentSkip to conversation

Config max31785 based on devtree attrs

PATCH Superseded Christopher Bostic 1 participant 4 messages Jun 14, 2017

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

cover Config max31785 based on devtree attrs

Add optional property for max31785 in device tree to indicate that fan PWM should be set to 100% on fault. Driver references this property during initialization time to set fault response appropriately.

Christopher Bostic (3):
drivers/hwmon: Document optional dev tree property 'fault-max-fan' arch/arm/boot/dts: Add optional property for max31785 drivers/hwmon: max31785 Set fan fault response based on dev tree

 Documentation/devicetree/bindings/hwmon/max31785.txt | 20 ++++++++++++++++++++
 arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts  | 1 +
 drivers/hwmon/max31785.c | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+), 0 deletions(-)
Signature · 1 line
1.8.2.2
#1 lore raw

PATCH 1/3 drivers/hwmon: Document optional dev tree property 'fault-max-fan'

Document new optional device tree property 'fault-max-fan'. This property indicates that the max31785 should be configured to drive fan with 100% PWM duty cycle on fault condition.

---
 Documentation/devicetree/bindings/hwmon/max31785.txt | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hwmon/max31785.txt
Documentation/devicetree/bindings/hwmon/max31785.txt new file +20 -0
new file mode 100644
index 0000000..2b0190d
@@ -0,0 +1,20 @@
+Bindings for MAX31785 I2C fan controller
+
+Reference:
+[1]	https://datasheets.maximintegrated.com/en/ds/MAX31785.pdf
+
+Required properties:
+- compatible : "maxim,max31785"
+- reg        : I2C address, 0x52.
+
+Optional properties, default is to retain the chip's current setting:
+- fault-max-fan : When present this property indicates to set fan to 100% PWM
+                  duty cycle on FAULT condition.
+
+Example:
+
+        max31785@52 {
+                compatible = "maxim,max31785";
+                reg = <0x52>;
+                fault-max-fan;
+        };
Signature · 1 line
1.8.2.2
#2 lore raw

PATCH 2/3 arch/arm/boot/dts: Add optional property for max31785

In reply to Christopher Bostic

Add new optional property 'fault-max-fan'. Indicates that the max31785 should be configured to set 100% PWM fan duty cycle on fault condition.

---
 arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts | 1 +
 1 file changed, 1 insertion(+)
arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts +1 -0
index 42b70a5d..d47da9d 100644
@@ -196,6 +196,7 @@
 	max31785@52 {
 		compatible = "maxim,max31785";
 		reg = <0x52>;
+		fault-max-fan;
 	};
 
 	dps310@76 {
Signature · 1 line
1.8.2.2
#3 lore raw

PATCH 3/3 drivers/hwmon: max31785 Set fan fault response based on dev tree

In reply to Christopher Bostic

Check for the optional device tree property 'fault-max-fan'. If present, configure hardware for 100% PWM fan duty cycle on fault condition.

---
 drivers/hwmon/max31785.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
drivers/hwmon/max31785.c +34 -0
index fc03b7c..5d7bdd3 100644
@@ -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
+
 /* Fan Command constants */
 #define MAX31785_FAN_COMMAND_PWM_RATIO		40
 
@@ -762,6 +766,32 @@ 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 rc;
+
+	if (np && of_get_property(np, "fault-max-fan", NULL)) {
+
+		/* set max fans on fault */
+		rc = max31785_set_page(client, 0);
+		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 +813,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;
Signature · 1 line
1.8.2.2