Skip to content

Commit

Permalink
hwmon: (lm90) Move status register bit shifts to compile time
Browse files Browse the repository at this point in the history
Handling bit shifts necessary to extract status bits during compile time
reduces code and data size by almost 5% when building for x86_64.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
  • Loading branch information
Guenter Roeck committed Jul 13, 2022
1 parent ddf2a60 commit ca7b9b1
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions drivers/hwmon/lm90.c
Original file line number Diff line number Diff line change
Expand Up @@ -1345,17 +1345,18 @@ static const u8 lm90_temp_emerg_index[3] = {
LOCAL_EMERG, REMOTE_EMERG, REMOTE2_EMERG
};

static const u8 lm90_min_alarm_bits[3] = { 5, 3, 11 };
static const u8 lm90_max_alarm_bits[3] = { 6, 4, 12 };
static const u8 lm90_crit_alarm_bits[3] = { 0, 1, 9 };
static const u8 lm90_crit_alarm_bits_swapped[3] = { 1, 0, 9 };
static const u8 lm90_emergency_alarm_bits[3] = { 15, 13, 14 };
static const u8 lm90_fault_bits[3] = { 0, 2, 10 };
static const u16 lm90_min_alarm_bits[3] = { BIT(5), BIT(3), BIT(11) };
static const u16 lm90_max_alarm_bits[3] = { BIT(6), BIT(4), BIT(12) };
static const u16 lm90_crit_alarm_bits[3] = { BIT(0), BIT(1), BIT(9) };
static const u16 lm90_crit_alarm_bits_swapped[3] = { BIT(1), BIT(0), BIT(9) };
static const u16 lm90_emergency_alarm_bits[3] = { BIT(15), BIT(13), BIT(14) };
static const u16 lm90_fault_bits[3] = { BIT(0), BIT(2), BIT(10) };

static int lm90_temp_read(struct device *dev, u32 attr, int channel, long *val)
{
struct lm90_data *data = dev_get_drvdata(dev);
int err, bit;
int err;
u16 bit;

mutex_lock(&data->update_lock);
err = lm90_update_device(dev);
Expand All @@ -1374,22 +1375,22 @@ static int lm90_temp_read(struct device *dev, u32 attr, int channel, long *val)
case hwmon_temp_fault:
switch (attr) {
case hwmon_temp_min_alarm:
bit = BIT(lm90_min_alarm_bits[channel]);
bit = lm90_min_alarm_bits[channel];
break;
case hwmon_temp_max_alarm:
bit = BIT(lm90_max_alarm_bits[channel]);
bit = lm90_max_alarm_bits[channel];
break;
case hwmon_temp_crit_alarm:
if (data->flags & LM90_HAVE_CRIT_ALRM_SWP)
bit = BIT(lm90_crit_alarm_bits_swapped[channel]);
bit = lm90_crit_alarm_bits_swapped[channel];
else
bit = BIT(lm90_crit_alarm_bits[channel]);
bit = lm90_crit_alarm_bits[channel];
break;
case hwmon_temp_emergency_alarm:
bit = BIT(lm90_emergency_alarm_bits[channel]);
bit = lm90_emergency_alarm_bits[channel];
break;
case hwmon_temp_fault:
bit = BIT(lm90_fault_bits[channel]);
bit = lm90_fault_bits[channel];
break;
}
*val = !!(data->alarms & bit);
Expand Down

0 comments on commit ca7b9b1

Please sign in to comment.