Lines Matching +full:soc +full:- +full:s
1 // SPDX-License-Identifier: GPL-2.0-only
22 #include <asm/mach-types.h>
71 struct sa1111_pcmcia_socket *s = to_skt(skt); in sa1111_pcmcia_socket_state() local
72 u32 status = readl_relaxed(s->dev->mapbase + PCSR); in sa1111_pcmcia_socket_state()
74 switch (skt->nr) { in sa1111_pcmcia_socket_state()
76 state->detect = status & PCSR_S0_DETECT ? 0 : 1; in sa1111_pcmcia_socket_state()
77 state->ready = status & PCSR_S0_READY ? 1 : 0; in sa1111_pcmcia_socket_state()
78 state->bvd1 = status & PCSR_S0_BVD1 ? 1 : 0; in sa1111_pcmcia_socket_state()
79 state->bvd2 = status & PCSR_S0_BVD2 ? 1 : 0; in sa1111_pcmcia_socket_state()
80 state->wrprot = status & PCSR_S0_WP ? 1 : 0; in sa1111_pcmcia_socket_state()
81 state->vs_3v = status & PCSR_S0_VS1 ? 0 : 1; in sa1111_pcmcia_socket_state()
82 state->vs_Xv = status & PCSR_S0_VS2 ? 0 : 1; in sa1111_pcmcia_socket_state()
86 state->detect = status & PCSR_S1_DETECT ? 0 : 1; in sa1111_pcmcia_socket_state()
87 state->ready = status & PCSR_S1_READY ? 1 : 0; in sa1111_pcmcia_socket_state()
88 state->bvd1 = status & PCSR_S1_BVD1 ? 1 : 0; in sa1111_pcmcia_socket_state()
89 state->bvd2 = status & PCSR_S1_BVD2 ? 1 : 0; in sa1111_pcmcia_socket_state()
90 state->wrprot = status & PCSR_S1_WP ? 1 : 0; in sa1111_pcmcia_socket_state()
91 state->vs_3v = status & PCSR_S1_VS1 ? 0 : 1; in sa1111_pcmcia_socket_state()
92 state->vs_Xv = status & PCSR_S1_VS2 ? 0 : 1; in sa1111_pcmcia_socket_state()
99 struct sa1111_pcmcia_socket *s = to_skt(skt); in sa1111_pcmcia_configure_socket() local
103 switch (skt->nr) { in sa1111_pcmcia_configure_socket()
113 return -1; in sa1111_pcmcia_configure_socket()
118 if (state->Vcc != 0) in sa1111_pcmcia_configure_socket()
120 if (state->Vcc == 50) in sa1111_pcmcia_configure_socket()
122 if (state->flags & SS_RESET) in sa1111_pcmcia_configure_socket()
124 if (state->flags & SS_OUTPUT_ENA) in sa1111_pcmcia_configure_socket()
128 val = readl_relaxed(s->dev->mapbase + PCCR); in sa1111_pcmcia_configure_socket()
131 writel_relaxed(val, s->dev->mapbase + PCCR); in sa1111_pcmcia_configure_socket()
140 struct sa1111_pcmcia_socket *s; in sa1111_pcmcia_add() local
144 clk = devm_clk_get(&dev->dev, NULL); in sa1111_pcmcia_add()
151 return irqs[i] ? : -ENXIO; in sa1111_pcmcia_add()
154 ops->socket_state = sa1111_pcmcia_socket_state; in sa1111_pcmcia_add()
156 for (i = 0; i < ops->nr; i++) { in sa1111_pcmcia_add()
157 s = kzalloc(sizeof(*s), GFP_KERNEL); in sa1111_pcmcia_add()
158 if (!s) in sa1111_pcmcia_add()
159 return -ENOMEM; in sa1111_pcmcia_add()
161 s->soc.nr = ops->first + i; in sa1111_pcmcia_add()
162 s->soc.clk = clk; in sa1111_pcmcia_add()
164 soc_pcmcia_init_one(&s->soc, ops, &dev->dev); in sa1111_pcmcia_add()
165 s->dev = dev; in sa1111_pcmcia_add()
166 if (s->soc.nr) { in sa1111_pcmcia_add()
167 s->soc.socket.pci_irq = irqs[IDX_IRQ_S1_READY_NINT]; in sa1111_pcmcia_add()
168 s->soc.stat[SOC_STAT_CD].irq = irqs[IDX_IRQ_S1_CD_VALID]; in sa1111_pcmcia_add()
169 s->soc.stat[SOC_STAT_CD].name = "SA1111 CF card detect"; in sa1111_pcmcia_add()
170 s->soc.stat[SOC_STAT_BVD1].irq = irqs[IDX_IRQ_S1_BVD1_STSCHG]; in sa1111_pcmcia_add()
171 s->soc.stat[SOC_STAT_BVD1].name = "SA1111 CF BVD1"; in sa1111_pcmcia_add()
173 s->soc.socket.pci_irq = irqs[IDX_IRQ_S0_READY_NINT]; in sa1111_pcmcia_add()
174 s->soc.stat[SOC_STAT_CD].irq = irqs[IDX_IRQ_S0_CD_VALID]; in sa1111_pcmcia_add()
175 s->soc.stat[SOC_STAT_CD].name = "SA1111 PCMCIA card detect"; in sa1111_pcmcia_add()
176 s->soc.stat[SOC_STAT_BVD1].irq = irqs[IDX_IRQ_S0_BVD1_STSCHG]; in sa1111_pcmcia_add()
177 s->soc.stat[SOC_STAT_BVD1].name = "SA1111 PCMCIA BVD1"; in sa1111_pcmcia_add()
180 ret = add(&s->soc); in sa1111_pcmcia_add()
182 s->next = dev_get_drvdata(&dev->dev); in sa1111_pcmcia_add()
183 dev_set_drvdata(&dev->dev, s); in sa1111_pcmcia_add()
185 kfree(s); in sa1111_pcmcia_add()
200 dev_set_drvdata(&dev->dev, NULL); in pcmcia_probe()
202 if (!request_mem_region(dev->res.start, 512, SA1111_DRIVER_NAME(dev))) { in pcmcia_probe()
204 return -EBUSY; in pcmcia_probe()
207 base = dev->mapbase; in pcmcia_probe()
215 ret = -ENODEV; in pcmcia_probe()
234 release_mem_region(dev->res.start, 512); in pcmcia_probe()
243 struct sa1111_pcmcia_socket *next, *s = dev_get_drvdata(&dev->dev); in pcmcia_remove() local
245 dev_set_drvdata(&dev->dev, NULL); in pcmcia_remove()
247 for (; s; s = next) { in pcmcia_remove()
248 next = s->next; in pcmcia_remove()
249 soc_pcmcia_remove_one(&s->soc); in pcmcia_remove()
250 kfree(s); in pcmcia_remove()
253 release_mem_region(dev->res.start, 512); in pcmcia_remove()
260 .name = "sa1111-pcmcia",