2009-11-30 11:45:31

by Amit Kucheria

[permalink] [raw]
Subject: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

Introduce a new class of devices to handle ambient light sensors. Currently
only one sysfs inteface, 'illuminance' is introduced. More will be added as
drivers are ported to use this new class.

Amit Kucheria (1):
als: add unique device-ids to the als device class

Zhang Rui (1):
introduce ALS sysfs class

Documentation/ABI/testing/sysfs-class-als | 9 ++
MAINTAINERS | 6 ++
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/als/Kconfig | 10 +++
drivers/als/Makefile | 5 +
drivers/als/als_sys.c | 116 +++++++++++++++++++++++++++++
include/linux/als_sys.h | 35 +++++++++
8 files changed, 184 insertions(+), 0 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-als
create mode 100644 drivers/als/Kconfig
create mode 100644 drivers/als/Makefile
create mode 100644 drivers/als/als_sys.c
create mode 100644 include/linux/als_sys.h


2009-11-30 11:46:33

by Amit Kucheria

[permalink] [raw]
Subject: [PATCH 1/2] introduce ALS sysfs class

From: Zhang Rui <[email protected]>

This is a refresh of the ALS sysfs class driver.

ALS sysfs class device provides a standard sysfs interface
for Ambient Light Sensor devices.

Only one sysfs I/F is introduced currently.
/sys/class/als/xxx/illuminance:
indicates the amount of light incident upon a specified surface area.

Signed-off-by: Zhang Rui <[email protected]>
Acked-by: Jonathan Cameron <[email protected]>
Acked-by: Amit Kucheria <[email protected]>
---
Documentation/ABI/testing/sysfs-class-als | 9 ++++
MAINTAINERS | 6 ++
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/als/Kconfig | 10 ++++
drivers/als/Makefile | 5 ++
drivers/als/als_sys.c | 74 +++++++++++++++++++++++++++++
include/linux/als_sys.h | 35 ++++++++++++++
8 files changed, 142 insertions(+), 0 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-als
create mode 100644 drivers/als/Kconfig
create mode 100644 drivers/als/Makefile
create mode 100644 drivers/als/als_sys.c
create mode 100644 include/linux/als_sys.h

diff --git a/Documentation/ABI/testing/sysfs-class-als b/Documentation/ABI/testing/sysfs-class-als
new file mode 100644
index 0000000..d3b33f3
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-als
@@ -0,0 +1,9 @@
+What: /sys/class/als/.../illuminance
+Date: Sep. 2009
+KernelVersion: 2.6.32
+Contact: Zhang Rui <[email protected]>
+Description: Current Ambient Light Illuminance reported by
+ native ALS driver
+ Unit: lux (lumens per square meter)
+ RO
+
diff --git a/MAINTAINERS b/MAINTAINERS
index c824b4d..0894a1c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -409,6 +409,12 @@ S: Maintained for 2.4; PCI support for 2.6.
L: [email protected]
F: arch/alpha/

+AMBIENT LIGHT SENSOR
+M: Zhang Rui <[email protected]>
+S: Supported
+F: include/linux/als_sys.h
+F: drivers/als/
+
AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
M: Thomas Dahlmann <[email protected]>
L: [email protected] (moderated for non-subscribers)
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 48bbdbe..67cf884 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -62,6 +62,8 @@ source "drivers/power/Kconfig"

source "drivers/hwmon/Kconfig"

+source "drivers/als/Kconfig"
+
source "drivers/thermal/Kconfig"

source "drivers/watchdog/Kconfig"
diff --git a/drivers/Makefile b/drivers/Makefile
index 6ee53c7..ecb6d5d 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -77,6 +77,7 @@ obj-$(CONFIG_PPS) += pps/
obj-$(CONFIG_W1) += w1/
obj-$(CONFIG_POWER_SUPPLY) += power/
obj-$(CONFIG_HWMON) += hwmon/
+obj-$(CONFIG_ALS) += als/
obj-$(CONFIG_THERMAL) += thermal/
obj-$(CONFIG_WATCHDOG) += watchdog/
obj-$(CONFIG_PHONE) += telephony/
diff --git a/drivers/als/Kconfig b/drivers/als/Kconfig
new file mode 100644
index 0000000..200c52b
--- /dev/null
+++ b/drivers/als/Kconfig
@@ -0,0 +1,10 @@
+#
+# Ambient Light Sensor sysfs device configuration
+#
+
+menuconfig ALS
+ tristate "Ambient Light Sensor sysfs device"
+ help
+ This framework provides a generic sysfs I/F for Ambient Light
+ Sensor devices.
+ If you want this support, you should say Y or M here.
diff --git a/drivers/als/Makefile b/drivers/als/Makefile
new file mode 100644
index 0000000..a527197
--- /dev/null
+++ b/drivers/als/Makefile
@@ -0,0 +1,5 @@
+#
+# Makefile for sensor chip drivers.
+#
+
+obj-$(CONFIG_ALS) += als_sys.o
diff --git a/drivers/als/als_sys.c b/drivers/als/als_sys.c
new file mode 100644
index 0000000..e1d6395
--- /dev/null
+++ b/drivers/als/als_sys.c
@@ -0,0 +1,74 @@
+/*
+ * als_sys.c - Ambient Light Sensor Sysfs support.
+ *
+ * Copyright (C) 2009 Intel Corp
+ * Copyright (C) 2009 Zhang Rui <[email protected]>
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/kdev_t.h>
+
+MODULE_AUTHOR("Zhang Rui <[email protected]>");
+MODULE_DESCRIPTION("Ambient Light Sensor sysfs/class support");
+MODULE_LICENSE("GPL");
+
+static struct class *als_class;
+
+/**
+ * als_device_register - register a new Ambient Light Sensor class device
+ * @parent: the device to register.
+ *
+ * Returns the pointer to the new device
+ */
+struct device *als_device_register(struct device *dev, char *name)
+{
+ return device_create(als_class, dev, MKDEV(0, 0), NULL, name);
+}
+EXPORT_SYMBOL(als_device_register);
+
+/**
+ * als_device_unregister - removes the registered ALS class device
+ * @dev: the class device to destroy.
+ */
+void als_device_unregister(struct device *dev)
+{
+ device_unregister(dev);
+}
+EXPORT_SYMBOL(als_device_unregister);
+
+static int __init als_init(void)
+{
+ als_class = class_create(THIS_MODULE, "als");
+ if (IS_ERR(als_class)) {
+ printk(KERN_ERR "als_sys.c: couldn't create sysfs class\n");
+ return PTR_ERR(als_class);
+ }
+ return 0;
+}
+
+static void __exit als_exit(void)
+{
+ class_destroy(als_class);
+}
+
+subsys_initcall(als_init);
+module_exit(als_exit);
diff --git a/include/linux/als_sys.h b/include/linux/als_sys.h
new file mode 100644
index 0000000..500f300
--- /dev/null
+++ b/include/linux/als_sys.h
@@ -0,0 +1,35 @@
+/*
+ * als_sys.h
+ *
+ * Copyright (C) 2009 Intel Corp
+ * Copyright (C) 2009 Zhang Rui <[email protected]>
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+#ifndef __ALS_SYS_H__
+#define __ALS_SYS_H__
+
+#include <linux/device.h>
+
+#define ALS_ILLUMINANCE_MIN 0
+#define ALS_ILLUMINANCE_MAX -1
+
+struct device *als_device_register(struct device *dev, char *name);
+void als_device_unregister(struct device *dev);
+
+#endif /* __ALS_SYS_H__ */
--
1.6.3.3

2009-11-30 11:46:50

by Amit Kucheria

[permalink] [raw]
Subject: [PATCH 2/2] als: add unique device-ids to the als device class

Other devices classes such as hwmon and input class handle assignment of
unique device-ids inside the core functions instead of pushing it out to
individual drivers. This reduces code duplication and resulting bugs.

V2 - Updated the header to reflect the change is signature of
als_device_register(). Thanks to Jean for the review.

V1 - Add capability to als core to create unique ids

Signed-off-by: Amit Kucheria <[email protected]>
Acked-by: Jean Delvare <[email protected]>
Acked-by: Jonathan Cameron <[email protected]>
---
drivers/als/als_sys.c | 48 ++++++++++++++++++++++++++++++++++++++++++++--
include/linux/als_sys.h | 2 +-
2 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/drivers/als/als_sys.c b/drivers/als/als_sys.c
index e1d6395..aa15ad8 100644
--- a/drivers/als/als_sys.c
+++ b/drivers/als/als_sys.c
@@ -26,22 +26,55 @@
#include <linux/device.h>
#include <linux/err.h>
#include <linux/kdev_t.h>
+#include <linux/idr.h>

MODULE_AUTHOR("Zhang Rui <[email protected]>");
MODULE_DESCRIPTION("Ambient Light Sensor sysfs/class support");
MODULE_LICENSE("GPL");

+#define ALS_ID_PREFIX "als"
+#define ALS_ID_FORMAT ALS_ID_PREFIX "%d"
+
static struct class *als_class;

+static DEFINE_IDR(als_idr);
+static DEFINE_SPINLOCK(idr_lock);
+
/**
* als_device_register - register a new Ambient Light Sensor class device
* @parent: the device to register.
*
* Returns the pointer to the new device
*/
-struct device *als_device_register(struct device *dev, char *name)
+struct device *als_device_register(struct device *dev)
{
- return device_create(als_class, dev, MKDEV(0, 0), NULL, name);
+ int id, err;
+ struct device *alsdev;
+
+again:
+ if (unlikely(idr_pre_get(&als_idr, GFP_KERNEL) == 0))
+ return ERR_PTR(-ENOMEM);
+
+ spin_lock(&idr_lock);
+ err = idr_get_new(&als_idr, NULL, &id);
+ spin_unlock(&idr_lock);
+
+ if (unlikely(err == -EAGAIN))
+ goto again;
+ else if (unlikely(err))
+ return ERR_PTR(err);
+
+ id = id & MAX_ID_MASK;
+ alsdev = device_create(als_class, dev, MKDEV(0, 0), NULL,
+ ALS_ID_FORMAT, id);
+
+ if (IS_ERR(alsdev)) {
+ spin_lock(&idr_lock);
+ idr_remove(&als_idr, id);
+ spin_unlock(&idr_lock);
+ }
+
+ return alsdev;
}
EXPORT_SYMBOL(als_device_register);

@@ -51,7 +84,16 @@ EXPORT_SYMBOL(als_device_register);
*/
void als_device_unregister(struct device *dev)
{
- device_unregister(dev);
+ int id;
+
+ if (likely(sscanf(dev_name(dev), ALS_ID_FORMAT, &id) == 1)) {
+ device_unregister(dev);
+ spin_lock(&idr_lock);
+ idr_remove(&als_idr, id);
+ spin_unlock(&idr_lock);
+ } else
+ dev_dbg(dev->parent,
+ "als_device_unregister() failed: bad class ID!\n");
}
EXPORT_SYMBOL(als_device_unregister);

diff --git a/include/linux/als_sys.h b/include/linux/als_sys.h
index 500f300..41793f7 100644
--- a/include/linux/als_sys.h
+++ b/include/linux/als_sys.h
@@ -29,7 +29,7 @@
#define ALS_ILLUMINANCE_MIN 0
#define ALS_ILLUMINANCE_MAX -1

-struct device *als_device_register(struct device *dev, char *name);
+struct device *als_device_register(struct device *dev);
void als_device_unregister(struct device *dev);

#endif /* __ALS_SYS_H__ */
--
1.6.3.3

2009-12-07 14:50:23

by Amit Kucheria

[permalink] [raw]
Subject: Re: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

On Mon, Nov 30, 2009 at 1:45 PM, Amit Kucheria
<[email protected]> wrote:
> Introduce a new class of devices to handle ambient light sensors. Currently
> only one sysfs inteface, 'illuminance' is introduced. More will be added as
> drivers are ported to use this new class.
>
> Amit Kucheria (1):
> ?als: add unique device-ids to the als device class
>
> Zhang Rui (1):
> ?introduce ALS sysfs class
>
> ?Documentation/ABI/testing/sysfs-class-als | ? ?9 ++
> ?MAINTAINERS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?6 ++
> ?drivers/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?2 +
> ?drivers/Makefile ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?1 +
> ?drivers/als/Kconfig ? ? ? ? ? ? ? ? ? ? ? | ? 10 +++
> ?drivers/als/Makefile ? ? ? ? ? ? ? ? ? ? ?| ? ?5 +
> ?drivers/als/als_sys.c ? ? ? ? ? ? ? ? ? ? | ?116 +++++++++++++++++++++++++++++
> ?include/linux/als_sys.h ? ? ? ? ? ? ? ? ? | ? 35 +++++++++
> ?8 files changed, 184 insertions(+), 0 deletions(-)
> ?create mode 100644 Documentation/ABI/testing/sysfs-class-als
> ?create mode 100644 drivers/als/Kconfig
> ?create mode 100644 drivers/als/Makefile
> ?create mode 100644 drivers/als/als_sys.c
> ?create mode 100644 include/linux/als_sys.h
>

(Bump)

Is there any blocker to adding this for 2.6.33? Which maintainer will
pick up the ALS framework?

Rui, do you have an updated patch for the ACPI ALS driver?

Regards,
Amit

2009-12-07 15:01:44

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

Amit Kucheria wrote:
> On Mon, Nov 30, 2009 at 1:45 PM, Amit Kucheria
> <[email protected]> wrote:
>> Introduce a new class of devices to handle ambient light sensors. Currently
>> only one sysfs inteface, 'illuminance' is introduced. More will be added as
>> drivers are ported to use this new class.
>>
>> Amit Kucheria (1):
>> als: add unique device-ids to the als device class
>>
>> Zhang Rui (1):
>> introduce ALS sysfs class
>>
>> Documentation/ABI/testing/sysfs-class-als | 9 ++
>> MAINTAINERS | 6 ++
>> drivers/Kconfig | 2 +
>> drivers/Makefile | 1 +
>> drivers/als/Kconfig | 10 +++
>> drivers/als/Makefile | 5 +
>> drivers/als/als_sys.c | 116 +++++++++++++++++++++++++++++
>> include/linux/als_sys.h | 35 +++++++++
>> 8 files changed, 184 insertions(+), 0 deletions(-)
>> create mode 100644 Documentation/ABI/testing/sysfs-class-als
>> create mode 100644 drivers/als/Kconfig
>> create mode 100644 drivers/als/Makefile
>> create mode 100644 drivers/als/als_sys.c
>> create mode 100644 include/linux/als_sys.h
>>
>
> (Bump)
>
> Is there any blocker to adding this for 2.6.33? Which maintainer will
> pick up the ALS framework?
None that I know of. Rui offered to maintain ALS, so I guess he could send
a pull request from suitable git tree directly or talk someone else into doing it.

Andrew might be willing?

>
> Rui, do you have an updated patch for the ACPI ALS driver?
>
> Regards,
> Amit
>

2009-12-07 15:04:34

by Jean Delvare

[permalink] [raw]
Subject: Re: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

On Mon, 7 Dec 2009 16:50:23 +0200, Amit Kucheria wrote:
> On Mon, Nov 30, 2009 at 1:45 PM, Amit Kucheria
> <[email protected]> wrote:
> > Introduce a new class of devices to handle ambient light sensors. Currently
> > only one sysfs inteface, 'illuminance' is introduced. More will be added as
> > drivers are ported to use this new class.
> >
> > Amit Kucheria (1):
> >  als: add unique device-ids to the als device class
> >
> > Zhang Rui (1):
> >  introduce ALS sysfs class
> >
> >  Documentation/ABI/testing/sysfs-class-als |    9 ++
> >  MAINTAINERS                               |    6 ++
> >  drivers/Kconfig                           |    2 +
> >  drivers/Makefile                          |    1 +
> >  drivers/als/Kconfig                       |   10 +++
> >  drivers/als/Makefile                      |    5 +
> >  drivers/als/als_sys.c                     |  116 +++++++++++++++++++++++++++++
> >  include/linux/als_sys.h                   |   35 +++++++++
> >  8 files changed, 184 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/ABI/testing/sysfs-class-als
> >  create mode 100644 drivers/als/Kconfig
> >  create mode 100644 drivers/als/Makefile
> >  create mode 100644 drivers/als/als_sys.c
> >  create mode 100644 include/linux/als_sys.h
> >
>
> (Bump)
>
> Is there any blocker to adding this for 2.6.33?

As far as I am concerned, it's ready to go. And I would love to see it
in 2.6.33.

> Which maintainer will pick up the ALS framework?

As Rui volunteered to be the maintainer of this new subsystem, it would
seem fair that he takes care of the initial push as well.

--
Jean Delvare

2009-12-08 14:00:11

by Amit Kucheria

[permalink] [raw]
Subject: Re: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

On Mon, Dec 7, 2009 at 5:04 PM, Jean Delvare <[email protected]> wrote:
> On Mon, 7 Dec 2009 16:50:23 +0200, Amit Kucheria wrote:
>> On Mon, Nov 30, 2009 at 1:45 PM, Amit Kucheria
>> <[email protected]> wrote:
>> > Introduce a new class of devices to handle ambient light sensors. Currently
>> > only one sysfs inteface, 'illuminance' is introduced. More will be added as
>> > drivers are ported to use this new class.
>> >
>> > Amit Kucheria (1):
>> >  als: add unique device-ids to the als device class
>> >
>> > Zhang Rui (1):
>> >  introduce ALS sysfs class
>> >
>> >  Documentation/ABI/testing/sysfs-class-als |    9 ++
>> >  MAINTAINERS                               |    6 ++
>> >  drivers/Kconfig                           |    2 +
>> >  drivers/Makefile                          |    1 +
>> >  drivers/als/Kconfig                       |   10 +++
>> >  drivers/als/Makefile                      |    5 +
>> >  drivers/als/als_sys.c                     |  116 +++++++++++++++++++++++++++++
>> >  include/linux/als_sys.h                   |   35 +++++++++
>> >  8 files changed, 184 insertions(+), 0 deletions(-)
>> >  create mode 100644 Documentation/ABI/testing/sysfs-class-als
>> >  create mode 100644 drivers/als/Kconfig
>> >  create mode 100644 drivers/als/Makefile
>> >  create mode 100644 drivers/als/als_sys.c
>> >  create mode 100644 include/linux/als_sys.h
>> >
>>
>> (Bump)
>>
>> Is there any blocker to adding this for 2.6.33?
>
> As far as I am concerned, it's ready to go. And I would love to see it
> in 2.6.33.
>
>> Which maintainer will pick up the ALS framework?
>
> As Rui volunteered to be the maintainer of this new subsystem, it would
> seem fair that he takes care of the initial push as well.

Rui,

Not sure about the LKML netiquette here, but I could track this patchset to
get it merged. Let me know.

Regards,
Amit

2009-12-09 01:50:21

by Zhang, Rui

[permalink] [raw]
Subject: Re: [PATCHv2 0/2] Introducing the Ambient Light Sensor (ALS) class

On Tue, 2009-12-08 at 22:00 +0800, Amit Kucheria wrote:
> On Mon, Dec 7, 2009 at 5:04 PM, Jean Delvare <[email protected]> wrote:
> > On Mon, 7 Dec 2009 16:50:23 +0200, Amit Kucheria wrote:
> >> On Mon, Nov 30, 2009 at 1:45 PM, Amit Kucheria
> >> <[email protected]> wrote:
> >> > Introduce a new class of devices to handle ambient light sensors. Currently
> >> > only one sysfs inteface, 'illuminance' is introduced. More will be added as
> >> > drivers are ported to use this new class.
> >> >
> >> > Amit Kucheria (1):
> >> > als: add unique device-ids to the als device class
> >> >
> >> > Zhang Rui (1):
> >> > introduce ALS sysfs class
> >> >
> >> > Documentation/ABI/testing/sysfs-class-als | 9 ++
> >> > MAINTAINERS | 6 ++
> >> > drivers/Kconfig | 2 +
> >> > drivers/Makefile | 1 +
> >> > drivers/als/Kconfig | 10 +++
> >> > drivers/als/Makefile | 5 +
> >> > drivers/als/als_sys.c | 116 +++++++++++++++++++++++++++++
> >> > include/linux/als_sys.h | 35 +++++++++
> >> > 8 files changed, 184 insertions(+), 0 deletions(-)
> >> > create mode 100644 Documentation/ABI/testing/sysfs-class-als
> >> > create mode 100644 drivers/als/Kconfig
> >> > create mode 100644 drivers/als/Makefile
> >> > create mode 100644 drivers/als/als_sys.c
> >> > create mode 100644 include/linux/als_sys.h
> >> >
> >>
> >> (Bump)
> >>
> >> Is there any blocker to adding this for 2.6.33?
> >
> > As far as I am concerned, it's ready to go. And I would love to see it
> > in 2.6.33.
> >
> >> Which maintainer will pick up the ALS framework?
> >
> > As Rui volunteered to be the maintainer of this new subsystem, it would
> > seem fair that he takes care of the initial push as well.
>
> Rui,
>
> Not sure about the LKML netiquette here, but I could track this patchset to
> get it merged. Let me know.

that would be great.

thanks,
rui