Lines Matching refs:skt

60 void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
71 printk(KERN_DEBUG "skt%u: %s: %pV", skt->nr, func, &vaf);
83 int soc_pcmcia_regulator_set(struct soc_pcmcia_socket *skt,
101 dev_warn(&skt->socket.dev,
103 r == &skt->vcc ? "Vcc" : "Vpp",
133 void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt,
137 calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
139 calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
141 calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
145 static void __soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt,
151 if (skt->stat[i].irq)
152 free_irq(skt->stat[i].irq, skt);
154 if (skt->ops->hw_shutdown)
155 skt->ops->hw_shutdown(skt);
157 clk_disable_unprepare(skt->clk);
160 static void soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
162 __soc_pcmcia_hw_shutdown(skt, ARRAY_SIZE(skt->stat));
165 int soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt)
167 struct device *dev = skt->socket.dev.parent;
171 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
172 if (!skt->stat[i].name)
175 desc = devm_gpiod_get(dev, skt->stat[i].name, GPIOD_IN);
178 skt->stat[i].name, PTR_ERR(desc));
182 skt->stat[i].desc = desc;
189 static int soc_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
193 ret = clk_prepare_enable(skt->clk);
197 if (skt->ops->hw_init) {
198 ret = skt->ops->hw_init(skt);
200 clk_disable_unprepare(skt->clk);
205 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
206 if (gpio_is_valid(skt->stat[i].gpio)) {
213 ret = devm_gpio_request_one(skt->socket.dev.parent,
214 skt->stat[i].gpio, flags,
215 skt->stat[i].name);
217 __soc_pcmcia_hw_shutdown(skt, i);
221 skt->stat[i].desc = gpio_to_desc(skt->stat[i].gpio);
224 if (i < SOC_STAT_VS1 && skt->stat[i].desc) {
225 int irq = gpiod_to_irq(skt->stat[i].desc);
229 skt->socket.pci_irq = irq;
231 skt->stat[i].irq = irq;
235 if (skt->stat[i].irq) {
236 ret = request_irq(skt->stat[i].irq,
239 skt->stat[i].name, skt);
241 __soc_pcmcia_hw_shutdown(skt, i);
250 static void soc_pcmcia_hw_enable(struct soc_pcmcia_socket *skt)
254 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
255 if (skt->stat[i].irq) {
256 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_RISING);
257 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_BOTH);
261 static void soc_pcmcia_hw_disable(struct soc_pcmcia_socket *skt)
265 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
266 if (skt->stat[i].irq)
267 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_NONE);
275 void soc_common_cf_socket_state(struct soc_pcmcia_socket *skt,
282 static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
293 if (skt->stat[SOC_STAT_CD].desc)
294 state.detect = !!gpiod_get_value(skt->stat[SOC_STAT_CD].desc);
295 if (skt->stat[SOC_STAT_RDY].desc)
296 state.ready = !!gpiod_get_value(skt->stat[SOC_STAT_RDY].desc);
297 if (skt->stat[SOC_STAT_BVD1].desc)
298 state.bvd1 = !!gpiod_get_value(skt->stat[SOC_STAT_BVD1].desc);
299 if (skt->stat[SOC_STAT_BVD2].desc)
300 state.bvd2 = !!gpiod_get_value(skt->stat[SOC_STAT_BVD2].desc);
301 if (skt->stat[SOC_STAT_VS1].desc)
302 state.vs_3v = !!gpiod_get_value(skt->stat[SOC_STAT_VS1].desc);
303 if (skt->stat[SOC_STAT_VS2].desc)
304 state.vs_Xv = !!gpiod_get_value(skt->stat[SOC_STAT_VS2].desc);
306 skt->ops->socket_state(skt, &state);
318 stat |= skt->cs_state.Vcc ? SS_POWERON : 0;
320 if (skt->cs_state.flags & SS_IOCARD)
338 struct soc_pcmcia_socket *skt, socket_state_t *state)
342 ret = skt->ops->configure_socket(skt, state);
345 skt->nr);
347 WARN_ON(skt->ops->configure_socket(skt, &skt->cs_state));
356 if (skt->gpio_reset) {
357 descs[n] = skt->gpio_reset;
360 if (skt->gpio_bus_enable) {
361 descs[n] = skt->gpio_bus_enable;
372 if (skt->irq_state != 1 && state->io_irq) {
373 skt->irq_state = 1;
374 irq_set_irq_type(skt->socket.pci_irq,
376 } else if (skt->irq_state == 1 && state->io_irq == 0) {
377 skt->irq_state = 0;
378 irq_set_irq_type(skt->socket.pci_irq, IRQ_TYPE_NONE);
381 skt->cs_state = *state;
398 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
400 debug(skt, 2, "initializing socket\n");
401 if (skt->ops->socket_init)
402 skt->ops->socket_init(skt);
403 soc_pcmcia_hw_enable(skt);
419 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
421 debug(skt, 2, "suspending socket\n");
423 soc_pcmcia_hw_disable(skt);
424 if (skt->ops->socket_suspend)
425 skt->ops->socket_suspend(skt);
432 static void soc_common_check_status(struct soc_pcmcia_socket *skt)
436 debug(skt, 4, "entering PCMCIA monitoring thread\n");
442 status = soc_common_pcmcia_skt_state(skt);
445 events = (status ^ skt->status) & skt->cs_state.csc_mask;
446 skt->status = status;
449 debug(skt, 4, "events: %s%s%s%s%s%s\n",
458 pcmcia_parse_events(&skt->socket, events);
465 struct soc_pcmcia_socket *skt = from_timer(skt, t, poll_timer);
466 debug(skt, 4, "polling for events\n");
468 mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD);
470 soc_common_check_status(skt);
484 struct soc_pcmcia_socket *skt = dev;
486 debug(skt, 3, "servicing IRQ %d\n", irq);
488 soc_common_check_status(skt);
512 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
514 skt->status = soc_common_pcmcia_skt_state(skt);
515 *status = skt->status;
531 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
533 debug(skt, 2, "mask: %s%s%s%s%s%s flags: %s%s%s%s%s%s Vcc %d Vpp %d irq %d\n",
548 return soc_common_pcmcia_config_skt(skt, state);
563 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
566 debug(skt, 2, "map %u speed %u start 0x%08llx stop 0x%08llx\n",
569 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
592 skt->spd_io[map->map] = speed;
593 skt->ops->set_timing(skt);
599 map->stop += skt->socket.io_offset;
600 map->start = skt->socket.io_offset;
617 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
621 debug(skt, 2, "map %u speed %u card_start %08x\n",
623 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
644 res = &skt->res_attr;
645 skt->spd_attr[map->map] = speed;
646 skt->spd_mem[map->map] = 0;
648 res = &skt->res_mem;
649 skt->spd_attr[map->map] = 0;
650 skt->spd_mem[map->map] = speed;
653 skt->ops->set_timing(skt);
708 struct soc_pcmcia_socket *skt =
712 p += sprintf(p, "slot : %d\n", skt->nr);
714 dump_bits(&p, "status", skt->status,
716 dump_bits(&p, "csc_mask", skt->cs_state.csc_mask,
718 dump_bits(&p, "cs_flags", skt->cs_state.flags,
721 p += sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc);
722 p += sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp);
723 p += sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq,
724 skt->socket.pci_irq);
725 if (skt->ops->show_timing)
726 p += skt->ops->show_timing(skt, p);
747 struct soc_pcmcia_socket *skt = container_of(nb, struct soc_pcmcia_socket, cpufreq_nb);
750 return skt->ops->frequency_change(skt, val, freqs);
754 void soc_pcmcia_init_one(struct soc_pcmcia_socket *skt,
759 skt->ops = ops;
760 skt->socket.owner = ops->owner;
761 skt->socket.dev.parent = dev;
762 skt->socket.pci_irq = NO_IRQ;
764 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
765 skt->stat[i].gpio = -EINVAL;
769 void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt)
771 del_timer_sync(&skt->poll_timer);
773 pcmcia_unregister_socket(&skt->socket);
776 if (skt->ops->frequency_change)
777 cpufreq_unregister_notifier(&skt->cpufreq_nb,
781 soc_pcmcia_hw_shutdown(skt);
784 soc_common_pcmcia_config_skt(skt, &dead_socket);
786 iounmap(PCI_IOBASE + skt->res_io_io.start);
787 release_resource(&skt->res_attr);
788 release_resource(&skt->res_mem);
789 release_resource(&skt->res_io);
790 release_resource(&skt->res_skt);
794 int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
798 skt->cs_state = dead_socket;
800 timer_setup(&skt->poll_timer, soc_common_pcmcia_poll_event, 0);
801 skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
803 ret = request_resource(&iomem_resource, &skt->res_skt);
807 ret = request_resource(&skt->res_skt, &skt->res_io);
811 ret = request_resource(&skt->res_skt, &skt->res_mem);
815 ret = request_resource(&skt->res_skt, &skt->res_attr);
819 skt->res_io_io = (struct resource)
820 DEFINE_RES_IO_NAMED(skt->nr * 0x1000 + 0x10000, 0x1000,
822 ret = pci_remap_iospace(&skt->res_io_io, skt->res_io.start);
831 skt->ops->set_timing(skt);
833 ret = soc_pcmcia_hw_init(skt);
837 skt->socket.ops = &soc_common_pcmcia_operations;
838 skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
839 skt->socket.resource_ops = &pccard_static_ops;
840 skt->socket.irq_mask = 0;
841 skt->socket.map_size = PAGE_SIZE;
842 skt->socket.io_offset = (unsigned long)skt->res_io_io.start;
844 skt->status = soc_common_pcmcia_skt_state(skt);
847 if (skt->ops->frequency_change) {
848 skt->cpufreq_nb.notifier_call = soc_common_pcmcia_cpufreq_nb;
850 ret = cpufreq_register_notifier(&skt->cpufreq_nb,
853 dev_err(skt->socket.dev.parent,
859 ret = pcmcia_register_socket(&skt->socket);
863 ret = device_create_file(&skt->socket.dev, &dev_attr_status);
870 del_timer_sync(&skt->poll_timer);
871 pcmcia_unregister_socket(&skt->socket);
874 soc_pcmcia_hw_shutdown(skt);
876 iounmap(PCI_IOBASE + skt->res_io_io.start);
878 release_resource(&skt->res_attr);
880 release_resource(&skt->res_mem);
882 release_resource(&skt->res_io);
884 release_resource(&skt->res_skt);