struct rockchip_spi {
        struct device *dev;
-       struct spi_master *master;
 
        struct clk *spiclk;
        struct clk *apb_pclk;
 
 static void rockchip_spi_dma_rxcb(void *data)
 {
-       struct rockchip_spi *rs = data;
+       struct spi_master *master = data;
+       struct rockchip_spi *rs = spi_master_get_devdata(master);
        int state = atomic_fetch_andnot(RXDMA, &rs->state);
 
        if (state & TXDMA)
                return;
 
        spi_enable_chip(rs, false);
-       spi_finalize_current_transfer(rs->master);
+       spi_finalize_current_transfer(master);
 }
 
 static void rockchip_spi_dma_txcb(void *data)
 {
-       struct rockchip_spi *rs = data;
+       struct spi_master *master = data;
+       struct rockchip_spi *rs = spi_master_get_devdata(master);
        int state = atomic_fetch_andnot(TXDMA, &rs->state);
 
        if (state & RXDMA)
        wait_for_idle(rs);
 
        spi_enable_chip(rs, false);
-       spi_finalize_current_transfer(rs->master);
+       spi_finalize_current_transfer(master);
 }
 
 static int rockchip_spi_prepare_dma(struct rockchip_spi *rs,
                        return -EINVAL;
 
                rxdesc->callback = rockchip_spi_dma_rxcb;
-               rxdesc->callback_param = rs;
+               rxdesc->callback_param = master;
        }
 
        txdesc = NULL;
                }
 
                txdesc->callback = rockchip_spi_dma_txcb;
-               txdesc->callback_param = rs;
+               txdesc->callback_param = master;
        }
 
        /* rx must be started before tx due to spi instinct */
 
        spi_enable_chip(rs, false);
 
-       rs->master = master;
        rs->dev = &pdev->dev;
        rs->max_freq = clk_get_rate(rs->spiclk);
 
 {
        int ret;
        struct spi_master *master = dev_get_drvdata(dev);
-       struct rockchip_spi *rs = spi_master_get_devdata(master);
 
-       ret = spi_master_suspend(rs->master);
+       ret = spi_master_suspend(master);
        if (ret < 0)
                return ret;
 
        if (ret < 0)
                return ret;
 
-       ret = spi_master_resume(rs->master);
+       ret = spi_master_resume(master);
        if (ret < 0) {
                clk_disable_unprepare(rs->spiclk);
                clk_disable_unprepare(rs->apb_pclk);