.. | .. |
---|
1 | 1 | // SPDX-License-Identifier: GPL-2.0 |
---|
2 | 2 | /* |
---|
3 | | - * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. |
---|
| 3 | + * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. |
---|
4 | 4 | */ |
---|
5 | 5 | |
---|
| 6 | +#include <linux/acpi.h> |
---|
6 | 7 | #include <linux/module.h> |
---|
7 | 8 | #include <linux/of.h> |
---|
8 | 9 | #include <linux/platform_device.h> |
---|
.. | .. |
---|
261 | 262 | PINCTRL_PIN(147, "GPIO_147"), |
---|
262 | 263 | PINCTRL_PIN(148, "GPIO_148"), |
---|
263 | 264 | PINCTRL_PIN(149, "GPIO_149"), |
---|
264 | | - PINCTRL_PIN(150, "SDC2_CLK"), |
---|
265 | | - PINCTRL_PIN(151, "SDC2_CMD"), |
---|
266 | | - PINCTRL_PIN(152, "SDC2_DATA"), |
---|
267 | | - PINCTRL_PIN(153, "UFS_RESET"), |
---|
| 265 | + PINCTRL_PIN(150, "UFS_RESET"), |
---|
| 266 | + PINCTRL_PIN(151, "SDC2_CLK"), |
---|
| 267 | + PINCTRL_PIN(152, "SDC2_CMD"), |
---|
| 268 | + PINCTRL_PIN(153, "SDC2_DATA"), |
---|
268 | 269 | }; |
---|
269 | 270 | |
---|
270 | 271 | #define DECLARE_MSM_GPIO_PINS(pin) \ |
---|
.. | .. |
---|
420 | 421 | DECLARE_MSM_GPIO_PINS(148); |
---|
421 | 422 | DECLARE_MSM_GPIO_PINS(149); |
---|
422 | 423 | |
---|
423 | | -static const unsigned int sdc2_clk_pins[] = { 150 }; |
---|
424 | | -static const unsigned int sdc2_cmd_pins[] = { 151 }; |
---|
425 | | -static const unsigned int sdc2_data_pins[] = { 152 }; |
---|
426 | | -static const unsigned int ufs_reset_pins[] = { 153 }; |
---|
| 424 | +static const unsigned int ufs_reset_pins[] = { 150 }; |
---|
| 425 | +static const unsigned int sdc2_clk_pins[] = { 151 }; |
---|
| 426 | +static const unsigned int sdc2_cmd_pins[] = { 152 }; |
---|
| 427 | +static const unsigned int sdc2_data_pins[] = { 153 }; |
---|
427 | 428 | |
---|
428 | 429 | enum sdm845_functions { |
---|
429 | 430 | msm_mux_gpio, |
---|
.. | .. |
---|
1271 | 1272 | PINGROUP(147, NORTH, _, _, _, _, _, _, _, _, _, _), |
---|
1272 | 1273 | PINGROUP(148, NORTH, _, _, _, _, _, _, _, _, _, _), |
---|
1273 | 1274 | PINGROUP(149, NORTH, _, _, _, _, _, _, _, _, _, _), |
---|
| 1275 | + UFS_RESET(ufs_reset, 0x99f000), |
---|
1274 | 1276 | SDC_QDSD_PINGROUP(sdc2_clk, 0x99a000, 14, 6), |
---|
1275 | 1277 | SDC_QDSD_PINGROUP(sdc2_cmd, 0x99a000, 11, 3), |
---|
1276 | 1278 | SDC_QDSD_PINGROUP(sdc2_data, 0x99a000, 9, 0), |
---|
1277 | | - UFS_RESET(ufs_reset, 0x99f000), |
---|
| 1279 | +}; |
---|
| 1280 | + |
---|
| 1281 | +static const int sdm845_acpi_reserved_gpios[] = { |
---|
| 1282 | + 0, 1, 2, 3, 81, 82, 83, 84, -1 |
---|
| 1283 | +}; |
---|
| 1284 | + |
---|
| 1285 | +static const struct msm_gpio_wakeirq_map sdm845_pdc_map[] = { |
---|
| 1286 | + { 1, 30 }, { 3, 31 }, { 5, 32 }, { 10, 33 }, { 11, 34 }, |
---|
| 1287 | + { 20, 35 }, { 22, 36 }, { 24, 37 }, { 26, 38 }, { 30, 39 }, |
---|
| 1288 | + { 31, 117 }, { 32, 41 }, { 34, 42 }, { 36, 43 }, { 37, 44 }, |
---|
| 1289 | + { 38, 45 }, { 39, 46 }, { 40, 47 }, { 41, 115 }, { 43, 49 }, |
---|
| 1290 | + { 44, 50 }, { 46, 51 }, { 48, 52 }, { 49, 118 }, { 52, 54 }, |
---|
| 1291 | + { 53, 55 }, { 54, 56 }, { 56, 57 }, { 57, 58 }, { 58, 59 }, |
---|
| 1292 | + { 59, 60 }, { 60, 61 }, { 61, 62 }, { 62, 63 }, { 63, 64 }, |
---|
| 1293 | + { 64, 65 }, { 66, 66 }, { 68, 67 }, { 71, 68 }, { 73, 69 }, |
---|
| 1294 | + { 77, 70 }, { 78, 71 }, { 79, 72 }, { 80, 73 }, { 84, 74 }, |
---|
| 1295 | + { 85, 75 }, { 86, 76 }, { 88, 77 }, { 89, 116 }, { 91, 79 }, |
---|
| 1296 | + { 92, 80 }, { 95, 81 }, { 96, 82 }, { 97, 83 }, { 101, 84 }, |
---|
| 1297 | + { 103, 85 }, { 104, 86 }, { 115, 90 }, { 116, 91 }, { 117, 92 }, |
---|
| 1298 | + { 118, 93 }, { 119, 94 }, { 120, 95 }, { 121, 96 }, { 122, 97 }, |
---|
| 1299 | + { 123, 98 }, { 124, 99 }, { 125, 100 }, { 127, 102 }, { 128, 103 }, |
---|
| 1300 | + { 129, 104 }, { 130, 105 }, { 132, 106 }, { 133, 107 }, { 145, 108 }, |
---|
1278 | 1301 | }; |
---|
1279 | 1302 | |
---|
1280 | 1303 | static const struct msm_pinctrl_soc_data sdm845_pinctrl = { |
---|
.. | .. |
---|
1284 | 1307 | .nfunctions = ARRAY_SIZE(sdm845_functions), |
---|
1285 | 1308 | .groups = sdm845_groups, |
---|
1286 | 1309 | .ngroups = ARRAY_SIZE(sdm845_groups), |
---|
| 1310 | + .ngpios = 151, |
---|
| 1311 | + .wakeirq_map = sdm845_pdc_map, |
---|
| 1312 | + .nwakeirq_map = ARRAY_SIZE(sdm845_pdc_map), |
---|
| 1313 | + .wakeirq_dual_edge_errata = true, |
---|
| 1314 | +}; |
---|
| 1315 | + |
---|
| 1316 | +static const struct msm_pinctrl_soc_data sdm845_acpi_pinctrl = { |
---|
| 1317 | + .pins = sdm845_pins, |
---|
| 1318 | + .npins = ARRAY_SIZE(sdm845_pins), |
---|
| 1319 | + .groups = sdm845_groups, |
---|
| 1320 | + .ngroups = ARRAY_SIZE(sdm845_groups), |
---|
| 1321 | + .reserved_gpios = sdm845_acpi_reserved_gpios, |
---|
1287 | 1322 | .ngpios = 150, |
---|
1288 | 1323 | }; |
---|
1289 | 1324 | |
---|
1290 | 1325 | static int sdm845_pinctrl_probe(struct platform_device *pdev) |
---|
1291 | 1326 | { |
---|
1292 | | - return msm_pinctrl_probe(pdev, &sdm845_pinctrl); |
---|
| 1327 | + int ret; |
---|
| 1328 | + |
---|
| 1329 | + if (pdev->dev.of_node) { |
---|
| 1330 | + ret = msm_pinctrl_probe(pdev, &sdm845_pinctrl); |
---|
| 1331 | + } else if (has_acpi_companion(&pdev->dev)) { |
---|
| 1332 | + ret = msm_pinctrl_probe(pdev, &sdm845_acpi_pinctrl); |
---|
| 1333 | + } else { |
---|
| 1334 | + dev_err(&pdev->dev, "DT and ACPI disabled\n"); |
---|
| 1335 | + return -EINVAL; |
---|
| 1336 | + } |
---|
| 1337 | + |
---|
| 1338 | + return ret; |
---|
1293 | 1339 | } |
---|
| 1340 | + |
---|
| 1341 | +#ifdef CONFIG_ACPI |
---|
| 1342 | +static const struct acpi_device_id sdm845_pinctrl_acpi_match[] = { |
---|
| 1343 | + { "QCOM0217"}, |
---|
| 1344 | + { }, |
---|
| 1345 | +}; |
---|
| 1346 | +MODULE_DEVICE_TABLE(acpi, sdm845_pinctrl_acpi_match); |
---|
| 1347 | +#endif |
---|
1294 | 1348 | |
---|
1295 | 1349 | static const struct of_device_id sdm845_pinctrl_of_match[] = { |
---|
1296 | 1350 | { .compatible = "qcom,sdm845-pinctrl", }, |
---|
.. | .. |
---|
1300 | 1354 | static struct platform_driver sdm845_pinctrl_driver = { |
---|
1301 | 1355 | .driver = { |
---|
1302 | 1356 | .name = "sdm845-pinctrl", |
---|
| 1357 | + .pm = &msm_pinctrl_dev_pm_ops, |
---|
1303 | 1358 | .of_match_table = sdm845_pinctrl_of_match, |
---|
| 1359 | + .acpi_match_table = ACPI_PTR(sdm845_pinctrl_acpi_match), |
---|
1304 | 1360 | }, |
---|
1305 | 1361 | .probe = sdm845_pinctrl_probe, |
---|
1306 | 1362 | .remove = msm_pinctrl_remove, |
---|