spi: pxa2xx: Remove pointer to current SPI message from driver data
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Wed, 7 Sep 2016 14:04:06 +0000 (17:04 +0300)
committerMark Brown <broonie@kernel.org>
Mon, 12 Sep 2016 19:01:27 +0000 (20:01 +0100)
There is no need to carry pointer to current SPI message in driver data
because cur_msg in struct spi_master holds it already when driver is using
the message queueing infrastructure from the SPI core.

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-pxa2xx-dma.c
drivers/spi/spi-pxa2xx.c
drivers/spi/spi-pxa2xx.h

index 80c8e27a2f737fc32a973b679ccd006afc7d0631..38efac33da475c262de211e4608bafa7b41c9d5e 100644 (file)
@@ -23,7 +23,7 @@
 static void pxa2xx_spi_dma_transfer_complete(struct driver_data *drv_data,
                                             bool error)
 {
-       struct spi_message *msg = drv_data->cur_msg;
+       struct spi_message *msg = drv_data->master->cur_msg;
 
        /*
         * It is possible that one CPU is handling ROR interrupt and other
index 0e0d445f4028a1ff80478b7cf63222923cbeddc8..e05af2a94d388a83d024b5b353e310fdd4024e67 100644 (file)
@@ -316,7 +316,7 @@ static void lpss_ssp_select_cs(struct driver_data *drv_data,
 
        value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
 
-       cs = drv_data->cur_msg->spi->chip_select;
+       cs = drv_data->master->cur_msg->spi->chip_select;
        cs <<= config->cs_sel_shift;
        if (cs != (value & config->cs_sel_mask)) {
                /*
@@ -508,7 +508,7 @@ static int u32_reader(struct driver_data *drv_data)
 
 void *pxa2xx_spi_next_transfer(struct driver_data *drv_data)
 {
-       struct spi_message *msg = drv_data->cur_msg;
+       struct spi_message *msg = drv_data->master->cur_msg;
        struct spi_transfer *trans = drv_data->cur_transfer;
 
        /* Move to next transfer */
@@ -529,8 +529,7 @@ static void giveback(struct driver_data *drv_data)
        struct spi_message *msg;
        unsigned long timeout;
 
-       msg = drv_data->cur_msg;
-       drv_data->cur_msg = NULL;
+       msg = drv_data->master->cur_msg;
        drv_data->cur_transfer = NULL;
 
        last_transfer = list_last_entry(&msg->transfers, struct spi_transfer,
@@ -610,7 +609,7 @@ static void int_error_stop(struct driver_data *drv_data, const char* msg)
 
        dev_err(&drv_data->pdev->dev, "%s\n", msg);
 
-       drv_data->cur_msg->state = ERROR_STATE;
+       drv_data->master->cur_msg->state = ERROR_STATE;
        tasklet_schedule(&drv_data->pump_transfers);
 }
 
@@ -623,7 +622,7 @@ static void int_transfer_complete(struct driver_data *drv_data)
                pxa2xx_spi_write(drv_data, SSTO, 0);
 
        /* Update total byte transferred return count actual bytes read */
-       drv_data->cur_msg->actual_length += drv_data->len -
+       drv_data->master->cur_msg->actual_length += drv_data->len -
                                (drv_data->rx_end - drv_data->rx);
 
        /* Transfer delays and chip select release are
@@ -631,7 +630,7 @@ static void int_transfer_complete(struct driver_data *drv_data)
         */
 
        /* Move to next transfer */
-       drv_data->cur_msg->state = pxa2xx_spi_next_transfer(drv_data);
+       drv_data->master->cur_msg->state = pxa2xx_spi_next_transfer(drv_data);
 
        /* Schedule transfer tasklet */
        tasklet_schedule(&drv_data->pump_transfers);
@@ -746,7 +745,7 @@ static irqreturn_t ssp_int(int irq, void *dev_id)
        if (!(status & mask))
                return IRQ_NONE;
 
-       if (!drv_data->cur_msg) {
+       if (!drv_data->master->cur_msg) {
 
                pxa2xx_spi_write(drv_data, SSCR0,
                                 pxa2xx_spi_read(drv_data, SSCR0)
@@ -934,7 +933,7 @@ static void pump_transfers(unsigned long data)
 {
        struct driver_data *drv_data = (struct driver_data *)data;
        struct spi_master *master = drv_data->master;
-       struct spi_message *message;
+       struct spi_message *message = master->cur_msg;
        struct spi_transfer *transfer;
        struct spi_transfer *previous;
        struct chip_data *chip;
@@ -950,7 +949,6 @@ static void pump_transfers(unsigned long data)
        int dma_mapped;
 
        /* Get current state information */
-       message = drv_data->cur_msg;
        transfer = drv_data->cur_transfer;
        chip = drv_data->cur_chip;
 
@@ -1146,16 +1144,15 @@ static int pxa2xx_spi_transfer_one_message(struct spi_master *master,
 {
        struct driver_data *drv_data = spi_master_get_devdata(master);
 
-       drv_data->cur_msg = msg;
        /* Initial message state*/
-       drv_data->cur_msg->state = START_STATE;
-       drv_data->cur_transfer = list_entry(drv_data->cur_msg->transfers.next,
+       msg->state = START_STATE;
+       drv_data->cur_transfer = list_entry(msg->transfers.next,
                                                struct spi_transfer,
                                                transfer_list);
 
        /* prepare to setup the SSP, in pump_transfers, using the per
         * chip configuration */
-       drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi);
+       drv_data->cur_chip = spi_get_ctldata(msg->spi);
 
        /* Mark as busy and launch transfers */
        tasklet_schedule(&drv_data->pump_transfers);
index d217ad55cc124dfc147a71c258a604d39defffa5..4f858664cee1a8b41d9cf9915feda38b7a41307d 100644 (file)
@@ -53,7 +53,6 @@ struct driver_data {
        atomic_t dma_running;
 
        /* Current message transfer state info */
-       struct spi_message *cur_msg;
        struct spi_transfer *cur_transfer;
        struct chip_data *cur_chip;
        size_t len;