spi: pxa2xx: Extract pxa2xx_spi_update() helper
There are few places that repeat the logic of "update if changed". Extract pxa2xx_spi_update() helper to deduplicate that. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20210510124134.24638-11-andriy.shevchenko@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
0c8ccd8b26
Коммит
1bed378c6b
|
@ -200,6 +200,12 @@ static bool is_mmp2_ssp(const struct driver_data *drv_data)
|
|||
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) {
|
||||
|
@ -1081,19 +1087,12 @@ static int pxa2xx_spi_transfer_one(struct spi_controller *controller,
|
|||
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))
|
||||
|
@ -1102,15 +1101,11 @@ static int pxa2xx_spi_transfer_one(struct spi_controller *controller,
|
|||
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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче