Lines Matching refs:data
232 struct pch_spi_data *data = spi_master_get_devdata(master); in pch_spi_writereg() local
233 iowrite32(val, (data->io_remap_addr + idx)); in pch_spi_writereg()
243 struct pch_spi_data *data = spi_master_get_devdata(master); in pch_spi_readreg() local
244 return ioread32(data->io_remap_addr + idx); in pch_spi_readreg()
270 static void pch_spi_handler_sub(struct pch_spi_data *data, u32 reg_spsr_val, in pch_spi_handler_sub() argument
284 if (data->transfer_active) { in pch_spi_handler_sub()
285 rx_index = data->rx_index; in pch_spi_handler_sub()
286 tx_index = data->tx_index; in pch_spi_handler_sub()
287 bpw_len = data->bpw_len; in pch_spi_handler_sub()
288 pkt_rx_buffer = data->pkt_rx_buff; in pch_spi_handler_sub()
289 pkt_tx_buff = data->pkt_tx_buff; in pch_spi_handler_sub()
315 data->tx_index = tx_index; in pch_spi_handler_sub()
316 data->rx_index = rx_index; in pch_spi_handler_sub()
322 pch_spi_setclr_reg(data->master, PCH_SPCR, 0, in pch_spi_handler_sub()
327 data->transfer_complete = true; in pch_spi_handler_sub()
328 data->transfer_active = false; in pch_spi_handler_sub()
329 wake_up(&data->wait); in pch_spi_handler_sub()
331 dev_vdbg(&data->master->dev, in pch_spi_handler_sub()
350 struct pch_spi_data *data = dev_id; in pch_spi_handler() local
351 struct pch_spi_board_data *board_dat = data->board_dat; in pch_spi_handler()
359 io_remap_addr = data->io_remap_addr; in pch_spi_handler()
366 if (data->current_msg->complete) { in pch_spi_handler()
367 data->transfer_complete = true; in pch_spi_handler()
368 data->current_msg->status = -EIO; in pch_spi_handler()
369 data->current_msg->complete(data->current_msg->context); in pch_spi_handler()
370 data->bcurrent_msg_processing = false; in pch_spi_handler()
371 data->current_msg = NULL; in pch_spi_handler()
372 data->cur_trans = NULL; in pch_spi_handler()
376 if (data->use_dma) in pch_spi_handler()
381 pch_spi_handler_sub(data, reg_spsr_val, io_remap_addr); in pch_spi_handler()
467 struct pch_spi_data *data = spi_master_get_devdata(pspi->master); in pch_spi_transfer() local
471 spin_lock_irqsave(&data->lock, flags); in pch_spi_transfer()
492 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_transfer()
495 if (data->status == STATUS_EXITING) { in pch_spi_transfer()
502 if (data->board_dat->suspend_sts) { in pch_spi_transfer()
513 spin_lock_irqsave(&data->lock, flags); in pch_spi_transfer()
515 list_add_tail(&pmsg->queue, &data->queue); in pch_spi_transfer()
516 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_transfer()
521 queue_work(data->wk, &data->work); in pch_spi_transfer()
531 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_transfer()
535 static inline void pch_spi_select_chip(struct pch_spi_data *data, in pch_spi_select_chip() argument
538 if (data->current_chip != NULL) { in pch_spi_select_chip()
539 if (pspi->chip_select != data->n_curnt_chip) { in pch_spi_select_chip()
541 data->current_chip = NULL; in pch_spi_select_chip()
545 data->current_chip = pspi; in pch_spi_select_chip()
547 data->n_curnt_chip = data->current_chip->chip_select; in pch_spi_select_chip()
553 static void pch_spi_set_tx(struct pch_spi_data *data, int *bpw) in pch_spi_set_tx() argument
563 if (data->cur_trans->speed_hz) { in pch_spi_set_tx()
564 dev_dbg(&data->master->dev, "%s:setting baud rate\n", __func__); in pch_spi_set_tx()
565 pch_spi_set_baud_rate(data->master, data->cur_trans->speed_hz); in pch_spi_set_tx()
569 if (data->cur_trans->bits_per_word && in pch_spi_set_tx()
570 (data->current_msg->spi->bits_per_word != data->cur_trans->bits_per_word)) { in pch_spi_set_tx()
571 dev_dbg(&data->master->dev, "%s:set bits per word\n", __func__); in pch_spi_set_tx()
572 pch_spi_set_bits_per_word(data->master, in pch_spi_set_tx()
573 data->cur_trans->bits_per_word); in pch_spi_set_tx()
574 *bpw = data->cur_trans->bits_per_word; in pch_spi_set_tx()
576 *bpw = data->current_msg->spi->bits_per_word; in pch_spi_set_tx()
580 data->tx_index = 0; in pch_spi_set_tx()
581 data->rx_index = 0; in pch_spi_set_tx()
583 data->bpw_len = data->cur_trans->len / (*bpw / 8); in pch_spi_set_tx()
586 size = data->cur_trans->len * sizeof(*data->pkt_tx_buff); in pch_spi_set_tx()
589 data->pkt_tx_buff = kzalloc(size, GFP_KERNEL); in pch_spi_set_tx()
590 if (data->pkt_tx_buff != NULL) { in pch_spi_set_tx()
591 data->pkt_rx_buff = kzalloc(size, GFP_KERNEL); in pch_spi_set_tx()
592 if (!data->pkt_rx_buff) in pch_spi_set_tx()
593 kfree(data->pkt_tx_buff); in pch_spi_set_tx()
596 if (!data->pkt_rx_buff) { in pch_spi_set_tx()
598 dev_err(&data->master->dev, "%s :kzalloc failed\n", __func__); in pch_spi_set_tx()
599 list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) { in pch_spi_set_tx()
612 if (data->cur_trans->tx_buf != NULL) { in pch_spi_set_tx()
614 tx_buf = data->cur_trans->tx_buf; in pch_spi_set_tx()
615 for (j = 0; j < data->bpw_len; j++) in pch_spi_set_tx()
616 data->pkt_tx_buff[j] = *tx_buf++; in pch_spi_set_tx()
618 tx_sbuf = data->cur_trans->tx_buf; in pch_spi_set_tx()
619 for (j = 0; j < data->bpw_len; j++) in pch_spi_set_tx()
620 data->pkt_tx_buff[j] = *tx_sbuf++; in pch_spi_set_tx()
625 n_writes = data->bpw_len; in pch_spi_set_tx()
629 dev_dbg(&data->master->dev, "\n%s:Pulling down SSN low - writing " in pch_spi_set_tx()
631 pch_spi_writereg(data->master, PCH_SSNXCR, SSN_LOW); in pch_spi_set_tx()
634 pch_spi_writereg(data->master, PCH_SPDWR, data->pkt_tx_buff[j]); in pch_spi_set_tx()
637 data->tx_index = j; in pch_spi_set_tx()
640 data->transfer_complete = false; in pch_spi_set_tx()
641 data->transfer_active = true; in pch_spi_set_tx()
644 static void pch_spi_nomore_transfer(struct pch_spi_data *data) in pch_spi_nomore_transfer() argument
647 dev_dbg(&data->master->dev, "%s called\n", __func__); in pch_spi_nomore_transfer()
650 data->current_msg->status = 0; in pch_spi_nomore_transfer()
652 if (data->current_msg->complete) { in pch_spi_nomore_transfer()
653 dev_dbg(&data->master->dev, in pch_spi_nomore_transfer()
655 data->current_msg->complete(data->current_msg->context); in pch_spi_nomore_transfer()
659 data->bcurrent_msg_processing = false; in pch_spi_nomore_transfer()
661 dev_dbg(&data->master->dev, in pch_spi_nomore_transfer()
664 data->current_msg = NULL; in pch_spi_nomore_transfer()
665 data->cur_trans = NULL; in pch_spi_nomore_transfer()
669 if ((list_empty(&data->queue) == 0) && in pch_spi_nomore_transfer()
670 (!data->board_dat->suspend_sts) && in pch_spi_nomore_transfer()
671 (data->status != STATUS_EXITING)) { in pch_spi_nomore_transfer()
676 dev_dbg(&data->master->dev, "%s:Invoke queue_work\n", __func__); in pch_spi_nomore_transfer()
677 queue_work(data->wk, &data->work); in pch_spi_nomore_transfer()
678 } else if (data->board_dat->suspend_sts || in pch_spi_nomore_transfer()
679 data->status == STATUS_EXITING) { in pch_spi_nomore_transfer()
680 dev_dbg(&data->master->dev, in pch_spi_nomore_transfer()
683 list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) { in pch_spi_nomore_transfer()
695 static void pch_spi_set_ir(struct pch_spi_data *data) in pch_spi_set_ir() argument
698 if ((data->bpw_len) > PCH_MAX_FIFO_DEPTH) in pch_spi_set_ir()
700 pch_spi_setclr_reg(data->master, PCH_SPCR, in pch_spi_set_ir()
707 pch_spi_setclr_reg(data->master, PCH_SPCR, in pch_spi_set_ir()
715 dev_dbg(&data->master->dev, in pch_spi_set_ir()
718 wait_event_interruptible(data->wait, data->transfer_complete); in pch_spi_set_ir()
721 pch_spi_writereg(data->master, PCH_SPSR, in pch_spi_set_ir()
722 pch_spi_readreg(data->master, PCH_SPSR)); in pch_spi_set_ir()
724 pch_spi_setclr_reg(data->master, PCH_SPCR, 0, PCH_ALL | SPCR_SPE_BIT); in pch_spi_set_ir()
726 pch_spi_clear_fifo(data->master); in pch_spi_set_ir()
729 static void pch_spi_copy_rx_data(struct pch_spi_data *data, int bpw) in pch_spi_copy_rx_data() argument
736 if (!data->cur_trans->rx_buf) in pch_spi_copy_rx_data()
740 rx_buf = data->cur_trans->rx_buf; in pch_spi_copy_rx_data()
741 for (j = 0; j < data->bpw_len; j++) in pch_spi_copy_rx_data()
742 *rx_buf++ = data->pkt_rx_buff[j] & 0xFF; in pch_spi_copy_rx_data()
744 rx_sbuf = data->cur_trans->rx_buf; in pch_spi_copy_rx_data()
745 for (j = 0; j < data->bpw_len; j++) in pch_spi_copy_rx_data()
746 *rx_sbuf++ = data->pkt_rx_buff[j]; in pch_spi_copy_rx_data()
750 static void pch_spi_copy_rx_data_for_dma(struct pch_spi_data *data, int bpw) in pch_spi_copy_rx_data_for_dma() argument
759 if (!data->cur_trans->rx_buf) in pch_spi_copy_rx_data_for_dma()
763 rx_buf = data->cur_trans->rx_buf; in pch_spi_copy_rx_data_for_dma()
764 rx_dma_buf = data->dma.rx_buf_virt; in pch_spi_copy_rx_data_for_dma()
765 for (j = 0; j < data->bpw_len; j++) in pch_spi_copy_rx_data_for_dma()
767 data->cur_trans->rx_buf = rx_buf; in pch_spi_copy_rx_data_for_dma()
769 rx_sbuf = data->cur_trans->rx_buf; in pch_spi_copy_rx_data_for_dma()
770 rx_dma_sbuf = data->dma.rx_buf_virt; in pch_spi_copy_rx_data_for_dma()
771 for (j = 0; j < data->bpw_len; j++) in pch_spi_copy_rx_data_for_dma()
773 data->cur_trans->rx_buf = rx_sbuf; in pch_spi_copy_rx_data_for_dma()
777 static int pch_spi_start_transfer(struct pch_spi_data *data) in pch_spi_start_transfer() argument
783 dma = &data->dma; in pch_spi_start_transfer()
785 spin_lock_irqsave(&data->lock, flags); in pch_spi_start_transfer()
788 pch_spi_setclr_reg(data->master, PCH_SPCR, SPCR_SPE_BIT, PCH_ALL); in pch_spi_start_transfer()
790 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_start_transfer()
794 dev_dbg(&data->master->dev, in pch_spi_start_transfer()
796 rtn = wait_event_interruptible_timeout(data->wait, in pch_spi_start_transfer()
797 data->transfer_complete, in pch_spi_start_transfer()
800 dev_err(&data->master->dev, in pch_spi_start_transfer()
803 dma_sync_sg_for_cpu(&data->master->dev, dma->sg_rx_p, dma->nent, in pch_spi_start_transfer()
806 dma_sync_sg_for_cpu(&data->master->dev, dma->sg_tx_p, dma->nent, in pch_spi_start_transfer()
808 memset(data->dma.tx_buf_virt, 0, PAGE_SIZE); in pch_spi_start_transfer()
815 spin_lock_irqsave(&data->lock, flags); in pch_spi_start_transfer()
818 pch_spi_setclr_reg(data->master, PCH_SPCR, 0, in pch_spi_start_transfer()
822 pch_spi_writereg(data->master, PCH_SPSR, in pch_spi_start_transfer()
823 pch_spi_readreg(data->master, PCH_SPSR)); in pch_spi_start_transfer()
825 pch_spi_clear_fifo(data->master); in pch_spi_start_transfer()
827 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_start_transfer()
834 struct pch_spi_data *data = arg; in pch_dma_rx_complete() local
837 data->transfer_complete = true; in pch_dma_rx_complete()
838 wake_up_interruptible(&data->wait); in pch_dma_rx_complete()
854 static void pch_spi_request_dma(struct pch_spi_data *data, int bpw) in pch_spi_request_dma() argument
868 dma = &data->dma; in pch_spi_request_dma()
873 dma_dev = pci_get_slot(data->board_dat->pdev->bus, in pch_spi_request_dma()
874 PCI_DEVFN(PCI_SLOT(data->board_dat->pdev->devfn), 0)); in pch_spi_request_dma()
879 param->chan_id = data->ch * 2; /* Tx = 0, 2 */; in pch_spi_request_dma()
880 param->tx_reg = data->io_base_addr + PCH_SPDWR; in pch_spi_request_dma()
884 dev_err(&data->master->dev, in pch_spi_request_dma()
886 data->use_dma = 0; in pch_spi_request_dma()
894 param->chan_id = data->ch * 2 + 1; /* Rx = Tx + 1 */; in pch_spi_request_dma()
895 param->rx_reg = data->io_base_addr + PCH_SPDRR; in pch_spi_request_dma()
899 dev_err(&data->master->dev, in pch_spi_request_dma()
903 data->use_dma = 0; in pch_spi_request_dma()
909 static void pch_spi_release_dma(struct pch_spi_data *data) in pch_spi_release_dma() argument
913 dma = &data->dma; in pch_spi_release_dma()
925 static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw) in pch_spi_handle_dma() argument
942 dma = &data->dma; in pch_spi_handle_dma()
945 if (data->cur_trans->speed_hz) { in pch_spi_handle_dma()
946 dev_dbg(&data->master->dev, "%s:setting baud rate\n", __func__); in pch_spi_handle_dma()
947 spin_lock_irqsave(&data->lock, flags); in pch_spi_handle_dma()
948 pch_spi_set_baud_rate(data->master, data->cur_trans->speed_hz); in pch_spi_handle_dma()
949 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_handle_dma()
953 if (data->cur_trans->bits_per_word && in pch_spi_handle_dma()
954 (data->current_msg->spi->bits_per_word != in pch_spi_handle_dma()
955 data->cur_trans->bits_per_word)) { in pch_spi_handle_dma()
956 dev_dbg(&data->master->dev, "%s:set bits per word\n", __func__); in pch_spi_handle_dma()
957 spin_lock_irqsave(&data->lock, flags); in pch_spi_handle_dma()
958 pch_spi_set_bits_per_word(data->master, in pch_spi_handle_dma()
959 data->cur_trans->bits_per_word); in pch_spi_handle_dma()
960 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_handle_dma()
961 *bpw = data->cur_trans->bits_per_word; in pch_spi_handle_dma()
963 *bpw = data->current_msg->spi->bits_per_word; in pch_spi_handle_dma()
965 data->bpw_len = data->cur_trans->len / (*bpw / 8); in pch_spi_handle_dma()
967 if (data->bpw_len > PCH_BUF_SIZE) { in pch_spi_handle_dma()
968 data->bpw_len = PCH_BUF_SIZE; in pch_spi_handle_dma()
969 data->cur_trans->len -= PCH_BUF_SIZE; in pch_spi_handle_dma()
973 if (data->cur_trans->tx_buf != NULL) { in pch_spi_handle_dma()
975 tx_buf = data->cur_trans->tx_buf; in pch_spi_handle_dma()
977 for (i = 0; i < data->bpw_len; i++) in pch_spi_handle_dma()
980 tx_sbuf = data->cur_trans->tx_buf; in pch_spi_handle_dma()
982 for (i = 0; i < data->bpw_len; i++) in pch_spi_handle_dma()
988 if (data->bpw_len > PCH_DMA_TRANS_SIZE) { in pch_spi_handle_dma()
989 if (data->bpw_len % PCH_DMA_TRANS_SIZE) { in pch_spi_handle_dma()
990 num = data->bpw_len / PCH_DMA_TRANS_SIZE + 1; in pch_spi_handle_dma()
991 rem = data->bpw_len % PCH_DMA_TRANS_SIZE; in pch_spi_handle_dma()
993 num = data->bpw_len / PCH_DMA_TRANS_SIZE; in pch_spi_handle_dma()
999 size = data->bpw_len; in pch_spi_handle_dma()
1000 rem = data->bpw_len; in pch_spi_handle_dma()
1002 dev_dbg(&data->master->dev, "%s num=%d size=%d rem=%d\n", in pch_spi_handle_dma()
1004 spin_lock_irqsave(&data->lock, flags); in pch_spi_handle_dma()
1007 pch_spi_setclr_reg(data->master, PCH_SPCR, in pch_spi_handle_dma()
1012 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_handle_dma()
1046 dev_err(&data->master->dev, in pch_spi_handle_dma()
1050 dma_sync_sg_for_device(&data->master->dev, sg, num, DMA_FROM_DEVICE); in pch_spi_handle_dma()
1052 desc_rx->callback_param = data; in pch_spi_handle_dma()
1057 if (data->bpw_len > PCH_MAX_FIFO_DEPTH) { in pch_spi_handle_dma()
1059 if (data->bpw_len % PCH_DMA_TRANS_SIZE > 4) { in pch_spi_handle_dma()
1060 num = data->bpw_len / PCH_DMA_TRANS_SIZE + 1; in pch_spi_handle_dma()
1061 rem = data->bpw_len % PCH_DMA_TRANS_SIZE - head; in pch_spi_handle_dma()
1063 num = data->bpw_len / PCH_DMA_TRANS_SIZE; in pch_spi_handle_dma()
1064 rem = data->bpw_len % PCH_DMA_TRANS_SIZE + in pch_spi_handle_dma()
1070 size = data->bpw_len; in pch_spi_handle_dma()
1071 rem = data->bpw_len; in pch_spi_handle_dma()
1105 dev_err(&data->master->dev, in pch_spi_handle_dma()
1109 dma_sync_sg_for_device(&data->master->dev, sg, num, DMA_TO_DEVICE); in pch_spi_handle_dma()
1111 desc_tx->callback_param = data; in pch_spi_handle_dma()
1115 dev_dbg(&data->master->dev, "%s:Pulling down SSN low - writing 0x2 to SSNXCR\n", __func__); in pch_spi_handle_dma()
1117 spin_lock_irqsave(&data->lock, flags); in pch_spi_handle_dma()
1118 pch_spi_writereg(data->master, PCH_SSNXCR, SSN_LOW); in pch_spi_handle_dma()
1121 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_handle_dma()
1124 data->transfer_complete = false; in pch_spi_handle_dma()
1130 struct pch_spi_data *data; in pch_spi_process_messages() local
1133 data = container_of(pwork, struct pch_spi_data, work); in pch_spi_process_messages()
1134 dev_dbg(&data->master->dev, "%s data initialized\n", __func__); in pch_spi_process_messages()
1136 spin_lock(&data->lock); in pch_spi_process_messages()
1138 if (data->board_dat->suspend_sts || (data->status == STATUS_EXITING)) { in pch_spi_process_messages()
1139 dev_dbg(&data->master->dev, in pch_spi_process_messages()
1141 list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) { in pch_spi_process_messages()
1145 spin_unlock(&data->lock); in pch_spi_process_messages()
1147 spin_lock(&data->lock); in pch_spi_process_messages()
1154 spin_unlock(&data->lock); in pch_spi_process_messages()
1158 data->bcurrent_msg_processing = true; in pch_spi_process_messages()
1159 dev_dbg(&data->master->dev, in pch_spi_process_messages()
1163 data->current_msg = list_entry(data->queue.next, struct spi_message, in pch_spi_process_messages()
1166 list_del_init(&data->current_msg->queue); in pch_spi_process_messages()
1168 data->current_msg->status = 0; in pch_spi_process_messages()
1170 pch_spi_select_chip(data, data->current_msg->spi); in pch_spi_process_messages()
1172 spin_unlock(&data->lock); in pch_spi_process_messages()
1174 if (data->use_dma) in pch_spi_process_messages()
1175 pch_spi_request_dma(data, in pch_spi_process_messages()
1176 data->current_msg->spi->bits_per_word); in pch_spi_process_messages()
1177 pch_spi_writereg(data->master, PCH_SSNXCR, SSN_NO_CONTROL); in pch_spi_process_messages()
1183 spin_lock(&data->lock); in pch_spi_process_messages()
1184 if (data->cur_trans == NULL) { in pch_spi_process_messages()
1185 data->cur_trans = in pch_spi_process_messages()
1186 list_entry(data->current_msg->transfers.next, in pch_spi_process_messages()
1188 dev_dbg(&data->master->dev, "%s " in pch_spi_process_messages()
1191 data->cur_trans = in pch_spi_process_messages()
1192 list_entry(data->cur_trans->transfer_list.next, in pch_spi_process_messages()
1194 dev_dbg(&data->master->dev, "%s " in pch_spi_process_messages()
1197 spin_unlock(&data->lock); in pch_spi_process_messages()
1199 if (!data->cur_trans->len) in pch_spi_process_messages()
1201 cnt = (data->cur_trans->len - 1) / PCH_BUF_SIZE + 1; in pch_spi_process_messages()
1202 data->save_total_len = data->cur_trans->len; in pch_spi_process_messages()
1203 if (data->use_dma) { in pch_spi_process_messages()
1205 char *save_rx_buf = data->cur_trans->rx_buf; in pch_spi_process_messages()
1207 pch_spi_handle_dma(data, &bpw); in pch_spi_process_messages()
1208 if (!pch_spi_start_transfer(data)) { in pch_spi_process_messages()
1209 data->transfer_complete = true; in pch_spi_process_messages()
1210 data->current_msg->status = -EIO; in pch_spi_process_messages()
1211 data->current_msg->complete in pch_spi_process_messages()
1212 (data->current_msg->context); in pch_spi_process_messages()
1213 data->bcurrent_msg_processing = false; in pch_spi_process_messages()
1214 data->current_msg = NULL; in pch_spi_process_messages()
1215 data->cur_trans = NULL; in pch_spi_process_messages()
1218 pch_spi_copy_rx_data_for_dma(data, bpw); in pch_spi_process_messages()
1220 data->cur_trans->rx_buf = save_rx_buf; in pch_spi_process_messages()
1222 pch_spi_set_tx(data, &bpw); in pch_spi_process_messages()
1223 pch_spi_set_ir(data); in pch_spi_process_messages()
1224 pch_spi_copy_rx_data(data, bpw); in pch_spi_process_messages()
1225 kfree(data->pkt_rx_buff); in pch_spi_process_messages()
1226 data->pkt_rx_buff = NULL; in pch_spi_process_messages()
1227 kfree(data->pkt_tx_buff); in pch_spi_process_messages()
1228 data->pkt_tx_buff = NULL; in pch_spi_process_messages()
1231 data->cur_trans->len = data->save_total_len; in pch_spi_process_messages()
1232 data->current_msg->actual_length += data->cur_trans->len; in pch_spi_process_messages()
1234 dev_dbg(&data->master->dev, in pch_spi_process_messages()
1236 __func__, data->current_msg->actual_length); in pch_spi_process_messages()
1239 if (data->cur_trans->delay_usecs) { in pch_spi_process_messages()
1240 dev_dbg(&data->master->dev, "%s:" in pch_spi_process_messages()
1242 data->cur_trans->delay_usecs); in pch_spi_process_messages()
1243 udelay(data->cur_trans->delay_usecs); in pch_spi_process_messages()
1246 spin_lock(&data->lock); in pch_spi_process_messages()
1249 if ((data->cur_trans->transfer_list.next) == in pch_spi_process_messages()
1250 &(data->current_msg->transfers)) { in pch_spi_process_messages()
1251 pch_spi_nomore_transfer(data); in pch_spi_process_messages()
1254 spin_unlock(&data->lock); in pch_spi_process_messages()
1256 } while (data->cur_trans != NULL); in pch_spi_process_messages()
1259 pch_spi_writereg(data->master, PCH_SSNXCR, SSN_HIGH); in pch_spi_process_messages()
1260 if (data->use_dma) in pch_spi_process_messages()
1261 pch_spi_release_dma(data); in pch_spi_process_messages()
1265 struct pch_spi_data *data) in pch_spi_free_resources() argument
1270 if (data->wk != NULL) { in pch_spi_free_resources()
1271 destroy_workqueue(data->wk); in pch_spi_free_resources()
1272 data->wk = NULL; in pch_spi_free_resources()
1280 struct pch_spi_data *data) in pch_spi_get_resources() argument
1287 data->wk = create_singlethread_workqueue(KBUILD_MODNAME); in pch_spi_get_resources()
1288 if (!data->wk) { in pch_spi_get_resources()
1296 pch_spi_reset(data->master); in pch_spi_get_resources()
1306 pch_spi_free_resources(board_dat, data); in pch_spi_get_resources()
1315 struct pch_spi_data *data) in pch_free_dma_buf() argument
1319 dma = &data->dma; in pch_free_dma_buf()
1330 struct pch_spi_data *data) in pch_alloc_dma_buf() argument
1334 dma = &data->dma; in pch_alloc_dma_buf()
1348 struct pch_spi_data *data; in pch_spi_pd_probe() local
1360 data = spi_master_get_devdata(master); in pch_spi_pd_probe()
1361 data->master = master; in pch_spi_pd_probe()
1363 platform_set_drvdata(plat_dev, data); in pch_spi_pd_probe()
1366 data->io_base_addr = pci_resource_start(board_dat->pdev, 1) + in pch_spi_pd_probe()
1368 data->io_remap_addr = pci_iomap(board_dat->pdev, 1, 0); in pch_spi_pd_probe()
1369 if (!data->io_remap_addr) { in pch_spi_pd_probe()
1374 data->io_remap_addr += PCH_ADDRESS_SIZE * plat_dev->id; in pch_spi_pd_probe()
1377 plat_dev->id, data->io_remap_addr); in pch_spi_pd_probe()
1386 data->board_dat = board_dat; in pch_spi_pd_probe()
1387 data->plat_dev = plat_dev; in pch_spi_pd_probe()
1388 data->n_curnt_chip = 255; in pch_spi_pd_probe()
1389 data->status = STATUS_RUNNING; in pch_spi_pd_probe()
1390 data->ch = plat_dev->id; in pch_spi_pd_probe()
1391 data->use_dma = use_dma; in pch_spi_pd_probe()
1393 INIT_LIST_HEAD(&data->queue); in pch_spi_pd_probe()
1394 spin_lock_init(&data->lock); in pch_spi_pd_probe()
1395 INIT_WORK(&data->work, pch_spi_process_messages); in pch_spi_pd_probe()
1396 init_waitqueue_head(&data->wait); in pch_spi_pd_probe()
1398 ret = pch_spi_get_resources(board_dat, data); in pch_spi_pd_probe()
1405 IRQF_SHARED, KBUILD_MODNAME, data); in pch_spi_pd_probe()
1411 data->irq_reg_sts = true; in pch_spi_pd_probe()
1417 pch_alloc_dma_buf(board_dat, data); in pch_spi_pd_probe()
1430 pch_free_dma_buf(board_dat, data); in pch_spi_pd_probe()
1431 free_irq(board_dat->pdev->irq, data); in pch_spi_pd_probe()
1433 pch_spi_free_resources(board_dat, data); in pch_spi_pd_probe()
1435 pci_iounmap(board_dat->pdev, data->io_remap_addr); in pch_spi_pd_probe()
1445 struct pch_spi_data *data = platform_get_drvdata(plat_dev); in pch_spi_pd_remove() local
1453 pch_free_dma_buf(board_dat, data); in pch_spi_pd_remove()
1458 spin_lock_irqsave(&data->lock, flags); in pch_spi_pd_remove()
1459 data->status = STATUS_EXITING; in pch_spi_pd_remove()
1460 while ((list_empty(&data->queue) == 0) && --count) { in pch_spi_pd_remove()
1463 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_pd_remove()
1465 spin_lock_irqsave(&data->lock, flags); in pch_spi_pd_remove()
1467 spin_unlock_irqrestore(&data->lock, flags); in pch_spi_pd_remove()
1469 pch_spi_free_resources(board_dat, data); in pch_spi_pd_remove()
1471 if (data->irq_reg_sts) { in pch_spi_pd_remove()
1473 pch_spi_setclr_reg(data->master, PCH_SPCR, 0, PCH_ALL); in pch_spi_pd_remove()
1474 data->irq_reg_sts = false; in pch_spi_pd_remove()
1475 free_irq(board_dat->pdev->irq, data); in pch_spi_pd_remove()
1478 pci_iounmap(board_dat->pdev, data->io_remap_addr); in pch_spi_pd_remove()
1479 spi_unregister_master(data->master); in pch_spi_pd_remove()
1489 struct pch_spi_data *data = platform_get_drvdata(pd_dev); in pch_spi_pd_suspend() local
1503 if (!(data->bcurrent_msg_processing)) in pch_spi_pd_suspend()
1509 if (data->irq_reg_sts) { in pch_spi_pd_suspend()
1511 pch_spi_setclr_reg(data->master, PCH_SPCR, 0, PCH_ALL); in pch_spi_pd_suspend()
1512 pch_spi_reset(data->master); in pch_spi_pd_suspend()
1513 free_irq(board_dat->pdev->irq, data); in pch_spi_pd_suspend()
1515 data->irq_reg_sts = false; in pch_spi_pd_suspend()
1526 struct pch_spi_data *data = platform_get_drvdata(pd_dev); in pch_spi_pd_resume() local
1535 if (!data->irq_reg_sts) { in pch_spi_pd_resume()
1538 IRQF_SHARED, KBUILD_MODNAME, data); in pch_spi_pd_resume()
1546 pch_spi_reset(data->master); in pch_spi_pd_resume()
1547 pch_spi_set_master_mode(data->master); in pch_spi_pd_resume()
1548 data->irq_reg_sts = true; in pch_spi_pd_resume()