Lines Matching refs:skt
61 void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
72 printk(KERN_DEBUG "skt%u: %s: %pV", skt->nr, func, &vaf);
84 int soc_pcmcia_regulator_set(struct soc_pcmcia_socket *skt,
102 dev_warn(&skt->socket.dev,
104 r == &skt->vcc ? "Vcc" : "Vpp",
134 void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt,
138 calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
140 calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
142 calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
146 static void __soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt,
152 if (skt->stat[i].irq)
153 free_irq(skt->stat[i].irq, skt);
155 if (skt->ops->hw_shutdown)
156 skt->ops->hw_shutdown(skt);
158 clk_disable_unprepare(skt->clk);
161 static void soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
163 __soc_pcmcia_hw_shutdown(skt, ARRAY_SIZE(skt->stat));
166 int soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt)
168 struct device *dev = skt->socket.dev.parent;
172 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
173 if (!skt->stat[i].name)
176 desc = devm_gpiod_get(dev, skt->stat[i].name, GPIOD_IN);
179 skt->stat[i].name, PTR_ERR(desc));
183 skt->stat[i].desc = desc;
190 static int soc_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
194 ret = clk_prepare_enable(skt->clk);
198 if (skt->ops->hw_init) {
199 ret = skt->ops->hw_init(skt);
201 clk_disable_unprepare(skt->clk);
206 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) {
207 if (gpio_is_valid(skt->stat[i].gpio)) {
214 ret = devm_gpio_request_one(skt->socket.dev.parent,
215 skt->stat[i].gpio, flags,
216 skt->stat[i].name);
218 __soc_pcmcia_hw_shutdown(skt, i);
222 skt->stat[i].desc = gpio_to_desc(skt->stat[i].gpio);
225 if (i < SOC_STAT_VS1 && skt->stat[i].desc) {
226 int irq = gpiod_to_irq(skt->stat[i].desc);
230 skt->socket.pci_irq = irq;
232 skt->stat[i].irq = irq;
236 if (skt->stat[i].irq) {
237 ret = request_irq(skt->stat[i].irq,
240 skt->stat[i].name, skt);
242 __soc_pcmcia_hw_shutdown(skt, i);
251 static void soc_pcmcia_hw_enable(struct soc_pcmcia_socket *skt)
255 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
256 if (skt->stat[i].irq) {
257 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_RISING);
258 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_BOTH);
262 static void soc_pcmcia_hw_disable(struct soc_pcmcia_socket *skt)
266 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
267 if (skt->stat[i].irq)
268 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_NONE);
276 void soc_common_cf_socket_state(struct soc_pcmcia_socket *skt,
283 static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
294 if (skt->stat[SOC_STAT_CD].desc)
295 state.detect = !!gpiod_get_value(skt->stat[SOC_STAT_CD].desc);
296 if (skt->stat[SOC_STAT_RDY].desc)
297 state.ready = !!gpiod_get_value(skt->stat[SOC_STAT_RDY].desc);
298 if (skt->stat[SOC_STAT_BVD1].desc)
299 state.bvd1 = !!gpiod_get_value(skt->stat[SOC_STAT_BVD1].desc);
300 if (skt->stat[SOC_STAT_BVD2].desc)
301 state.bvd2 = !!gpiod_get_value(skt->stat[SOC_STAT_BVD2].desc);
302 if (skt->stat[SOC_STAT_VS1].desc)
303 state.vs_3v = !!gpiod_get_value(skt->stat[SOC_STAT_VS1].desc);
304 if (skt->stat[SOC_STAT_VS2].desc)
305 state.vs_Xv = !!gpiod_get_value(skt->stat[SOC_STAT_VS2].desc);
307 skt->ops->socket_state(skt, &state);
319 stat |= skt->cs_state.Vcc ? SS_POWERON : 0;
321 if (skt->cs_state.flags & SS_IOCARD)
339 struct soc_pcmcia_socket *skt, socket_state_t *state)
343 ret = skt->ops->configure_socket(skt, state);
346 skt->nr);
348 WARN_ON(skt->ops->configure_socket(skt, &skt->cs_state));
357 if (skt->gpio_reset) {
358 descs[n] = skt->gpio_reset;
361 if (skt->gpio_bus_enable) {
362 descs[n] = skt->gpio_bus_enable;
373 if (skt->irq_state != 1 && state->io_irq) {
374 skt->irq_state = 1;
375 irq_set_irq_type(skt->socket.pci_irq,
377 } else if (skt->irq_state == 1 && state->io_irq == 0) {
378 skt->irq_state = 0;
379 irq_set_irq_type(skt->socket.pci_irq, IRQ_TYPE_NONE);
382 skt->cs_state = *state;
399 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
401 debug(skt, 2, "initializing socket\n");
402 if (skt->ops->socket_init)
403 skt->ops->socket_init(skt);
404 soc_pcmcia_hw_enable(skt);
420 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
422 debug(skt, 2, "suspending socket\n");
424 soc_pcmcia_hw_disable(skt);
425 if (skt->ops->socket_suspend)
426 skt->ops->socket_suspend(skt);
433 static void soc_common_check_status(struct soc_pcmcia_socket *skt)
437 debug(skt, 4, "entering PCMCIA monitoring thread\n");
443 status = soc_common_pcmcia_skt_state(skt);
446 events = (status ^ skt->status) & skt->cs_state.csc_mask;
447 skt->status = status;
450 debug(skt, 4, "events: %s%s%s%s%s%s\n",
459 pcmcia_parse_events(&skt->socket, events);
466 struct soc_pcmcia_socket *skt = from_timer(skt, t, poll_timer);
467 debug(skt, 4, "polling for events\n");
469 mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD);
471 soc_common_check_status(skt);
485 struct soc_pcmcia_socket *skt = dev;
487 debug(skt, 3, "servicing IRQ %d\n", irq);
489 soc_common_check_status(skt);
513 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
515 skt->status = soc_common_pcmcia_skt_state(skt);
516 *status = skt->status;
532 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
534 debug(skt, 2, "mask: %s%s%s%s%s%s flags: %s%s%s%s%s%s Vcc %d Vpp %d irq %d\n",
549 return soc_common_pcmcia_config_skt(skt, state);
564 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
567 debug(skt, 2, "map %u speed %u start 0x%08llx stop 0x%08llx\n",
570 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
593 skt->spd_io[map->map] = speed;
594 skt->ops->set_timing(skt);
600 map->stop += skt->socket.io_offset;
601 map->start = skt->socket.io_offset;
618 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
622 debug(skt, 2, "map %u speed %u card_start %08x\n",
624 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
645 res = &skt->res_attr;
646 skt->spd_attr[map->map] = speed;
647 skt->spd_mem[map->map] = 0;
649 res = &skt->res_mem;
650 skt->spd_attr[map->map] = 0;
651 skt->spd_mem[map->map] = speed;
654 skt->ops->set_timing(skt);
709 struct soc_pcmcia_socket *skt =
713 p += sprintf(p, "slot : %d\n", skt->nr);
715 dump_bits(&p, "status", skt->status,
717 dump_bits(&p, "csc_mask", skt->cs_state.csc_mask,
719 dump_bits(&p, "cs_flags", skt->cs_state.flags,
722 p += sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc);
723 p += sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp);
724 p += sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq,
725 skt->socket.pci_irq);
726 if (skt->ops->show_timing)
727 p += skt->ops->show_timing(skt, p);
748 struct soc_pcmcia_socket *skt = container_of(nb, struct soc_pcmcia_socket, cpufreq_nb);
751 return skt->ops->frequency_change(skt, val, freqs);
755 void soc_pcmcia_init_one(struct soc_pcmcia_socket *skt,
760 skt->ops = ops;
761 skt->socket.owner = ops->owner;
762 skt->socket.dev.parent = dev;
763 skt->socket.pci_irq = NO_IRQ;
765 for (i = 0; i < ARRAY_SIZE(skt->stat); i++)
766 skt->stat[i].gpio = -EINVAL;
770 void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt)
772 del_timer_sync(&skt->poll_timer);
774 pcmcia_unregister_socket(&skt->socket);
777 if (skt->ops->frequency_change)
778 cpufreq_unregister_notifier(&skt->cpufreq_nb,
782 soc_pcmcia_hw_shutdown(skt);
785 soc_common_pcmcia_config_skt(skt, &dead_socket);
787 iounmap(skt->virt_io);
788 skt->virt_io = NULL;
789 release_resource(&skt->res_attr);
790 release_resource(&skt->res_mem);
791 release_resource(&skt->res_io);
792 release_resource(&skt->res_skt);
796 int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
800 skt->cs_state = dead_socket;
802 timer_setup(&skt->poll_timer, soc_common_pcmcia_poll_event, 0);
803 skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
805 ret = request_resource(&iomem_resource, &skt->res_skt);
809 ret = request_resource(&skt->res_skt, &skt->res_io);
813 ret = request_resource(&skt->res_skt, &skt->res_mem);
817 ret = request_resource(&skt->res_skt, &skt->res_attr);
821 skt->virt_io = ioremap(skt->res_io.start, 0x10000);
822 if (skt->virt_io == NULL) {
832 skt->ops->set_timing(skt);
834 ret = soc_pcmcia_hw_init(skt);
838 skt->socket.ops = &soc_common_pcmcia_operations;
839 skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
840 skt->socket.resource_ops = &pccard_static_ops;
841 skt->socket.irq_mask = 0;
842 skt->socket.map_size = PAGE_SIZE;
843 skt->socket.io_offset = (unsigned long)skt->virt_io;
845 skt->status = soc_common_pcmcia_skt_state(skt);
848 if (skt->ops->frequency_change) {
849 skt->cpufreq_nb.notifier_call = soc_common_pcmcia_cpufreq_nb;
851 ret = cpufreq_register_notifier(&skt->cpufreq_nb,
854 dev_err(skt->socket.dev.parent,
860 ret = pcmcia_register_socket(&skt->socket);
864 ret = device_create_file(&skt->socket.dev, &dev_attr_status);
871 del_timer_sync(&skt->poll_timer);
872 pcmcia_unregister_socket(&skt->socket);
875 soc_pcmcia_hw_shutdown(skt);
877 iounmap(skt->virt_io);
879 release_resource(&skt->res_attr);
881 release_resource(&skt->res_mem);
883 release_resource(&skt->res_io);
885 release_resource(&skt->res_skt);