Lines Matching +full:soc +full:- +full:s

1 // SPDX-License-Identifier: GPL-2.0-only
21 #include <asm/mach-types.h>
70 struct sa1111_pcmcia_socket *s = to_skt(skt); in sa1111_pcmcia_socket_state() local
71 u32 status = readl_relaxed(s->dev->mapbase + PCSR); in sa1111_pcmcia_socket_state()
73 switch (skt->nr) { in sa1111_pcmcia_socket_state()
75 state->detect = status & PCSR_S0_DETECT ? 0 : 1; in sa1111_pcmcia_socket_state()
76 state->ready = status & PCSR_S0_READY ? 1 : 0; in sa1111_pcmcia_socket_state()
77 state->bvd1 = status & PCSR_S0_BVD1 ? 1 : 0; in sa1111_pcmcia_socket_state()
78 state->bvd2 = status & PCSR_S0_BVD2 ? 1 : 0; in sa1111_pcmcia_socket_state()
79 state->wrprot = status & PCSR_S0_WP ? 1 : 0; in sa1111_pcmcia_socket_state()
80 state->vs_3v = status & PCSR_S0_VS1 ? 0 : 1; in sa1111_pcmcia_socket_state()
81 state->vs_Xv = status & PCSR_S0_VS2 ? 0 : 1; in sa1111_pcmcia_socket_state()
85 state->detect = status & PCSR_S1_DETECT ? 0 : 1; in sa1111_pcmcia_socket_state()
86 state->ready = status & PCSR_S1_READY ? 1 : 0; in sa1111_pcmcia_socket_state()
87 state->bvd1 = status & PCSR_S1_BVD1 ? 1 : 0; in sa1111_pcmcia_socket_state()
88 state->bvd2 = status & PCSR_S1_BVD2 ? 1 : 0; in sa1111_pcmcia_socket_state()
89 state->wrprot = status & PCSR_S1_WP ? 1 : 0; in sa1111_pcmcia_socket_state()
90 state->vs_3v = status & PCSR_S1_VS1 ? 0 : 1; in sa1111_pcmcia_socket_state()
91 state->vs_Xv = status & PCSR_S1_VS2 ? 0 : 1; in sa1111_pcmcia_socket_state()
98 struct sa1111_pcmcia_socket *s = to_skt(skt); in sa1111_pcmcia_configure_socket() local
102 switch (skt->nr) { in sa1111_pcmcia_configure_socket()
112 return -1; in sa1111_pcmcia_configure_socket()
117 if (state->Vcc != 0) in sa1111_pcmcia_configure_socket()
119 if (state->Vcc == 50) in sa1111_pcmcia_configure_socket()
121 if (state->flags & SS_RESET) in sa1111_pcmcia_configure_socket()
123 if (state->flags & SS_OUTPUT_ENA) in sa1111_pcmcia_configure_socket()
127 val = readl_relaxed(s->dev->mapbase + PCCR); in sa1111_pcmcia_configure_socket()
130 writel_relaxed(val, s->dev->mapbase + PCCR); in sa1111_pcmcia_configure_socket()
139 struct sa1111_pcmcia_socket *s; in sa1111_pcmcia_add() local
143 clk = devm_clk_get(&dev->dev, NULL); in sa1111_pcmcia_add()
150 return irqs[i] ? : -ENXIO; in sa1111_pcmcia_add()
153 ops->socket_state = sa1111_pcmcia_socket_state; in sa1111_pcmcia_add()
155 for (i = 0; i < ops->nr; i++) { in sa1111_pcmcia_add()
156 s = kzalloc(sizeof(*s), GFP_KERNEL); in sa1111_pcmcia_add()
157 if (!s) in sa1111_pcmcia_add()
158 return -ENOMEM; in sa1111_pcmcia_add()
160 s->soc.nr = ops->first + i; in sa1111_pcmcia_add()
161 s->soc.clk = clk; in sa1111_pcmcia_add()
163 soc_pcmcia_init_one(&s->soc, ops, &dev->dev); in sa1111_pcmcia_add()
164 s->dev = dev; in sa1111_pcmcia_add()
165 if (s->soc.nr) { in sa1111_pcmcia_add()
166 s->soc.socket.pci_irq = irqs[IDX_IRQ_S1_READY_NINT]; in sa1111_pcmcia_add()
167 s->soc.stat[SOC_STAT_CD].irq = irqs[IDX_IRQ_S1_CD_VALID]; in sa1111_pcmcia_add()
168 s->soc.stat[SOC_STAT_CD].name = "SA1111 CF card detect"; in sa1111_pcmcia_add()
169 s->soc.stat[SOC_STAT_BVD1].irq = irqs[IDX_IRQ_S1_BVD1_STSCHG]; in sa1111_pcmcia_add()
170 s->soc.stat[SOC_STAT_BVD1].name = "SA1111 CF BVD1"; in sa1111_pcmcia_add()
172 s->soc.socket.pci_irq = irqs[IDX_IRQ_S0_READY_NINT]; in sa1111_pcmcia_add()
173 s->soc.stat[SOC_STAT_CD].irq = irqs[IDX_IRQ_S0_CD_VALID]; in sa1111_pcmcia_add()
174 s->soc.stat[SOC_STAT_CD].name = "SA1111 PCMCIA card detect"; in sa1111_pcmcia_add()
175 s->soc.stat[SOC_STAT_BVD1].irq = irqs[IDX_IRQ_S0_BVD1_STSCHG]; in sa1111_pcmcia_add()
176 s->soc.stat[SOC_STAT_BVD1].name = "SA1111 PCMCIA BVD1"; in sa1111_pcmcia_add()
179 ret = add(&s->soc); in sa1111_pcmcia_add()
181 s->next = dev_get_drvdata(&dev->dev); in sa1111_pcmcia_add()
182 dev_set_drvdata(&dev->dev, s); in sa1111_pcmcia_add()
184 kfree(s); in sa1111_pcmcia_add()
199 dev_set_drvdata(&dev->dev, NULL); in pcmcia_probe()
201 if (!request_mem_region(dev->res.start, 512, SA1111_DRIVER_NAME(dev))) { in pcmcia_probe()
203 return -EBUSY; in pcmcia_probe()
206 base = dev->mapbase; in pcmcia_probe()
214 ret = -ENODEV; in pcmcia_probe()
225 release_mem_region(dev->res.start, 512); in pcmcia_probe()
234 struct sa1111_pcmcia_socket *next, *s = dev_get_drvdata(&dev->dev); in pcmcia_remove() local
236 dev_set_drvdata(&dev->dev, NULL); in pcmcia_remove()
238 for (; s; s = next) { in pcmcia_remove()
239 next = s->next; in pcmcia_remove()
240 soc_pcmcia_remove_one(&s->soc); in pcmcia_remove()
241 kfree(s); in pcmcia_remove()
244 release_mem_region(dev->res.start, 512); in pcmcia_remove()
250 .name = "sa1111-pcmcia",