Merge Qualcom Hexagon architecture
[cascardo/linux.git] / drivers / pcmcia / sa1100_simpad.c
index c998f7a..0fac965 100644 (file)
 #include <mach/simpad.h>
 #include "sa1100_generic.h"
  
-extern long get_cs3_shadow(void);
-extern void set_cs3_bit(int value); 
-extern void clear_cs3_bit(int value);
-
 static struct pcmcia_irqs irqs[] = {
        { 1, IRQ_GPIO_CF_CD, "CF_CD" },
 };
@@ -26,7 +22,7 @@ static struct pcmcia_irqs irqs[] = {
 static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 
-       clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+       simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
 
        skt->socket.pci_irq = IRQ_GPIO_CF_IRQ;
 
@@ -38,8 +34,8 @@ static void simpad_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
        soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
        /* Disable CF bus: */
-       //set_cs3_bit(PCMCIA_BUFF_DIS);
-       clear_cs3_bit(PCMCIA_RESET);       
+       /*simpad_set_cs3_bit(PCMCIA_BUFF_DIS);*/
+       simpad_clear_cs3_bit(PCMCIA_RESET);
 }
 
 static void
@@ -47,15 +43,16 @@ simpad_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
                           struct pcmcia_state *state)
 {
        unsigned long levels = GPLR;
-       long cs3reg = get_cs3_shadow();
+       long cs3reg = simpad_get_cs3_ro();
 
        state->detect=((levels & GPIO_CF_CD)==0)?1:0;
        state->ready=(levels & GPIO_CF_IRQ)?1:0;
-       state->bvd1=1; /* Not available on Simpad. */
-       state->bvd2=1; /* Not available on Simpad. */
+       state->bvd1 = 1; /* Might be cs3reg & PCMCIA_BVD1 */
+       state->bvd2 = 1; /* Might be cs3reg & PCMCIA_BVD2 */
        state->wrprot=0; /* Not available on Simpad. */
-  
-       if((cs3reg & 0x0c) == 0x0c) {
+
+       if ((cs3reg & (PCMCIA_VS1|PCMCIA_VS2)) ==
+                       (PCMCIA_VS1|PCMCIA_VS2)) {
                state->vs_3v=0;
                state->vs_Xv=0;
        } else {
@@ -75,23 +72,23 @@ simpad_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
        /* Murphy: see table of MIC2562a-1 */
        switch (state->Vcc) {
        case 0:
-               clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+               simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
                break;
 
        case 33:  
-               clear_cs3_bit(VCC_3V_EN|EN1);
-               set_cs3_bit(VCC_5V_EN|EN0);
+               simpad_clear_cs3_bit(VCC_3V_EN|EN1);
+               simpad_set_cs3_bit(VCC_5V_EN|EN0);
                break;
 
        case 50:
-               clear_cs3_bit(VCC_5V_EN|EN1);
-               set_cs3_bit(VCC_3V_EN|EN0);
+               simpad_clear_cs3_bit(VCC_5V_EN|EN1);
+               simpad_set_cs3_bit(VCC_3V_EN|EN0);
                break;
 
        default:
                printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
                        __func__, state->Vcc);
-               clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+               simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
                local_irq_restore(flags);
                return -1;
        }
@@ -110,7 +107,7 @@ static void simpad_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 static void simpad_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
        soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
-       set_cs3_bit(PCMCIA_RESET);
+       simpad_set_cs3_bit(PCMCIA_RESET);
 }
 
 static struct pcmcia_low_level simpad_pcmcia_ops = {