From: Dominik Brodowski <linux@dominikbrodowski.net>

make pcmcia_bus_socket->state a bitfield, and rename it pcmcia_state to
prepare for struct pcmcia_bus_socket integration into struct pcmcia_socket.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/pcmcia/ds.c           |   12 ++++++------
 drivers/pcmcia/ds_internal.h  |   14 ++++++++------
 drivers/pcmcia/pcmcia_ioctl.c |   12 ++++++------
 3 files changed, 20 insertions(+), 18 deletions(-)

diff -puN drivers/pcmcia/ds.c~pcmcia-make-pcmcia-status-a-bitfield drivers/pcmcia/ds.c
--- 25/drivers/pcmcia/ds.c~pcmcia-make-pcmcia-status-a-bitfield	2005-05-31 02:44:46.000000000 -0700
+++ 25-akpm/drivers/pcmcia/ds.c	2005-05-31 02:44:46.000000000 -0700
@@ -622,14 +622,14 @@ static void pcmcia_delayed_add_pseudo_de
 {
 	struct pcmcia_bus_socket *s = data;
 	pcmcia_device_add(s, 0);
-	s->device_add_pending = 0;
+	s->pcmcia_state.device_add_pending = 0;
 }
 
 static inline void pcmcia_add_pseudo_device(struct pcmcia_bus_socket *s)
 {
-	if (!s->device_add_pending) {
+	if (!s->pcmcia_state.device_add_pending) {
 		schedule_work(&s->device_add);
-		s->device_add_pending = 1;
+		s->pcmcia_state.device_add_pending = 1;
 	}
 	return;
 }
@@ -981,14 +981,14 @@ static int ds_event(struct pcmcia_socket
 	switch (event) {
 
 	case CS_EVENT_CARD_REMOVAL:
-		s->state &= ~DS_SOCKET_PRESENT;
+		s->pcmcia_state.present = 0;
 	    	send_event(skt, event, priority);
 		unbind_request(s);
 		handle_event(s, event);
 		break;
 	
 	case CS_EVENT_CARD_INSERTION:
-		s->state |= DS_SOCKET_PRESENT;
+		s->pcmcia_state.present = 1;
 		pcmcia_card_add(skt);
 		handle_event(s, event);
 		break;
@@ -1229,7 +1229,7 @@ static void pcmcia_bus_remove_socket(str
 
 	pccard_register_pcmcia(socket, NULL);
 
-	socket->pcmcia->state |= DS_SOCKET_DEAD;
+	socket->pcmcia->pcmcia_state.dead = 1;
 	pcmcia_put_bus_socket(socket->pcmcia);
 	socket->pcmcia = NULL;
 
diff -puN drivers/pcmcia/ds_internal.h~pcmcia-make-pcmcia-status-a-bitfield drivers/pcmcia/ds_internal.h
--- 25/drivers/pcmcia/ds_internal.h~pcmcia-make-pcmcia-status-a-bitfield	2005-05-31 02:44:46.000000000 -0700
+++ 25-akpm/drivers/pcmcia/ds_internal.h	2005-05-31 02:44:46.000000000 -0700
@@ -5,7 +5,6 @@ struct user_info_t;
 /* Socket state information */
 struct pcmcia_bus_socket {
 	struct kref		refcount;
-	int			state;
 	struct pcmcia_socket	*parent;
 
 	/* the PCMCIA devices connected to this socket (normally one, more
@@ -15,7 +14,14 @@ struct pcmcia_bus_socket {
 					       * only internally and subject
 					       * to incorrectness and change */
 
-	u8			device_add_pending;
+	struct {
+		u8		present:1,
+				busy:1,
+				dead:1,
+				device_add_pending:1,
+				reserved:4;
+	} 			pcmcia_state;
+
 	struct work_struct	device_add;
 
 
@@ -29,10 +35,6 @@ extern spinlock_t pcmcia_dev_list_lock;
 extern struct bus_type pcmcia_bus_type;
 
 
-#define DS_SOCKET_PRESENT		0x01
-#define DS_SOCKET_BUSY			0x02
-#define DS_SOCKET_DEAD			0x80
-
 extern struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev);
 extern void pcmcia_put_dev(struct pcmcia_device *p_dev);
 
diff -puN drivers/pcmcia/pcmcia_ioctl.c~pcmcia-make-pcmcia-status-a-bitfield drivers/pcmcia/pcmcia_ioctl.c
--- 25/drivers/pcmcia/pcmcia_ioctl.c~pcmcia-make-pcmcia-status-a-bitfield	2005-05-31 02:44:46.000000000 -0700
+++ 25-akpm/drivers/pcmcia/pcmcia_ioctl.c	2005-05-31 02:44:46.000000000 -0700
@@ -404,12 +404,12 @@ static int ds_open(struct inode *inode, 
 	    return -ENODEV;
 
     if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
-	    if (s->state & DS_SOCKET_BUSY) {
+	    if (s->pcmcia_state.busy) {
 		    pcmcia_put_bus_socket(s);
 		    return -EBUSY;
 	    }
 	else
-	    s->state |= DS_SOCKET_BUSY;
+	    s->pcmcia_state.busy = 1;
     }
 
     user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
@@ -424,7 +424,7 @@ static int ds_open(struct inode *inode, 
     s->user = user;
     file->private_data = user;
 
-    if (s->state & DS_SOCKET_PRESENT)
+    if (s->pcmcia_state.present)
 	queue_event(user, CS_EVENT_CARD_INSERTION);
     return 0;
 } /* ds_open */
@@ -446,7 +446,7 @@ static int ds_release(struct inode *inod
 
     /* Unlink user data structure */
     if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
-	s->state &= ~DS_SOCKET_BUSY;
+	s->pcmcia_state.busy = 0;
     }
     file->private_data = NULL;
     for (link = &s->user; *link; link = &(*link)->next)
@@ -480,7 +480,7 @@ static ssize_t ds_read(struct file *file
 	return -EIO;
 
     s = user->socket;
-    if (s->state & DS_SOCKET_DEAD)
+    if (s->pcmcia_state.dead)
         return -EIO;
 
     ret = wait_event_interruptible(s->queue, !queue_empty(user));
@@ -550,7 +550,7 @@ static int ds_ioctl(struct inode * inode
 	return -EIO;
 
     s = user->socket;
-    if (s->state & DS_SOCKET_DEAD)
+    if (s->pcmcia_state.dead)
         return -EIO;
 
     size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;
_