|
13 | 13 | #include <linux/gpio/consumer.h> |
14 | 14 | #include <linux/irq.h> |
15 | 15 | #include <linux/of_device.h> |
16 | | -#include <linux/of_gpio.h> |
17 | 16 | #include <linux/of_graph.h> |
18 | 17 | #include <linux/phy/phy.h> |
19 | 18 | #include <linux/regulator/consumer.h> |
@@ -265,7 +264,7 @@ struct exynos_dsi { |
265 | 264 | struct clk **clks; |
266 | 265 | struct regulator_bulk_data supplies[2]; |
267 | 266 | int irq; |
268 | | - int te_gpio; |
| 267 | + struct gpio_desc *te_gpio; |
269 | 268 |
|
270 | 269 | u32 pll_clk_rate; |
271 | 270 | u32 burst_clk_rate; |
@@ -1298,14 +1297,14 @@ static void exynos_dsi_enable_irq(struct exynos_dsi *dsi) |
1298 | 1297 | { |
1299 | 1298 | enable_irq(dsi->irq); |
1300 | 1299 |
|
1301 | | - if (gpio_is_valid(dsi->te_gpio)) |
1302 | | - enable_irq(gpio_to_irq(dsi->te_gpio)); |
| 1300 | + if (dsi->te_gpio) |
| 1301 | + enable_irq(gpiod_to_irq(dsi->te_gpio)); |
1303 | 1302 | } |
1304 | 1303 |
|
1305 | 1304 | static void exynos_dsi_disable_irq(struct exynos_dsi *dsi) |
1306 | 1305 | { |
1307 | | - if (gpio_is_valid(dsi->te_gpio)) |
1308 | | - disable_irq(gpio_to_irq(dsi->te_gpio)); |
| 1306 | + if (dsi->te_gpio) |
| 1307 | + disable_irq(gpiod_to_irq(dsi->te_gpio)); |
1309 | 1308 |
|
1310 | 1309 | disable_irq(dsi->irq); |
1311 | 1310 | } |
@@ -1335,42 +1334,31 @@ static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi, |
1335 | 1334 | int ret; |
1336 | 1335 | int te_gpio_irq; |
1337 | 1336 |
|
1338 | | - dsi->te_gpio = of_get_named_gpio(panel->of_node, "te-gpios", 0); |
1339 | | - if (dsi->te_gpio == -ENOENT) |
1340 | | - return 0; |
1341 | | - |
1342 | | - if (!gpio_is_valid(dsi->te_gpio)) { |
1343 | | - ret = dsi->te_gpio; |
1344 | | - dev_err(dsi->dev, "cannot get te-gpios, %d\n", ret); |
1345 | | - goto out; |
1346 | | - } |
1347 | | - |
1348 | | - ret = gpio_request(dsi->te_gpio, "te_gpio"); |
1349 | | - if (ret) { |
1350 | | - dev_err(dsi->dev, "gpio request failed with %d\n", ret); |
1351 | | - goto out; |
| 1337 | + dsi->te_gpio = devm_gpiod_get_optional(dsi->dev, "te", GPIOD_IN); |
| 1338 | + if (IS_ERR(dsi->te_gpio)) { |
| 1339 | + dev_err(dsi->dev, "gpio request failed with %ld\n", |
| 1340 | + PTR_ERR(dsi->te_gpio)); |
| 1341 | + return PTR_ERR(dsi->te_gpio); |
1352 | 1342 | } |
1353 | 1343 |
|
1354 | | - te_gpio_irq = gpio_to_irq(dsi->te_gpio); |
| 1344 | + te_gpio_irq = gpiod_to_irq(dsi->te_gpio); |
1355 | 1345 |
|
1356 | 1346 | ret = request_threaded_irq(te_gpio_irq, exynos_dsi_te_irq_handler, NULL, |
1357 | 1347 | IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN, "TE", dsi); |
1358 | 1348 | if (ret) { |
1359 | 1349 | dev_err(dsi->dev, "request interrupt failed with %d\n", ret); |
1360 | | - gpio_free(dsi->te_gpio); |
1361 | | - goto out; |
| 1350 | + gpiod_put(dsi->te_gpio); |
| 1351 | + return ret; |
1362 | 1352 | } |
1363 | 1353 |
|
1364 | | -out: |
1365 | | - return ret; |
| 1354 | + return 0; |
1366 | 1355 | } |
1367 | 1356 |
|
1368 | 1357 | static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi) |
1369 | 1358 | { |
1370 | | - if (gpio_is_valid(dsi->te_gpio)) { |
1371 | | - free_irq(gpio_to_irq(dsi->te_gpio), dsi); |
1372 | | - gpio_free(dsi->te_gpio); |
1373 | | - dsi->te_gpio = -ENOENT; |
| 1359 | + if (dsi->te_gpio) { |
| 1360 | + free_irq(gpiod_to_irq(dsi->te_gpio), dsi); |
| 1361 | + gpiod_put(dsi->te_gpio); |
1374 | 1362 | } |
1375 | 1363 | } |
1376 | 1364 |
|
@@ -1745,9 +1733,6 @@ static int exynos_dsi_probe(struct platform_device *pdev) |
1745 | 1733 | if (!dsi) |
1746 | 1734 | return -ENOMEM; |
1747 | 1735 |
|
1748 | | - /* To be checked as invalid one */ |
1749 | | - dsi->te_gpio = -ENOENT; |
1750 | | - |
1751 | 1736 | init_completion(&dsi->completed); |
1752 | 1737 | spin_lock_init(&dsi->transfer_lock); |
1753 | 1738 | INIT_LIST_HEAD(&dsi->transfer_list); |
|
0 commit comments