diff options
author | Mark Brown <broonie@linaro.org> | 2013-06-26 11:21:03 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-06-26 11:21:03 -0400 |
commit | 7e016d146f90530545798ad46ec0662c1c69c505 (patch) | |
tree | eb91cc54f8c9803095c8bc156c1d56b14816b37d | |
parent | 37553b9236d36cc9ca18f1e5633fda4ed48bc50d (diff) | |
parent | 4b30f2a1218220c295b01af6f219ab0477064a74 (diff) |
Merge remote-tracking branch 'spi/topic/pxa' into spi-next
-rw-r--r-- | drivers/spi/spi-pxa2xx-dma.c | 11 | ||||
-rw-r--r-- | drivers/spi/spi-pxa2xx.c | 37 |
2 files changed, 10 insertions, 38 deletions
diff --git a/drivers/spi/spi-pxa2xx-dma.c b/drivers/spi/spi-pxa2xx-dma.c index 6427600b5bbe..3c0b55125f1e 100644 --- a/drivers/spi/spi-pxa2xx-dma.c +++ b/drivers/spi/spi-pxa2xx-dma.c | |||
@@ -327,22 +327,23 @@ void pxa2xx_spi_dma_start(struct driver_data *drv_data) | |||
327 | int pxa2xx_spi_dma_setup(struct driver_data *drv_data) | 327 | int pxa2xx_spi_dma_setup(struct driver_data *drv_data) |
328 | { | 328 | { |
329 | struct pxa2xx_spi_master *pdata = drv_data->master_info; | 329 | struct pxa2xx_spi_master *pdata = drv_data->master_info; |
330 | struct device *dev = &drv_data->pdev->dev; | ||
330 | dma_cap_mask_t mask; | 331 | dma_cap_mask_t mask; |
331 | 332 | ||
332 | dma_cap_zero(mask); | 333 | dma_cap_zero(mask); |
333 | dma_cap_set(DMA_SLAVE, mask); | 334 | dma_cap_set(DMA_SLAVE, mask); |
334 | 335 | ||
335 | drv_data->dummy = devm_kzalloc(&drv_data->pdev->dev, SZ_2K, GFP_KERNEL); | 336 | drv_data->dummy = devm_kzalloc(dev, SZ_2K, GFP_KERNEL); |
336 | if (!drv_data->dummy) | 337 | if (!drv_data->dummy) |
337 | return -ENOMEM; | 338 | return -ENOMEM; |
338 | 339 | ||
339 | drv_data->tx_chan = dma_request_channel(mask, pxa2xx_spi_dma_filter, | 340 | drv_data->tx_chan = dma_request_slave_channel_compat(mask, |
340 | pdata); | 341 | pxa2xx_spi_dma_filter, pdata, dev, "tx"); |
341 | if (!drv_data->tx_chan) | 342 | if (!drv_data->tx_chan) |
342 | return -ENODEV; | 343 | return -ENODEV; |
343 | 344 | ||
344 | drv_data->rx_chan = dma_request_channel(mask, pxa2xx_spi_dma_filter, | 345 | drv_data->rx_chan = dma_request_slave_channel_compat(mask, |
345 | pdata); | 346 | pxa2xx_spi_dma_filter, pdata, dev, "rx"); |
346 | if (!drv_data->rx_chan) { | 347 | if (!drv_data->rx_chan) { |
347 | dma_release_channel(drv_data->tx_chan); | 348 | dma_release_channel(drv_data->tx_chan); |
348 | drv_data->tx_chan = NULL; | 349 | drv_data->tx_chan = NULL; |
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index d161d45e021e..f440dcee852b 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c | |||
@@ -1022,32 +1022,10 @@ static void cleanup(struct spi_device *spi) | |||
1022 | } | 1022 | } |
1023 | 1023 | ||
1024 | #ifdef CONFIG_ACPI | 1024 | #ifdef CONFIG_ACPI |
1025 | static int pxa2xx_spi_acpi_add_dma(struct acpi_resource *res, void *data) | ||
1026 | { | ||
1027 | struct pxa2xx_spi_master *pdata = data; | ||
1028 | |||
1029 | if (res->type == ACPI_RESOURCE_TYPE_FIXED_DMA) { | ||
1030 | const struct acpi_resource_fixed_dma *dma; | ||
1031 | |||
1032 | dma = &res->data.fixed_dma; | ||
1033 | if (pdata->tx_slave_id < 0) { | ||
1034 | pdata->tx_slave_id = dma->request_lines; | ||
1035 | pdata->tx_chan_id = dma->channels; | ||
1036 | } else if (pdata->rx_slave_id < 0) { | ||
1037 | pdata->rx_slave_id = dma->request_lines; | ||
1038 | pdata->rx_chan_id = dma->channels; | ||
1039 | } | ||
1040 | } | ||
1041 | |||
1042 | /* Tell the ACPI core to skip this resource */ | ||
1043 | return 1; | ||
1044 | } | ||
1045 | |||
1046 | static struct pxa2xx_spi_master * | 1025 | static struct pxa2xx_spi_master * |
1047 | pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) | 1026 | pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) |
1048 | { | 1027 | { |
1049 | struct pxa2xx_spi_master *pdata; | 1028 | struct pxa2xx_spi_master *pdata; |
1050 | struct list_head resource_list; | ||
1051 | struct acpi_device *adev; | 1029 | struct acpi_device *adev; |
1052 | struct ssp_device *ssp; | 1030 | struct ssp_device *ssp; |
1053 | struct resource *res; | 1031 | struct resource *res; |
@@ -1073,7 +1051,7 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) | |||
1073 | ssp->phys_base = res->start; | 1051 | ssp->phys_base = res->start; |
1074 | ssp->mmio_base = devm_ioremap_resource(&pdev->dev, res); | 1052 | ssp->mmio_base = devm_ioremap_resource(&pdev->dev, res); |
1075 | if (IS_ERR(ssp->mmio_base)) | 1053 | if (IS_ERR(ssp->mmio_base)) |
1076 | return PTR_ERR(ssp->mmio_base); | 1054 | return NULL; |
1077 | 1055 | ||
1078 | ssp->clk = devm_clk_get(&pdev->dev, NULL); | 1056 | ssp->clk = devm_clk_get(&pdev->dev, NULL); |
1079 | ssp->irq = platform_get_irq(pdev, 0); | 1057 | ssp->irq = platform_get_irq(pdev, 0); |
@@ -1085,15 +1063,7 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) | |||
1085 | ssp->port_id = devid; | 1063 | ssp->port_id = devid; |
1086 | 1064 | ||
1087 | pdata->num_chipselect = 1; | 1065 | pdata->num_chipselect = 1; |
1088 | pdata->rx_slave_id = -1; | 1066 | pdata->enable_dma = true; |
1089 | pdata->tx_slave_id = -1; | ||
1090 | |||
1091 | INIT_LIST_HEAD(&resource_list); | ||
1092 | acpi_dev_get_resources(adev, &resource_list, pxa2xx_spi_acpi_add_dma, | ||
1093 | pdata); | ||
1094 | acpi_dev_free_resource_list(&resource_list); | ||
1095 | |||
1096 | pdata->enable_dma = pdata->rx_slave_id >= 0 && pdata->tx_slave_id >= 0; | ||
1097 | 1067 | ||
1098 | return pdata; | 1068 | return pdata; |
1099 | } | 1069 | } |
@@ -1101,6 +1071,7 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) | |||
1101 | static struct acpi_device_id pxa2xx_spi_acpi_match[] = { | 1071 | static struct acpi_device_id pxa2xx_spi_acpi_match[] = { |
1102 | { "INT33C0", 0 }, | 1072 | { "INT33C0", 0 }, |
1103 | { "INT33C1", 0 }, | 1073 | { "INT33C1", 0 }, |
1074 | { "80860F0E", 0 }, | ||
1104 | { }, | 1075 | { }, |
1105 | }; | 1076 | }; |
1106 | MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); | 1077 | MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); |
@@ -1198,7 +1169,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev) | |||
1198 | if (platform_info->enable_dma) { | 1169 | if (platform_info->enable_dma) { |
1199 | status = pxa2xx_spi_dma_setup(drv_data); | 1170 | status = pxa2xx_spi_dma_setup(drv_data); |
1200 | if (status) { | 1171 | if (status) { |
1201 | dev_warn(dev, "failed to setup DMA, using PIO\n"); | 1172 | dev_dbg(dev, "no DMA channels available, using PIO\n"); |
1202 | platform_info->enable_dma = false; | 1173 | platform_info->enable_dma = false; |
1203 | } | 1174 | } |
1204 | } | 1175 | } |