Loading drivers/spi/spi-coldfire-qspi.c +34 −47 Original line number Original line Diff line number Diff line Loading @@ -298,16 +298,22 @@ static void mcfqspi_transfer_msg16(struct mcfqspi *mcfqspi, unsigned count, } } } } static int mcfqspi_transfer_one_message(struct spi_master *master, static void mcfqspi_set_cs(struct spi_device *spi, bool enable) struct spi_message *msg) { { struct mcfqspi *mcfqspi = spi_master_get_devdata(master); struct mcfqspi *mcfqspi = spi_master_get_devdata(spi->master); struct spi_device *spi = msg->spi; struct spi_transfer *t; int status = 0; list_for_each_entry(t, &msg->transfers, transfer_list) { bool cs_high = spi->mode & SPI_CS_HIGH; bool cs_high = spi->mode & SPI_CS_HIGH; if (enable) mcfqspi_cs_select(mcfqspi, spi->chip_select, cs_high); else mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } static int mcfqspi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *t) { struct mcfqspi *mcfqspi = spi_master_get_devdata(master); u16 qmr = MCFQSPI_QMR_MSTR; u16 qmr = MCFQSPI_QMR_MSTR; qmr |= t->bits_per_word << 10; qmr |= t->bits_per_word << 10; Loading @@ -321,35 +327,15 @@ static int mcfqspi_transfer_one_message(struct spi_master *master, qmr |= mcfqspi_qmr_baud(spi->max_speed_hz); qmr |= mcfqspi_qmr_baud(spi->max_speed_hz); mcfqspi_wr_qmr(mcfqspi, qmr); mcfqspi_wr_qmr(mcfqspi, qmr); mcfqspi_cs_select(mcfqspi, spi->chip_select, cs_high); mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE); mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE); if (t->bits_per_word == 8) if (t->bits_per_word == 8) mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf, mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf, t->rx_buf); t->rx_buf); else else mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf, mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf, t->rx_buf); t->rx_buf); mcfqspi_wr_qir(mcfqspi, 0); mcfqspi_wr_qir(mcfqspi, 0); if (t->delay_usecs) return 0; udelay(t->delay_usecs); if (t->cs_change) { if (!list_is_last(&t->transfer_list, &msg->transfers)) mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } else { if (list_is_last(&t->transfer_list, &msg->transfers)) mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } msg->actual_length += t->len; } msg->status = status; spi_finalize_current_message(master); return status; } } static int mcfqspi_setup(struct spi_device *spi) static int mcfqspi_setup(struct spi_device *spi) Loading Loading @@ -438,7 +424,8 @@ static int mcfqspi_probe(struct platform_device *pdev) master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); master->setup = mcfqspi_setup; master->setup = mcfqspi_setup; master->transfer_one_message = mcfqspi_transfer_one_message; master->set_cs = mcfqspi_set_cs; master->transfer_one = mcfqspi_transfer_one; master->auto_runtime_pm = true; master->auto_runtime_pm = true; platform_set_drvdata(pdev, master); platform_set_drvdata(pdev, master); Loading Loading
drivers/spi/spi-coldfire-qspi.c +34 −47 Original line number Original line Diff line number Diff line Loading @@ -298,16 +298,22 @@ static void mcfqspi_transfer_msg16(struct mcfqspi *mcfqspi, unsigned count, } } } } static int mcfqspi_transfer_one_message(struct spi_master *master, static void mcfqspi_set_cs(struct spi_device *spi, bool enable) struct spi_message *msg) { { struct mcfqspi *mcfqspi = spi_master_get_devdata(master); struct mcfqspi *mcfqspi = spi_master_get_devdata(spi->master); struct spi_device *spi = msg->spi; struct spi_transfer *t; int status = 0; list_for_each_entry(t, &msg->transfers, transfer_list) { bool cs_high = spi->mode & SPI_CS_HIGH; bool cs_high = spi->mode & SPI_CS_HIGH; if (enable) mcfqspi_cs_select(mcfqspi, spi->chip_select, cs_high); else mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } static int mcfqspi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *t) { struct mcfqspi *mcfqspi = spi_master_get_devdata(master); u16 qmr = MCFQSPI_QMR_MSTR; u16 qmr = MCFQSPI_QMR_MSTR; qmr |= t->bits_per_word << 10; qmr |= t->bits_per_word << 10; Loading @@ -321,35 +327,15 @@ static int mcfqspi_transfer_one_message(struct spi_master *master, qmr |= mcfqspi_qmr_baud(spi->max_speed_hz); qmr |= mcfqspi_qmr_baud(spi->max_speed_hz); mcfqspi_wr_qmr(mcfqspi, qmr); mcfqspi_wr_qmr(mcfqspi, qmr); mcfqspi_cs_select(mcfqspi, spi->chip_select, cs_high); mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE); mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE); if (t->bits_per_word == 8) if (t->bits_per_word == 8) mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf, mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf, t->rx_buf); t->rx_buf); else else mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf, mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf, t->rx_buf); t->rx_buf); mcfqspi_wr_qir(mcfqspi, 0); mcfqspi_wr_qir(mcfqspi, 0); if (t->delay_usecs) return 0; udelay(t->delay_usecs); if (t->cs_change) { if (!list_is_last(&t->transfer_list, &msg->transfers)) mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } else { if (list_is_last(&t->transfer_list, &msg->transfers)) mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high); } msg->actual_length += t->len; } msg->status = status; spi_finalize_current_message(master); return status; } } static int mcfqspi_setup(struct spi_device *spi) static int mcfqspi_setup(struct spi_device *spi) Loading Loading @@ -438,7 +424,8 @@ static int mcfqspi_probe(struct platform_device *pdev) master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA; master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16); master->setup = mcfqspi_setup; master->setup = mcfqspi_setup; master->transfer_one_message = mcfqspi_transfer_one_message; master->set_cs = mcfqspi_set_cs; master->transfer_one = mcfqspi_transfer_one; master->auto_runtime_pm = true; master->auto_runtime_pm = true; platform_set_drvdata(pdev, master); platform_set_drvdata(pdev, master); Loading