All of lore.kernel.org
 help / color / mirror / Atom feed
From: j.dittmer@portrix.net (Jan Dittmer)
To: Greg KH <greg@kroah.com>
Cc: Mark Studebaker <mds@paradyne.com>,
	azarah@gentoo.org, KML <linux-kernel@vger.kernel.org>,
	Dominik Brodowski <linux@brodo.de>,
	sensors@Stimpy.netroedge.com
Subject: lm sensors sysfs file structure
Date: Thu, 19 May 2005 06:23:52 +0000	[thread overview]
Message-ID: <3E83459A.3090803@portrix.net> (raw)
In-Reply-To: <20030326225234.GA27436@kroah.com>

Greg KH wrote:
> That would give us one value per file, use no floating point in the
> kernel (fake or not) and generally make things a whole lot more orderly.
> Also, if a sensor does not have a max value (for example, I don't really
> know if this is true), instead of having to fake a value, it can just
> not create the file.  Then userspace can easily detect this is not
> supported, and is not a placeholder value.
> 

Is this the way you want to go? Just an example for the voltages.

Btw, is it indended behaviour of sysfs, that after writing to a file, 
the size is zero?

ds666:/sys/devices/legacy/i2c-0/i2c_dev_0# echo 100 > in4_min
ds666:/sys/devices/legacy/i2c-0/i2c_dev_0# ls -l in4_min
-rw-r--r--    1 root     root            0 Mar 27 19:18 in4_min


-r--r--r--    1 root     root         4096 Mar 27 19:18 in0_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in0_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in0_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in1_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in1_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in1_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in2_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in2_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in2_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in3_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in3_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in3_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in4_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in4_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in4_min

/* 7 voltage sensors */
static ssize_t show_in(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in[nr], nr) );
}

static ssize_t show_in_min(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in_min[nr], nr) );
}

static ssize_t show_in_max(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in_max[nr], nr) );
}

static ssize_t set_in_min(struct device *dev, const char *buf,
                 size_t count, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         unsigned long val = simple_strtoul(buf, NULL, 10);
         data->in_min[nr] = IN_TO_REG(val,nr);
         via686a_write_value(client, VIA686A_REG_IN_MIN(nr),
                         data->in_min[nr]);
         return count;
}
static ssize_t set_in_max(struct device *dev, const char *buf,
                 size_t count, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         unsigned long val = simple_strtoul(buf, NULL, 10);
         data->in_max[nr] = IN_TO_REG(val,nr);
         via686a_write_value(client, VIA686A_REG_IN_MAX(nr),
                         data->in_max[nr]);
         return count;
}
#define show_in_offset(offset)                                  \
static ssize_t                                                  \
         show_in##offset (struct device *dev, char *buf)         \
{                                                               \
         return show_in(dev, buf, 0x##offset);                   \
}                                                               \
static ssize_t                                                  \
         show_in##offset##_min (struct device *dev, char *buf)   \
{                                                               \
         return show_in_min(dev, buf, 0x##offset);               \
}                                                               \
static ssize_t                                                  \
         show_in##offset##_max (struct device *dev, char *buf)   \
{                                                               \
         return show_in_max(dev, buf, 0x##offset);               \
}                                                               \
static ssize_t set_in##offset##_min (struct device *dev,        \
                 const char *buf, size_t count)                  \
{                                                               \
         return set_in_min(dev, buf, count, 0x##offset);         \
}                                                               \
static ssize_t set_in##offset##_max (struct device *dev,        \
                         const char *buf, size_t count)          \
{                                                               \
         return set_in_max(dev, buf, count, 0x##offset);         \
}                                                               \
static DEVICE_ATTR(in##offset##_input,                          \
                 S_IRUGO, show_in##offset, NULL)                 \
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,         \
                 show_in##offset##_min, set_in##offset##_min)    \
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR,         \
                 show_in##offset##_max, set_in##offset##_max)

show_in_offset(0);
show_in_offset(1);
show_in_offset(2);
show_in_offset(3);
show_in_offset(4);

WARNING: multiple messages have this Message-ID (diff)
From: Jan Dittmer <j.dittmer@portrix.net>
To: Greg KH <greg@kroah.com>
Cc: Mark Studebaker <mds@paradyne.com>,
	azarah@gentoo.org, KML <linux-kernel@vger.kernel.org>,
	Dominik Brodowski <linux@brodo.de>,
	sensors@Stimpy.netroedge.com
Subject: Re: lm sensors sysfs file structure
Date: Thu, 27 Mar 2003 19:40:26 +0100	[thread overview]
Message-ID: <3E83459A.3090803@portrix.net> (raw)
In-Reply-To: <20030326225234.GA27436@kroah.com>

Greg KH wrote:
> That would give us one value per file, use no floating point in the
> kernel (fake or not) and generally make things a whole lot more orderly.
> Also, if a sensor does not have a max value (for example, I don't really
> know if this is true), instead of having to fake a value, it can just
> not create the file.  Then userspace can easily detect this is not
> supported, and is not a placeholder value.
> 

Is this the way you want to go? Just an example for the voltages.

Btw, is it indended behaviour of sysfs, that after writing to a file, 
the size is zero?

ds666:/sys/devices/legacy/i2c-0/i2c_dev_0# echo 100 > in4_min
ds666:/sys/devices/legacy/i2c-0/i2c_dev_0# ls -l in4_min
-rw-r--r--    1 root     root            0 Mar 27 19:18 in4_min


-r--r--r--    1 root     root         4096 Mar 27 19:18 in0_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in0_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in0_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in1_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in1_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in1_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in2_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in2_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in2_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in3_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in3_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in3_min
-r--r--r--    1 root     root         4096 Mar 27 19:18 in4_input
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in4_max
-rw-r--r--    1 root     root         4096 Mar 27 19:18 in4_min

/* 7 voltage sensors */
static ssize_t show_in(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in[nr], nr) );
}

static ssize_t show_in_min(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in_min[nr], nr) );
}

static ssize_t show_in_max(struct device *dev, char *buf, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         via686a_update_client(client);
         return sprintf(buf,"%ld\n", IN_FROM_REG(data->in_max[nr], nr) );
}

static ssize_t set_in_min(struct device *dev, const char *buf,
                 size_t count, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         unsigned long val = simple_strtoul(buf, NULL, 10);
         data->in_min[nr] = IN_TO_REG(val,nr);
         via686a_write_value(client, VIA686A_REG_IN_MIN(nr),
                         data->in_min[nr]);
         return count;
}
static ssize_t set_in_max(struct device *dev, const char *buf,
                 size_t count, int nr) {
         struct i2c_client *client = to_i2c_client(dev);
         struct via686a_data *data = i2c_get_clientdata(client);
         unsigned long val = simple_strtoul(buf, NULL, 10);
         data->in_max[nr] = IN_TO_REG(val,nr);
         via686a_write_value(client, VIA686A_REG_IN_MAX(nr),
                         data->in_max[nr]);
         return count;
}
#define show_in_offset(offset)                                  \
static ssize_t                                                  \
         show_in##offset (struct device *dev, char *buf)         \
{                                                               \
         return show_in(dev, buf, 0x##offset);                   \
}                                                               \
static ssize_t                                                  \
         show_in##offset##_min (struct device *dev, char *buf)   \
{                                                               \
         return show_in_min(dev, buf, 0x##offset);               \
}                                                               \
static ssize_t                                                  \
         show_in##offset##_max (struct device *dev, char *buf)   \
{                                                               \
         return show_in_max(dev, buf, 0x##offset);               \
}                                                               \
static ssize_t set_in##offset##_min (struct device *dev,        \
                 const char *buf, size_t count)                  \
{                                                               \
         return set_in_min(dev, buf, count, 0x##offset);         \
}                                                               \
static ssize_t set_in##offset##_max (struct device *dev,        \
                         const char *buf, size_t count)          \
{                                                               \
         return set_in_max(dev, buf, count, 0x##offset);         \
}                                                               \
static DEVICE_ATTR(in##offset##_input,                          \
                 S_IRUGO, show_in##offset, NULL)                 \
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,         \
                 show_in##offset##_min, set_in##offset##_min)    \
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR,         \
                 show_in##offset##_max, set_in##offset##_max)

show_in_offset(0);
show_in_offset(1);
show_in_offset(2);
show_in_offset(3);
show_in_offset(4);


  parent reply	other threads:[~2005-05-19  6:23 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-25  8:53 i2c driver changes for 2.5.66; adding w83781d support Martin Schlemmer
2003-03-25 17:56 ` Greg KH
2003-03-26 19:04   ` w83781d i2c driver updated for 2.5.66 (without sysfs support) Martin Schlemmer
2005-05-19  6:23     ` Martin Schlemmer
2003-03-26 19:40     ` Jan Dittmer
2005-05-19  6:23       ` Jan Dittmer
2003-03-26 19:54       ` Martin Schlemmer
2005-05-19  6:23         ` Martin Schlemmer
2003-03-26 20:26       ` Greg KH
2005-05-19  6:23         ` Greg KH
2003-03-26 20:43         ` Christoph Hellwig
2005-05-19  6:23           ` Christoph Hellwig
2003-03-26 21:23           ` Greg KH
2005-05-19  6:23             ` Greg KH
2003-03-26 22:26         ` Mark Studebaker
2005-05-19  6:23           ` Mark Studebaker
2003-03-26 22:52           ` lm sensors sysfs file structure Greg KH
2005-05-19  6:23             ` Greg KH
2003-03-27 10:46             ` Jan Dittmer
2005-05-19  6:23               ` Jan Dittmer
2003-03-27 10:50               ` Martin Schlemmer
2005-05-19  6:23                 ` Martin Schlemmer
2003-03-27 12:27                 ` Jan Dittmer
2005-05-19  6:23                   ` Jan Dittmer
2003-03-27 12:33                   ` Martin Schlemmer
2005-05-19  6:23                     ` Martin Schlemmer
2003-03-27 13:05                     ` Jan Dittmer
2005-05-19  6:23                       ` Jan Dittmer
2003-03-27 13:31                       ` Jean Delvare
2005-05-19  6:23                         ` Jean Delvare
2003-03-27 17:16                         ` Mark M. Hoffman
2005-05-19  6:23                           ` Mark M. Hoffman
2003-03-27 17:25               ` Greg KH
2005-05-19  6:23                 ` Greg KH
2003-03-27 18:06                 ` Jan Dittmer
2005-05-19  6:23                   ` Jan Dittmer
2003-03-27 18:13                   ` Greg KH
2005-05-19  6:23                     ` Greg KH
2003-03-30 19:23                 ` Pavel Machek
2005-05-19  6:23                   ` Pavel Machek
2003-04-01  6:44                   ` Greg KH
2005-05-19  6:23                     ` Greg KH
2003-04-01 20:22                     ` Pavel Machek
2005-05-19  6:23                       ` Pavel Machek
2003-04-01 23:27                     ` Dave Jones
2005-05-19  6:23                       ` Dave Jones
2003-04-03  0:28                       ` Greg KH
2005-05-19  6:23                         ` Greg KH
2003-04-03 10:49                         ` Dave Jones
2005-05-19  6:23                           ` Dave Jones
2003-04-03 18:43                           ` Dominik Brodowski
2005-05-19  6:23                             ` Dominik Brodowski
2003-03-27 18:40             ` Jan Dittmer [this message]
2005-05-19  6:23               ` Jan Dittmer
2003-03-27 18:52               ` Greg KH
2005-05-19  6:23                 ` Greg KH
2003-03-27 18:17                 ` Patrick Mochel
2005-05-19  6:23                   ` Patrick Mochel
2003-03-27 18:57                 ` Jan Dittmer
2003-03-27 19:15                 ` Martin Schlemmer
2005-05-19  6:23                   ` Martin Schlemmer
2003-03-27 19:25                   ` Greg KH
2005-05-19  6:23                     ` Greg KH
2003-03-27 19:42             ` Greg KH
2005-05-19  6:23               ` Greg KH
2003-03-27 20:32               ` Jan Dittmer
2005-05-19  6:23                 ` Jan Dittmer
2003-03-27 21:53                 ` Greg KH
2005-05-19  6:23                   ` Greg KH
2003-03-27 22:23                   ` Mark M. Hoffman
2005-05-19  6:23                     ` Mark M. Hoffman
2003-03-28  6:05                   ` Martin Schlemmer
2005-05-19  6:23                     ` Martin Schlemmer
2003-03-28 18:34             ` Pavel Machek
2005-05-19  6:23               ` Pavel Machek
2003-03-26 20:29     ` w83781d i2c driver updated for 2.5.66 (without sysfs support) Greg KH
2005-05-19  6:23       ` Greg KH
2003-03-26 23:34       ` Martin Schlemmer
2005-05-19  6:23         ` Martin Schlemmer
2003-03-26 23:46         ` Greg KH
2005-05-19  6:23           ` Greg KH
2003-03-30 12:47           ` [PATCH-2.5] w83781d i2c driver updated for 2.5.66-bk4 (with sysfs support, empty tree) Martin Schlemmer
2005-05-19  6:23             ` [PATCH-2.5] w83781d i2c driver updated for 2.5.66-bk4 (with sysfs Martin Schlemmer
2003-04-02 22:22             ` [PATCH-2.5] w83781d i2c driver updated for 2.5.66-bk4 (with sysfs support, empty tree) Greg KH
2005-05-19  6:23               ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2003-03-27 23:00 lm sensors sysfs file structure Albert Cahalan
2003-03-27 23:10 ` Greg KH
2003-03-28  7:21   ` Martin Schlemmer
2003-03-28  7:40     ` Greg KH
2005-05-19  6:23       ` Greg KH
2003-04-03 21:19 Grover, Andrew
2005-05-19  6:23 ` Grover, Andrew
2003-04-14 15:16 ` Patrick Mochel
2005-05-19  6:23   ` Patrick Mochel

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=3E83459A.3090803@portrix.net \
    --to=j.dittmer@portrix.net \
    --cc=azarah@gentoo.org \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@brodo.de \
    --cc=mds@paradyne.com \
    --cc=sensors@Stimpy.netroedge.com \
    /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 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.