aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-pxa2xx.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index ce66cf44bba5..7d6d3b74d25b 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1445,6 +1445,28 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)
1445} 1445}
1446#endif 1446#endif
1447 1447
1448static int pxa2xx_spi_fw_translate_cs(struct spi_master *master, unsigned cs)
1449{
1450 struct driver_data *drv_data = spi_master_get_devdata(master);
1451
1452 if (has_acpi_companion(&drv_data->pdev->dev)) {
1453 switch (drv_data->ssp_type) {
1454 /*
1455 * For Atoms the ACPI DeviceSelection used by the Windows
1456 * driver starts from 1 instead of 0 so translate it here
1457 * to match what Linux expects.
1458 */
1459 case LPSS_BYT_SSP:
1460 return cs - 1;
1461
1462 default:
1463 break;
1464 }
1465 }
1466
1467 return cs;
1468}
1469
1448static int pxa2xx_spi_probe(struct platform_device *pdev) 1470static int pxa2xx_spi_probe(struct platform_device *pdev)
1449{ 1471{
1450 struct device *dev = &pdev->dev; 1472 struct device *dev = &pdev->dev;
@@ -1497,6 +1519,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1497 master->setup = setup; 1519 master->setup = setup;
1498 master->transfer_one_message = pxa2xx_spi_transfer_one_message; 1520 master->transfer_one_message = pxa2xx_spi_transfer_one_message;
1499 master->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer; 1521 master->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer;
1522 master->fw_translate_cs = pxa2xx_spi_fw_translate_cs;
1500 master->auto_runtime_pm = true; 1523 master->auto_runtime_pm = true;
1501 1524
1502 drv_data->ssp_type = ssp->type; 1525 drv_data->ssp_type = ssp->type;