spi: octeon: Remove struct octeon_spi_setup usage
PATCH 1/2 spi: octeon: Remove struct octeon_spi_setup usage
Current code uses struct octeon_spi_setup to store max_speed_hz, chip_select and mode settings of current spi device.
We can always get the same settings in octeon_spi_do_transfer() by msg->spi. So this patch removes struct octeon_spi_setup and octeon_spi_setup, octeon_spi_cleanup functions.
--- drivers/spi/spi-octeon.c | 69 +++++------------------------------------------- 1 file changed, 7 insertions(+), 62 deletions(-)
drivers/spi/spi-octeon.c +7 -62
@@ -32,12 +32,6 @@ struct octeon_spi {u64 cs_enax; }; -struct octeon_spi_setup { -u32 max_speed_hz; -u8 chip_select; -u8 mode; -}; -static void octeon_spi_wait_ready (struct octeon_spi *p) {union cvmx_mpi_sts mpi_sts;
@@ -55,6 +49,7 @@ static int octeon_spi_do_transfer(struct octeon_spi *p, struct spi_transfer *xfer, bool last_xfer) { +struct spi_device *spi = msg->spi;union cvmx_mpi_cfg mpi_cfg;union cvmx_mpi_tx mpi_tx;unsigned int clkdiv;
@@ -66,16 +61,11 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,int len;int i; -struct octeon_spi_setup *msg_setup =spi_get_ctldata (msg->spi); - - speed_hz = msg_setup->max_speed_hz; - mode = msg_setup->mode; + mode = spi->mode; cpha = mode &SPI_CPHA ; cpol = mode &SPI_CPOL ; -if (xfer->speed_hz) - speed_hz = xfer->speed_hz; - + speed_hz = xfer->speed_hz ? : spi->max_speed_hz;if (speed_hz >OCTEON_SPI_MAX_CLOCK_HZ ) speed_hz =OCTEON_SPI_MAX_CLOCK_HZ ;
@@ -91,8 +81,8 @@ static int octeon_spi_do_transfer(struct octeon_spi *p, mpi_cfg.s.cslate = cpha ?1 :0 ; mpi_cfg.s.enable =1 ; -if (msg_setup->chip_select <4 ) - p->cs_enax |=1ull << (12 + msg_setup->chip_select); +if (spi->chip_select <4 ) + p->cs_enax |=1ull << (12 + spi->chip_select); mpi_cfg.u64 |= p->cs_enax;if (mpi_cfg.u64 != p->last_cfg) {
@@ -112,7 +102,7 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,cvmx_write_csr (p->register_base +OCTEON_SPI_DAT0 + (8 * i), d); } mpi_tx.u64 =0 ; - mpi_tx.s.csid = msg_setup->chip_select; + mpi_tx.s.csid = spi->chip_select; mpi_tx.s.leavecs =1 ; mpi_tx.s.txnum = tx_buf ?OCTEON_SPI_MAX_BYTES :0 ; mpi_tx.s.totnum =OCTEON_SPI_MAX_BYTES ;
@@ -137,7 +127,7 @@ static int octeon_spi_do_transfer(struct octeon_spi *p, } mpi_tx.u64 =0 ; - mpi_tx.s.csid = msg_setup->chip_select; + mpi_tx.s.csid = spi->chip_select;if (last_xfer) mpi_tx.s.leavecs = xfer->cs_change;else
@@ -167,15 +157,6 @@ static int octeon_spi_transfer_one_message(struct spi_master *master,int status =0 ;struct spi_transfer *xfer; -/* -* We better have set the configuration via a call to .setup -* before we get here. -*/ -if (spi_get_ctldata (msg->spi) ==NULL ) { - status = -EINVAL ; - goto err; - } -list_for_each_entry (xfer, &msg->transfers, transfer_list) {bool last_xfer =list_is_last (&xfer->transfer_list, &msg->transfers);
@@ -193,40 +174,6 @@ err:return status; } -static struct octeon_spi_setup *octeon_spi_new_setup (struct spi_device *spi) -{ -struct octeon_spi_setup *setup =kzalloc (sizeof (*setup),GFP_KERNEL ); -if (!setup) -return NULL ; - - setup->max_speed_hz = spi->max_speed_hz; - setup->chip_select = spi->chip_select; - setup->mode = spi->mode; -return setup; -} - -static int octeon_spi_setup (struct spi_device *spi) -{ -struct octeon_spi_setup *new_setup; -struct octeon_spi_setup *old_setup =spi_get_ctldata (spi); - - new_setup =octeon_spi_new_setup (spi); -if (!new_setup) -return -ENOMEM ; - -spi_set_ctldata (spi, new_setup); -kfree (old_setup); - -return 0 ; -} - -static void octeon_spi_cleanup (struct spi_device *spi) -{ -struct octeon_spi_setup *old_setup =spi_get_ctldata (spi); -spi_set_ctldata (spi,NULL ); -kfree (old_setup); -} -static int octeon_spi_probe (struct platform_device *pdev) {struct resource *res_mem;
@@ -262,8 +209,6 @@ static int octeon_spi_probe(struct platform_device *pdev)SPI_LSB_FIRST |SPI_3WIRE ; - master->setup = octeon_spi_setup; - master->cleanup = octeon_spi_cleanup; master->transfer_one_message = octeon_spi_transfer_one_message; master->bits_per_word_mask =SPI_BPW_MASK (8 );
Signature · 8 lines
1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 2/2 spi: octeon: Convert to let spi core validate transfer speed
Set master->max_speed_hz then spi core will handle checking transfer speed. The behavior is different from current code when the speed_hz is greater than the maximum transfer speed supported by the controller.
Unless there is other good reason, I think we had better make the behavior consistent with what spi core does.
--- drivers/spi/spi-octeon.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/spi/spi-octeon.c +1 -2
@@ -66,8 +66,6 @@ static int octeon_spi_do_transfer(struct octeon_spi *p, cpol = mode &SPI_CPOL ; speed_hz = xfer->speed_hz ? : spi->max_speed_hz; -if (speed_hz >OCTEON_SPI_MAX_CLOCK_HZ ) - speed_hz =OCTEON_SPI_MAX_CLOCK_HZ ; clkdiv =octeon_get_io_clock_rate () / (2 * speed_hz);
@@ -211,6 +209,7 @@ static int octeon_spi_probe(struct platform_device *pdev) master->transfer_one_message = octeon_spi_transfer_one_message; master->bits_per_word_mask =SPI_BPW_MASK (8 ); + master->max_speed_hz =OCTEON_SPI_MAX_CLOCK_HZ ; master->dev.of_node = pdev->dev.of_node; err =devm_spi_register_master (&pdev->dev, master);
Signature · 8 lines
1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Mark Brown
AppliedQuoted 2 lines · Axel Lin
Current code uses struct
octeon_spi_setupto storemax_speed_hz,chip_selectand mode settings of current spi device.
Applied both, thanks.