Commit b34e7b4f05730e6f26e9d8d3736271b0e4cdeac2

Authored by Dmitry Eremin-Solenikov
Committed by Eric Miao
1 parent 4c738b2568

ARM: scoop: drop pcmcia_init callback

A pcmcia_init callback isn't used on any of the platforms. Drop it.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>

Showing 2 changed files with 0 additions and 4 deletions Inline Diff

arch/arm/include/asm/hardware/scoop.h
1 /* 1 /*
2 * Definitions for the SCOOP interface found on various Sharp PDAs 2 * Definitions for the SCOOP interface found on various Sharp PDAs
3 * 3 *
4 * Copyright (c) 2004 Richard Purdie 4 * Copyright (c) 2004 Richard Purdie
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 * 9 *
10 */ 10 */
11 11
12 #define SCOOP_MCR 0x00 12 #define SCOOP_MCR 0x00
13 #define SCOOP_CDR 0x04 13 #define SCOOP_CDR 0x04
14 #define SCOOP_CSR 0x08 14 #define SCOOP_CSR 0x08
15 #define SCOOP_CPR 0x0C 15 #define SCOOP_CPR 0x0C
16 #define SCOOP_CCR 0x10 16 #define SCOOP_CCR 0x10
17 #define SCOOP_IRR 0x14 17 #define SCOOP_IRR 0x14
18 #define SCOOP_IRM 0x14 18 #define SCOOP_IRM 0x14
19 #define SCOOP_IMR 0x18 19 #define SCOOP_IMR 0x18
20 #define SCOOP_ISR 0x1C 20 #define SCOOP_ISR 0x1C
21 #define SCOOP_GPCR 0x20 21 #define SCOOP_GPCR 0x20
22 #define SCOOP_GPWR 0x24 22 #define SCOOP_GPWR 0x24
23 #define SCOOP_GPRR 0x28 23 #define SCOOP_GPRR 0x28
24 24
25 #define SCOOP_CPR_OUT (1 << 7) 25 #define SCOOP_CPR_OUT (1 << 7)
26 #define SCOOP_CPR_SD_3V (1 << 2) 26 #define SCOOP_CPR_SD_3V (1 << 2)
27 #define SCOOP_CPR_CF_XV (1 << 1) 27 #define SCOOP_CPR_CF_XV (1 << 1)
28 #define SCOOP_CPR_CF_3V (1 << 0) 28 #define SCOOP_CPR_CF_3V (1 << 0)
29 29
30 #define SCOOP_GPCR_PA22 (1 << 12) 30 #define SCOOP_GPCR_PA22 (1 << 12)
31 #define SCOOP_GPCR_PA21 (1 << 11) 31 #define SCOOP_GPCR_PA21 (1 << 11)
32 #define SCOOP_GPCR_PA20 (1 << 10) 32 #define SCOOP_GPCR_PA20 (1 << 10)
33 #define SCOOP_GPCR_PA19 (1 << 9) 33 #define SCOOP_GPCR_PA19 (1 << 9)
34 #define SCOOP_GPCR_PA18 (1 << 8) 34 #define SCOOP_GPCR_PA18 (1 << 8)
35 #define SCOOP_GPCR_PA17 (1 << 7) 35 #define SCOOP_GPCR_PA17 (1 << 7)
36 #define SCOOP_GPCR_PA16 (1 << 6) 36 #define SCOOP_GPCR_PA16 (1 << 6)
37 #define SCOOP_GPCR_PA15 (1 << 5) 37 #define SCOOP_GPCR_PA15 (1 << 5)
38 #define SCOOP_GPCR_PA14 (1 << 4) 38 #define SCOOP_GPCR_PA14 (1 << 4)
39 #define SCOOP_GPCR_PA13 (1 << 3) 39 #define SCOOP_GPCR_PA13 (1 << 3)
40 #define SCOOP_GPCR_PA12 (1 << 2) 40 #define SCOOP_GPCR_PA12 (1 << 2)
41 #define SCOOP_GPCR_PA11 (1 << 1) 41 #define SCOOP_GPCR_PA11 (1 << 1)
42 42
43 struct scoop_config { 43 struct scoop_config {
44 unsigned short io_out; 44 unsigned short io_out;
45 unsigned short io_dir; 45 unsigned short io_dir;
46 unsigned short suspend_clr; 46 unsigned short suspend_clr;
47 unsigned short suspend_set; 47 unsigned short suspend_set;
48 int gpio_base; 48 int gpio_base;
49 }; 49 };
50 50
51 /* Structure for linking scoop devices to PCMCIA sockets */ 51 /* Structure for linking scoop devices to PCMCIA sockets */
52 struct scoop_pcmcia_dev { 52 struct scoop_pcmcia_dev {
53 struct device *dev; /* Pointer to this socket's scoop device */ 53 struct device *dev; /* Pointer to this socket's scoop device */
54 int irq; /* irq for socket */ 54 int irq; /* irq for socket */
55 int cd_irq; 55 int cd_irq;
56 const char *cd_irq_str; 56 const char *cd_irq_str;
57 unsigned char keep_vs; 57 unsigned char keep_vs;
58 unsigned char keep_rd; 58 unsigned char keep_rd;
59 }; 59 };
60 60
61 struct scoop_pcmcia_config { 61 struct scoop_pcmcia_config {
62 struct scoop_pcmcia_dev *devs; 62 struct scoop_pcmcia_dev *devs;
63 int num_devs; 63 int num_devs;
64 void (*pcmcia_init)(void);
65 void (*power_ctrl)(struct device *scoop, unsigned short cpr, int nr); 64 void (*power_ctrl)(struct device *scoop, unsigned short cpr, int nr);
66 }; 65 };
67 66
68 extern struct scoop_pcmcia_config *platform_scoop_config; 67 extern struct scoop_pcmcia_config *platform_scoop_config;
69 68
70 void reset_scoop(struct device *dev); 69 void reset_scoop(struct device *dev);
71 unsigned short read_scoop_reg(struct device *dev, unsigned short reg); 70 unsigned short read_scoop_reg(struct device *dev, unsigned short reg);
72 void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data); 71 void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data);
73 72
drivers/pcmcia/pxa2xx_sharpsl.c
1 /* 1 /*
2 * Sharp SL-C7xx Series PCMCIA routines 2 * Sharp SL-C7xx Series PCMCIA routines
3 * 3 *
4 * Copyright (c) 2004-2005 Richard Purdie 4 * Copyright (c) 2004-2005 Richard Purdie
5 * 5 *
6 * Based on Sharp's 2.4 kernel patches and pxa2xx_mainstone.c 6 * Based on Sharp's 2.4 kernel patches and pxa2xx_mainstone.c
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 * 11 *
12 */ 12 */
13 13
14 #include <linux/module.h> 14 #include <linux/module.h>
15 #include <linux/init.h> 15 #include <linux/init.h>
16 #include <linux/kernel.h> 16 #include <linux/kernel.h>
17 #include <linux/errno.h> 17 #include <linux/errno.h>
18 #include <linux/interrupt.h> 18 #include <linux/interrupt.h>
19 #include <linux/platform_device.h> 19 #include <linux/platform_device.h>
20 20
21 #include <asm/mach-types.h> 21 #include <asm/mach-types.h>
22 #include <mach/hardware.h> 22 #include <mach/hardware.h>
23 #include <asm/irq.h> 23 #include <asm/irq.h>
24 #include <asm/hardware/scoop.h> 24 #include <asm/hardware/scoop.h>
25 25
26 #include "soc_common.h" 26 #include "soc_common.h"
27 27
28 #define NO_KEEP_VS 0x0001 28 #define NO_KEEP_VS 0x0001
29 #define SCOOP_DEV platform_scoop_config->devs 29 #define SCOOP_DEV platform_scoop_config->devs
30 30
31 static void sharpsl_pcmcia_init_reset(struct soc_pcmcia_socket *skt) 31 static void sharpsl_pcmcia_init_reset(struct soc_pcmcia_socket *skt)
32 { 32 {
33 struct scoop_pcmcia_dev *scoopdev = &SCOOP_DEV[skt->nr]; 33 struct scoop_pcmcia_dev *scoopdev = &SCOOP_DEV[skt->nr];
34 34
35 reset_scoop(scoopdev->dev); 35 reset_scoop(scoopdev->dev);
36 36
37 /* Shared power controls need to be handled carefully */ 37 /* Shared power controls need to be handled carefully */
38 if (platform_scoop_config->power_ctrl) 38 if (platform_scoop_config->power_ctrl)
39 platform_scoop_config->power_ctrl(scoopdev->dev, 0x0000, skt->nr); 39 platform_scoop_config->power_ctrl(scoopdev->dev, 0x0000, skt->nr);
40 else 40 else
41 write_scoop_reg(scoopdev->dev, SCOOP_CPR, 0x0000); 41 write_scoop_reg(scoopdev->dev, SCOOP_CPR, 0x0000);
42 42
43 scoopdev->keep_vs = NO_KEEP_VS; 43 scoopdev->keep_vs = NO_KEEP_VS;
44 scoopdev->keep_rd = 0; 44 scoopdev->keep_rd = 0;
45 } 45 }
46 46
47 static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt) 47 static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
48 { 48 {
49 int ret; 49 int ret;
50 50
51 if (platform_scoop_config->pcmcia_init)
52 platform_scoop_config->pcmcia_init();
53
54 /* Register interrupts */ 51 /* Register interrupts */
55 if (SCOOP_DEV[skt->nr].cd_irq >= 0) { 52 if (SCOOP_DEV[skt->nr].cd_irq >= 0) {
56 struct pcmcia_irqs cd_irq; 53 struct pcmcia_irqs cd_irq;
57 54
58 cd_irq.sock = skt->nr; 55 cd_irq.sock = skt->nr;
59 cd_irq.irq = SCOOP_DEV[skt->nr].cd_irq; 56 cd_irq.irq = SCOOP_DEV[skt->nr].cd_irq;
60 cd_irq.str = SCOOP_DEV[skt->nr].cd_irq_str; 57 cd_irq.str = SCOOP_DEV[skt->nr].cd_irq_str;
61 ret = soc_pcmcia_request_irqs(skt, &cd_irq, 1); 58 ret = soc_pcmcia_request_irqs(skt, &cd_irq, 1);
62 59
63 if (ret) { 60 if (ret) {
64 printk(KERN_ERR "Request for Compact Flash IRQ failed\n"); 61 printk(KERN_ERR "Request for Compact Flash IRQ failed\n");
65 return ret; 62 return ret;
66 } 63 }
67 } 64 }
68 65
69 skt->socket.pci_irq = SCOOP_DEV[skt->nr].irq; 66 skt->socket.pci_irq = SCOOP_DEV[skt->nr].irq;
70 67
71 return 0; 68 return 0;
72 } 69 }
73 70
74 static void sharpsl_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) 71 static void sharpsl_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
75 { 72 {
76 if (SCOOP_DEV[skt->nr].cd_irq >= 0) { 73 if (SCOOP_DEV[skt->nr].cd_irq >= 0) {
77 struct pcmcia_irqs cd_irq; 74 struct pcmcia_irqs cd_irq;
78 75
79 cd_irq.sock = skt->nr; 76 cd_irq.sock = skt->nr;
80 cd_irq.irq = SCOOP_DEV[skt->nr].cd_irq; 77 cd_irq.irq = SCOOP_DEV[skt->nr].cd_irq;
81 cd_irq.str = SCOOP_DEV[skt->nr].cd_irq_str; 78 cd_irq.str = SCOOP_DEV[skt->nr].cd_irq_str;
82 soc_pcmcia_free_irqs(skt, &cd_irq, 1); 79 soc_pcmcia_free_irqs(skt, &cd_irq, 1);
83 } 80 }
84 } 81 }
85 82
86 83
87 static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt, 84 static void sharpsl_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
88 struct pcmcia_state *state) 85 struct pcmcia_state *state)
89 { 86 {
90 unsigned short cpr, csr; 87 unsigned short cpr, csr;
91 struct device *scoop = SCOOP_DEV[skt->nr].dev; 88 struct device *scoop = SCOOP_DEV[skt->nr].dev;
92 89
93 cpr = read_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR); 90 cpr = read_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_CPR);
94 91
95 write_scoop_reg(scoop, SCOOP_IRM, 0x00FF); 92 write_scoop_reg(scoop, SCOOP_IRM, 0x00FF);
96 write_scoop_reg(scoop, SCOOP_ISR, 0x0000); 93 write_scoop_reg(scoop, SCOOP_ISR, 0x0000);
97 write_scoop_reg(scoop, SCOOP_IRM, 0x0000); 94 write_scoop_reg(scoop, SCOOP_IRM, 0x0000);
98 csr = read_scoop_reg(scoop, SCOOP_CSR); 95 csr = read_scoop_reg(scoop, SCOOP_CSR);
99 if (csr & 0x0004) { 96 if (csr & 0x0004) {
100 /* card eject */ 97 /* card eject */
101 write_scoop_reg(scoop, SCOOP_CDR, 0x0000); 98 write_scoop_reg(scoop, SCOOP_CDR, 0x0000);
102 SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS; 99 SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS;
103 } 100 }
104 else if (!(SCOOP_DEV[skt->nr].keep_vs & NO_KEEP_VS)) { 101 else if (!(SCOOP_DEV[skt->nr].keep_vs & NO_KEEP_VS)) {
105 /* keep vs1,vs2 */ 102 /* keep vs1,vs2 */
106 write_scoop_reg(scoop, SCOOP_CDR, 0x0000); 103 write_scoop_reg(scoop, SCOOP_CDR, 0x0000);
107 csr |= SCOOP_DEV[skt->nr].keep_vs; 104 csr |= SCOOP_DEV[skt->nr].keep_vs;
108 } 105 }
109 else if (cpr & 0x0003) { 106 else if (cpr & 0x0003) {
110 /* power on */ 107 /* power on */
111 write_scoop_reg(scoop, SCOOP_CDR, 0x0000); 108 write_scoop_reg(scoop, SCOOP_CDR, 0x0000);
112 SCOOP_DEV[skt->nr].keep_vs = (csr & 0x00C0); 109 SCOOP_DEV[skt->nr].keep_vs = (csr & 0x00C0);
113 } 110 }
114 else { 111 else {
115 /* card detect */ 112 /* card detect */
116 if ((machine_is_spitz() || machine_is_borzoi()) && skt->nr == 1) { 113 if ((machine_is_spitz() || machine_is_borzoi()) && skt->nr == 1) {
117 write_scoop_reg(scoop, SCOOP_CDR, 0x0000); 114 write_scoop_reg(scoop, SCOOP_CDR, 0x0000);
118 } else { 115 } else {
119 write_scoop_reg(scoop, SCOOP_CDR, 0x0002); 116 write_scoop_reg(scoop, SCOOP_CDR, 0x0002);
120 } 117 }
121 } 118 }
122 119
123 state->detect = (csr & 0x0004) ? 0 : 1; 120 state->detect = (csr & 0x0004) ? 0 : 1;
124 state->ready = (csr & 0x0002) ? 1 : 0; 121 state->ready = (csr & 0x0002) ? 1 : 0;
125 state->bvd1 = (csr & 0x0010) ? 1 : 0; 122 state->bvd1 = (csr & 0x0010) ? 1 : 0;
126 state->bvd2 = (csr & 0x0020) ? 1 : 0; 123 state->bvd2 = (csr & 0x0020) ? 1 : 0;
127 state->wrprot = (csr & 0x0008) ? 1 : 0; 124 state->wrprot = (csr & 0x0008) ? 1 : 0;
128 state->vs_3v = (csr & 0x0040) ? 0 : 1; 125 state->vs_3v = (csr & 0x0040) ? 0 : 1;
129 state->vs_Xv = (csr & 0x0080) ? 0 : 1; 126 state->vs_Xv = (csr & 0x0080) ? 0 : 1;
130 127
131 if ((cpr & 0x0080) && ((cpr & 0x8040) != 0x8040)) { 128 if ((cpr & 0x0080) && ((cpr & 0x8040) != 0x8040)) {
132 printk(KERN_ERR "sharpsl_pcmcia_socket_state(): CPR=%04X, Low voltage!\n", cpr); 129 printk(KERN_ERR "sharpsl_pcmcia_socket_state(): CPR=%04X, Low voltage!\n", cpr);
133 } 130 }
134 } 131 }
135 132
136 133
137 static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, 134 static int sharpsl_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
138 const socket_state_t *state) 135 const socket_state_t *state)
139 { 136 {
140 unsigned long flags; 137 unsigned long flags;
141 struct device *scoop = SCOOP_DEV[skt->nr].dev; 138 struct device *scoop = SCOOP_DEV[skt->nr].dev;
142 139
143 unsigned short cpr, ncpr, ccr, nccr, mcr, nmcr, imr, nimr; 140 unsigned short cpr, ncpr, ccr, nccr, mcr, nmcr, imr, nimr;
144 141
145 switch (state->Vcc) { 142 switch (state->Vcc) {
146 case 0: break; 143 case 0: break;
147 case 33: break; 144 case 33: break;
148 case 50: break; 145 case 50: break;
149 default: 146 default:
150 printk(KERN_ERR "sharpsl_pcmcia_configure_socket(): bad Vcc %u\n", state->Vcc); 147 printk(KERN_ERR "sharpsl_pcmcia_configure_socket(): bad Vcc %u\n", state->Vcc);
151 return -1; 148 return -1;
152 } 149 }
153 150
154 if ((state->Vpp!=state->Vcc) && (state->Vpp!=0)) { 151 if ((state->Vpp!=state->Vcc) && (state->Vpp!=0)) {
155 printk(KERN_ERR "CF slot cannot support Vpp %u\n", state->Vpp); 152 printk(KERN_ERR "CF slot cannot support Vpp %u\n", state->Vpp);
156 return -1; 153 return -1;
157 } 154 }
158 155
159 local_irq_save(flags); 156 local_irq_save(flags);
160 157
161 nmcr = (mcr = read_scoop_reg(scoop, SCOOP_MCR)) & ~0x0010; 158 nmcr = (mcr = read_scoop_reg(scoop, SCOOP_MCR)) & ~0x0010;
162 ncpr = (cpr = read_scoop_reg(scoop, SCOOP_CPR)) & ~0x0083; 159 ncpr = (cpr = read_scoop_reg(scoop, SCOOP_CPR)) & ~0x0083;
163 nccr = (ccr = read_scoop_reg(scoop, SCOOP_CCR)) & ~0x0080; 160 nccr = (ccr = read_scoop_reg(scoop, SCOOP_CCR)) & ~0x0080;
164 nimr = (imr = read_scoop_reg(scoop, SCOOP_IMR)) & ~0x003E; 161 nimr = (imr = read_scoop_reg(scoop, SCOOP_IMR)) & ~0x003E;
165 162
166 if ((machine_is_spitz() || machine_is_borzoi() || machine_is_akita()) && skt->nr == 0) { 163 if ((machine_is_spitz() || machine_is_borzoi() || machine_is_akita()) && skt->nr == 0) {
167 ncpr |= (state->Vcc == 33) ? 0x0002 : 164 ncpr |= (state->Vcc == 33) ? 0x0002 :
168 (state->Vcc == 50) ? 0x0002 : 0; 165 (state->Vcc == 50) ? 0x0002 : 0;
169 } else { 166 } else {
170 ncpr |= (state->Vcc == 33) ? 0x0001 : 167 ncpr |= (state->Vcc == 33) ? 0x0001 :
171 (state->Vcc == 50) ? 0x0002 : 0; 168 (state->Vcc == 50) ? 0x0002 : 0;
172 } 169 }
173 nmcr |= (state->flags&SS_IOCARD) ? 0x0010 : 0; 170 nmcr |= (state->flags&SS_IOCARD) ? 0x0010 : 0;
174 ncpr |= (state->flags&SS_OUTPUT_ENA) ? 0x0080 : 0; 171 ncpr |= (state->flags&SS_OUTPUT_ENA) ? 0x0080 : 0;
175 nccr |= (state->flags&SS_RESET)? 0x0080: 0; 172 nccr |= (state->flags&SS_RESET)? 0x0080: 0;
176 nimr |= ((skt->status&SS_DETECT) ? 0x0004 : 0)| 173 nimr |= ((skt->status&SS_DETECT) ? 0x0004 : 0)|
177 ((skt->status&SS_READY) ? 0x0002 : 0)| 174 ((skt->status&SS_READY) ? 0x0002 : 0)|
178 ((skt->status&SS_BATDEAD)? 0x0010 : 0)| 175 ((skt->status&SS_BATDEAD)? 0x0010 : 0)|
179 ((skt->status&SS_BATWARN)? 0x0020 : 0)| 176 ((skt->status&SS_BATWARN)? 0x0020 : 0)|
180 ((skt->status&SS_STSCHG) ? 0x0010 : 0)| 177 ((skt->status&SS_STSCHG) ? 0x0010 : 0)|
181 ((skt->status&SS_WRPROT) ? 0x0008 : 0); 178 ((skt->status&SS_WRPROT) ? 0x0008 : 0);
182 179
183 if (!(ncpr & 0x0003)) { 180 if (!(ncpr & 0x0003)) {
184 SCOOP_DEV[skt->nr].keep_rd = 0; 181 SCOOP_DEV[skt->nr].keep_rd = 0;
185 } else if (!SCOOP_DEV[skt->nr].keep_rd) { 182 } else if (!SCOOP_DEV[skt->nr].keep_rd) {
186 if (nccr & 0x0080) 183 if (nccr & 0x0080)
187 SCOOP_DEV[skt->nr].keep_rd = 1; 184 SCOOP_DEV[skt->nr].keep_rd = 1;
188 else 185 else
189 nccr |= 0x0080; 186 nccr |= 0x0080;
190 } 187 }
191 188
192 if (mcr != nmcr) 189 if (mcr != nmcr)
193 write_scoop_reg(scoop, SCOOP_MCR, nmcr); 190 write_scoop_reg(scoop, SCOOP_MCR, nmcr);
194 if (cpr != ncpr) { 191 if (cpr != ncpr) {
195 if (platform_scoop_config->power_ctrl) 192 if (platform_scoop_config->power_ctrl)
196 platform_scoop_config->power_ctrl(scoop, ncpr , skt->nr); 193 platform_scoop_config->power_ctrl(scoop, ncpr , skt->nr);
197 else 194 else
198 write_scoop_reg(scoop, SCOOP_CPR, ncpr); 195 write_scoop_reg(scoop, SCOOP_CPR, ncpr);
199 } 196 }
200 if (ccr != nccr) 197 if (ccr != nccr)
201 write_scoop_reg(scoop, SCOOP_CCR, nccr); 198 write_scoop_reg(scoop, SCOOP_CCR, nccr);
202 if (imr != nimr) 199 if (imr != nimr)
203 write_scoop_reg(scoop, SCOOP_IMR, nimr); 200 write_scoop_reg(scoop, SCOOP_IMR, nimr);
204 201
205 local_irq_restore(flags); 202 local_irq_restore(flags);
206 203
207 return 0; 204 return 0;
208 } 205 }
209 206
210 static void sharpsl_pcmcia_socket_init(struct soc_pcmcia_socket *skt) 207 static void sharpsl_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
211 { 208 {
212 sharpsl_pcmcia_init_reset(skt); 209 sharpsl_pcmcia_init_reset(skt);
213 210
214 /* Enable interrupt */ 211 /* Enable interrupt */
215 write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_IMR, 0x00C0); 212 write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_IMR, 0x00C0);
216 write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_MCR, 0x0101); 213 write_scoop_reg(SCOOP_DEV[skt->nr].dev, SCOOP_MCR, 0x0101);
217 SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS; 214 SCOOP_DEV[skt->nr].keep_vs = NO_KEEP_VS;
218 } 215 }
219 216
220 static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) 217 static void sharpsl_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
221 { 218 {
222 sharpsl_pcmcia_init_reset(skt); 219 sharpsl_pcmcia_init_reset(skt);
223 } 220 }
224 221
225 static struct pcmcia_low_level sharpsl_pcmcia_ops __initdata = { 222 static struct pcmcia_low_level sharpsl_pcmcia_ops __initdata = {
226 .owner = THIS_MODULE, 223 .owner = THIS_MODULE,
227 .hw_init = sharpsl_pcmcia_hw_init, 224 .hw_init = sharpsl_pcmcia_hw_init,
228 .hw_shutdown = sharpsl_pcmcia_hw_shutdown, 225 .hw_shutdown = sharpsl_pcmcia_hw_shutdown,
229 .socket_state = sharpsl_pcmcia_socket_state, 226 .socket_state = sharpsl_pcmcia_socket_state,
230 .configure_socket = sharpsl_pcmcia_configure_socket, 227 .configure_socket = sharpsl_pcmcia_configure_socket,
231 .socket_init = sharpsl_pcmcia_socket_init, 228 .socket_init = sharpsl_pcmcia_socket_init,
232 .socket_suspend = sharpsl_pcmcia_socket_suspend, 229 .socket_suspend = sharpsl_pcmcia_socket_suspend,
233 .first = 0, 230 .first = 0,
234 .nr = 0, 231 .nr = 0,
235 }; 232 };
236 233
237 #ifdef CONFIG_SA1100_COLLIE 234 #ifdef CONFIG_SA1100_COLLIE
238 #include "sa11xx_base.h" 235 #include "sa11xx_base.h"
239 236
240 int __devinit pcmcia_collie_init(struct device *dev) 237 int __devinit pcmcia_collie_init(struct device *dev)
241 { 238 {
242 int ret = -ENODEV; 239 int ret = -ENODEV;
243 240
244 if (machine_is_collie()) 241 if (machine_is_collie())
245 ret = sa11xx_drv_pcmcia_probe(dev, &sharpsl_pcmcia_ops, 0, 1); 242 ret = sa11xx_drv_pcmcia_probe(dev, &sharpsl_pcmcia_ops, 0, 1);
246 243
247 return ret; 244 return ret;
248 } 245 }
249 246
250 #else 247 #else
251 248
252 static struct platform_device *sharpsl_pcmcia_device; 249 static struct platform_device *sharpsl_pcmcia_device;
253 250
254 static int __init sharpsl_pcmcia_init(void) 251 static int __init sharpsl_pcmcia_init(void)
255 { 252 {
256 int ret; 253 int ret;
257 254
258 if (!platform_scoop_config) 255 if (!platform_scoop_config)
259 return -ENODEV; 256 return -ENODEV;
260 257
261 sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs; 258 sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs;
262 sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); 259 sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
263 260
264 if (!sharpsl_pcmcia_device) 261 if (!sharpsl_pcmcia_device)
265 return -ENOMEM; 262 return -ENOMEM;
266 263
267 ret = platform_device_add_data(sharpsl_pcmcia_device, 264 ret = platform_device_add_data(sharpsl_pcmcia_device,
268 &sharpsl_pcmcia_ops, sizeof(sharpsl_pcmcia_ops)); 265 &sharpsl_pcmcia_ops, sizeof(sharpsl_pcmcia_ops));
269 if (ret == 0) { 266 if (ret == 0) {
270 sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev; 267 sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev;
271 ret = platform_device_add(sharpsl_pcmcia_device); 268 ret = platform_device_add(sharpsl_pcmcia_device);
272 } 269 }
273 270
274 if (ret) 271 if (ret)
275 platform_device_put(sharpsl_pcmcia_device); 272 platform_device_put(sharpsl_pcmcia_device);
276 273
277 return ret; 274 return ret;
278 } 275 }
279 276
280 static void __exit sharpsl_pcmcia_exit(void) 277 static void __exit sharpsl_pcmcia_exit(void)
281 { 278 {
282 platform_device_unregister(sharpsl_pcmcia_device); 279 platform_device_unregister(sharpsl_pcmcia_device);
283 } 280 }
284 281
285 fs_initcall(sharpsl_pcmcia_init); 282 fs_initcall(sharpsl_pcmcia_init);
286 module_exit(sharpsl_pcmcia_exit); 283 module_exit(sharpsl_pcmcia_exit);
287 #endif 284 #endif
288 285
289 MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support"); 286 MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support");
290 MODULE_LICENSE("GPL"); 287 MODULE_LICENSE("GPL");
291 MODULE_ALIAS("platform:pxa2xx-pcmcia"); 288 MODULE_ALIAS("platform:pxa2xx-pcmcia");
292 289