diff options
author | Jean Delvare <khali@linux-fr.org> | 2010-10-28 14:31:48 -0400 |
---|---|---|
committer | Jean Delvare <khali@endymion.delvare> | 2010-10-28 14:31:48 -0400 |
commit | fd7f82b8a37ff4d400c2db9c9fa8f9467dc54a08 (patch) | |
tree | 41eff04a59f8b78d5d3950911e60851277043ab7 /drivers/hwmon/w83795.c | |
parent | 5f7b77cbd4599b6a90d18981d9883a3e20e689fb (diff) |
hwmon: (w83795) Make W83795_REG_PWM more efficient
Cascaded conditionals are inefficient. Reorder the fields so that
PWM register addresses can be computed more efficiently.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers/hwmon/w83795.c')
-rw-r--r-- | drivers/hwmon/w83795.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/hwmon/w83795.c b/drivers/hwmon/w83795.c index a1d884bb58ad..35f87ca88cf3 100644 --- a/drivers/hwmon/w83795.c +++ b/drivers/hwmon/w83795.c | |||
@@ -178,15 +178,11 @@ static const u8 IN_LSB_SHIFT_IDX[][2] = { | |||
178 | #define W83795_REG_TSS(index) (0x209 + (index)) | 178 | #define W83795_REG_TSS(index) (0x209 + (index)) |
179 | 179 | ||
180 | #define PWM_OUTPUT 0 | 180 | #define PWM_OUTPUT 0 |
181 | #define PWM_START 1 | 181 | #define PWM_FREQ 1 |
182 | #define PWM_NONSTOP 2 | 182 | #define PWM_START 2 |
183 | #define PWM_STOP_TIME 3 | 183 | #define PWM_NONSTOP 3 |
184 | #define PWM_FREQ 4 | 184 | #define PWM_STOP_TIME 4 |
185 | #define W83795_REG_PWM(index, nr) \ | 185 | #define W83795_REG_PWM(index, nr) (0x210 + (nr) * 8 + (index)) |
186 | (((nr) == 0 ? 0x210 : \ | ||
187 | (nr) == 1 ? 0x220 : \ | ||
188 | (nr) == 2 ? 0x228 : \ | ||
189 | (nr) == 3 ? 0x230 : 0x218) + (index)) | ||
190 | 186 | ||
191 | #define W83795_REG_FTSH(index) (0x240 + (index) * 2) | 187 | #define W83795_REG_FTSH(index) (0x240 + (index) * 2) |
192 | #define W83795_REG_FTSL(index) (0x241 + (index) * 2) | 188 | #define W83795_REG_FTSL(index) (0x241 + (index) * 2) |
@@ -356,8 +352,8 @@ struct w83795_data { | |||
356 | u8 has_pwm; /* 795g supports 8 pwm, 795adg only supports 2, | 352 | u8 has_pwm; /* 795g supports 8 pwm, 795adg only supports 2, |
357 | * no config register, only affected by chip | 353 | * no config register, only affected by chip |
358 | * type */ | 354 | * type */ |
359 | u8 pwm[8][5]; /* Register value, output, start, non stop, stop | 355 | u8 pwm[8][5]; /* Register value, output, freq, start, |
360 | * time, freq */ | 356 | * non stop, stop time */ |
361 | u16 clkin; /* CLKIN frequency in kHz */ | 357 | u16 clkin; /* CLKIN frequency in kHz */ |
362 | u8 pwm_fcms[2]; /* Register value */ | 358 | u8 pwm_fcms[2]; /* Register value */ |
363 | u8 pwm_tfmr[6]; /* Register value */ | 359 | u8 pwm_tfmr[6]; /* Register value */ |
@@ -1979,7 +1975,7 @@ static int w83795_probe(struct i2c_client *client, | |||
1979 | data->pwm_tfmr[i] = w83795_read(client, W83795_REG_TFMR(i)); | 1975 | data->pwm_tfmr[i] = w83795_read(client, W83795_REG_TFMR(i)); |
1980 | data->pwm_fomc = w83795_read(client, W83795_REG_FOMC); | 1976 | data->pwm_fomc = w83795_read(client, W83795_REG_FOMC); |
1981 | for (i = 0; i < data->has_pwm; i++) { | 1977 | for (i = 0; i < data->has_pwm; i++) { |
1982 | for (tmp = PWM_START; tmp <= PWM_FREQ; tmp++) | 1978 | for (tmp = PWM_FREQ; tmp <= PWM_STOP_TIME; tmp++) |
1983 | data->pwm[i][tmp] = | 1979 | data->pwm[i][tmp] = |
1984 | w83795_read(client, W83795_REG_PWM(i, tmp)); | 1980 | w83795_read(client, W83795_REG_PWM(i, tmp)); |
1985 | } | 1981 | } |