Lines Matching refs:skt

59 void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,  in soc_pcmcia_debug()  argument
70 printk(KERN_DEBUG "skt%u: %s: %pV", skt->nr, func, &vaf); in soc_pcmcia_debug()
97 void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *skt, in soc_common_pcmcia_get_timing() argument
101 calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS); in soc_common_pcmcia_get_timing()
103 calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS); in soc_common_pcmcia_get_timing()
105 calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS); in soc_common_pcmcia_get_timing()
109 static void __soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt, in __soc_pcmcia_hw_shutdown() argument
115 if (skt->stat[i].irq) in __soc_pcmcia_hw_shutdown()
116 free_irq(skt->stat[i].irq, skt); in __soc_pcmcia_hw_shutdown()
117 if (gpio_is_valid(skt->stat[i].gpio)) in __soc_pcmcia_hw_shutdown()
118 gpio_free(skt->stat[i].gpio); in __soc_pcmcia_hw_shutdown()
121 if (skt->ops->hw_shutdown) in __soc_pcmcia_hw_shutdown()
122 skt->ops->hw_shutdown(skt); in __soc_pcmcia_hw_shutdown()
124 clk_disable_unprepare(skt->clk); in __soc_pcmcia_hw_shutdown()
127 static void soc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) in soc_pcmcia_hw_shutdown() argument
129 __soc_pcmcia_hw_shutdown(skt, ARRAY_SIZE(skt->stat)); in soc_pcmcia_hw_shutdown()
132 static int soc_pcmcia_hw_init(struct soc_pcmcia_socket *skt) in soc_pcmcia_hw_init() argument
136 clk_prepare_enable(skt->clk); in soc_pcmcia_hw_init()
138 if (skt->ops->hw_init) { in soc_pcmcia_hw_init()
139 ret = skt->ops->hw_init(skt); in soc_pcmcia_hw_init()
144 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) { in soc_pcmcia_hw_init()
145 if (gpio_is_valid(skt->stat[i].gpio)) { in soc_pcmcia_hw_init()
148 ret = gpio_request_one(skt->stat[i].gpio, GPIOF_IN, in soc_pcmcia_hw_init()
149 skt->stat[i].name); in soc_pcmcia_hw_init()
151 __soc_pcmcia_hw_shutdown(skt, i); in soc_pcmcia_hw_init()
155 irq = gpio_to_irq(skt->stat[i].gpio); in soc_pcmcia_hw_init()
158 skt->socket.pci_irq = irq; in soc_pcmcia_hw_init()
160 skt->stat[i].irq = irq; in soc_pcmcia_hw_init()
163 if (skt->stat[i].irq) { in soc_pcmcia_hw_init()
164 ret = request_irq(skt->stat[i].irq, in soc_pcmcia_hw_init()
167 skt->stat[i].name, skt); in soc_pcmcia_hw_init()
169 if (gpio_is_valid(skt->stat[i].gpio)) in soc_pcmcia_hw_init()
170 gpio_free(skt->stat[i].gpio); in soc_pcmcia_hw_init()
171 __soc_pcmcia_hw_shutdown(skt, i); in soc_pcmcia_hw_init()
180 static void soc_pcmcia_hw_enable(struct soc_pcmcia_socket *skt) in soc_pcmcia_hw_enable() argument
184 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) in soc_pcmcia_hw_enable()
185 if (skt->stat[i].irq) { in soc_pcmcia_hw_enable()
186 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_RISING); in soc_pcmcia_hw_enable()
187 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_EDGE_BOTH); in soc_pcmcia_hw_enable()
191 static void soc_pcmcia_hw_disable(struct soc_pcmcia_socket *skt) in soc_pcmcia_hw_disable() argument
195 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) in soc_pcmcia_hw_disable()
196 if (skt->stat[i].irq) in soc_pcmcia_hw_disable()
197 irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_NONE); in soc_pcmcia_hw_disable()
200 static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt) in soc_common_pcmcia_skt_state() argument
212 if (gpio_is_valid(skt->stat[SOC_STAT_CD].gpio)) in soc_common_pcmcia_skt_state()
213 state.detect = !gpio_get_value(skt->stat[SOC_STAT_CD].gpio); in soc_common_pcmcia_skt_state()
216 if (gpio_is_valid(skt->stat[SOC_STAT_RDY].gpio)) in soc_common_pcmcia_skt_state()
217 state.ready = !!gpio_get_value(skt->stat[SOC_STAT_RDY].gpio); in soc_common_pcmcia_skt_state()
218 if (gpio_is_valid(skt->stat[SOC_STAT_BVD1].gpio)) in soc_common_pcmcia_skt_state()
219 state.bvd1 = !!gpio_get_value(skt->stat[SOC_STAT_BVD1].gpio); in soc_common_pcmcia_skt_state()
220 if (gpio_is_valid(skt->stat[SOC_STAT_BVD2].gpio)) in soc_common_pcmcia_skt_state()
221 state.bvd2 = !!gpio_get_value(skt->stat[SOC_STAT_BVD2].gpio); in soc_common_pcmcia_skt_state()
223 skt->ops->socket_state(skt, &state); in soc_common_pcmcia_skt_state()
235 stat |= skt->cs_state.Vcc ? SS_POWERON : 0; in soc_common_pcmcia_skt_state()
237 if (skt->cs_state.flags & SS_IOCARD) in soc_common_pcmcia_skt_state()
255 struct soc_pcmcia_socket *skt, socket_state_t *state) in soc_common_pcmcia_config_skt() argument
259 ret = skt->ops->configure_socket(skt, state); in soc_common_pcmcia_config_skt()
265 if (skt->irq_state != 1 && state->io_irq) { in soc_common_pcmcia_config_skt()
266 skt->irq_state = 1; in soc_common_pcmcia_config_skt()
267 irq_set_irq_type(skt->socket.pci_irq, in soc_common_pcmcia_config_skt()
269 } else if (skt->irq_state == 1 && state->io_irq == 0) { in soc_common_pcmcia_config_skt()
270 skt->irq_state = 0; in soc_common_pcmcia_config_skt()
271 irq_set_irq_type(skt->socket.pci_irq, IRQ_TYPE_NONE); in soc_common_pcmcia_config_skt()
274 skt->cs_state = *state; in soc_common_pcmcia_config_skt()
279 "socket %d\n", skt->nr); in soc_common_pcmcia_config_skt()
295 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_sock_init() local
297 debug(skt, 2, "initializing socket\n"); in soc_common_pcmcia_sock_init()
298 if (skt->ops->socket_init) in soc_common_pcmcia_sock_init()
299 skt->ops->socket_init(skt); in soc_common_pcmcia_sock_init()
300 soc_pcmcia_hw_enable(skt); in soc_common_pcmcia_sock_init()
316 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_suspend() local
318 debug(skt, 2, "suspending socket\n"); in soc_common_pcmcia_suspend()
320 soc_pcmcia_hw_disable(skt); in soc_common_pcmcia_suspend()
321 if (skt->ops->socket_suspend) in soc_common_pcmcia_suspend()
322 skt->ops->socket_suspend(skt); in soc_common_pcmcia_suspend()
329 static void soc_common_check_status(struct soc_pcmcia_socket *skt) in soc_common_check_status() argument
333 debug(skt, 4, "entering PCMCIA monitoring thread\n"); in soc_common_check_status()
339 status = soc_common_pcmcia_skt_state(skt); in soc_common_check_status()
342 events = (status ^ skt->status) & skt->cs_state.csc_mask; in soc_common_check_status()
343 skt->status = status; in soc_common_check_status()
346 debug(skt, 4, "events: %s%s%s%s%s%s\n", in soc_common_check_status()
355 pcmcia_parse_events(&skt->socket, events); in soc_common_check_status()
362 struct soc_pcmcia_socket *skt = (struct soc_pcmcia_socket *)dummy; in soc_common_pcmcia_poll_event() local
363 debug(skt, 4, "polling for events\n"); in soc_common_pcmcia_poll_event()
365 mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD); in soc_common_pcmcia_poll_event()
367 soc_common_check_status(skt); in soc_common_pcmcia_poll_event()
381 struct soc_pcmcia_socket *skt = dev; in soc_common_pcmcia_interrupt() local
383 debug(skt, 3, "servicing IRQ %d\n", irq); in soc_common_pcmcia_interrupt()
385 soc_common_check_status(skt); in soc_common_pcmcia_interrupt()
409 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_get_status() local
411 skt->status = soc_common_pcmcia_skt_state(skt); in soc_common_pcmcia_get_status()
412 *status = skt->status; in soc_common_pcmcia_get_status()
428 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_set_socket() local
430 debug(skt, 2, "mask: %s%s%s%s%s%s flags: %s%s%s%s%s%s Vcc %d Vpp %d irq %d\n", in soc_common_pcmcia_set_socket()
445 return soc_common_pcmcia_config_skt(skt, state); in soc_common_pcmcia_set_socket()
460 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_set_io_map() local
463 debug(skt, 2, "map %u speed %u start 0x%08llx stop 0x%08llx\n", in soc_common_pcmcia_set_io_map()
466 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", in soc_common_pcmcia_set_io_map()
489 skt->spd_io[map->map] = speed; in soc_common_pcmcia_set_io_map()
490 skt->ops->set_timing(skt); in soc_common_pcmcia_set_io_map()
496 map->stop += skt->socket.io_offset; in soc_common_pcmcia_set_io_map()
497 map->start = skt->socket.io_offset; in soc_common_pcmcia_set_io_map()
514 struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); in soc_common_pcmcia_set_mem_map() local
518 debug(skt, 2, "map %u speed %u card_start %08x\n", in soc_common_pcmcia_set_mem_map()
520 debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", in soc_common_pcmcia_set_mem_map()
541 res = &skt->res_attr; in soc_common_pcmcia_set_mem_map()
542 skt->spd_attr[map->map] = speed; in soc_common_pcmcia_set_mem_map()
543 skt->spd_mem[map->map] = 0; in soc_common_pcmcia_set_mem_map()
545 res = &skt->res_mem; in soc_common_pcmcia_set_mem_map()
546 skt->spd_attr[map->map] = 0; in soc_common_pcmcia_set_mem_map()
547 skt->spd_mem[map->map] = speed; in soc_common_pcmcia_set_mem_map()
550 skt->ops->set_timing(skt); in soc_common_pcmcia_set_mem_map()
605 struct soc_pcmcia_socket *skt = in show_status() local
609 p += sprintf(p, "slot : %d\n", skt->nr); in show_status()
611 dump_bits(&p, "status", skt->status, in show_status()
613 dump_bits(&p, "csc_mask", skt->cs_state.csc_mask, in show_status()
615 dump_bits(&p, "cs_flags", skt->cs_state.flags, in show_status()
618 p += sprintf(p, "Vcc : %d\n", skt->cs_state.Vcc); in show_status()
619 p += sprintf(p, "Vpp : %d\n", skt->cs_state.Vpp); in show_status()
620 p += sprintf(p, "IRQ : %d (%d)\n", skt->cs_state.io_irq, in show_status()
621 skt->socket.pci_irq); in show_status()
622 if (skt->ops->show_timing) in show_status()
623 p += skt->ops->show_timing(skt, p); in show_status()
647 struct soc_pcmcia_socket *skt; in soc_pcmcia_notifier() local
652 list_for_each_entry(skt, &soc_pcmcia_sockets, node) in soc_pcmcia_notifier()
653 if (skt->ops->frequency_change) in soc_pcmcia_notifier()
654 ret += skt->ops->frequency_change(skt, val, freqs); in soc_pcmcia_notifier()
686 void soc_pcmcia_init_one(struct soc_pcmcia_socket *skt, in soc_pcmcia_init_one() argument
691 skt->ops = ops; in soc_pcmcia_init_one()
692 skt->socket.owner = ops->owner; in soc_pcmcia_init_one()
693 skt->socket.dev.parent = dev; in soc_pcmcia_init_one()
694 skt->socket.pci_irq = NO_IRQ; in soc_pcmcia_init_one()
696 for (i = 0; i < ARRAY_SIZE(skt->stat); i++) in soc_pcmcia_init_one()
697 skt->stat[i].gpio = -EINVAL; in soc_pcmcia_init_one()
701 void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt) in soc_pcmcia_remove_one() argument
704 del_timer_sync(&skt->poll_timer); in soc_pcmcia_remove_one()
706 pcmcia_unregister_socket(&skt->socket); in soc_pcmcia_remove_one()
708 soc_pcmcia_hw_shutdown(skt); in soc_pcmcia_remove_one()
711 soc_common_pcmcia_config_skt(skt, &dead_socket); in soc_pcmcia_remove_one()
713 list_del(&skt->node); in soc_pcmcia_remove_one()
716 iounmap(skt->virt_io); in soc_pcmcia_remove_one()
717 skt->virt_io = NULL; in soc_pcmcia_remove_one()
718 release_resource(&skt->res_attr); in soc_pcmcia_remove_one()
719 release_resource(&skt->res_mem); in soc_pcmcia_remove_one()
720 release_resource(&skt->res_io); in soc_pcmcia_remove_one()
721 release_resource(&skt->res_skt); in soc_pcmcia_remove_one()
725 int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt) in soc_pcmcia_add_one() argument
729 setup_timer(&skt->poll_timer, soc_common_pcmcia_poll_event, in soc_pcmcia_add_one()
730 (unsigned long)skt); in soc_pcmcia_add_one()
731 skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD; in soc_pcmcia_add_one()
733 ret = request_resource(&iomem_resource, &skt->res_skt); in soc_pcmcia_add_one()
737 ret = request_resource(&skt->res_skt, &skt->res_io); in soc_pcmcia_add_one()
741 ret = request_resource(&skt->res_skt, &skt->res_mem); in soc_pcmcia_add_one()
745 ret = request_resource(&skt->res_skt, &skt->res_attr); in soc_pcmcia_add_one()
749 skt->virt_io = ioremap(skt->res_io.start, 0x10000); in soc_pcmcia_add_one()
750 if (skt->virt_io == NULL) { in soc_pcmcia_add_one()
757 list_add(&skt->node, &soc_pcmcia_sockets); in soc_pcmcia_add_one()
764 skt->ops->set_timing(skt); in soc_pcmcia_add_one()
766 ret = soc_pcmcia_hw_init(skt); in soc_pcmcia_add_one()
770 skt->socket.ops = &soc_common_pcmcia_operations; in soc_pcmcia_add_one()
771 skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD; in soc_pcmcia_add_one()
772 skt->socket.resource_ops = &pccard_static_ops; in soc_pcmcia_add_one()
773 skt->socket.irq_mask = 0; in soc_pcmcia_add_one()
774 skt->socket.map_size = PAGE_SIZE; in soc_pcmcia_add_one()
775 skt->socket.io_offset = (unsigned long)skt->virt_io; in soc_pcmcia_add_one()
777 skt->status = soc_common_pcmcia_skt_state(skt); in soc_pcmcia_add_one()
779 ret = pcmcia_register_socket(&skt->socket); in soc_pcmcia_add_one()
783 add_timer(&skt->poll_timer); in soc_pcmcia_add_one()
787 ret = device_create_file(&skt->socket.dev, &dev_attr_status); in soc_pcmcia_add_one()
795 del_timer_sync(&skt->poll_timer); in soc_pcmcia_add_one()
796 pcmcia_unregister_socket(&skt->socket); in soc_pcmcia_add_one()
799 soc_pcmcia_hw_shutdown(skt); in soc_pcmcia_add_one()
801 list_del(&skt->node); in soc_pcmcia_add_one()
803 iounmap(skt->virt_io); in soc_pcmcia_add_one()
805 release_resource(&skt->res_attr); in soc_pcmcia_add_one()
807 release_resource(&skt->res_mem); in soc_pcmcia_add_one()
809 release_resource(&skt->res_io); in soc_pcmcia_add_one()
811 release_resource(&skt->res_skt); in soc_pcmcia_add_one()