|
|
@@ -74,7 +74,13 @@ MODULE_ALIAS("platform:pxa2xx-spi");
|
|
|
|
|
|
static bool is_lpss_ssp(const struct driver_data *drv_data)
|
|
|
{
|
|
|
- return drv_data->ssp_type == LPSS_SSP;
|
|
|
+ switch (drv_data->ssp_type) {
|
|
|
+ case LPSS_LPT_SSP:
|
|
|
+ case LPSS_BYT_SSP:
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static bool is_quark_x1000_ssp(const struct driver_data *drv_data)
|
|
|
@@ -1085,7 +1091,8 @@ static int setup(struct spi_device *spi)
|
|
|
tx_hi_thres = 0;
|
|
|
rx_thres = RX_THRESH_QUARK_X1000_DFLT;
|
|
|
break;
|
|
|
- case LPSS_SSP:
|
|
|
+ case LPSS_LPT_SSP:
|
|
|
+ case LPSS_BYT_SSP:
|
|
|
tx_thres = LPSS_TX_LOTHRESH_DFLT;
|
|
|
tx_hi_thres = LPSS_TX_HITHRESH_DFLT;
|
|
|
rx_thres = LPSS_RX_THRESH_DFLT;
|
|
|
@@ -1242,6 +1249,18 @@ static void cleanup(struct spi_device *spi)
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_ACPI
|
|
|
+
|
|
|
+static struct acpi_device_id pxa2xx_spi_acpi_match[] = {
|
|
|
+ { "INT33C0", LPSS_LPT_SSP },
|
|
|
+ { "INT33C1", LPSS_LPT_SSP },
|
|
|
+ { "INT3430", LPSS_LPT_SSP },
|
|
|
+ { "INT3431", LPSS_LPT_SSP },
|
|
|
+ { "80860F0E", LPSS_BYT_SSP },
|
|
|
+ { "8086228E", LPSS_BYT_SSP },
|
|
|
+ { },
|
|
|
+};
|
|
|
+MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
|
|
|
+
|
|
|
static struct pxa2xx_spi_master *
|
|
|
pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
|
|
|
{
|
|
|
@@ -1249,12 +1268,19 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
|
|
|
struct acpi_device *adev;
|
|
|
struct ssp_device *ssp;
|
|
|
struct resource *res;
|
|
|
- int devid;
|
|
|
+ const struct acpi_device_id *id;
|
|
|
+ int devid, type;
|
|
|
|
|
|
if (!ACPI_HANDLE(&pdev->dev) ||
|
|
|
acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev))
|
|
|
return NULL;
|
|
|
|
|
|
+ id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev);
|
|
|
+ if (id)
|
|
|
+ type = (int)id->driver_data;
|
|
|
+ else
|
|
|
+ return NULL;
|
|
|
+
|
|
|
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
|
|
|
if (!pdata)
|
|
|
return NULL;
|
|
|
@@ -1272,7 +1298,7 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
|
|
|
|
|
|
ssp->clk = devm_clk_get(&pdev->dev, NULL);
|
|
|
ssp->irq = platform_get_irq(pdev, 0);
|
|
|
- ssp->type = LPSS_SSP;
|
|
|
+ ssp->type = type;
|
|
|
ssp->pdev = pdev;
|
|
|
|
|
|
ssp->port_id = -1;
|
|
|
@@ -1285,16 +1311,6 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
|
|
|
return pdata;
|
|
|
}
|
|
|
|
|
|
-static struct acpi_device_id pxa2xx_spi_acpi_match[] = {
|
|
|
- { "INT33C0", 0 },
|
|
|
- { "INT33C1", 0 },
|
|
|
- { "INT3430", 0 },
|
|
|
- { "INT3431", 0 },
|
|
|
- { "80860F0E", 0 },
|
|
|
- { "8086228E", 0 },
|
|
|
- { },
|
|
|
-};
|
|
|
-MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
|
|
|
#else
|
|
|
static inline struct pxa2xx_spi_master *
|
|
|
pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
|