diff options
Diffstat (limited to 'drivers/hwmon/ltc4245.c')
| -rw-r--r-- | drivers/hwmon/ltc4245.c | 103 |
1 files changed, 32 insertions, 71 deletions
diff --git a/drivers/hwmon/ltc4245.c b/drivers/hwmon/ltc4245.c index 082f0a0bd8a0..e8131a48bda7 100644 --- a/drivers/hwmon/ltc4245.c +++ b/drivers/hwmon/ltc4245.c @@ -1,12 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * Driver for Linear Technology LTC4245 I2C Multiple Supply Hot Swap Controller * * Copyright (C) 2008 Ira W. Snyder <iws@ovro.caltech.edu> * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * * This driver is based on the ds1621 and ina209 drivers. * * Datasheet: @@ -21,7 +18,6 @@ #include <linux/slab.h> #include <linux/i2c.h> #include <linux/hwmon.h> -#include <linux/hwmon-sysfs.h> #include <linux/jiffies.h> #include <linux/platform_data/ltc4245.h> @@ -54,7 +50,6 @@ enum ltc4245_cmd { struct ltc4245_data { struct i2c_client *client; - struct mutex update_lock; bool valid; unsigned long last_updated; /* in jiffies */ @@ -135,10 +130,7 @@ static struct ltc4245_data *ltc4245_update_device(struct device *dev) s32 val; int i; - mutex_lock(&data->update_lock); - if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { - /* Read control registers -- 0x00 to 0x07 */ for (i = 0; i < ARRAY_SIZE(data->cregs); i++) { val = i2c_smbus_read_byte_data(client, i); @@ -164,8 +156,6 @@ static struct ltc4245_data *ltc4245_update_device(struct device *dev) data->valid = true; } - mutex_unlock(&data->update_lock); - return data; } @@ -362,11 +352,11 @@ static umode_t ltc4245_is_visible(const void *_data, case hwmon_in_input: if (channel > 9 && !data->use_extra_gpios) return 0; - return S_IRUGO; + return 0444; case hwmon_in_min_alarm: if (channel > 8) return 0; - return S_IRUGO; + return 0444; default: return 0; } @@ -374,14 +364,14 @@ static umode_t ltc4245_is_visible(const void *_data, switch (attr) { case hwmon_curr_input: case hwmon_curr_max_alarm: - return S_IRUGO; + return 0444; default: return 0; } case hwmon_power: switch (attr) { case hwmon_power_input: - return S_IRUGO; + return 0444; default: return 0; } @@ -390,57 +380,30 @@ static umode_t ltc4245_is_visible(const void *_data, } } -static const u32 ltc4245_in_config[] = { - HWMON_I_INPUT, /* dummy, skipped in is_visible */ - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT | HWMON_I_MIN_ALARM, - HWMON_I_INPUT, - HWMON_I_INPUT, - HWMON_I_INPUT, - 0 -}; - -static const struct hwmon_channel_info ltc4245_in = { - .type = hwmon_in, - .config = ltc4245_in_config, -}; - -static const u32 ltc4245_curr_config[] = { - HWMON_C_INPUT | HWMON_C_MAX_ALARM, - HWMON_C_INPUT | HWMON_C_MAX_ALARM, - HWMON_C_INPUT | HWMON_C_MAX_ALARM, - HWMON_C_INPUT | HWMON_C_MAX_ALARM, - 0 -}; - -static const struct hwmon_channel_info ltc4245_curr = { - .type = hwmon_curr, - .config = ltc4245_curr_config, -}; - -static const u32 ltc4245_power_config[] = { - HWMON_P_INPUT, - HWMON_P_INPUT, - HWMON_P_INPUT, - HWMON_P_INPUT, - 0 -}; - -static const struct hwmon_channel_info ltc4245_power = { - .type = hwmon_power, - .config = ltc4245_power_config, -}; - -static const struct hwmon_channel_info *ltc4245_info[] = { - <c4245_in, - <c4245_curr, - <c4245_power, +static const struct hwmon_channel_info * const ltc4245_info[] = { + HWMON_CHANNEL_INFO(in, + HWMON_I_INPUT, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT | HWMON_I_MIN_ALARM, + HWMON_I_INPUT, + HWMON_I_INPUT, + HWMON_I_INPUT), + HWMON_CHANNEL_INFO(curr, + HWMON_C_INPUT | HWMON_C_MAX_ALARM, + HWMON_C_INPUT | HWMON_C_MAX_ALARM, + HWMON_C_INPUT | HWMON_C_MAX_ALARM, + HWMON_C_INPUT | HWMON_C_MAX_ALARM), + HWMON_CHANNEL_INFO(power, + HWMON_P_INPUT, + HWMON_P_INPUT, + HWMON_P_INPUT, + HWMON_P_INPUT), NULL }; @@ -464,14 +427,13 @@ static bool ltc4245_use_extra_gpios(struct i2c_client *client) return pdata->use_extra_gpios; /* fallback on OF */ - if (of_find_property(np, "ltc4245,use-extra-gpios", NULL)) + if (of_property_read_bool(np, "ltc4245,use-extra-gpios")) return true; return false; } -static int ltc4245_probe(struct i2c_client *client, - const struct i2c_device_id *id) +static int ltc4245_probe(struct i2c_client *client) { struct i2c_adapter *adapter = client->adapter; struct ltc4245_data *data; @@ -485,7 +447,6 @@ static int ltc4245_probe(struct i2c_client *client, return -ENOMEM; data->client = client; - mutex_init(&data->update_lock); data->use_extra_gpios = ltc4245_use_extra_gpios(client); /* Initialize the LTC4245 chip */ @@ -500,7 +461,7 @@ static int ltc4245_probe(struct i2c_client *client, } static const struct i2c_device_id ltc4245_id[] = { - { "ltc4245", 0 }, + { "ltc4245" }, { } }; MODULE_DEVICE_TABLE(i2c, ltc4245_id); |
