return drv_data->ssp_type == MMP2_SSP;
 }
 
+static void pxa2xx_spi_update(const struct driver_data *drv_data, u32 reg, u32 mask, u32 value)
+{
+       if ((pxa2xx_spi_read(drv_data, reg) & mask) != value)
+               pxa2xx_spi_write(drv_data, reg, value & mask);
+}
+
 static u32 pxa2xx_spi_get_ssrc1_change_mask(const struct driver_data *drv_data)
 {
        switch (drv_data->ssp_type) {
                        dma_mapped ? "DMA" : "PIO");
 
        if (is_lpss_ssp(drv_data)) {
-               if ((pxa2xx_spi_read(drv_data, SSIRF) & 0xff)
-                   != chip->lpss_rx_threshold)
-                       pxa2xx_spi_write(drv_data, SSIRF,
-                                        chip->lpss_rx_threshold);
-               if ((pxa2xx_spi_read(drv_data, SSITF) & 0xffff)
-                   != chip->lpss_tx_threshold)
-                       pxa2xx_spi_write(drv_data, SSITF,
-                                        chip->lpss_tx_threshold);
+               pxa2xx_spi_update(drv_data, SSIRF, GENMASK(7, 0), chip->lpss_rx_threshold);
+               pxa2xx_spi_update(drv_data, SSITF, GENMASK(15, 0), chip->lpss_tx_threshold);
        }
 
-       if (is_quark_x1000_ssp(drv_data) &&
-           (pxa2xx_spi_read(drv_data, DDS_RATE) != chip->dds_rate))
-               pxa2xx_spi_write(drv_data, DDS_RATE, chip->dds_rate);
+       if (is_quark_x1000_ssp(drv_data))
+               pxa2xx_spi_update(drv_data, DDS_RATE, GENMASK(23, 0), chip->dds_rate);
 
        /* Stop the SSP */
        if (!is_mmp2_ssp(drv_data))
        if (!pxa25x_ssp_comp(drv_data))
                pxa2xx_spi_write(drv_data, SSTO, chip->timeout);
 
+       /* first set CR1 without interrupt and service enables */
+       pxa2xx_spi_update(drv_data, SSCR1, change_mask, cr1);
+
        /* see if we need to reload the config registers */
-       if ((pxa2xx_spi_read(drv_data, SSCR0) != cr0)
-           || (pxa2xx_spi_read(drv_data, SSCR1) & change_mask)
-           != (cr1 & change_mask)) {
-               /* first set CR1 without interrupt and service enables */
-               pxa2xx_spi_write(drv_data, SSCR1, cr1 & change_mask);
-               /* Update the other bits */
-               pxa2xx_spi_write(drv_data, SSCR0, cr0);
-       }
+       pxa2xx_spi_update(drv_data, SSCR0, GENMASK(31, 0), cr0);
 
        /* Restart the SSP */
        pxa_ssp_enable(drv_data->ssp);