Skip to contentSkip to conversation

I2C fixes for 2.6.10-rc1

PATCH New Greg KH 1 participant 5 messages Nov 12, 2004

Subsystems (3)
lore
Share & tools
lore
author
#3 lore raw
In reply to Greg KH

ChangeSet 1.2095, 2004/11/12 13:20:15-08:00, [email protected]

[PATCH] I2C: Missing newlines in debug messages

As discussed on IRC, this simple patch fixes broken debug messages missing their trailing newlines. I just applied something similar to CVS, and will prepare patches for 2.4 as well.

 drivers/i2c/i2c-core.c          |    2 +-
 drivers/i2c/i2c-dev.c           |    2 +-
 drivers/i2c/i2c-sensor-detect.c |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
drivers/i2c/i2c-core.c +1 -1
diff -Nru a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
@@ -760,7 +760,7 @@
 			if (addr == address_data->normal_i2c[i]) {
 				found = 1;
 				dev_dbg(&adapter->dev, "found normal i2c entry for adapter %d, "
-					"addr %02x", adap_id,addr);
+					"addr %02x\n", adap_id, addr);
 			}
 		}
 
drivers/i2c/i2c-dev.c +1 -1
diff -Nru a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
@@ -539,7 +539,7 @@
 out_unreg_chrdev:
 	unregister_chrdev(I2C_MAJOR, "i2c");
 out:
-	printk(KERN_ERR "%s: Driver Initialisation failed", __FILE__);
+	printk(KERN_ERR "%s: Driver Initialisation failed\n", __FILE__);
 	return res;
 }
 
drivers/i2c/i2c-sensor-detect.c +1 -1
diff -Nru a/drivers/i2c/i2c-sensor-detect.c b/drivers/i2c/i2c-sensor-detect.c
@@ -115,7 +115,7 @@
 			for (i = 0; !found && (normal_i2c[i] != I2C_CLIENT_END); i += 1) {
 				if (addr == normal_i2c[i]) {
 					found = 1;
-					dev_dbg(&adapter->dev, "found normal i2c entry for adapter %d, addr %02x", adapter_id, addr);
+					dev_dbg(&adapter->dev, "found normal i2c entry for adapter %d, addr %02x\n", adapter_id, addr);
 				}
 			}
 		}
author
#2 lore raw
In reply to Greg KH

ChangeSet 1.2094, 2004/11/12 11:40:22-08:00, [email protected]

I2C: fix up rtc8564 which should not have been changed in my previous cleanups.

This fixes a reported oops.

 drivers/i2c/chips/rtc8564.c |    3 +++
 1 files changed, 3 insertions(+)
drivers/i2c/chips/rtc8564.c +3 -0
diff -Nru a/drivers/i2c/chips/rtc8564.c b/drivers/i2c/chips/rtc8564.c
@@ -66,8 +66,11 @@
 
 static struct i2c_client_address_data addr_data = {
 	.normal_i2c		= normal_addr,
+	.normal_i2c_range	= ignore,
 	.probe			= ignore,
+	.probe_range		= ignore,
 	.ignore			= ignore,
+	.ignore_range		= ignore,
 	.force			= ignore,
 };
 
author
#1 lore raw

PATCH 1/1 I2C fixes for 2.6.10-rc1

In reply to Greg KH

ChangeSet 1.2093, 2004/11/12 11:39:51-08:00, [email protected]

I2C: fix up some out of date Documentation

 Documentation/i2c/dev-interface |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Documentation/i2c/dev-interface +2 -2
diff -Nru a/Documentation/i2c/dev-interface b/Documentation/i2c/dev-interface
@@ -3,7 +3,7 @@
 the /dev interface. You need to load module i2c-dev for this.
 
 Each registered i2c adapter gets a number, counting from 0. You can
-examine /proc/bus/i2c to see what number corresponds to which adapter.
+examine /sys/class/i2c-dev/ to see what number corresponds to which adapter.
 I2C device files are character device files with major device number 89
 and a minor device number corresponding to the number assigned as 
 explained above. They should be called "i2c-%d" (i2c-0, i2c-1, ..., 
@@ -19,7 +19,7 @@
 knows about i2c, there is not much choice.
 
 Now, you have to decide which adapter you want to access. You should
-inspect /proc/bus/i2c to decide this. Adapter numbers are assigned
+inspect /sys/class/i2c-dev/ to decide this. Adapter numbers are assigned
 somewhat dynamically, so you can not even assume /dev/i2c-0 is the
 first adapter.
 

Greg KH

author
#0 lore raw

PATCH 1/1 I2C fixes for 2.6.10-rc1

Hi,

Here are a few small i2c bugfixes for 2.6.10-rc1

Please pull from: bk://kernel.bkbits.net/gregkh/linux/i2c-2.6

Individual patches will follow, sent to the sensors and linux-kernel lists.

That's it, bug fixes only from me for now till 2.6.10 is out :)

thanks,

greg k-h

 Documentation/i2c/dev-interface |    4 +--
 drivers/i2c/chips/rtc8564.c     |    3 ++
 drivers/i2c/i2c-core.c          |   19 +++++++++++++++++-
 drivers/i2c/i2c-dev.c           |    2 -
 drivers/i2c/i2c-sensor-detect.c |    2 -
 include/linux/i2c.h             |   16 +++------------
 sound/ppc/daca.c                |   24 ++++++++++++-----------
 sound/ppc/pmac.h                |    2 -
 sound/ppc/tumbler.c             |   41 ++++++++++++++++++++++------------------
 9 files changed, 65 insertions(+), 48 deletions(-)

-----

Gabriel Paubert:
o I2C: Recent I2C "dead code removal" breaks pmac sound

Greg Kroah-Hartman:
o I2C: fix up rtc8564 which should not have been changed in my previous cleanups
o I2C: fix up some out of date Documentation

Jean Delvare:
o I2C: Missing newlines in debug messages

author
#4 lore raw
In reply to Greg KH

ChangeSet 1.2096, 2004/11/12 13:21:22-08:00, [email protected]

[PATCH] I2C: Recent I2C "dead code removal" breaks pmac sound.

Quoted 5 lines

Put the function back, and change the pmac.h file to delete the #define, and replace the snd_pmac_keywest_write function with a real call to i2c_smbus_write_block_data so things like this don't happen again.

Care to write a patch to do this?

It follows, along with an update of the include/linux/i2c.h to only declare functions that actually exist, but grepping the whole sound subtree shows that at least sound/oss/dmasound/tas_common.h defines a few inline functions that call i2c_smbus_write_{byte,block}_data.

[I2C part]
Ressuscitate i2c_smbus_write_block_data since it's actually used. Update include/linux/i2c.h to reflect the existing functions.

[Sound part]
Remove snd_pmac_keywest_write* wrapper macros and directly call the i2c_smbus_* functions instead.

===== include/linux/i2c.h 1.41 vs edited =====

 drivers/i2c/i2c-core.c |   17 +++++++++++++++++
 include/linux/i2c.h    |   16 ++++------------
 sound/ppc/daca.c       |   24 +++++++++++++-----------
 sound/ppc/pmac.h       |    2 --
 sound/ppc/tumbler.c    |   41 +++++++++++++++++++++++------------------
 5 files changed, 57 insertions(+), 43 deletions(-)
drivers/i2c/i2c-core.c +17 -0
diff -Nru a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
@@ -1021,6 +1021,22 @@
 	                      I2C_SMBUS_WORD_DATA,&data);
 }
 
+/* Returns the number of bytes transferred */
+s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command,
+			       u8 length, u8 *values)
+{
+	union i2c_smbus_data data;
+	int i;
+	if (length > I2C_SMBUS_BLOCK_MAX)
+		length = I2C_SMBUS_BLOCK_MAX;
+	for (i = 1; i <= length; i++)
+		data.block[i] = values[i-1];
+	data.block[0] = length;
+	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+			      I2C_SMBUS_WRITE,command,
+			      I2C_SMBUS_BLOCK_DATA,&data);
+}
+
 /* Returns the number of read bytes */
 s32 i2c_smbus_block_process_call(struct i2c_client *client, u8 command, u8 length, u8 *values)
 {
@@ -1279,6 +1295,7 @@
 EXPORT_SYMBOL(i2c_smbus_write_byte_data);
 EXPORT_SYMBOL(i2c_smbus_read_word_data);
 EXPORT_SYMBOL(i2c_smbus_write_word_data);
+EXPORT_SYMBOL(i2c_smbus_write_block_data);
 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
 
 EXPORT_SYMBOL(i2c_get_functionality);
include/linux/i2c.h +4 -12
diff -Nru a/include/linux/i2c.h b/include/linux/i2c.h
@@ -88,20 +88,12 @@
 extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command);
 extern s32 i2c_smbus_write_word_data(struct i2c_client * client,
                                      u8 command, u16 value);
-extern s32 i2c_smbus_process_call(struct i2c_client * client,
-                                  u8 command, u16 value);
-/* Returns the number of read bytes */
-extern s32 i2c_smbus_read_block_data(struct i2c_client * client,
-                                     u8 command, u8 *values);
+/* Returns the number of bytes transferred */
 extern s32 i2c_smbus_write_block_data(struct i2c_client * client,
-                                      u8 command, u8 length,
-                                      u8 *values);
+				      u8 command, u8 length,
+				      u8 *values);
 extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client,
-                                         u8 command, u8 *values);
-extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
-                                          u8 command, u8 length,
-                                          u8 *values);
-
+					 u8 command, u8 *values);
 
 /*
  * A driver is capable of handling one or more physical devices present on
sound/ppc/daca.c +13 -11
diff -Nru a/sound/ppc/daca.c b/sound/ppc/daca.c
@@ -56,10 +56,11 @@
 	unsigned short wdata = 0x00;
 	/* SR: no swap, 1bit delay, 32-48kHz */
 	/* GCFG: power amp inverted, DAC on */
-	if (snd_pmac_keywest_write_byte(i2c, DACA_REG_SR, 0x08) < 0 ||
-	    snd_pmac_keywest_write_byte(i2c, DACA_REG_GCFG, 0x05) < 0)
+	if (i2c_smbus_write_byte_data(i2c->client, DACA_REG_SR, 0x08) < 0 ||
+	    i2c_smbus_write_byte_data(i2c->client, DACA_REG_GCFG, 0x05) < 0)
 		return -EINVAL;
-	return snd_pmac_keywest_write(i2c, DACA_REG_AVOL, 2, (unsigned char*)&wdata);
+	return i2c_smbus_write_block_data(i2c->client, DACA_REG_AVOL,
+					  2, (unsigned char*)&wdata);
 }
 
 /*
@@ -81,9 +82,10 @@
 	else
 		data[1] = mix->right_vol;
 	data[1] |= mix->deemphasis ? 0x40 : 0;
-	if (snd_pmac_keywest_write(&mix->i2c, DACA_REG_AVOL, 2, data) < 0) {
-		snd_printk("failed to set volume \n");  
-		return -EINVAL; 
+	if (i2c_smbus_write_block_data(mix->i2c.client, DACA_REG_AVOL,
+				       2, data) < 0) {
+		snd_printk("failed to set volume \n");
+		return -EINVAL;
 	}
 	return 0;
 }
@@ -188,8 +190,8 @@
 	change = mix->amp_on != ucontrol->value.integer.value[0];
 	if (change) {
 		mix->amp_on = ucontrol->value.integer.value[0];
-		snd_pmac_keywest_write_byte(&mix->i2c, DACA_REG_GCFG,
-					    mix->amp_on ? 0x05 : 0x04);
+		i2c_smbus_write_byte_data(mix->i2c.client, DACA_REG_GCFG,
+					  mix->amp_on ? 0x05 : 0x04);
 	}
 	return change;
 }
@@ -220,9 +222,9 @@
 static void daca_resume(pmac_t *chip)
 {
 	pmac_daca_t *mix = chip->mixer_data;
-	snd_pmac_keywest_write_byte(&mix->i2c, DACA_REG_SR, 0x08);
-	snd_pmac_keywest_write_byte(&mix->i2c, DACA_REG_GCFG,
-				    mix->amp_on ? 0x05 : 0x04);
+	i2c_smbus_write_byte_data(mix->i2c.client, DACA_REG_SR, 0x08);
+	i2c_smbus_write_byte_data(mix->i2c.client, DACA_REG_GCFG,
+				  mix->amp_on ? 0x05 : 0x04);
 	daca_set_volume(mix);
 }
 #endif /* CONFIG_PMAC_PBOOK */
sound/ppc/pmac.h +0 -2
diff -Nru a/sound/ppc/pmac.h b/sound/ppc/pmac.h
@@ -199,8 +199,6 @@
 
 int snd_pmac_keywest_init(pmac_keywest_t *i2c);
 void snd_pmac_keywest_cleanup(pmac_keywest_t *i2c);
-#define snd_pmac_keywest_write(i2c,cmd,len,data) i2c_smbus_write_block_data((i2c)->client, cmd, len, data)
-#define snd_pmac_keywest_write_byte(i2c,cmd,data) i2c_smbus_write_byte_data((i2c)->client, cmd, data)
 
 /* misc */
 int snd_pmac_boolean_stereo_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo);
sound/ppc/tumbler.c +23 -18

83 lines not on this page · raw message