lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <4B23DA53.9090008@cam.ac.uk>
Date:	Sat, 12 Dec 2009 18:00:51 +0000
From:	Jonathan Cameron <jic23@....ac.uk>
To:	LKML <linux-kernel@...r.kernel.org>,
	Jean Delvare <khali@...ux-fr.org>,
	Daniel Mack <daniel@...aq.de>, Zhang Rui <rui.zhang@...el.com>,
	Amit Kucheria <amit.kucheria@...durent.com>
Subject: [PATCH] isl29003: Move from misc to als now it available with minimal
 changes

Signed-off-by: Jonathan Cameron <jic23@....ac.uk>
---

 I originally offered to move this to IIO, but ALS is more appropriate.
 There are a couple of attibutes in here that don't correspond directly
 to any currently in ALS. Feel free to offer suggestions for renames etc
 on these, but I'd prefer to see them in a second patch allowing us to
 keep things in this movement patch nice and clean. Will do api help
 once these are pinned down.

 I've used the git move detection here so as to highlight what has actually
 changed in the driver.  Just ask if you would prefer a version without
 that.

 Daniel: Don't suppose you could test this?  I don't think I have done
 anything that should cause any problems and it builds fine, but always
 nice to confirm!

 Other than the tsl2563 driver currently in IIO (Greg K-H has sent pull
 request) I think this is the final non ALS ambient light sensor in
 mainline (assuming other patches have gone in first)

 For purposes of testing I've put a kit tree up on kernel.org.
 I will rebase this as makes sense to make minor edits to this and the tsl2550
 driver so please don't base off it or send on without either telling me
 or warning whoever you send it to.

 git://git.kernel.org/pub/scm/linux/kernel/git/jic23/als-temp.git



 drivers/als/Kconfig              |   10 ++++++++
 drivers/als/Makefile             |    1 +
 drivers/{misc => als}/isl29003.c |   45 +++++++++++++++++++++++++------------
 drivers/misc/Kconfig             |   10 --------
 drivers/misc/Makefile            |    1 -
 5 files changed, 41 insertions(+), 26 deletions(-)

diff --git a/drivers/als/Kconfig b/drivers/als/Kconfig
index 1564ffc..9d99ac2 100644
--- a/drivers/als/Kconfig
+++ b/drivers/als/Kconfig
@@ -11,6 +11,16 @@ menuconfig ALS
 
 if ALS
 
+config ALS_ISL29003
+	tristate "Intersil ISL29003 ambient light sensor"
+	depends on I2C && SYSFS
+	help
+	  If you say yes here you get support for the Intersil ISL29003
+	  ambient light sensor.
+
+	  This driver can also be built as a module.  If so, the module
+	  will be called isl29003.
+
 config ALS_TSL2550
 	tristate "Taos TSL2550 ambient light sensor"
 	depends on EXPERIMENTAL && I2C
diff --git a/drivers/als/Makefile b/drivers/als/Makefile
index 7be5631..55aa8af 100644
--- a/drivers/als/Makefile
+++ b/drivers/als/Makefile
@@ -4,4 +4,5 @@
 
 obj-$(CONFIG_ALS)		+= als_sys.o
 
+obj-$(CONFIG_ALS_ISL29003)	+= isl29003.o
 obj-$(CONFIG_ALS_TSL2550)	+= tsl2550.o
\ No newline at end of file
diff --git a/drivers/misc/isl29003.c b/drivers/als/isl29003.c
similarity index 90%
rename from drivers/misc/isl29003.c
rename to drivers/als/isl29003.c
index a71e245..2ab188e 100644
--- a/drivers/misc/isl29003.c
+++ b/drivers/als/isl29003.c
@@ -31,9 +31,10 @@
 #include <linux/i2c.h>
 #include <linux/mutex.h>
 #include <linux/delay.h>
+#include <linux/als_sys.h>
 
 #define ISL29003_DRV_NAME	"isl29003"
-#define DRIVER_VERSION		"1.0"
+#define DRIVER_VERSION		"2.0"
 
 #define ISL29003_REG_COMMAND		0x00
 #define ISL29003_ADC_ENABLED		(1 << 7)
@@ -61,6 +62,7 @@
 #define ISL29003_NUM_CACHABLE_REGS	4
 
 struct isl29003_data {
+	struct device *classdev;
 	struct i2c_client *client;
 	struct mutex lock;
 	u8 reg_cache[ISL29003_NUM_CACHABLE_REGS];
@@ -196,7 +198,7 @@ static int isl29003_get_adc_value(struct i2c_client *client)
 static ssize_t isl29003_show_range(struct device *dev,
 				   struct device_attribute *attr, char *buf)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	return sprintf(buf, "%i\n", isl29003_get_range(client));
 }
 
@@ -204,7 +206,7 @@ static ssize_t isl29003_store_range(struct device *dev,
 				    struct device_attribute *attr,
 				    const char *buf, size_t count)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	unsigned long val;
 	int ret;
 
@@ -227,7 +229,7 @@ static ssize_t isl29003_show_resolution(struct device *dev,
 					struct device_attribute *attr,
 					char *buf)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	return sprintf(buf, "%d\n", isl29003_get_resolution(client));
 }
 
@@ -235,7 +237,7 @@ static ssize_t isl29003_store_resolution(struct device *dev,
 					 struct device_attribute *attr,
 					 const char *buf, size_t count)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	unsigned long val;
 	int ret;
 
@@ -256,14 +258,14 @@ static DEVICE_ATTR(resolution, S_IWUSR | S_IRUGO,
 static ssize_t isl29003_show_mode(struct device *dev,
 				  struct device_attribute *attr, char *buf)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	return sprintf(buf, "%d\n", isl29003_get_mode(client));
 }
 
 static ssize_t isl29003_store_mode(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t count)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	unsigned long val;
 	int ret;
 
@@ -286,7 +288,7 @@ static ssize_t isl29003_show_power_state(struct device *dev,
 					 struct device_attribute *attr,
 					 char *buf)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	return sprintf(buf, "%d\n", isl29003_get_power_state(client));
 }
 
@@ -294,7 +296,7 @@ static ssize_t isl29003_store_power_state(struct device *dev,
 					  struct device_attribute *attr,
 					  const char *buf, size_t count)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 	unsigned long val;
 	int ret;
 
@@ -313,7 +315,7 @@ static DEVICE_ATTR(power_state, S_IWUSR | S_IRUGO,
 static ssize_t isl29003_show_lux(struct device *dev,
 				 struct device_attribute *attr, char *buf)
 {
-	struct i2c_client *client = to_i2c_client(dev);
+	struct i2c_client *client = to_i2c_client(dev->parent);
 
 	/* No LUX data if not operational */
 	if (!isl29003_get_power_state(client))
@@ -322,14 +324,14 @@ static ssize_t isl29003_show_lux(struct device *dev,
 	return sprintf(buf, "%d\n", isl29003_get_adc_value(client));
 }
 
-static DEVICE_ATTR(lux, S_IRUGO, isl29003_show_lux, NULL);
+static DEVICE_ATTR(illuminance0, S_IRUGO, isl29003_show_lux, NULL);
 
 static struct attribute *isl29003_attributes[] = {
 	&dev_attr_range.attr,
 	&dev_attr_resolution.attr,
 	&dev_attr_mode.attr,
 	&dev_attr_power_state.attr,
-	&dev_attr_lux.attr,
+	&dev_attr_illuminance0.attr,
 	NULL
 };
 
@@ -388,14 +390,23 @@ static int __devinit isl29003_probe(struct i2c_client *client,
 	if (err)
 		goto exit_kfree;
 
+	data->classdev = als_device_register(&client->dev);
+	if (IS_ERR(data->classdev)) {
+		err = PTR_ERR(data->classdev);
+		goto exit_kfree;
+	}
+
 	/* register sysfs hooks */
-	err = sysfs_create_group(&client->dev.kobj, &isl29003_attr_group);
+	err = sysfs_create_group(&data->classdev->kobj, &isl29003_attr_group);
 	if (err)
-		goto exit_kfree;
+		goto exit_unreg;
 
 	dev_info(&client->dev, "driver version %s enabled\n", DRIVER_VERSION);
+
 	return 0;
 
+exit_unreg:
+	als_device_unregister(data->classdev);
 exit_kfree:
 	kfree(data);
 	return err;
@@ -403,9 +414,13 @@ exit_kfree:
 
 static int __devexit isl29003_remove(struct i2c_client *client)
 {
-	sysfs_remove_group(&client->dev.kobj, &isl29003_attr_group);
+	struct isl29003_data *data = i2c_get_clientdata(client);
+
+	sysfs_remove_group(&data->classdev->kobj, &isl29003_attr_group);	
+	als_device_unregister(data->classdev);
 	isl29003_set_power_state(client, 0);
 	kfree(i2c_get_clientdata(client));
+
 	return 0;
 }
 
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 2c16ca6..e5ffa20 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -223,16 +223,6 @@ config DELL_LAPTOP
 	This driver adds support for rfkill and backlight control to Dell
 	laptops.
 
-config ISL29003
-	tristate "Intersil ISL29003 ambient light sensor"
-	depends on I2C && SYSFS
-	help
-	  If you say yes here you get support for the Intersil ISL29003
-	  ambient light sensor.
-
-	  This driver can also be built as a module.  If so, the module
-	  will be called isl29003.
-
 config EP93XX_PWM
 	tristate "EP93xx PWM support"
 	depends on ARCH_EP93XX
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 906a0ed..ab6e0af 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -18,7 +18,6 @@ obj-$(CONFIG_KGDB_TESTS)	+= kgdbts.o
 obj-$(CONFIG_SGI_XP)		+= sgi-xp/
 obj-$(CONFIG_SGI_GRU)		+= sgi-gru/
 obj-$(CONFIG_HP_ILO)		+= hpilo.o
-obj-$(CONFIG_ISL29003)		+= isl29003.o
 obj-$(CONFIG_EP93XX_PWM)	+= ep93xx_pwm.o
 obj-$(CONFIG_DS1682)		+= ds1682.o
 obj-$(CONFIG_C2PORT)		+= c2port/
-- 
1.6.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ