[PATCH 2.6.12-rc2-mm3] i2c: new adm9240 driver
Grant Coady
grant_lkml at dodo.com.au
Mon Apr 18 23:41:40 CEST 2005
On Tue, 19 Apr 2005 06:27:41 +1000, Grant Coady <grant_lkml at dodo.com.au> wrote:
>Hi Khali, Greg,
>
>Another update of new adm9240 driver, completing Michiel Rook's port
>to 2.6. This driver adds auto new fan clock divider that is set by
>the driver in response to fan speed limit and adjusted on fan measurement
>overflow to always display fan speeds within measurement range without
>further user intervention.
>
This small fixup applies over the current patch and adds bidirectional
fan clock divider control when fan_min is disabled. Tested at great
risk of personal injury by sticking my finger into the fan to slow it
down :o)
The bidirectional adjust will not 'hunt' for a value as one switchpoint
is < 96 underrange, the other is ==255 overrange.
Signed-Off-By: Grant Coady <gcoady at gmail.com>
---
adm9240.c | 25 ++++++++++++++++++-------
1 files changed, 18 insertions(+), 7 deletions(-)
--- linux-2.6.12-rc2-mm3k/drivers/i2c/chips/adm9240.c.old 2005-04-19 07:30:57.000000000 +1000
+++ linux-2.6.12-rc2-mm3k/drivers/i2c/chips/adm9240.c 2005-04-19 07:31:33.000000000 +1000
@@ -649,24 +649,35 @@ static struct adm9240_data *adm9240_upda
data->fan[i] = adm9240_read_value(client,
ADM9240_REG_FAN(i));
- /* adjust fan clock divider when:
+ /* adjust fan clock divider upwards when:
* - measurement overflows, and
- * - auto fan_div enabled, and
* - fan_div < max value
- * also adjust fan_min to suit new fan_div,
- * but do not let fan_min go to zero */
- if (data->fan[i] == 255 && data->fan_min[i] < 255
- && data->fan_div[i] < 3) {
+ * also adjust fan_min to suit new fan_div if:
+ * - fan_min is active, and
+ * - fan_min > 1 to prevent value going to zero */
+ if (data->fan[i] == 255 && data->fan_div[i] < 3) {
data->fan_div[i]++;
adm9240_write_fan_div(client, i,
data->fan_div[i]);
- if (data->fan_min[i] > 1) {
+ if (data->fan_min[i] < 255
+ && data->fan_min[i] > 1) {
data->fan_min[i]++;
data->fan_min[i] >>= 1;
}
}
+ /* adjust fan clock divider downwards when:
+ * - measurement underflows resolution, and
+ * - fan_min is disabled, and
+ * - fan_div > min value */
+ if (data->fan[i] < 96 && data->fan_div[i] > 0
+ && data->fan_min[i] == 255) {
+ data->fan_div[i]--;
+ adm9240_write_fan_div(client, i,
+ data->fan_div[i]);
+ }
+
data->alarms[i] = adm9240_read_value(client,
ADM9240_REG_INT(i));
}
More information about the lm-sensors
mailing list