* [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table
@ 2012-10-21 17:53 Guenter Roeck
2012-10-21 23:30 ` Phil Pokorny
2012-10-22 0:29 ` Guenter Roeck
0 siblings, 2 replies; 3+ messages in thread
From: Guenter Roeck @ 2012-10-21 17:53 UTC (permalink / raw)
To: lm-sensors
This simplifies the code, improves runtime performance, reduces
code size (about 280 bytes on x86_64), and makes it easier
to add support for new devices.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v2: Don't introduce new chip type for IT8726F. Doing that would break backward
compatibility.
Since we dropped the has_16bit_fans flag from patch 5/8, changing the code
back to use has_16bit_fans() is no longer needed.
drivers/hwmon/it87.c | 140 +++++++++++++++++++++++++++-----------------------
1 file changed, 77 insertions(+), 63 deletions(-)
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 5275c6c..ef9194c 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -228,6 +228,59 @@ static const u8 IT87_REG_FANX_MIN[] = { 0x1b, 0x1c, 0x1d, 0x85, 0x87 };
#define IT87_REG_AUTO_TEMP(nr, i) (0x60 + (nr) * 8 + (i))
#define IT87_REG_AUTO_PWM(nr, i) (0x65 + (nr) * 8 + (i))
+struct it87_devices {
+ const char * const name;
+ u16 features;
+};
+
+#define FEAT_12MV_ADC (1 << 0)
+#define FEAT_NEWER_AUTOPWM (1 << 1)
+#define FEAT_OLD_AUTOPWM (1 << 2)
+#define FEAT_16BIT_FAN (1 << 3)
+
+static const struct it87_devices it87_devices[] = {
+ [it87] = {
+ .name = "it87",
+ .features = FEAT_OLD_AUTOPWM, /* may need to override */
+ },
+ [it8712] = {
+ .name = "it8712",
+ .features = FEAT_OLD_AUTOPWM, /* may need to overwrite */
+ },
+ [it8716] = {
+ .name = "it8716",
+ .features = FEAT_16BIT_FAN,
+ },
+ [it8718] = {
+ .name = "it8718",
+ .features = FEAT_16BIT_FAN,
+ },
+ [it8720] = {
+ .name = "it8720",
+ .features = FEAT_16BIT_FAN,
+ },
+ [it8721] = {
+ .name = "it8721",
+ .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FAN,
+ },
+ [it8728] = {
+ .name = "it8728",
+ .features = FEAT_NEWER_AUTOPWM | FEAT_12MV_ADC | FEAT_16BIT_FAN,
+ },
+ [it8782] = {
+ .name = "it8782",
+ .features = FEAT_16BIT_FAN,
+ },
+ [it8783] = {
+ .name = "it8783",
+ .features = FEAT_16BIT_FAN,
+ },
+};
+
+#define has_16bit_fans(data) ((data)->features & FEAT_16BIT_FAN)
+#define has_12mv_adc(data) ((data)->features & FEAT_12MV_ADC)
+#define has_newer_autopwm(data) ((data)->features & FEAT_NEWER_AUTOPWM)
+#define has_old_autopwm(data) ((data)->features & FEAT_OLD_AUTOPWM)
struct it87_sio_data {
enum chips type;
@@ -251,7 +304,7 @@ struct it87_sio_data {
struct it87_data {
struct device *hwmon_dev;
enum chips type;
- u8 revision;
+ u32 features;
unsigned short addr;
const char *name;
@@ -293,26 +346,6 @@ struct it87_data {
s8 auto_temp[3][5]; /* [nr][0] is point1_temp_hyst */
};
-static inline int has_12mv_adc(const struct it87_data *data)
-{
- /*
- * IT8721F and later have a 12 mV ADC, also with internal scaling
- * on selected inputs.
- */
- return data->type = it8721
- || data->type = it8728;
-}
-
-static inline int has_newer_autopwm(const struct it87_data *data)
-{
- /*
- * IT8721F and later have separate registers for the temperature
- * mapping and the manual duty cycle.
- */
- return data->type = it8721
- || data->type = it8728;
-}
-
static int adc_lsb(const struct it87_data *data, int nr)
{
int lsb = has_12mv_adc(data) ? 12 : 16;
@@ -395,35 +428,6 @@ static const unsigned int pwm_freq[8] = {
750000 / 128,
};
-static inline int has_16bit_fans(const struct it87_data *data)
-{
- /*
- * IT8705F Datasheet 0.4.1, 3h = Version G.
- * IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h = Version J.
- * These are the first revisions with 16-bit tachometer support.
- */
- return (data->type = it87 && data->revision >= 0x03)
- || (data->type = it8712 && data->revision >= 0x08)
- || data->type = it8716
- || data->type = it8718
- || data->type = it8720
- || data->type = it8721
- || data->type = it8728
- || data->type = it8782
- || data->type = it8783;
-}
-
-static inline int has_old_autopwm(const struct it87_data *data)
-{
- /*
- * The old automatic fan speed control interface is implemented
- * by IT8705F chips up to revision F and IT8712F chips up to
- * revision G.
- */
- return (data->type = it87 && data->revision < 0x03)
- || (data->type = it8712 && data->revision < 0x08);
-}
-
static int it87_probe(struct platform_device *pdev);
static int __devexit it87_remove(struct platform_device *pdev);
@@ -1885,17 +1889,6 @@ static int __devinit it87_probe(struct platform_device *pdev)
int err = 0, i;
int enable_pwm_interface;
int fan_beep_need_rw;
- static const char * const names[] = {
- "it87",
- "it8712",
- "it8716",
- "it8718",
- "it8720",
- "it8721",
- "it8728",
- "it8782",
- "it8783",
- };
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
if (!devm_request_region(&pdev->dev, res->start, IT87_EC_EXTENT,
@@ -1912,8 +1905,29 @@ static int __devinit it87_probe(struct platform_device *pdev)
data->addr = res->start;
data->type = sio_data->type;
- data->revision = sio_data->revision;
- data->name = names[sio_data->type];
+ data->features = it87_devices[data->type].features;
+ data->name = it87_devices[sio_data->type].name;
+ /*
+ * IT8705F Datasheet 0.4.1, 3h = Version G.
+ * IT8712F Datasheet 0.9.1, section 8.3.5 indicates 8h = Version J.
+ * These are the first revisions with 16-bit tachometer support.
+ */
+ switch (data->type) {
+ case it87:
+ if (sio_data->revision >= 0x03) {
+ data->features &= ~FEAT_OLD_AUTOPWM;
+ data->features |= FEAT_16BIT_FAN;
+ }
+ break;
+ case it8712:
+ if (sio_data->revision >= 0x08) {
+ data->features &= ~FEAT_OLD_AUTOPWM;
+ data->features |= FEAT_16BIT_FAN;
+ }
+ break;
+ default:
+ break;
+ }
/* Now, we do the remaining detection. */
if ((it87_read_value(data, IT87_REG_CONFIG) & 0x80)
--
1.7.9.7
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table
2012-10-21 17:53 [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table Guenter Roeck
@ 2012-10-21 23:30 ` Phil Pokorny
2012-10-22 0:29 ` Guenter Roeck
1 sibling, 0 replies; 3+ messages in thread
From: Phil Pokorny @ 2012-10-21 23:30 UTC (permalink / raw)
To: lm-sensors
[-- Attachment #1.1: Type: text/plain, Size: 449 bytes --]
On Sun, Oct 21, 2012 at 10:53 AM, Guenter Roeck <linux@roeck-us.net> wrote:
> +
> +#define FEAT_12MV_ADC (1 << 0)
> +#define FEAT_NEWER_AUTOPWM (1 << 1)
> +#define FEAT_OLD_AUTOPWM (1 << 2)
>
Newer or older than what? Would it make more sense to number these? Gen1,
Gen2 or V1, V2 so that if yet another AUTOPWM mode/feature is added we
don't end up with "even_newer_autopwm"?
Just wondering,
Phil P.
[-- Attachment #1.2: Type: text/html, Size: 777 bytes --]
[-- Attachment #2: Type: text/plain, Size: 153 bytes --]
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table
2012-10-21 17:53 [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table Guenter Roeck
2012-10-21 23:30 ` Phil Pokorny
@ 2012-10-22 0:29 ` Guenter Roeck
1 sibling, 0 replies; 3+ messages in thread
From: Guenter Roeck @ 2012-10-22 0:29 UTC (permalink / raw)
To: lm-sensors
On Sun, Oct 21, 2012 at 04:30:38PM -0700, Phil Pokorny wrote:
> On Sun, Oct 21, 2012 at 10:53 AM, Guenter Roeck <linux@roeck-us.net> wrote:
>
> > +
> > +#define FEAT_12MV_ADC (1 << 0)
> > +#define FEAT_NEWER_AUTOPWM (1 << 1)
> > +#define FEAT_OLD_AUTOPWM (1 << 2)
> >
>
> Newer or older than what? Would it make more sense to number these? Gen1,
> Gen2 or V1, V2 so that if yet another AUTOPWM mode/feature is added we
> don't end up with "even_newer_autopwm"?
>
I simply replaced existing functions with a bit map. Choosing a different
definition for a bit doesn't make sense w/o changing the matching function
name as well. That would require a separate patch, and I am not sure if
it would make sense.
Guenter
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-10-22 0:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-21 17:53 [lm-sensors] [PATCH v2 8/8] hwmon: (it87) Manage device specific features with table Guenter Roeck
2012-10-21 23:30 ` Phil Pokorny
2012-10-22 0:29 ` Guenter Roeck
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.