[lm-sensors] [PATCH] hwmon: (max6650) Allow setting of fan voltage and prescaler from platform data.
Hans J. Koch
hjk at linutronix.de
Wed Nov 25 10:54:40 CET 2009
On Wed, Nov 25, 2009 at 01:36:31PM +1100, Mark Ware wrote:
> The current way to set fan voltage and prescaler parameters is
> system-wide via module parameters. This patch allows them to be set on
> a per chip basis using platform_data. If no platform data is provided,
> the existing behaviour is maintained.
> ---
> drivers/hwmon/max6650.c | 88 +++++++++++++++++++++++++----------------------
> 1 files changed, 47 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/hwmon/max6650.c b/drivers/hwmon/max6650.c
> index 58f66be..2e8ab9e 100644
> --- a/drivers/hwmon/max6650.c
> +++ b/drivers/hwmon/max6650.c
> @@ -635,52 +635,58 @@ static int max6650_init_client(struct i2c_client *client)
> return err;
> }
>
> - switch (fan_voltage) {
> - case 0:
> - break;
> - case 5:
> - config &= ~MAX6650_CFG_V12;
> - break;
> - case 12:
> - config |= MAX6650_CFG_V12;
> - break;
> - default:
> - dev_err(&client->dev,
> - "illegal value for fan_voltage (%d)\n",
> - fan_voltage);
> + if (client->dev.platform_data) {
> + config = *(u8 *)client->dev.platform_data;
This silently ignores errors in that platform data. I'd find it better
to have some struct max6650_platform_data, containing an element
"fan_voltage". Then you can run the given value through the same switch
below, checking errors. Furthermore, the struct offers room for future
extensions.
> + }
> + else
> + {
Make this } else { in one line
Thanks,
Hans
> + switch (fan_voltage) {
> + case 0:
> + break;
> + case 5:
> + config &= ~MAX6650_CFG_V12;
> + break;
> + case 12:
> + config |= MAX6650_CFG_V12;
> + break;
> + default:
> + dev_err(&client->dev,
> + "illegal value for fan_voltage (%d)\n",
> + fan_voltage);
> + }
> +
> + switch (prescaler) {
> + case 0:
> + break;
> + case 1:
> + config &= ~MAX6650_CFG_PRESCALER_MASK;
> + break;
> + case 2:
> + config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> + | MAX6650_CFG_PRESCALER_2;
> + break;
> + case 4:
> + config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> + | MAX6650_CFG_PRESCALER_4;
> + break;
> + case 8:
> + config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> + | MAX6650_CFG_PRESCALER_8;
> + break;
> + case 16:
> + config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> + | MAX6650_CFG_PRESCALER_16;
> + break;
> + default:
> + dev_err(&client->dev,
> + "illegal value for prescaler (%d)\n",
> + prescaler);
> + }
> }
>
> dev_info(&client->dev, "Fan voltage is set to %dV.\n",
> (config & MAX6650_CFG_V12) ? 12 : 5);
>
> - switch (prescaler) {
> - case 0:
> - break;
> - case 1:
> - config &= ~MAX6650_CFG_PRESCALER_MASK;
> - break;
> - case 2:
> - config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> - | MAX6650_CFG_PRESCALER_2;
> - break;
> - case 4:
> - config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> - | MAX6650_CFG_PRESCALER_4;
> - break;
> - case 8:
> - config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> - | MAX6650_CFG_PRESCALER_8;
> - break;
> - case 16:
> - config = (config & ~MAX6650_CFG_PRESCALER_MASK)
> - | MAX6650_CFG_PRESCALER_16;
> - break;
> - default:
> - dev_err(&client->dev,
> - "illegal value for prescaler (%d)\n",
> - prescaler);
> - }
> -
> dev_info(&client->dev, "Prescaler is set to %d.\n",
> 1 << (config & MAX6650_CFG_PRESCALER_MASK));
>
> --
> 1.5.6.5
More information about the lm-sensors
mailing list