diff options
-rw-r--r-- | drivers/spi/spi-pxa2xx.c | 21 | ||||
-rw-r--r-- | include/linux/pxa2xx_ssp.h | 1 |
2 files changed, 21 insertions, 1 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c index 81d68e01046a..0eb79368eabc 100644 --- a/drivers/spi/spi-pxa2xx.c +++ b/drivers/spi/spi-pxa2xx.c | |||
@@ -83,6 +83,7 @@ struct lpss_config { | |||
83 | /* Chip select control */ | 83 | /* Chip select control */ |
84 | unsigned cs_sel_shift; | 84 | unsigned cs_sel_shift; |
85 | unsigned cs_sel_mask; | 85 | unsigned cs_sel_mask; |
86 | unsigned cs_num; | ||
86 | }; | 87 | }; |
87 | 88 | ||
88 | /* Keep these sorted with enum pxa_ssp_type */ | 89 | /* Keep these sorted with enum pxa_ssp_type */ |
@@ -107,6 +108,19 @@ static const struct lpss_config lpss_platforms[] = { | |||
107 | .tx_threshold_lo = 160, | 108 | .tx_threshold_lo = 160, |
108 | .tx_threshold_hi = 224, | 109 | .tx_threshold_hi = 224, |
109 | }, | 110 | }, |
111 | { /* LPSS_BSW_SSP */ | ||
112 | .offset = 0x400, | ||
113 | .reg_general = 0x08, | ||
114 | .reg_ssp = 0x0c, | ||
115 | .reg_cs_ctrl = 0x18, | ||
116 | .reg_capabilities = -1, | ||
117 | .rx_threshold = 64, | ||
118 | .tx_threshold_lo = 160, | ||
119 | .tx_threshold_hi = 224, | ||
120 | .cs_sel_shift = 2, | ||
121 | .cs_sel_mask = 1 << 2, | ||
122 | .cs_num = 2, | ||
123 | }, | ||
110 | { /* LPSS_SPT_SSP */ | 124 | { /* LPSS_SPT_SSP */ |
111 | .offset = 0x200, | 125 | .offset = 0x200, |
112 | .reg_general = -1, | 126 | .reg_general = -1, |
@@ -142,6 +156,7 @@ static bool is_lpss_ssp(const struct driver_data *drv_data) | |||
142 | switch (drv_data->ssp_type) { | 156 | switch (drv_data->ssp_type) { |
143 | case LPSS_LPT_SSP: | 157 | case LPSS_LPT_SSP: |
144 | case LPSS_BYT_SSP: | 158 | case LPSS_BYT_SSP: |
159 | case LPSS_BSW_SSP: | ||
145 | case LPSS_SPT_SSP: | 160 | case LPSS_SPT_SSP: |
146 | case LPSS_BXT_SSP: | 161 | case LPSS_BXT_SSP: |
147 | return true; | 162 | return true; |
@@ -1189,6 +1204,7 @@ static int setup(struct spi_device *spi) | |||
1189 | break; | 1204 | break; |
1190 | case LPSS_LPT_SSP: | 1205 | case LPSS_LPT_SSP: |
1191 | case LPSS_BYT_SSP: | 1206 | case LPSS_BYT_SSP: |
1207 | case LPSS_BSW_SSP: | ||
1192 | case LPSS_SPT_SSP: | 1208 | case LPSS_SPT_SSP: |
1193 | case LPSS_BXT_SSP: | 1209 | case LPSS_BXT_SSP: |
1194 | config = lpss_get_config(drv_data); | 1210 | config = lpss_get_config(drv_data); |
@@ -1336,7 +1352,7 @@ static const struct acpi_device_id pxa2xx_spi_acpi_match[] = { | |||
1336 | { "INT3430", LPSS_LPT_SSP }, | 1352 | { "INT3430", LPSS_LPT_SSP }, |
1337 | { "INT3431", LPSS_LPT_SSP }, | 1353 | { "INT3431", LPSS_LPT_SSP }, |
1338 | { "80860F0E", LPSS_BYT_SSP }, | 1354 | { "80860F0E", LPSS_BYT_SSP }, |
1339 | { "8086228E", LPSS_BYT_SSP }, | 1355 | { "8086228E", LPSS_BSW_SSP }, |
1340 | { }, | 1356 | { }, |
1341 | }; | 1357 | }; |
1342 | MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); | 1358 | MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); |
@@ -1473,6 +1489,7 @@ static int pxa2xx_spi_fw_translate_cs(struct spi_master *master, unsigned cs) | |||
1473 | * to match what Linux expects. | 1489 | * to match what Linux expects. |
1474 | */ | 1490 | */ |
1475 | case LPSS_BYT_SSP: | 1491 | case LPSS_BYT_SSP: |
1492 | case LPSS_BSW_SSP: | ||
1476 | return cs - 1; | 1493 | return cs - 1; |
1477 | 1494 | ||
1478 | default: | 1495 | default: |
@@ -1622,6 +1639,8 @@ static int pxa2xx_spi_probe(struct platform_device *pdev) | |||
1622 | tmp &= LPSS_CAPS_CS_EN_MASK; | 1639 | tmp &= LPSS_CAPS_CS_EN_MASK; |
1623 | tmp >>= LPSS_CAPS_CS_EN_SHIFT; | 1640 | tmp >>= LPSS_CAPS_CS_EN_SHIFT; |
1624 | platform_info->num_chipselect = ffz(tmp); | 1641 | platform_info->num_chipselect = ffz(tmp); |
1642 | } else if (config->cs_num) { | ||
1643 | platform_info->num_chipselect = config->cs_num; | ||
1625 | } | 1644 | } |
1626 | } | 1645 | } |
1627 | master->num_chipselect = platform_info->num_chipselect; | 1646 | master->num_chipselect = platform_info->num_chipselect; |
diff --git a/include/linux/pxa2xx_ssp.h b/include/linux/pxa2xx_ssp.h index c2f2574ff61c..2a097d176ba9 100644 --- a/include/linux/pxa2xx_ssp.h +++ b/include/linux/pxa2xx_ssp.h | |||
@@ -197,6 +197,7 @@ enum pxa_ssp_type { | |||
197 | QUARK_X1000_SSP, | 197 | QUARK_X1000_SSP, |
198 | LPSS_LPT_SSP, /* Keep LPSS types sorted with lpss_platforms[] */ | 198 | LPSS_LPT_SSP, /* Keep LPSS types sorted with lpss_platforms[] */ |
199 | LPSS_BYT_SSP, | 199 | LPSS_BYT_SSP, |
200 | LPSS_BSW_SSP, | ||
200 | LPSS_SPT_SSP, | 201 | LPSS_SPT_SSP, |
201 | LPSS_BXT_SSP, | 202 | LPSS_BXT_SSP, |
202 | }; | 203 | }; |