Fixups
- Make display controller drivers for Exynos series to use platform_get_irq and platform_get_irq_byname functions to get the interrupt, which prevents irq chaning from messed up when using hierarchical interrupt domains which use "interrupts" property in the node. - Fix two regressions to TE-gpio handling. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEGaM000JtH4Vhbu4NZMZxZtnUbQkFAmIYMYUACgkQZMZxZtnU bQlTCg/9H1/dRrC7yt7rxtCeZqUmuNuzMr8M/mJCl9MjisC5NYbnStLT4Md0hyhn R6cBSPTI7IoRJU3X5QbnMKkg9L7e2BfXhE98+JH1R90Ope+RHerKFBiz4NbwsDNL TDY+LNMiVjLFq+tmmlVMnNKKRn4dwhoet2jB9qNs7h0AEcwsfpIcwR7bp+EMt4n4 FEG72x9jjbNRarCgIIoVtycB11PRWXfqxRByUywbeUm4wWdijczRoNd9qmgWC0yM KiNwsEfF4eW6jEfpxJND7NCd95hnwP0mu+O2z5h0tgzFIFkC1v2I+ZDiat31SmbE I7e2A4nJblLa/HSxrd5kwAreXw56xGDO9aLkKix55idlifChx5wsCIoYOdz3mjmq IbV9dPaRP5kHt8eZ5QsryoPQ+S5FbReShDXfzUs0/BXXImrYoTHC8RCKg/mfjjV4 Clghz1pSbgm8kfPw/ikySNPMPIlHPCmkDoO2EJfkdKuEsR5zusklo3OewU9eKbU4 euh5TtfNyfF9vMyMm7rA4hAXSnWjS8Ul5BjKJR3EE1/lvcO8YGirAZbHvg343Qhn 8Xs4e61mzjXxBnDSQZBAvvm+Uag/M9iVUjYtHiAOP4fiwM9Ald5U+lxEcCBdsuD/ gy0bl7sk8YMFcUcyZtEhYnV9E2qKoR9XNpTfa1ZyZ4No0N4Q4U8= =IFeQ -----END PGP SIGNATURE----- Merge tag 'exynos-drm-fixes-v5.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes Fixups - Make display controller drivers for Exynos series to use platform_get_irq and platform_get_irq_byname functions to get the interrupt, which prevents irq chaning from messed up when using hierarchical interrupt domains which use "interrupts" property in the node. - Fix two regressions to TE-gpio handling. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Inki Dae <inki.dae@samsung.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220225014042.17637-1-inki.dae@samsung.com
This commit is contained in:
Коммит
e7c470a4b5
|
@ -678,7 +678,6 @@ static int decon_probe(struct platform_device *pdev)
|
|||
struct device *dev = &pdev->dev;
|
||||
struct decon_context *ctx;
|
||||
struct device_node *i80_if_timings;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
if (!dev->of_node)
|
||||
|
@ -728,16 +727,11 @@ static int decon_probe(struct platform_device *pdev)
|
|||
goto err_iounmap;
|
||||
}
|
||||
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
|
||||
ctx->i80_if ? "lcd_sys" : "vsync");
|
||||
if (!res) {
|
||||
dev_err(dev, "irq request failed.\n");
|
||||
ret = -ENXIO;
|
||||
ret = platform_get_irq_byname(pdev, ctx->i80_if ? "lcd_sys" : "vsync");
|
||||
if (ret < 0)
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
ret = devm_request_irq(dev, res->start, decon_irq_handler,
|
||||
0, "drm_decon", ctx);
|
||||
ret = devm_request_irq(dev, ret, decon_irq_handler, 0, "drm_decon", ctx);
|
||||
if (ret) {
|
||||
dev_err(dev, "irq request failed.\n");
|
||||
goto err_iounmap;
|
||||
|
|
|
@ -1334,8 +1334,10 @@ static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi,
|
|||
int ret;
|
||||
int te_gpio_irq;
|
||||
|
||||
dsi->te_gpio = devm_gpiod_get_optional(dsi->dev, "te", GPIOD_IN);
|
||||
if (IS_ERR(dsi->te_gpio)) {
|
||||
dsi->te_gpio = gpiod_get_optional(panel, "te", GPIOD_IN);
|
||||
if (!dsi->te_gpio) {
|
||||
return 0;
|
||||
} else if (IS_ERR(dsi->te_gpio)) {
|
||||
dev_err(dsi->dev, "gpio request failed with %ld\n",
|
||||
PTR_ERR(dsi->te_gpio));
|
||||
return PTR_ERR(dsi->te_gpio);
|
||||
|
|
|
@ -1267,7 +1267,6 @@ static int fimc_probe(struct platform_device *pdev)
|
|||
struct exynos_drm_ipp_formats *formats;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct fimc_context *ctx;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
int i, j, num_limits, num_formats;
|
||||
|
||||
|
@ -1330,14 +1329,12 @@ static int fimc_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(ctx->regs);
|
||||
|
||||
/* resource irq */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(dev, "failed to request irq resource.\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = devm_request_irq(dev, res->start, fimc_irq_handler,
|
||||
0, dev_name(dev), ctx);
|
||||
ret = devm_request_irq(dev, ret, fimc_irq_handler,
|
||||
0, dev_name(dev), ctx);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "failed to request irq.\n");
|
||||
return ret;
|
||||
|
|
|
@ -1133,7 +1133,6 @@ static int fimd_probe(struct platform_device *pdev)
|
|||
struct device *dev = &pdev->dev;
|
||||
struct fimd_context *ctx;
|
||||
struct device_node *i80_if_timings;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
if (!dev->of_node)
|
||||
|
@ -1206,15 +1205,11 @@ static int fimd_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(ctx->regs))
|
||||
return PTR_ERR(ctx->regs);
|
||||
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
|
||||
ctx->i80_if ? "lcd_sys" : "vsync");
|
||||
if (!res) {
|
||||
dev_err(dev, "irq request failed.\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
ret = platform_get_irq_byname(pdev, ctx->i80_if ? "lcd_sys" : "vsync");
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = devm_request_irq(dev, res->start, fimd_irq_handler,
|
||||
0, "drm_fimd", ctx);
|
||||
ret = devm_request_irq(dev, ret, fimd_irq_handler, 0, "drm_fimd", ctx);
|
||||
if (ret) {
|
||||
dev_err(dev, "irq request failed.\n");
|
||||
return ret;
|
||||
|
|
|
@ -1220,7 +1220,6 @@ static int gsc_probe(struct platform_device *pdev)
|
|||
struct gsc_driverdata *driver_data;
|
||||
struct exynos_drm_ipp_formats *formats;
|
||||
struct gsc_context *ctx;
|
||||
struct resource *res;
|
||||
int num_formats, ret, i, j;
|
||||
|
||||
ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
|
||||
|
@ -1275,13 +1274,10 @@ static int gsc_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(ctx->regs);
|
||||
|
||||
/* resource irq */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
dev_err(dev, "failed to request irq resource.\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
ctx->irq = platform_get_irq(pdev, 0);
|
||||
if (ctx->irq < 0)
|
||||
return ctx->irq;
|
||||
|
||||
ctx->irq = res->start;
|
||||
ret = devm_request_irq(dev, ctx->irq, gsc_irq_handler, 0,
|
||||
dev_name(dev), ctx);
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -809,19 +809,17 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
|
|||
return -ENXIO;
|
||||
}
|
||||
|
||||
res = platform_get_resource(mixer_ctx->pdev, IORESOURCE_IRQ, 0);
|
||||
if (res == NULL) {
|
||||
dev_err(dev, "get interrupt resource failed.\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
ret = platform_get_irq(mixer_ctx->pdev, 0);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
mixer_ctx->irq = ret;
|
||||
|
||||
ret = devm_request_irq(dev, res->start, mixer_irq_handler,
|
||||
0, "drm_mixer", mixer_ctx);
|
||||
ret = devm_request_irq(dev, mixer_ctx->irq, mixer_irq_handler,
|
||||
0, "drm_mixer", mixer_ctx);
|
||||
if (ret) {
|
||||
dev_err(dev, "request interrupt failed.\n");
|
||||
return ret;
|
||||
}
|
||||
mixer_ctx->irq = res->start;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче