Lines Matching refs:dev

53 static inline u32 r592_read_reg(struct r592_device *dev, int address)  in r592_read_reg()  argument
55 u32 value = readl(dev->mmio + address); in r592_read_reg()
61 static inline void r592_write_reg(struct r592_device *dev, in r592_write_reg() argument
65 writel(value, dev->mmio + address); in r592_write_reg()
69 static inline u32 r592_read_reg_raw_be(struct r592_device *dev, int address) in r592_read_reg_raw_be() argument
71 u32 value = __raw_readl(dev->mmio + address); in r592_read_reg_raw_be()
77 static inline void r592_write_reg_raw_be(struct r592_device *dev, in r592_write_reg_raw_be() argument
81 __raw_writel(cpu_to_be32(value), dev->mmio + address); in r592_write_reg_raw_be()
85 static inline void r592_set_reg_mask(struct r592_device *dev, in r592_set_reg_mask() argument
88 u32 reg = readl(dev->mmio + address); in r592_set_reg_mask()
90 writel(reg | mask , dev->mmio + address); in r592_set_reg_mask()
94 static inline void r592_clear_reg_mask(struct r592_device *dev, in r592_clear_reg_mask() argument
97 u32 reg = readl(dev->mmio + address); in r592_clear_reg_mask()
100 writel(reg & ~mask, dev->mmio + address); in r592_clear_reg_mask()
105 static int r592_wait_status(struct r592_device *dev, u32 mask, u32 wanted_mask) in r592_wait_status() argument
108 u32 reg = r592_read_reg(dev, R592_STATUS); in r592_wait_status()
115 reg = r592_read_reg(dev, R592_STATUS); in r592_wait_status()
130 static int r592_enable_device(struct r592_device *dev, bool enable) in r592_enable_device() argument
137 r592_write_reg(dev, R592_POWER, R592_POWER_0 | R592_POWER_1); in r592_enable_device()
140 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); in r592_enable_device()
145 r592_write_reg(dev, R592_POWER, 0); in r592_enable_device()
151 static int r592_set_mode(struct r592_device *dev, bool parallel_mode) in r592_set_mode() argument
157 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_SERIAL); in r592_set_mode()
159 r592_clear_reg_mask(dev, R592_POWER, R592_POWER_20); in r592_set_mode()
165 r592_set_reg_mask(dev, R592_POWER, R592_POWER_20); in r592_set_mode()
167 r592_clear_reg_mask(dev, R592_IO, in r592_set_mode()
171 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_PARALLEL); in r592_set_mode()
174 dev->parallel_mode = parallel_mode; in r592_set_mode()
179 static void r592_host_reset(struct r592_device *dev) in r592_host_reset() argument
181 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); in r592_host_reset()
183 r592_set_mode(dev, dev->parallel_mode); in r592_host_reset()
188 static void r592_clear_interrupts(struct r592_device *dev) in r592_clear_interrupts() argument
191 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_ACK_MASK); in r592_clear_interrupts()
192 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_EN_MASK); in r592_clear_interrupts()
197 static int r592_test_io_error(struct r592_device *dev) in r592_test_io_error() argument
199 if (!(r592_read_reg(dev, R592_STATUS) & in r592_test_io_error()
207 static int r592_test_fifo_empty(struct r592_device *dev) in r592_test_fifo_empty() argument
209 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) in r592_test_fifo_empty()
213 r592_host_reset(dev); in r592_test_fifo_empty()
215 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) in r592_test_fifo_empty()
223 static void r592_start_dma(struct r592_device *dev, bool is_write) in r592_start_dma() argument
227 spin_lock_irqsave(&dev->irq_lock, flags); in r592_start_dma()
230 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); in r592_start_dma()
231 r592_set_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); in r592_start_dma()
234 r592_write_reg(dev, R592_FIFO_DMA, sg_dma_address(&dev->req->sg)); in r592_start_dma()
237 reg = r592_read_reg(dev, R592_FIFO_DMA_SETTINGS); in r592_start_dma()
244 r592_write_reg(dev, R592_FIFO_DMA_SETTINGS, reg); in r592_start_dma()
246 spin_unlock_irqrestore(&dev->irq_lock, flags); in r592_start_dma()
250 static void r592_stop_dma(struct r592_device *dev, int error) in r592_stop_dma() argument
252 r592_clear_reg_mask(dev, R592_FIFO_DMA_SETTINGS, in r592_stop_dma()
256 r592_write_reg(dev, R592_FIFO_DMA, in r592_stop_dma()
257 dev->dummy_dma_page_physical_address); in r592_stop_dma()
259 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); in r592_stop_dma()
260 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); in r592_stop_dma()
261 dev->dma_error = error; in r592_stop_dma()
265 static void r592_check_dma(struct r592_device *dev) in r592_check_dma() argument
267 dev->dma_capable = r592_enable_dma && in r592_check_dma()
268 (r592_read_reg(dev, R592_FIFO_DMA_SETTINGS) & in r592_check_dma()
273 static int r592_transfer_fifo_dma(struct r592_device *dev) in r592_transfer_fifo_dma() argument
278 if (!dev->dma_capable || !dev->req->long_data) in r592_transfer_fifo_dma()
281 len = dev->req->sg.length; in r592_transfer_fifo_dma()
282 is_write = dev->req->data_dir == WRITE; in r592_transfer_fifo_dma()
289 dev->dma_error = 0; in r592_transfer_fifo_dma()
290 reinit_completion(&dev->dma_done); in r592_transfer_fifo_dma()
293 sg_count = dma_map_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? in r592_transfer_fifo_dma()
296 if (sg_count != 1 || sg_dma_len(&dev->req->sg) < R592_LFIFO_SIZE) { in r592_transfer_fifo_dma()
301 r592_start_dma(dev, is_write); in r592_transfer_fifo_dma()
305 &dev->dma_done, msecs_to_jiffies(1000))) { in r592_transfer_fifo_dma()
307 r592_stop_dma(dev, -ETIMEDOUT); in r592_transfer_fifo_dma()
310 dma_unmap_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? in r592_transfer_fifo_dma()
313 return dev->dma_error; in r592_transfer_fifo_dma()
323 static void r592_write_fifo_pio(struct r592_device *dev, in r592_write_fifo_pio() argument
327 if (!kfifo_is_empty(&dev->pio_fifo)) { in r592_write_fifo_pio()
330 int copy_len = kfifo_in(&dev->pio_fifo, buffer, len); in r592_write_fifo_pio()
332 if (!kfifo_is_full(&dev->pio_fifo)) in r592_write_fifo_pio()
337 copy_len = kfifo_out(&dev->pio_fifo, tmp, 4); in r592_write_fifo_pio()
339 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)tmp); in r592_write_fifo_pio()
342 WARN_ON(!kfifo_is_empty(&dev->pio_fifo)); in r592_write_fifo_pio()
346 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); in r592_write_fifo_pio()
353 kfifo_in(&dev->pio_fifo, buffer, len); in r592_write_fifo_pio()
357 static void r592_flush_fifo_write(struct r592_device *dev) in r592_flush_fifo_write() argument
362 if (kfifo_is_empty(&dev->pio_fifo)) in r592_flush_fifo_write()
365 ret = kfifo_out(&dev->pio_fifo, buffer, 4); in r592_flush_fifo_write()
368 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); in r592_flush_fifo_write()
376 static void r592_read_fifo_pio(struct r592_device *dev, in r592_read_fifo_pio() argument
382 if (!kfifo_is_empty(&dev->pio_fifo)) { in r592_read_fifo_pio()
384 kfifo_out(&dev->pio_fifo, buffer, min(4, len)); in r592_read_fifo_pio()
388 if (!kfifo_is_empty(&dev->pio_fifo)) in r592_read_fifo_pio()
394 *(u32 *)buffer = r592_read_reg_raw_be(dev, R592_FIFO_PIO); in r592_read_fifo_pio()
400 *(u32 *)tmp = r592_read_reg_raw_be(dev, R592_FIFO_PIO); in r592_read_fifo_pio()
401 kfifo_in(&dev->pio_fifo, tmp, 4); in r592_read_fifo_pio()
402 len -= kfifo_out(&dev->pio_fifo, buffer, len); in r592_read_fifo_pio()
410 static int r592_transfer_fifo_pio(struct r592_device *dev) in r592_transfer_fifo_pio() argument
414 bool is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; in r592_transfer_fifo_pio()
417 kfifo_reset(&dev->pio_fifo); in r592_transfer_fifo_pio()
419 if (!dev->req->long_data) { in r592_transfer_fifo_pio()
421 r592_write_fifo_pio(dev, dev->req->data, in r592_transfer_fifo_pio()
422 dev->req->data_len); in r592_transfer_fifo_pio()
423 r592_flush_fifo_write(dev); in r592_transfer_fifo_pio()
425 r592_read_fifo_pio(dev, dev->req->data, in r592_transfer_fifo_pio()
426 dev->req->data_len); in r592_transfer_fifo_pio()
431 sg_miter_start(&miter, &dev->req->sg, 1, SG_MITER_ATOMIC | in r592_transfer_fifo_pio()
437 r592_write_fifo_pio(dev, miter.addr, miter.length); in r592_transfer_fifo_pio()
439 r592_read_fifo_pio(dev, miter.addr, miter.length); in r592_transfer_fifo_pio()
444 r592_flush_fifo_write(dev); in r592_transfer_fifo_pio()
452 static void r592_execute_tpc(struct r592_device *dev) in r592_execute_tpc() argument
458 if (!dev->req) { in r592_execute_tpc()
463 is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; in r592_execute_tpc()
464 len = dev->req->long_data ? in r592_execute_tpc()
465 dev->req->sg.length : dev->req->data_len; in r592_execute_tpc()
474 if (!(r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_PRSNT)) { in r592_execute_tpc()
481 memstick_debug_get_tpc_name(dev->req->tpc), len); in r592_execute_tpc()
485 r592_set_reg_mask(dev, R592_IO, R592_IO_DIRECTION); in r592_execute_tpc()
487 r592_clear_reg_mask(dev, R592_IO, R592_IO_DIRECTION); in r592_execute_tpc()
490 error = r592_test_fifo_empty(dev); in r592_execute_tpc()
496 error = r592_transfer_fifo_dma(dev); in r592_execute_tpc()
498 error = r592_transfer_fifo_pio(dev); in r592_execute_tpc()
506 (dev->req->tpc << R592_TPC_EXEC_TPC_SHIFT) | in r592_execute_tpc()
509 r592_write_reg(dev, R592_TPC_EXEC, reg); in r592_execute_tpc()
513 if (dev->req->need_card_int) in r592_execute_tpc()
516 error = r592_wait_status(dev, status, status); in r592_execute_tpc()
523 error = r592_test_io_error(dev); in r592_execute_tpc()
531 error = r592_transfer_fifo_dma(dev); in r592_execute_tpc()
533 error = r592_transfer_fifo_pio(dev); in r592_execute_tpc()
538 if (dev->parallel_mode && dev->req->need_card_int) { in r592_execute_tpc()
540 dev->req->int_reg = 0; in r592_execute_tpc()
541 status = r592_read_reg(dev, R592_STATUS); in r592_execute_tpc()
544 dev->req->int_reg |= MEMSTICK_INT_CMDNAK; in r592_execute_tpc()
546 dev->req->int_reg |= MEMSTICK_INT_BREQ; in r592_execute_tpc()
548 dev->req->int_reg |= MEMSTICK_INT_ERR; in r592_execute_tpc()
550 dev->req->int_reg |= MEMSTICK_INT_CED; in r592_execute_tpc()
556 dev->req->error = error; in r592_execute_tpc()
557 r592_clear_reg_mask(dev, R592_REG_MSC, R592_REG_MSC_LED); in r592_execute_tpc()
565 struct r592_device *dev = (struct r592_device *)data; in r592_process_thread() local
569 spin_lock_irqsave(&dev->io_thread_lock, flags); in r592_process_thread()
571 error = memstick_next_req(dev->host, &dev->req); in r592_process_thread()
572 spin_unlock_irqrestore(&dev->io_thread_lock, flags); in r592_process_thread()
588 r592_execute_tpc(dev); in r592_process_thread()
596 static void r592_update_card_detect(struct r592_device *dev) in r592_update_card_detect() argument
598 u32 reg = r592_read_reg(dev, R592_REG_MSC); in r592_update_card_detect()
611 r592_write_reg(dev, R592_REG_MSC, reg); in r592_update_card_detect()
617 struct r592_device *dev = from_timer(dev, t, detect_timer); in r592_detect_timer() local
618 r592_update_card_detect(dev); in r592_detect_timer()
619 memstick_detect_change(dev->host); in r592_detect_timer()
625 struct r592_device *dev = (struct r592_device *)data; in r592_irq() local
632 spin_lock_irqsave(&dev->irq_lock, flags); in r592_irq()
634 reg = r592_read_reg(dev, R592_REG_MSC); in r592_irq()
640 r592_write_reg(dev, R592_REG_MSC, reg); in r592_irq()
654 mod_timer(&dev->detect_timer, in r592_irq()
670 r592_stop_dma(dev, error); in r592_irq()
671 complete(&dev->dma_done); in r592_irq()
674 spin_unlock_irqrestore(&dev->irq_lock, flags); in r592_irq()
682 struct r592_device *dev = memstick_priv(host); in r592_set_param() local
688 return r592_enable_device(dev, true); in r592_set_param()
690 return r592_enable_device(dev, false); in r592_set_param()
697 return r592_set_mode(dev, 0); in r592_set_param()
699 return r592_set_mode(dev, 1); in r592_set_param()
711 struct r592_device *dev = memstick_priv(host); in r592_submit_req() local
714 if (dev->req) in r592_submit_req()
717 spin_lock_irqsave(&dev->io_thread_lock, flags); in r592_submit_req()
718 if (wake_up_process(dev->io_thread)) in r592_submit_req()
720 spin_unlock_irqrestore(&dev->io_thread_lock, flags); in r592_submit_req()
734 struct r592_device *dev; in r592_probe() local
737 host = memstick_alloc_host(sizeof(struct r592_device), &pdev->dev); in r592_probe()
741 dev = memstick_priv(host); in r592_probe()
742 dev->host = host; in r592_probe()
743 dev->pci_dev = pdev; in r592_probe()
744 pci_set_drvdata(pdev, dev); in r592_probe()
752 error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); in r592_probe()
760 dev->mmio = pci_ioremap_bar(pdev, 0); in r592_probe()
761 if (!dev->mmio) { in r592_probe()
766 dev->irq = pdev->irq; in r592_probe()
767 spin_lock_init(&dev->irq_lock); in r592_probe()
768 spin_lock_init(&dev->io_thread_lock); in r592_probe()
769 init_completion(&dev->dma_done); in r592_probe()
770 INIT_KFIFO(dev->pio_fifo); in r592_probe()
771 timer_setup(&dev->detect_timer, r592_detect_timer, 0); in r592_probe()
777 r592_check_dma(dev); in r592_probe()
779 dev->io_thread = kthread_run(r592_process_thread, dev, "r592_io"); in r592_probe()
780 if (IS_ERR(dev->io_thread)) { in r592_probe()
781 error = PTR_ERR(dev->io_thread); in r592_probe()
786 dev->dummy_dma_page = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, in r592_probe()
787 &dev->dummy_dma_page_physical_address, GFP_KERNEL); in r592_probe()
788 r592_stop_dma(dev , 0); in r592_probe()
790 error = request_irq(dev->irq, &r592_irq, IRQF_SHARED, in r592_probe()
791 DRV_NAME, dev); in r592_probe()
795 r592_update_card_detect(dev); in r592_probe()
803 free_irq(dev->irq, dev); in r592_probe()
805 if (dev->dummy_dma_page) in r592_probe()
806 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, in r592_probe()
807 dev->dummy_dma_page_physical_address); in r592_probe()
809 kthread_stop(dev->io_thread); in r592_probe()
811 iounmap(dev->mmio); in r592_probe()
825 struct r592_device *dev = pci_get_drvdata(pdev); in r592_remove() local
829 kthread_stop(dev->io_thread); in r592_remove()
830 del_timer_sync(&dev->detect_timer); in r592_remove()
831 r592_enable_device(dev, false); in r592_remove()
833 while (!error && dev->req) { in r592_remove()
834 dev->req->error = -ETIME; in r592_remove()
835 error = memstick_next_req(dev->host, &dev->req); in r592_remove()
837 memstick_remove_host(dev->host); in r592_remove()
839 if (dev->dummy_dma_page) in r592_remove()
840 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, in r592_remove()
841 dev->dummy_dma_page_physical_address); in r592_remove()
843 free_irq(dev->irq, dev); in r592_remove()
844 iounmap(dev->mmio); in r592_remove()
847 memstick_free_host(dev->host); in r592_remove()
853 struct r592_device *dev = dev_get_drvdata(core_dev); in r592_suspend() local
855 r592_clear_interrupts(dev); in r592_suspend()
856 memstick_suspend_host(dev->host); in r592_suspend()
857 del_timer_sync(&dev->detect_timer); in r592_suspend()
863 struct r592_device *dev = dev_get_drvdata(core_dev); in r592_resume() local
865 r592_clear_interrupts(dev); in r592_resume()
866 r592_enable_device(dev, false); in r592_resume()
867 memstick_resume_host(dev->host); in r592_resume()
868 r592_update_card_detect(dev); in r592_resume()