···3535 * platform_device->driver_data ... points to spi_gpio3636 *3737 * spi->controller_state ... reserved for bitbang framework code3838- * spi->controller_data ... holds chipselect GPIO3938 *4039 * spi->master->dev.driver_data ... points to spi_gpio->bitbang4140 */
+1-1
drivers/spi/spi-imx.c
···1494149414951495 /* flush rxfifo before transfer */14961496 while (spi_imx->devtype_data->rx_available(spi_imx))14971497- spi_imx->rx(spi_imx);14971497+ readl(spi_imx->base + MXC_CSPIRXDATA);1498149814991499 if (spi_imx->slave_mode)15001500 return spi_imx_pio_transfer_slave(spi, transfer);
+1-1
drivers/spi/spi-pic32.c
···559559 dev_err(&spi->dev, "wait error/timedout\n");560560 if (dma_issued) {561561 dmaengine_terminate_all(master->dma_rx);562562- dmaengine_terminate_all(master->dma_rx);562562+ dmaengine_terminate_all(master->dma_tx);563563 }564564 ret = -ETIMEDOUT;565565 } else {
+6-2
drivers/spi/spi-pxa2xx.c
···884884885885 rate = min_t(int, ssp_clk, rate);886886887887+ /*888888+ * Calculate the divisor for the SCR (Serial Clock Rate), avoiding889889+ * that the SSP transmission rate can be greater than the device rate890890+ */887891 if (ssp->type == PXA25x_SSP || ssp->type == CE4100_SSP)888888- return (ssp_clk / (2 * rate) - 1) & 0xff;892892+ return (DIV_ROUND_UP(ssp_clk, 2 * rate) - 1) & 0xff;889893 else890890- return (ssp_clk / rate - 1) & 0xfff;894894+ return (DIV_ROUND_UP(ssp_clk, rate) - 1) & 0xfff;891895}892896893897static unsigned int pxa2xx_ssp_get_clk_div(struct driver_data *drv_data,
+51-70
drivers/spi/spi-rspi.c
···271271 /* Sets parity, interrupt mask */272272 rspi_write8(rspi, 0x00, RSPI_SPCR2);273273274274- /* Sets SPCMD */274274+ /* Resets sequencer */275275+ rspi_write8(rspi, 0, RSPI_SPSCR);275276 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size);276277 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);277278···316315 rspi_write8(rspi, 0x00, RSPI_SSLND);317316 rspi_write8(rspi, 0x00, RSPI_SPND);318317319319- /* Sets SPCMD */318318+ /* Resets sequencer */319319+ rspi_write8(rspi, 0, RSPI_SPSCR);320320 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size);321321 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);322322···368366 /* Sets buffer to allow normal operation */369367 rspi_write8(rspi, 0x00, QSPI_SPBFCR);370368371371- /* Sets SPCMD */369369+ /* Resets sequencer */370370+ rspi_write8(rspi, 0, RSPI_SPSCR);372371 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0);373372374373 /* Sets RSPI mode */···739736 while (len > 0) {740737 n = qspi_set_send_trigger(rspi, len);741738 qspi_set_receive_trigger(rspi, len);742742- if (n == QSPI_BUFFER_SIZE) {743743- ret = rspi_wait_for_tx_empty(rspi);744744- if (ret < 0) {745745- dev_err(&rspi->ctlr->dev, "transmit timeout\n");746746- return ret;747747- }748748- for (i = 0; i < n; i++)749749- rspi_write_data(rspi, *tx++);750750-751751- ret = rspi_wait_for_rx_full(rspi);752752- if (ret < 0) {753753- dev_err(&rspi->ctlr->dev, "receive timeout\n");754754- return ret;755755- }756756- for (i = 0; i < n; i++)757757- *rx++ = rspi_read_data(rspi);758758- } else {759759- ret = rspi_pio_transfer(rspi, tx, rx, n);760760- if (ret < 0)761761- return ret;739739+ ret = rspi_wait_for_tx_empty(rspi);740740+ if (ret < 0) {741741+ dev_err(&rspi->ctlr->dev, "transmit timeout\n");742742+ return ret;762743 }744744+ for (i = 0; i < n; i++)745745+ rspi_write_data(rspi, *tx++);746746+747747+ ret = rspi_wait_for_rx_full(rspi);748748+ if (ret < 0) {749749+ dev_err(&rspi->ctlr->dev, "receive timeout\n");750750+ return ret;751751+ }752752+ for (i = 0; i < n; i++)753753+ *rx++ = rspi_read_data(rspi);754754+763755 len -= n;764756 }765757···791793792794 while (n > 0) {793795 len = qspi_set_send_trigger(rspi, n);794794- if (len == QSPI_BUFFER_SIZE) {795795- ret = rspi_wait_for_tx_empty(rspi);796796- if (ret < 0) {797797- dev_err(&rspi->ctlr->dev, "transmit timeout\n");798798- return ret;799799- }800800- for (i = 0; i < len; i++)801801- rspi_write_data(rspi, *tx++);802802- } else {803803- ret = rspi_pio_transfer(rspi, tx, NULL, len);804804- if (ret < 0)805805- return ret;796796+ ret = rspi_wait_for_tx_empty(rspi);797797+ if (ret < 0) {798798+ dev_err(&rspi->ctlr->dev, "transmit timeout\n");799799+ return ret;806800 }801801+ for (i = 0; i < len; i++)802802+ rspi_write_data(rspi, *tx++);803803+807804 n -= len;808805 }809806···823830824831 while (n > 0) {825832 len = qspi_set_receive_trigger(rspi, n);826826- if (len == QSPI_BUFFER_SIZE) {827827- ret = rspi_wait_for_rx_full(rspi);828828- if (ret < 0) {829829- dev_err(&rspi->ctlr->dev, "receive timeout\n");830830- return ret;831831- }832832- for (i = 0; i < len; i++)833833- *rx++ = rspi_read_data(rspi);834834- } else {835835- ret = rspi_pio_transfer(rspi, NULL, rx, len);836836- if (ret < 0)837837- return ret;833833+ ret = rspi_wait_for_rx_full(rspi);834834+ if (ret < 0) {835835+ dev_err(&rspi->ctlr->dev, "receive timeout\n");836836+ return ret;838837 }838838+ for (i = 0; i < len; i++)839839+ *rx++ = rspi_read_data(rspi);840840+839841 n -= len;840842 }841843···854866 /* Single SPI Transfer */855867 return qspi_transfer_out_in(rspi, xfer);856868 }857857-}858858-859859-static int rspi_setup(struct spi_device *spi)860860-{861861- struct rspi_data *rspi = spi_controller_get_devdata(spi->controller);862862-863863- rspi->max_speed_hz = spi->max_speed_hz;864864-865865- rspi->spcmd = SPCMD_SSLKP;866866- if (spi->mode & SPI_CPOL)867867- rspi->spcmd |= SPCMD_CPOL;868868- if (spi->mode & SPI_CPHA)869869- rspi->spcmd |= SPCMD_CPHA;870870-871871- /* CMOS output mode and MOSI signal from previous transfer */872872- rspi->sppcr = 0;873873- if (spi->mode & SPI_LOOP)874874- rspi->sppcr |= SPPCR_SPLP;875875-876876- set_config_register(rspi, 8);877877-878878- return 0;879869}880870881871static u16 qspi_transfer_mode(const struct spi_transfer *xfer)···925959 struct spi_message *msg)926960{927961 struct rspi_data *rspi = spi_controller_get_devdata(ctlr);962962+ struct spi_device *spi = msg->spi;928963 int ret;964964+965965+ rspi->max_speed_hz = spi->max_speed_hz;966966+967967+ rspi->spcmd = SPCMD_SSLKP;968968+ if (spi->mode & SPI_CPOL)969969+ rspi->spcmd |= SPCMD_CPOL;970970+ if (spi->mode & SPI_CPHA)971971+ rspi->spcmd |= SPCMD_CPHA;972972+973973+ /* CMOS output mode and MOSI signal from previous transfer */974974+ rspi->sppcr = 0;975975+ if (spi->mode & SPI_LOOP)976976+ rspi->sppcr |= SPPCR_SPLP;977977+978978+ set_config_register(rspi, 8);929979930980 if (msg->spi->mode &931981 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) {···12491267 init_waitqueue_head(&rspi->wait);1250126812511269 ctlr->bus_num = pdev->id;12521252- ctlr->setup = rspi_setup;12531270 ctlr->auto_runtime_pm = true;12541271 ctlr->transfer_one = ops->transfer_one;12551272 ctlr->prepare_message = rspi_prepare_message;
···1839183918401840 spi->irq = platform_get_irq(pdev, 0);18411841 if (spi->irq <= 0) {18421842- dev_err(&pdev->dev, "no irq: %d\n", spi->irq);18431843- ret = -ENOENT;18421842+ ret = spi->irq;18431843+ if (ret != -EPROBE_DEFER)18441844+ dev_err(&pdev->dev, "failed to get irq: %d\n", ret);18441845 goto err_master_put;18451846 }18461847 ret = devm_request_threaded_irq(&pdev->dev, spi->irq,
+149-64
drivers/spi/spi-tegra114.c
···307307 x |= (u32)(*tx_buf++) << (i * 8);308308 tegra_spi_writel(tspi, x, SPI_TX_FIFO);309309 }310310+311311+ tspi->cur_tx_pos += written_words * tspi->bytes_per_word;310312 } else {313313+ unsigned int write_bytes;311314 max_n_32bit = min(tspi->curr_dma_words, tx_empty_count);312315 written_words = max_n_32bit;313316 nbytes = written_words * tspi->bytes_per_word;317317+ if (nbytes > t->len - tspi->cur_pos)318318+ nbytes = t->len - tspi->cur_pos;319319+ write_bytes = nbytes;314320 for (count = 0; count < max_n_32bit; count++) {315321 u32 x = 0;316322···325319 x |= (u32)(*tx_buf++) << (i * 8);326320 tegra_spi_writel(tspi, x, SPI_TX_FIFO);327321 }322322+323323+ tspi->cur_tx_pos += write_bytes;328324 }329329- tspi->cur_tx_pos += written_words * tspi->bytes_per_word;325325+330326 return written_words;331327}332328···352344 for (i = 0; len && (i < 4); i++, len--)353345 *rx_buf++ = (x >> i*8) & 0xFF;354346 }355355- tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;356347 read_words += tspi->curr_dma_words;348348+ tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;357349 } else {358350 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1;351351+ u8 bytes_per_word = tspi->bytes_per_word;352352+ unsigned int read_bytes;359353354354+ len = rx_full_count * bytes_per_word;355355+ if (len > t->len - tspi->cur_pos)356356+ len = t->len - tspi->cur_pos;357357+ read_bytes = len;360358 for (count = 0; count < rx_full_count; count++) {361359 u32 x = tegra_spi_readl(tspi, SPI_RX_FIFO) & rx_mask;362360363363- for (i = 0; (i < tspi->bytes_per_word); i++)361361+ for (i = 0; len && (i < bytes_per_word); i++, len--)364362 *rx_buf++ = (x >> (i*8)) & 0xFF;365363 }366366- tspi->cur_rx_pos += rx_full_count * tspi->bytes_per_word;367364 read_words += rx_full_count;365365+ tspi->cur_rx_pos += read_bytes;368366 }367367+369368 return read_words;370369}371370···387372 unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;388373389374 memcpy(tspi->tx_dma_buf, t->tx_buf + tspi->cur_pos, len);375375+ tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word;390376 } else {391377 unsigned int i;392378 unsigned int count;393379 u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;394380 unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;381381+ unsigned int write_bytes;395382383383+ if (consume > t->len - tspi->cur_pos)384384+ consume = t->len - tspi->cur_pos;385385+ write_bytes = consume;396386 for (count = 0; count < tspi->curr_dma_words; count++) {397387 u32 x = 0;398388···406386 x |= (u32)(*tx_buf++) << (i * 8);407387 tspi->tx_dma_buf[count] = x;408388 }389389+390390+ tspi->cur_tx_pos += write_bytes;409391 }410410- tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word;411392412393 /* Make the dma buffer to read by dma */413394 dma_sync_single_for_device(tspi->dev, tspi->tx_dma_phys,···426405 unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;427406428407 memcpy(t->rx_buf + tspi->cur_rx_pos, tspi->rx_dma_buf, len);408408+ tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;429409 } else {430410 unsigned int i;431411 unsigned int count;432412 unsigned char *rx_buf = t->rx_buf + tspi->cur_rx_pos;433413 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1;414414+ unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;415415+ unsigned int read_bytes;434416417417+ if (consume > t->len - tspi->cur_pos)418418+ consume = t->len - tspi->cur_pos;419419+ read_bytes = consume;435420 for (count = 0; count < tspi->curr_dma_words; count++) {436421 u32 x = tspi->rx_dma_buf[count] & rx_mask;437422438438- for (i = 0; (i < tspi->bytes_per_word); i++)423423+ for (i = 0; consume && (i < tspi->bytes_per_word);424424+ i++, consume--)439425 *rx_buf++ = (x >> (i*8)) & 0xFF;440426 }427427+428428+ tspi->cur_rx_pos += read_bytes;441429 }442442- tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;443430444431 /* Make the dma buffer to read by dma */445432 dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,···499470 return 0;500471}501472473473+static int tegra_spi_flush_fifos(struct tegra_spi_data *tspi)474474+{475475+ unsigned long timeout = jiffies + HZ;476476+ u32 status;477477+478478+ status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);479479+ if ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) {480480+ status |= SPI_RX_FIFO_FLUSH | SPI_TX_FIFO_FLUSH;481481+ tegra_spi_writel(tspi, status, SPI_FIFO_STATUS);482482+ while ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) {483483+ status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);484484+ if (time_after(jiffies, timeout)) {485485+ dev_err(tspi->dev,486486+ "timeout waiting for fifo flush\n");487487+ return -EIO;488488+ }489489+490490+ udelay(1);491491+ }492492+ }493493+494494+ return 0;495495+}496496+502497static int tegra_spi_start_dma_based_transfer(503498 struct tegra_spi_data *tspi, struct spi_transfer *t)504499{505500 u32 val;506501 unsigned int len;507502 int ret = 0;508508- u32 status;509509-510510- /* Make sure that Rx and Tx fifo are empty */511511- status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);512512- if ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) {513513- dev_err(tspi->dev, "Rx/Tx fifo are not empty status 0x%08x\n",514514- (unsigned)status);515515- return -EIO;516516- }503503+ u8 dma_burst;504504+ struct dma_slave_config dma_sconfig = {0};517505518506 val = SPI_DMA_BLK_SET(tspi->curr_dma_words - 1);519507 tegra_spi_writel(tspi, val, SPI_DMA_BLK);···542496 len = tspi->curr_dma_words * 4;543497544498 /* Set attention level based on length of transfer */545545- if (len & 0xF)499499+ if (len & 0xF) {546500 val |= SPI_TX_TRIG_1 | SPI_RX_TRIG_1;547547- else if (((len) >> 4) & 0x1)501501+ dma_burst = 1;502502+ } else if (((len) >> 4) & 0x1) {548503 val |= SPI_TX_TRIG_4 | SPI_RX_TRIG_4;549549- else504504+ dma_burst = 4;505505+ } else {550506 val |= SPI_TX_TRIG_8 | SPI_RX_TRIG_8;507507+ dma_burst = 8;508508+ }551509552510 if (tspi->cur_direction & DATA_DIR_TX)553511 val |= SPI_IE_TX;···562512 tegra_spi_writel(tspi, val, SPI_DMA_CTL);563513 tspi->dma_control_reg = val;564514515515+ dma_sconfig.device_fc = true;565516 if (tspi->cur_direction & DATA_DIR_TX) {517517+ dma_sconfig.dst_addr = tspi->phys + SPI_TX_FIFO;518518+ dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;519519+ dma_sconfig.dst_maxburst = dma_burst;520520+ ret = dmaengine_slave_config(tspi->tx_dma_chan, &dma_sconfig);521521+ if (ret < 0) {522522+ dev_err(tspi->dev,523523+ "DMA slave config failed: %d\n", ret);524524+ return ret;525525+ }526526+566527 tegra_spi_copy_client_txbuf_to_spi_txbuf(tspi, t);567528 ret = tegra_spi_start_tx_dma(tspi, len);568529 if (ret < 0) {···584523 }585524586525 if (tspi->cur_direction & DATA_DIR_RX) {526526+ dma_sconfig.src_addr = tspi->phys + SPI_RX_FIFO;527527+ dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;528528+ dma_sconfig.src_maxburst = dma_burst;529529+ ret = dmaengine_slave_config(tspi->rx_dma_chan, &dma_sconfig);530530+ if (ret < 0) {531531+ dev_err(tspi->dev,532532+ "DMA slave config failed: %d\n", ret);533533+ return ret;534534+ }535535+587536 /* Make the dma buffer to read by dma */588537 dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,589538 tspi->dma_buf_size, DMA_FROM_DEVICE);···641570642571 tspi->is_curr_dma_xfer = false;643572644644- val |= SPI_DMA_EN;645645- tegra_spi_writel(tspi, val, SPI_DMA_CTL);573573+ val = tspi->command1_reg;574574+ val |= SPI_PIO;575575+ tegra_spi_writel(tspi, val, SPI_COMMAND1);646576 return 0;647577}648578···654582 u32 *dma_buf;655583 dma_addr_t dma_phys;656584 int ret;657657- struct dma_slave_config dma_sconfig;658585659586 dma_chan = dma_request_slave_channel_reason(tspi->dev,660587 dma_to_memory ? "rx" : "tx");···674603 }675604676605 if (dma_to_memory) {677677- dma_sconfig.src_addr = tspi->phys + SPI_RX_FIFO;678678- dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;679679- dma_sconfig.src_maxburst = 0;680680- } else {681681- dma_sconfig.dst_addr = tspi->phys + SPI_TX_FIFO;682682- dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;683683- dma_sconfig.dst_maxburst = 0;684684- }685685-686686- ret = dmaengine_slave_config(dma_chan, &dma_sconfig);687687- if (ret)688688- goto scrub;689689- if (dma_to_memory) {690606 tspi->rx_dma_chan = dma_chan;691607 tspi->rx_dma_buf = dma_buf;692608 tspi->rx_dma_phys = dma_phys;···683625 tspi->tx_dma_phys = dma_phys;684626 }685627 return 0;686686-687687-scrub:688688- dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);689689- dma_release_channel(dma_chan);690690- return ret;691628}692629693630static void tegra_spi_deinit_dma_param(struct tegra_spi_data *tspi,···783730784731 if (tspi->is_packed)785732 command1 |= SPI_PACKED;733733+ else734734+ command1 &= ~SPI_PACKED;786735787736 command1 &= ~(SPI_CS_SEL_MASK | SPI_TX_EN | SPI_RX_EN);788737 tspi->cur_direction = 0;···803748 dev_dbg(tspi->dev, "The def 0x%x and written 0x%x\n",804749 tspi->def_command1_reg, (unsigned)command1);805750751751+ ret = tegra_spi_flush_fifos(tspi);752752+ if (ret < 0)753753+ return ret;806754 if (total_fifo_words > SPI_FIFO_DEPTH)807755 ret = tegra_spi_start_dma_based_transfer(tspi, t);808756 else···857799 udelay(delay % 1000);858800}859801802802+static void tegra_spi_transfer_end(struct spi_device *spi)803803+{804804+ struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);805805+ int cs_val = (spi->mode & SPI_CS_HIGH) ? 0 : 1;806806+807807+ if (cs_val)808808+ tspi->command1_reg |= SPI_CS_SW_VAL;809809+ else810810+ tspi->command1_reg &= ~SPI_CS_SW_VAL;811811+ tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1);812812+ tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1);813813+}814814+860815static int tegra_spi_transfer_one_message(struct spi_master *master,861816 struct spi_message *msg)862817{···909838 if (WARN_ON(ret == 0)) {910839 dev_err(tspi->dev,911840 "spi transfer timeout, err %d\n", ret);841841+ if (tspi->is_curr_dma_xfer &&842842+ (tspi->cur_direction & DATA_DIR_TX))843843+ dmaengine_terminate_all(tspi->tx_dma_chan);844844+ if (tspi->is_curr_dma_xfer &&845845+ (tspi->cur_direction & DATA_DIR_RX))846846+ dmaengine_terminate_all(tspi->rx_dma_chan);912847 ret = -EIO;848848+ tegra_spi_flush_fifos(tspi);849849+ reset_control_assert(tspi->rst);850850+ udelay(2);851851+ reset_control_deassert(tspi->rst);913852 goto complete_xfer;914853 }915854···932851933852complete_xfer:934853 if (ret < 0 || skip) {935935- tegra_spi_writel(tspi, tspi->def_command1_reg,936936- SPI_COMMAND1);854854+ tegra_spi_transfer_end(spi);937855 tegra_spi_transfer_delay(xfer->delay_usecs);938856 goto exit;939857 } else if (list_is_last(&xfer->transfer_list,···940860 if (xfer->cs_change)941861 tspi->cs_control = spi;942862 else {943943- tegra_spi_writel(tspi, tspi->def_command1_reg,944944- SPI_COMMAND1);863863+ tegra_spi_transfer_end(spi);945864 tegra_spi_transfer_delay(xfer->delay_usecs);946865 }947866 } else if (xfer->cs_change) {948948- tegra_spi_writel(tspi, tspi->def_command1_reg,949949- SPI_COMMAND1);867867+ tegra_spi_transfer_end(spi);950868 tegra_spi_transfer_delay(xfer->delay_usecs);951869 }952870···967889 tspi->status_reg);968890 dev_err(tspi->dev, "CpuXfer 0x%08x:0x%08x\n",969891 tspi->command1_reg, tspi->dma_control_reg);892892+ tegra_spi_flush_fifos(tspi);893893+ complete(&tspi->xfer_completion);894894+ spin_unlock_irqrestore(&tspi->lock, flags);970895 reset_control_assert(tspi->rst);971896 udelay(2);972897 reset_control_deassert(tspi->rst);973973- complete(&tspi->xfer_completion);974974- goto exit;898898+ return IRQ_HANDLED;975899 }976900977901 if (tspi->cur_direction & DATA_DIR_RX)···1041961 tspi->status_reg);1042962 dev_err(tspi->dev, "DmaXfer 0x%08x:0x%08x\n",1043963 tspi->command1_reg, tspi->dma_control_reg);964964+ tegra_spi_flush_fifos(tspi);965965+ complete(&tspi->xfer_completion);966966+ spin_unlock_irqrestore(&tspi->lock, flags);1044967 reset_control_assert(tspi->rst);1045968 udelay(2);1046969 reset_control_deassert(tspi->rst);10471047- complete(&tspi->xfer_completion);10481048- spin_unlock_irqrestore(&tspi->lock, flags);1049970 return IRQ_HANDLED;1050971 }1051972···1148106711491068 spi_irq = platform_get_irq(pdev, 0);11501069 tspi->irq = spi_irq;11511151- ret = request_threaded_irq(tspi->irq, tegra_spi_isr,11521152- tegra_spi_isr_thread, IRQF_ONESHOT,11531153- dev_name(&pdev->dev), tspi);11541154- if (ret < 0) {11551155- dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",11561156- tspi->irq);11571157- goto exit_free_master;11581158- }1159107011601071 tspi->clk = devm_clk_get(&pdev->dev, "spi");11611072 if (IS_ERR(tspi->clk)) {11621073 dev_err(&pdev->dev, "can not get clock\n");11631074 ret = PTR_ERR(tspi->clk);11641164- goto exit_free_irq;10751075+ goto exit_free_master;11651076 }1166107711671078 tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi");11681079 if (IS_ERR(tspi->rst)) {11691080 dev_err(&pdev->dev, "can not get reset\n");11701081 ret = PTR_ERR(tspi->rst);11711171- goto exit_free_irq;10821082+ goto exit_free_master;11721083 }1173108411741085 tspi->max_buf_size = SPI_FIFO_DEPTH << 2;···1168109511691096 ret = tegra_spi_init_dma_param(tspi, true);11701097 if (ret < 0)11711171- goto exit_free_irq;10981098+ goto exit_free_master;11721099 ret = tegra_spi_init_dma_param(tspi, false);11731100 if (ret < 0)11741101 goto exit_rx_dma_free;···11901117 dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret);11911118 goto exit_pm_disable;11921119 }11201120+11211121+ reset_control_assert(tspi->rst);11221122+ udelay(2);11231123+ reset_control_deassert(tspi->rst);11931124 tspi->def_command1_reg = SPI_M_S;11941125 tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1);11951126 pm_runtime_put(&pdev->dev);11271127+ ret = request_threaded_irq(tspi->irq, tegra_spi_isr,11281128+ tegra_spi_isr_thread, IRQF_ONESHOT,11291129+ dev_name(&pdev->dev), tspi);11301130+ if (ret < 0) {11311131+ dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",11321132+ tspi->irq);11331133+ goto exit_pm_disable;11341134+ }1196113511971136 master->dev.of_node = pdev->dev.of_node;11981137 ret = devm_spi_register_master(&pdev->dev, master);11991138 if (ret < 0) {12001139 dev_err(&pdev->dev, "can not register to master err %d\n", ret);12011201- goto exit_pm_disable;11401140+ goto exit_free_irq;12021141 }12031142 return ret;1204114311441144+exit_free_irq:11451145+ free_irq(spi_irq, tspi);12051146exit_pm_disable:12061147 pm_runtime_disable(&pdev->dev);12071148 if (!pm_runtime_status_suspended(&pdev->dev))···12231136 tegra_spi_deinit_dma_param(tspi, false);12241137exit_rx_dma_free:12251138 tegra_spi_deinit_dma_param(tspi, true);12261226-exit_free_irq:12271227- free_irq(spi_irq, tspi);12281139exit_free_master:12291140 spi_master_put(master);12301141 return ret;
+9-3
drivers/spi/spi-tegra20-slink.c
···717717 command2 = tspi->command2_reg;718718 command2 &= ~(SLINK_RXEN | SLINK_TXEN);719719720720- tegra_slink_writel(tspi, command, SLINK_COMMAND);721721- tspi->command_reg = command;722722-723720 tspi->cur_direction = 0;724721 if (t->rx_buf) {725722 command2 |= SLINK_RXEN;···726729 command2 |= SLINK_TXEN;727730 tspi->cur_direction |= DATA_DIR_TX;728731 }732732+733733+ /*734734+ * Writing to the command2 register bevore the command register prevents735735+ * a spike in chip_select line 0. This selects the chip_select line736736+ * before changing the chip_select value.737737+ */729738 tegra_slink_writel(tspi, command2, SLINK_COMMAND2);730739 tspi->command2_reg = command2;740740+741741+ tegra_slink_writel(tspi, command, SLINK_COMMAND);742742+ tspi->command_reg = command;731743732744 if (total_fifo_words > SLINK_FIFO_DEPTH)733745 ret = tegra_slink_start_dma_based_transfer(tspi, t);
+13-2
drivers/spi/spi-topcliff-pch.c
···12991299 dma->rx_buf_virt, dma->rx_buf_dma);13001300}1301130113021302-static void pch_alloc_dma_buf(struct pch_spi_board_data *board_dat,13021302+static int pch_alloc_dma_buf(struct pch_spi_board_data *board_dat,13031303 struct pch_spi_data *data)13041304{13051305 struct pch_spi_dma_ctrl *dma;13061306+ int ret;1306130713071308 dma = &data->dma;13091309+ ret = 0;13081310 /* Get Consistent memory for Tx DMA */13091311 dma->tx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev,13101312 PCH_BUF_SIZE, &dma->tx_buf_dma, GFP_KERNEL);13131313+ if (!dma->tx_buf_virt)13141314+ ret = -ENOMEM;13151315+13111316 /* Get Consistent memory for Rx DMA */13121317 dma->rx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev,13131318 PCH_BUF_SIZE, &dma->rx_buf_dma, GFP_KERNEL);13191319+ if (!dma->rx_buf_virt)13201320+ ret = -ENOMEM;13211321+13221322+ return ret;13141323}1315132413161325static int pch_spi_pd_probe(struct platform_device *plat_dev)···1396138713971388 if (use_dma) {13981389 dev_info(&plat_dev->dev, "Use DMA for data transfers\n");13991399- pch_alloc_dma_buf(board_dat, data);13901390+ ret = pch_alloc_dma_buf(board_dat, data);13911391+ if (ret)13921392+ goto err_spi_register_master;14001393 }1401139414021395 ret = spi_register_master(master);