From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753547AbbBXVEj (ORCPT ); Tue, 24 Feb 2015 16:04:39 -0500 Received: from bh-25.webhostbox.net ([208.91.199.152]:44251 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750788AbbBXVEh (ORCPT ); Tue, 24 Feb 2015 16:04:37 -0500 Date: Tue, 24 Feb 2015 13:04:33 -0800 From: Guenter Roeck To: Bartosz Golaszewski Cc: LKML , Jean Delvare , lm-sensors Subject: Re: [RESEND PATCH 3/4] hwmon: (lm85) replace x_TO_REG() functions with find_closest() Message-ID: <20150224210433.GB18293@roeck-us.net> References: <1424800109-2969-1-git-send-email-bgolaszewski@baylibre.com> <1424800109-2969-4-git-send-email-bgolaszewski@baylibre.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1424800109-2969-4-git-send-email-bgolaszewski@baylibre.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-Authenticated_sender: guenter@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-CTCH-PVer: 0000001 X-CTCH-Spam: Unknown X-CTCH-VOD: Unknown X-CTCH-Flags: 0 X-CTCH-RefID: str=0001.0A020204.54ECE765.00C5,ss=1,re=0.001,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0 X-CTCH-Score: 0.001 X-CTCH-ScoreCust: 0.000 X-CTCH-Rules: C_4847, X-CTCH-SenderID: linux@roeck-us.net X-CTCH-SenderID-Flags: 0 X-CTCH-SenderID-TotalMessages: 2 X-CTCH-SenderID-TotalSpam: 0 X-CTCH-SenderID-TotalSuspected: 0 X-CTCH-SenderID-TotalConfirmed: 0 X-CTCH-SenderID-TotalBulk: 0 X-CTCH-SenderID-TotalVirus: 0 X-CTCH-SenderID-TotalRecipients: 0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: mailgid no entry from get_relayhosts_entry X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 24, 2015 at 06:48:28PM +0100, Bartosz Golaszewski wrote: > Replace RANGE_TO_REG() and FREQ_TO_REG() functions with calls > to find_closest(). > > Signed-off-by: Bartosz Golaszewski > --- > drivers/hwmon/lm85.c | 43 ++++++++++++------------------------------- > 1 file changed, 12 insertions(+), 31 deletions(-) > > diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c > index 2b4b419..4e81c99 100644 > --- a/drivers/hwmon/lm85.c > +++ b/drivers/hwmon/lm85.c > @@ -188,18 +188,6 @@ static const int lm85_range_map[] = { > 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 > }; > > -static int RANGE_TO_REG(long range) > -{ > - int i; > - > - /* Find the closest match */ > - for (i = 0; i < 15; ++i) { > - if (range <= (lm85_range_map[i] + lm85_range_map[i + 1]) / 2) > - break; > - } > - > - return i; > -} > #define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] > > /* These are the PWM frequency encodings */ > @@ -209,17 +197,7 @@ static const int lm85_freq_map[8] = { /* 1 Hz */ > static const int adm1027_freq_map[8] = { /* 1 Hz */ > 11, 15, 22, 29, 35, 44, 59, 88 > }; > - > -static int FREQ_TO_REG(const int *map, unsigned long freq) > -{ > - int i; > - > - /* Find the closest match */ > - for (i = 0; i < 7; ++i) > - if (freq <= (map[i] + map[i + 1]) / 2) > - break; > - return i; > -} > +#define FREQ_MAP_SIZE 8 If you declare this as a constant, that constant should also be used to declare the actual arrays. > > static int FREQ_FROM_REG(const int *map, u8 reg) > { > @@ -828,7 +806,8 @@ static ssize_t set_pwm_freq(struct device *dev, > data->cfg5 &= ~ADT7468_HFPWM; > lm85_write_value(client, ADT7468_REG_CFG5, data->cfg5); > } else { /* Low freq. mode */ > - data->pwm_freq[nr] = FREQ_TO_REG(data->freq_map, val); > + data->pwm_freq[nr] = find_closest(val, data->freq_map, > + FREQ_MAP_SIZE - 1); Why -1 ? > lm85_write_value(client, LM85_REG_AFAN_RANGE(nr), > (data->zone[nr].range << 4) > | data->pwm_freq[nr]); > @@ -1186,7 +1165,7 @@ static ssize_t set_temp_auto_temp_min(struct device *dev, > int nr = to_sensor_dev_attr(attr)->index; > struct lm85_data *data = dev_get_drvdata(dev); > struct i2c_client *client = data->client; > - long val; > + long val, range; > int err; > > err = kstrtol(buf, 10, &val); > @@ -1198,10 +1177,12 @@ static ssize_t set_temp_auto_temp_min(struct device *dev, > lm85_write_value(client, LM85_REG_AFAN_LIMIT(nr), > data->zone[nr].limit); > > -/* Update temp_auto_max and temp_auto_range */ > - data->zone[nr].range = RANGE_TO_REG( > - TEMP_FROM_REG(data->zone[nr].max_desired) - > - TEMP_FROM_REG(data->zone[nr].limit)); > + /* Update temp_auto_max and temp_auto_range */ > + range = TEMP_FROM_REG(data->zone[nr].max_desired) - > + TEMP_FROM_REG(data->zone[nr].limit); > + data->zone[nr].range = find_closest(range, lm85_range_map, > + ARRAY_SIZE(lm85_range_map)); > + Is that really less complex than before ? Also, I wonder if it creates more or less code. Can you provide code size comparisons ? Thanks, Guenter