Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/rockchip: analogix_dp: Expand device data to support multiple edp display

There are two main modifications: one is expanding struct
rockchip_dp_chip_data to an array, and the other is adding
&rockchip_dp_chip_data.reg to separate different edp devices.

Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20250224081325.96724-3-damon.ding@rock-chips.com

authored by

Damon Ding and committed by
Heiko Stuebner
718b3bb9 2bf9f610

+34 -7
+34 -7
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
··· 52 52 * struct rockchip_dp_chip_data - splite the grf setting of kind of chips 53 53 * @lcdc_sel: grf register field of lcdc_sel 54 54 * @chip_type: specific chip type 55 + * @reg: register base address 55 56 */ 56 57 struct rockchip_dp_chip_data { 57 58 const struct rockchip_grf_reg_field lcdc_sel; 58 59 u32 chip_type; 60 + u32 reg; 59 61 }; 60 62 61 63 struct rockchip_dp_device { ··· 398 396 const struct rockchip_dp_chip_data *dp_data; 399 397 struct drm_panel *panel = NULL; 400 398 struct rockchip_dp_device *dp; 399 + struct resource *res; 400 + int i; 401 401 int ret; 402 402 403 403 dp_data = of_device_get_match_data(dev); ··· 414 410 if (!dp) 415 411 return -ENOMEM; 416 412 413 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 414 + 415 + i = 0; 416 + while (dp_data[i].reg) { 417 + if (dp_data[i].reg == res->start) { 418 + dp->data = &dp_data[i]; 419 + break; 420 + } 421 + 422 + i++; 423 + } 424 + 425 + if (!dp->data) 426 + return dev_err_probe(dev, -EINVAL, "no chip-data for %s node\n", 427 + dev->of_node->name); 428 + 417 429 dp->dev = dev; 418 430 dp->adp = ERR_PTR(-ENODEV); 419 - dp->data = dp_data; 420 431 dp->plat_data.panel = panel; 421 432 dp->plat_data.dev_type = dp->data->chip_type; 422 433 dp->plat_data.power_on = rockchip_dp_poweron; ··· 483 464 static DEFINE_RUNTIME_DEV_PM_OPS(rockchip_dp_pm_ops, rockchip_dp_suspend, 484 465 rockchip_dp_resume, NULL); 485 466 486 - static const struct rockchip_dp_chip_data rk3399_edp = { 487 - .lcdc_sel = GRF_REG_FIELD(0x6250, 5, 5), 488 - .chip_type = RK3399_EDP, 467 + static const struct rockchip_dp_chip_data rk3399_edp[] = { 468 + { 469 + .lcdc_sel = GRF_REG_FIELD(0x6250, 5, 5), 470 + .chip_type = RK3399_EDP, 471 + .reg = 0xff970000, 472 + }, 473 + { /* sentinel */ } 489 474 }; 490 475 491 - static const struct rockchip_dp_chip_data rk3288_dp = { 492 - .lcdc_sel = GRF_REG_FIELD(0x025c, 5, 5), 493 - .chip_type = RK3288_DP, 476 + static const struct rockchip_dp_chip_data rk3288_dp[] = { 477 + { 478 + .lcdc_sel = GRF_REG_FIELD(0x025c, 5, 5), 479 + .chip_type = RK3288_DP, 480 + .reg = 0xff970000, 481 + }, 482 + { /* sentinel */ } 494 483 }; 495 484 496 485 static const struct of_device_id rockchip_dp_dt_ids[] = {