From: Hans de Goede <hdegoede@redhat.com>
To: Giel van Schijndel <me@mortis.eu>
Cc: Jean Delvare <khali@linux-fr.org>,
Jonathan Cameron <jic23@cam.ac.uk>,
Laurens Leemans <laurens@signips.com>,
lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] [RFC] hwmon: f71882fg: Add support for the Fintek F71808E
Date: Wed, 24 Mar 2010 09:25:08 +0100 [thread overview]
Message-ID: <4BA9CC64.5010807@redhat.com> (raw)
In-Reply-To: <1269385936-3440-1-git-send-email-me@mortis.eu>
Hi,
See comments inline.
On 03/24/2010 12:12 AM, Giel van Schijndel wrote:
> Allow device probing to recognise the Fintek F71808E.
>
> Sysfs interface:
> * Fan/pwm control is the same as for F71889FG
> * Temperature and voltage sensor handling is largely the same as for
> the F71889FG
> - Has one temperature sensor less (doesn't have temp3)
> - Misses one voltage sensor (doesn't have V6, thus in6_input refers to
> what in7_input refers for F71889FG)
>
> For the purpose of the sysfs interface fxxxx_in_temp_attr[] is split up
> such that it can largely be reused.
> ---
> Documentation/hwmon/f71882fg | 4 ++
> drivers/hwmon/Kconfig | 6 ++--
> drivers/hwmon/f71882fg.c | 80 +++++++++++++++++++++++++++++++++++++----
> 3 files changed, 79 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/hwmon/f71882fg b/Documentation/hwmon/f71882fg
> index a7952c2..1a07fd6 100644
> --- a/Documentation/hwmon/f71882fg
> +++ b/Documentation/hwmon/f71882fg
> @@ -2,6 +2,10 @@ Kernel driver f71882fg
> ======================
>
> Supported chips:
> + * Fintek F71808E
> + Prefix: 'f71808fg'
> + Addresses scanned: none, address read from Super I/O config space
> + Datasheet: Not public
> * Fintek F71858FG
> Prefix: 'f71858fg'
> Addresses scanned: none, address read from Super I/O config space
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index e4595e6..7053608 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -332,11 +332,11 @@ config SENSORS_F71805F
> will be called f71805f.
>
> config SENSORS_F71882FG
> - tristate "Fintek F71858FG, F71862FG, F71882FG, F71889FG and F8000"
> + tristate "Fintek F71808E, F71858FG, F71862FG, F71882FG, F71889FG and F8000"
> depends on EXPERIMENTAL
> help
> - If you say yes here you get support for hardware monitoring
> - features of the Fintek F71858FG, F71862FG/71863FG, F71882FG/F71883FG,
> + If you say yes here you get support for hardware monitoring features
> + of the Fintek F71808E, F71858FG, F71862FG/71863FG, F71882FG/F71883FG,
> F71889FG and F8000 Super-I/O chips.
>
> This driver can also be built as a module. If so, the module
> diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c
> index 25e1cad..b290b87 100644
> --- a/drivers/hwmon/f71882fg.c
> +++ b/drivers/hwmon/f71882fg.c
> @@ -45,6 +45,7 @@
> #define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */
>
> #define SIO_FINTEK_ID 0x1934 /* Manufacturers ID */
> +#define SIO_F71808_ID 0x0901 /* Chipset ID */
> #define SIO_F71858_ID 0x0507 /* Chipset ID */
> #define SIO_F71862_ID 0x0601 /* Chipset ID */
> #define SIO_F71882_ID 0x0541 /* Chipset ID */
> @@ -96,9 +97,10 @@ static unsigned short force_id;
> module_param(force_id, ushort, 0);
> MODULE_PARM_DESC(force_id, "Override the detected device ID");
>
> -enum chips { f71858fg, f71862fg, f71882fg, f71889fg, f8000 };
> +enum chips { f71808fg, f71858fg, f71862fg, f71882fg, f71889fg, f8000 };
>
> static const char *f71882fg_names[] = {
> + "f71808fg",
> "f71858fg",
> "f71862fg",
> "f71882fg",
> @@ -306,8 +308,8 @@ static struct sensor_device_attribute_2 f71858fg_in_temp_attr[] = {
> SENSOR_ATTR_2(temp3_fault, S_IRUGO, show_temp_fault, NULL, 0, 2),
> };
>
> -/* Temp and in attr common to the f71862fg, f71882fg and f71889fg */
> -static struct sensor_device_attribute_2 fxxxx_in_temp_attr[] = {
> +/* In attr common to the f71862fg, f71882fg and f71889fg */
> +static struct sensor_device_attribute_2 fxxxx_in_attr[] = {
> SENSOR_ATTR_2(in0_input, S_IRUGO, show_in, NULL, 0, 0),
> SENSOR_ATTR_2(in1_input, S_IRUGO, show_in, NULL, 0, 1),
> SENSOR_ATTR_2(in2_input, S_IRUGO, show_in, NULL, 0, 2),
> @@ -317,6 +319,22 @@ static struct sensor_device_attribute_2 fxxxx_in_temp_attr[] = {
> SENSOR_ATTR_2(in6_input, S_IRUGO, show_in, NULL, 0, 6),
> SENSOR_ATTR_2(in7_input, S_IRUGO, show_in, NULL, 0, 7),
> SENSOR_ATTR_2(in8_input, S_IRUGO, show_in, NULL, 0, 8),
> +};
> +
> +/* In attr for the f71808fg */
> +static struct sensor_device_attribute_2 f71808_in_attr[] = {
> + SENSOR_ATTR_2(in0_input, S_IRUGO, show_in, NULL, 0, 0),
> + SENSOR_ATTR_2(in1_input, S_IRUGO, show_in, NULL, 0, 1),
> + SENSOR_ATTR_2(in2_input, S_IRUGO, show_in, NULL, 0, 2),
> + SENSOR_ATTR_2(in3_input, S_IRUGO, show_in, NULL, 0, 3),
> + SENSOR_ATTR_2(in4_input, S_IRUGO, show_in, NULL, 0, 4),
> + SENSOR_ATTR_2(in5_input, S_IRUGO, show_in, NULL, 0, 5),
> + SENSOR_ATTR_2(in6_input, S_IRUGO, show_in, NULL, 0, 7),
> + SENSOR_ATTR_2(in7_input, S_IRUGO, show_in, NULL, 0, 8),
> +};
> +
> +/* Temp attr common to the f71808fg, f71862fg, f71882fg and f71889fg */
> +static struct sensor_device_attribute_2 fxxxx_temp_attr[] = {
> SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, 0, 1),
> SENSOR_ATTR_2(temp1_max, S_IRUGO|S_IWUSR, show_temp_max,
> store_temp_max, 0, 1),
> @@ -355,6 +373,10 @@ static struct sensor_device_attribute_2 fxxxx_in_temp_attr[] = {
> store_temp_beep, 0, 6),
> SENSOR_ATTR_2(temp2_type, S_IRUGO, show_temp_type, NULL, 0, 2),
> SENSOR_ATTR_2(temp2_fault, S_IRUGO, show_temp_fault, NULL, 0, 2),
> +};
> +
> +/* Temp and in attr common to the f71862fg, f71882fg and f71889fg */
> +static struct sensor_device_attribute_2 f71862_temp_attr[] = {
> SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, 0, 3),
> SENSOR_ATTR_2(temp3_max, S_IRUGO|S_IWUSR, show_temp_max,
> store_temp_max, 0, 3),
> @@ -989,6 +1011,11 @@ static struct f71882fg_data *f71882fg_update_device(struct device *dev)
> data->temp_type[1] = 6;
> break;
> }
> + } else if (data->type == f71808fg) {
> + reg = f71882fg_read8(data, F71882FG_REG_TEMP_TYPE);
> + data->temp_type[1] = (reg& 0x02) ? 2 : 4;
> + data->temp_type[2] = (reg& 0x04) ? 2 : 4;
> +
> } else {
> reg2 = f71882fg_read8(data, F71882FG_REG_PECI);
> if ((reg2& 0x03) == 0x01)
> @@ -1871,7 +1898,8 @@ static ssize_t store_pwm_auto_point_temp(struct device *dev,
>
> val /= 1000;
>
> - if (data->type == f71889fg)
> + if (data->type == f71889fg
> + || data->type == f71808fg)
> val = SENSORS_LIMIT(val, -128, 127);
> else
> val = SENSORS_LIMIT(val, 0, 127);
> @@ -1974,8 +2002,27 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
> /* fall through! */
> case f71862fg:
> err = f71882fg_create_sysfs_files(pdev,
> - fxxxx_in_temp_attr,
> - ARRAY_SIZE(fxxxx_in_temp_attr));
> + f71862_temp_attr,
> + ARRAY_SIZE(f71862_temp_attr));
> + if (err)
> + goto exit_unregister_sysfs;
> + err = f71882fg_create_sysfs_files(pdev,
> + fxxxx_in_attr,
> + ARRAY_SIZE(fxxxx_in_attr));
> + if (err)
> + goto exit_unregister_sysfs;
> + /* fall through! */
Ugh, please don't fall through, and then have an if below to only do
some parts of the case falling through. This is quite confusing
at first I thought your code was buggy I had to read it twice to notice
the if. Instead just duplicate the following lines:
> + err = f71882fg_create_sysfs_files(pdev,
> + fxxxx_temp_attr,
> + ARRAY_SIZE(fxxxx_temp_attr));
In the f71862fg case, end the f71862fg case with a break and remove
the if test from the f71808fg case.
> + case f71808fg:
> + if (data->type == f71808fg) {
> + err = f71882fg_create_sysfs_files(pdev,
> + f71808_in_attr,
> + ARRAY_SIZE(f71808_in_attr));
> + if (err)
> + goto exit_unregister_sysfs;
> + }
> + err = f71882fg_create_sysfs_files(pdev,
> + fxxxx_temp_attr,
> + ARRAY_SIZE(fxxxx_temp_attr));
> break;
> case f8000:
> err = f71882fg_create_sysfs_files(pdev,
> @@ -2002,6 +2049,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
> case f71862fg:
> err = (data->pwm_enable& 0x15) != 0x15;
> break;
> + case f71808fg:
> case f71882fg:
> case f71889fg:
> err = 0;
> @@ -2047,6 +2095,7 @@ static int __devinit f71882fg_probe(struct platform_device *pdev)
> f8000_auto_pwm_attr,
> ARRAY_SIZE(f8000_auto_pwm_attr));
> break;
> + case f71808fg:
> case f71889fg:
> for (i = 0; i< nr_fans; i++) {
> data->pwm_auto_point_mapping[i] =
> @@ -2126,8 +2175,20 @@ static int f71882fg_remove(struct platform_device *pdev)
> /* fall through! */
> case f71862fg:
> f71882fg_remove_sysfs_files(pdev,
> - fxxxx_in_temp_attr,
> - ARRAY_SIZE(fxxxx_in_temp_attr));
> + f71862_temp_attr,
> + ARRAY_SIZE(f71862_temp_attr));
> + f71882fg_remove_sysfs_files(pdev,
> + fxxxx_in_attr,
> + ARRAY_SIZE(fxxxx_in_attr));
> + /* fall through! */
Idem.
> + case f71808fg:
> + if (data->type == f71808fg)
> + f71882fg_remove_sysfs_files(pdev,
> + f71808_in_attr,
> + ARRAY_SIZE(f71808_in_attr));
> + f71882fg_remove_sysfs_files(pdev,
> + fxxxx_temp_attr,
> + ARRAY_SIZE(fxxxx_temp_attr));
> break;
> case f8000:
> f71882fg_remove_sysfs_files(pdev,
> @@ -2195,6 +2256,9 @@ static int __init f71882fg_find(int sioaddr, unsigned short *address,
>
> devid = force_id ? force_id : superio_inw(sioaddr, SIO_REG_DEVID);
> switch (devid) {
> + case SIO_F71808_ID:
> + sio_data->type = f71808fg;
> + break;
> case SIO_F71858_ID:
> sio_data->type = f71858fg;
> break;
Regards,
Hans
next prev parent reply other threads:[~2010-03-24 8:24 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-23 14:12 [PATCH] hwmon: f71882fg: properly acquire I/O regions while probing Giel van Schijndel
2010-03-23 14:17 ` Giel van Schijndel
2010-03-23 23:12 ` [PATCH 1/4] [RFC] hwmon: f71882fg: Add support for the Fintek F71808E Giel van Schijndel
2010-03-23 23:12 ` [PATCH 2/4] hwmon: f71882fg: prepare for addition of watchdog support Giel van Schijndel
2010-03-23 23:12 ` [PATCH 3/4] hwmon: f71882fg: add watchdog detection code Giel van Schijndel
2010-03-23 23:12 ` [PATCH 4/4] [RFC] hwmon: f71882fg: Add watchdog API for F71808E and F71889 Giel van Schijndel
2010-03-23 23:26 ` Giel van Schijndel
2010-03-24 8:37 ` Hans de Goede
2010-03-24 9:36 ` Giel van Schijndel
2010-03-24 10:33 ` Hans de Goede
2010-03-24 15:35 ` Giel van Schijndel
2010-03-24 15:51 ` Alan Cox
2010-03-24 16:20 ` Hans de Goede
2010-03-24 20:35 ` Giel van Schijndel
2010-04-25 21:20 ` [lm-sensors] " Jim Cromie
2010-03-25 8:54 ` Giel van Schijndel
2010-03-25 10:40 ` Giel van Schijndel
2010-03-25 12:50 ` Alan Cox
2010-03-25 13:06 ` Hans de Goede
2010-03-25 13:17 ` [PATCH 1/3] resource: shared I/O region support Giel van Schijndel
2010-03-25 13:17 ` [PATCH 2/3] hwmon: f71882fg: use a muxed resource lock for the Super I/O port Giel van Schijndel
2010-03-25 13:17 ` [PATCH 3/3] [RFC] watchdog: f71808e_wdt: new watchdog driver for Fintek F71808E Giel van Schijndel
2010-03-30 9:06 ` Giel van Schijndel
2010-05-20 7:52 ` Wim Van Sebroeck
2010-05-25 21:08 ` Giel van Schijndel
2010-05-26 7:38 ` Wim Van Sebroeck
2010-07-31 21:36 ` Giel van Schijndel
2010-03-25 21:10 ` [PATCH 2/3] hwmon: f71882fg: use a muxed resource lock for the Super I/O port Hans de Goede
2010-04-25 10:35 ` Giel van Schijndel
2010-07-31 21:21 ` Giel van Schijndel
2010-03-25 15:57 ` [PATCH 1/3] resource: shared I/O region support Alan Cox
2010-03-25 18:03 ` Giel van Schijndel
2010-03-25 18:16 ` Alan Cox
2010-03-29 8:18 ` Giel van Schijndel
2010-03-29 16:07 ` Jesse Barnes
2010-03-29 17:38 ` Giel van Schijndel
2010-03-29 17:44 ` Giel van Schijndel
2010-03-29 17:45 ` H. Peter Anvin
2010-03-29 18:06 ` Jesse Barnes
2010-03-29 18:17 ` H. Peter Anvin
2010-03-29 18:29 ` Alan Cox
2010-04-02 20:29 ` Jesse Barnes
2010-03-29 18:39 ` Alan Cox
2010-03-29 18:56 ` H. Peter Anvin
2010-03-29 17:59 ` Jesse Barnes
2010-03-29 17:59 ` Jesse Barnes
2010-03-24 8:26 ` [PATCH 2/4] hwmon: f71882fg: prepare for addition of watchdog support Hans de Goede
2010-03-24 8:36 ` Hans de Goede
2010-03-24 8:25 ` Hans de Goede [this message]
2010-03-24 9:23 ` [PATCH 1/4] hwmon: f71882fg: Add support for the Fintek F71808E Giel van Schijndel
2010-03-24 10:31 ` Hans de Goede
2010-07-31 23:31 ` Giel van Schijndel
2010-08-01 6:12 ` Hans de Goede
2010-08-01 13:22 ` Giel van Schijndel
2010-08-01 13:30 ` [PATCH] " Giel van Schijndel
2010-08-04 11:36 ` Hans de Goede
2010-08-04 15:44 ` Giel van Schijndel
2010-08-13 10:56 ` Hans de Goede
2010-08-10 19:11 ` Giel van Schijndel
2010-08-13 10:01 ` Hans de Goede
2010-08-18 18:24 ` Andrew Morton
2010-08-22 18:04 ` Hans de Goede
2010-08-22 18:28 ` Giel van Schijndel
2010-08-01 13:30 ` [PATCH 1/2] hwmon: f71882fg: use a muxed resource lock for the Super I/O port Giel van Schijndel
2010-08-01 13:30 ` [PATCH 2/2] watchdog: f71808e_wdt: new watchdog driver for Fintek F71808E and F71882FG Giel van Schijndel
2010-08-04 11:38 ` [PATCH 1/2] hwmon: f71882fg: use a muxed resource lock for the Super I/O port Hans de Goede
2010-10-02 22:59 ` Giel van Schijndel
2010-10-03 1:06 ` Guenter Roeck
2010-10-03 9:01 ` Jean Delvare
2010-10-03 12:09 ` [PATCH] " Giel van Schijndel
2010-10-03 13:31 ` Guenter Roeck
2010-03-23 23:01 ` [PATCH] hwmon: f71882fg: properly acquire I/O regions while probing Giel van Schijndel
2010-03-24 8:14 ` Hans de Goede
2010-03-24 8:46 ` Giel van Schijndel
2010-03-24 9:09 ` [PATCH] hwmon: f71882fg: code cleanup Giel van Schijndel
2010-03-24 12:54 ` Jean Delvare
2010-03-24 9:09 ` [PATCH] hwmon: f71882fg: acquire I/O regions while we're working with them Giel van Schijndel
2010-03-24 9:28 ` [PATCH] hwmon: f71882fg: properly acquire I/O regions while probing Jean Delvare
2010-03-24 9:29 ` Jean Delvare
2010-03-24 9:34 ` Giel van Schijndel
2010-03-24 12:54 ` Jean Delvare
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BA9CC64.5010807@redhat.com \
--to=hdegoede@redhat.com \
--cc=jic23@cam.ac.uk \
--cc=khali@linux-fr.org \
--cc=laurens@signips.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lm-sensors@lm-sensors.org \
--cc=me@mortis.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).