diff -rupN a/drivers/char/ipmi/ipmi_serial.c b/drivers/char/ipmi/ipmi_serial.c
--- a/drivers/char/ipmi/ipmi_serial.c	2008-02-25 15:41:07.000000000 -0600
+++ b/drivers/char/ipmi/ipmi_serial.c	2008-02-25 16:16:16.000000000 -0600
@@ -1644,7 +1644,8 @@ static int ipmi_serial_found(struct ipmi
 		goto out_err;
 	}
 
-	capabilities = info->codec->capabilities(info->codec_data);
+	capabilities = info->codec->capabilities(info->codec_data,
+						 &info->slave_addr);
 	info->do_event_request = (capabilities
 				  & IPMI_SERIAL_SUPPORTS_EVENT_BUFFER);
 	if (capabilities & IPMI_SERIAL_NEEDS_GET_FLAGS_POLLING)
diff -rupN a/drivers/char/ipmi/ipmi_serial_direct.c b/drivers/char/ipmi/ipmi_serial_direct.c
--- a/drivers/char/ipmi/ipmi_serial_direct.c	2008-02-25 15:41:08.000000000 -0600
+++ b/drivers/char/ipmi/ipmi_serial_direct.c	2008-02-25 16:16:21.000000000 -0600
@@ -571,7 +571,8 @@ static void sd_timer_tick(struct ipmi_se
 	spin_unlock_irqrestore(&data->lock, flags);
 }
 
-static unsigned int sd_capabilities(struct ipmi_serial_codec_data *data)
+static unsigned int sd_capabilities(struct ipmi_serial_codec_data *data,
+				    unsigned char *slave_addr)
 {
 	unsigned int c = (IPMI_SERIAL_SUPPORTS_GET_FLAGS
 			  | IPMI_SERIAL_SUPPORTS_EVENT_BUFFER);
@@ -579,6 +580,7 @@ static unsigned int sd_capabilities(stru
 		c |= IPMI_SERIAL_HAS_ATTN;
 	else
 		c |= IPMI_SERIAL_NEEDS_GET_FLAGS_POLLING;
+	*slave_addr = data->options.rqaddr;
 	return c;
 }
 
diff -rupN a/drivers/char/ipmi/ipmi_serial_radisys_ascii.c b/drivers/char/ipmi/ipmi_serial_radisys_ascii.c
--- a/drivers/char/ipmi/ipmi_serial_radisys_ascii.c	2008-02-25 15:41:08.000000000 -0600
+++ b/drivers/char/ipmi/ipmi_serial_radisys_ascii.c	2008-02-25 16:16:11.000000000 -0600
@@ -501,8 +501,10 @@ static void ra_tx_ready(struct ipmi_seri
 	spin_unlock_irqrestore(&data->lock, flags);
 }
 
-static unsigned int ra_capabilities(struct ipmi_serial_codec_data *data)
+static unsigned int ra_capabilities(struct ipmi_serial_codec_data *data,
+				    unsigned char *slave_addr)
 {
+	*slave_addr = data->bmc_i2c_addr;
 	return 0;
 }
 
diff -rupN a/drivers/char/ipmi/ipmi_serial_terminal_mode.c b/drivers/char/ipmi/ipmi_serial_terminal_mode.c
--- a/drivers/char/ipmi/ipmi_serial_terminal_mode.c	2008-02-25 15:41:09.000000000 -0600
+++ b/drivers/char/ipmi/ipmi_serial_terminal_mode.c	2008-02-25 16:16:26.000000000 -0600
@@ -732,7 +732,8 @@ static void tm_tx_ready(struct ipmi_seri
 	spin_unlock_irqrestore(&data->lock, flags);
 }
 
-static unsigned int tm_capabilities(struct ipmi_serial_codec_data *data)
+static unsigned int tm_capabilities(struct ipmi_serial_codec_data *data,
+				    unsigned char *slave_addr)
 {
 	unsigned int c = (IPMI_SERIAL_SUPPORTS_GET_FLAGS
 			  | IPMI_SERIAL_SUPPORTS_EVENT_BUFFER);
diff -rupN a/include/linux/ipmi_serial_sm.h b/include/linux/ipmi_serial_sm.h
--- a/include/linux/ipmi_serial_sm.h	2008-02-25 15:41:37.000000000 -0600
+++ b/include/linux/ipmi_serial_sm.h	2008-02-25 16:16:39.000000000 -0600
@@ -98,7 +98,8 @@ struct ipmi_serial_codec
 #define IPMI_SERIAL_SUPPORTS_GET_FLAGS		0x00000002
 #define IPMI_SERIAL_SUPPORTS_EVENT_BUFFER	0x00000004
 #define IPMI_SERIAL_HAS_ATTN			0x00000008
-	unsigned int (*capabilities)(struct ipmi_serial_codec_data *data);
+	unsigned int (*capabilities)(struct ipmi_serial_codec_data *data,
+				     unsigned char *slave_addr);
 
 	/*
 	 * Set up the basic termios for the serial port for this
