Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / pcmcia / vrc4171_card.c
index 17bb2da..459e6e1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * vrc4171_card.c, NEC VRC4171 Card Controller driver for Socket Services.
  *
- * Copyright (C) 2003-2005  Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
+ * Copyright (C) 2003-2005  Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
  *
  *  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
@@ -24,6 +24,7 @@
 #include <linux/spinlock.h>
 #include <linux/sched.h>
 #include <linux/types.h>
+#include <linux/platform_device.h>
 
 #include <asm/io.h>
 
@@ -32,7 +33,7 @@
 #include "i82365.h"
 
 MODULE_DESCRIPTION("NEC VRC4171 Card Controllers driver for Socket Services");
-MODULE_AUTHOR("Yoichi Yuasa <yuasa@hh.iij4u.or.jp>");
+MODULE_AUTHOR("Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>");
 MODULE_LICENSE("GPL");
 
 #define CARD_MAX_SLOTS         2
@@ -300,75 +301,6 @@ static int pccard_get_status(struct pcmcia_socket *sock, u_int *value)
        return 0;
 }
 
-static inline u_char get_Vcc_value(uint8_t voltage)
-{
-       switch (voltage) {
-       case VCC_STATUS_3V:
-               return 33;
-       case VCC_STATUS_5V:
-               return 50;
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static inline u_char get_Vpp_value(uint8_t power, u_char Vcc)
-{
-       if ((power & 0x03) == 0x01 || (power & 0x03) == 0x02)
-               return Vcc;
-
-       return 0;
-}
-
-static int pccard_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
-{
-       unsigned int slot;
-       uint8_t power, voltage, control, cscint;
-
-       if (sock == NULL || sock->sock >= CARD_MAX_SLOTS || state == NULL)
-               return -EINVAL;
-
-       slot = sock->sock;
-
-       power = exca_read_byte(slot, I365_POWER);
-       voltage = exca_read_byte(slot, CARD_VOLTAGE_SELECT);
-
-       state->Vcc = get_Vcc_value(voltage);
-       state->Vpp = get_Vpp_value(power, state->Vcc);
-
-       state->flags = 0;
-       if (power & POWER_ENABLE)
-               state->flags |= SS_PWR_AUTO;
-       if (power & I365_PWR_OUT)
-               state->flags |= SS_OUTPUT_ENA;
-
-       control = exca_read_byte(slot, I365_INTCTL);
-       if (control & I365_PC_IOCARD)
-               state->flags |= SS_IOCARD;
-       if (!(control & I365_PC_RESET))
-               state->flags |= SS_RESET;
-
-        cscint = exca_read_byte(slot, I365_CSCINT);
-       state->csc_mask = 0;
-       if (state->flags & SS_IOCARD) {
-               if (cscint & I365_CSC_STSCHG)
-                       state->flags |= SS_STSCHG;
-       } else {
-               if (cscint & I365_CSC_BVD1)
-                       state->csc_mask |= SS_BATDEAD;
-               if (cscint & I365_CSC_BVD2)
-                       state->csc_mask |= SS_BATWARN;
-       }
-       if (cscint & I365_CSC_READY)
-               state->csc_mask |= SS_READY;
-       if (cscint & I365_CSC_DETECT)
-               state->csc_mask |= SS_DETECT;
-
-       return 0;
-}
-
 static inline uint8_t set_Vcc_value(u_char Vcc)
 {
        switch (Vcc) {
@@ -550,7 +482,6 @@ static int pccard_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map
 static struct pccard_operations vrc4171_pccard_operations = {
        .init                   = pccard_init,
        .get_status             = pccard_get_status,
-       .get_socket             = pccard_get_socket,
        .set_socket             = pccard_set_socket,
        .set_io_map             = pccard_set_io_map,
        .set_mem_map            = pccard_set_mem_map,
@@ -703,7 +634,7 @@ static void vrc4171_remove_sockets(void)
 static int __devinit vrc4171_card_setup(char *options)
 {
        if (options == NULL || *options == '\0')
-               return 0;
+               return 1;
 
        if (strncmp(options, "irq:", 4) == 0) {
                int irq;
@@ -713,7 +644,7 @@ static int __devinit vrc4171_card_setup(char *options)
                        vrc4171_irq = irq;
 
                if (*options != ',')
-                       return 0;
+                       return 1;
                options++;
        }
 
@@ -732,10 +663,10 @@ static int __devinit vrc4171_card_setup(char *options)
                        }
 
                        if (*options != ',')
-                               return 0;
+                               return 1;
                        options++;
                } else
-                       return 0;
+                       return 1;
 
        }
 
@@ -757,7 +688,7 @@ static int __devinit vrc4171_card_setup(char *options)
                        }
 
                        if (*options != ',')
-                               return 0;
+                               return 1;
                        options++;
 
                        if (strncmp(options, "memnoprobe", 10) == 0)
@@ -769,36 +700,16 @@ static int __devinit vrc4171_card_setup(char *options)
                }
        }
 
-       return 0;
+       return 1;
 }
 
 __setup("vrc4171_card=", vrc4171_card_setup);
 
-static int vrc4171_card_suspend(struct device *dev, pm_message_t state, u32 level)
-{
-       int retval = 0;
-
-       if (level == SUSPEND_SAVE_STATE)
-               retval = pcmcia_socket_dev_suspend(dev, state);
-
-       return retval;
-}
-
-static int vrc4171_card_resume(struct device *dev, u32 level)
-{
-       int retval = 0;
-
-       if (level == RESUME_RESTORE_STATE)
-               retval = pcmcia_socket_dev_resume(dev);
-
-       return retval;
-}
-
 static struct device_driver vrc4171_card_driver = {
        .name           = vrc4171_card_name,
        .bus            = &platform_bus_type,
-       .suspend        = vrc4171_card_suspend,
-       .resume         = vrc4171_card_resume,
+       .suspend        = pcmcia_socket_dev_suspend,
+       .resume         = pcmcia_socket_dev_resume,
 };
 
 static int __devinit vrc4171_card_init(void)