From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 03 Jan 2024 09:43:39 +0000 Subject: [PATCH] update kernel to 5.10.198 --- kernel/drivers/mfd/display-serdes/serdes-bridge.c | 62 ++++++++++++++++++------------ 1 files changed, 37 insertions(+), 25 deletions(-) diff --git a/kernel/drivers/mfd/display-serdes/serdes-bridge.c b/kernel/drivers/mfd/display-serdes/serdes-bridge.c index 235d130..6dc82a8 100644 --- a/kernel/drivers/mfd/display-serdes/serdes-bridge.c +++ b/kernel/drivers/mfd/display-serdes/serdes-bridge.c @@ -15,7 +15,7 @@ } static struct mipi_dsi_device *serdes_attach_dsi(struct serdes_bridge *serdes_bridge, - struct device_node *dsi_node) + struct device_node *remote_node) { struct mipi_dsi_device_info info = { "serdes", 0, NULL }; struct serdes *serdes = serdes_bridge->parent; @@ -29,7 +29,7 @@ SERDES_DBG_MFD("%s: type=%s, name=%s\n", __func__, info.type, serdes->chip_data->name); - host = of_find_mipi_dsi_host_by_node(dsi_node); + host = of_find_mipi_dsi_host_by_node(remote_node); if (!host) { dev_err(serdes_bridge->dev, "failed to find serdes dsi host\n"); return ERR_PTR(-EPROBE_DEFER); @@ -49,13 +49,17 @@ (!strcmp(serdes->chip_data->name, "bu18rl82"))) { dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET; - SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n", - __func__, dsi->mode_flags); + SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n", + __func__, serdes->chip_data->name, dsi->mode_flags); + } else { + dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; + SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n", + __func__, serdes->chip_data->name, dsi->mode_flags); } } else { dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; - SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n", - __func__, dsi->mode_flags); + SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n", + __func__, serdes->chip_data->name, dsi->mode_flags); } ret = mipi_dsi_attach(dsi); @@ -86,7 +90,7 @@ dev_info(serdes_bridge->dev->parent, "serdes sel_mipi %d\n", serdes_bridge->sel_mipi); /* Attach primary DSI */ - serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->dsi_node); + serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->remote_node); if (IS_ERR(serdes_bridge->dsi)) return PTR_ERR(serdes_bridge->dsi); } @@ -167,14 +171,17 @@ if (serdes->chip_data->bridge_ops->init) ret = serdes->chip_data->bridge_ops->init(serdes); - if (serdes->chip_data->serdes_type == TYPE_DES) - serdes_i2c_set_sequence(serdes); - - if (serdes_bridge->panel) - ret = drm_panel_prepare(serdes_bridge->panel); + if (serdes->chip_data->serdes_type == TYPE_DES) { + if (serdes->chip_data->chip_init) + serdes->chip_data->chip_init(serdes); + ret = serdes_i2c_set_sequence(serdes); + } if (serdes->chip_data->bridge_ops->pre_enable) ret = serdes->chip_data->bridge_ops->pre_enable(serdes); + + if (serdes_bridge->panel) + ret = drm_panel_prepare(serdes_bridge->panel); serdes_set_pinctrl_default(serdes); @@ -198,7 +205,8 @@ SERDES_DBG_MFD("%s: extcon is true\n", __func__); } - SERDES_DBG_MFD("%s: %s ret=%d\n", __func__, dev_name(serdes->dev), ret); + SERDES_DBG_MFD("%s: %s-%s ret=%d\n", __func__, dev_name(serdes->dev), + serdes->chip_data->name, ret); } static enum drm_connector_status @@ -230,8 +238,8 @@ if (serdes_bridge->panel) ret = drm_panel_get_modes(serdes_bridge->panel, connector); - SERDES_DBG_MFD("%s:name=%s, type=%d\n", __func__, - serdes->chip_data->name, serdes->type); + SERDES_DBG_MFD("%s:name=%s, node=%s\n", __func__, + serdes->chip_data->name, serdes_bridge->dev->of_node->name); return ret; } @@ -273,17 +281,22 @@ return dev_err_probe(dev, -ENODEV, "failed to get serdes regmap\n"); serdes_bridge->sel_mipi = of_property_read_bool(dev->parent->of_node, "sel-mipi"); - if (serdes_bridge->sel_mipi) { - serdes_bridge->dsi_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1); - if (!serdes_bridge->dsi_node) - return dev_err_probe(dev->parent, -ENODEV, - "failed to get remote node for serdes dsi\n"); + SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi); - SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi); + serdes_bridge->base_bridge.of_node = dev->parent->of_node; + serdes_bridge->remote_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1); + if (!serdes_bridge->remote_node) { + serdes_bridge->base_bridge.of_node = dev->of_node; + SERDES_DBG_MFD("warning: failed to get remote node for serdes on %s\n", + dev_name(dev->parent)); + serdes_bridge->remote_node = of_graph_get_remote_node(dev->of_node, 0, -1); + if (!serdes_bridge->remote_node) { + return dev_err_probe(dev, -ENODEV, + "failed to get remote node for serdes dsi\n"); + } } serdes_bridge->base_bridge.funcs = &serdes_bridge_funcs; - serdes_bridge->base_bridge.of_node = dev->parent->of_node; serdes_bridge->base_bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_MODES; if (serdes_bridge->sel_mipi) { @@ -291,7 +304,7 @@ SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_DSI\n", __func__); } else if (serdes_bridge->parent->chip_data->connector_type) { serdes_bridge->base_bridge.type = serdes_bridge->parent->chip_data->connector_type; - SERDES_DBG_MFD("%s: type 0x%x\n", __func__, serdes_bridge->base_bridge.type); + SERDES_DBG_MFD("%s: type %d\n", __func__, serdes_bridge->base_bridge.type); } else { serdes_bridge->base_bridge.type = DRM_MODE_CONNECTOR_eDP; SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_LVDS\n", __func__); @@ -319,9 +332,8 @@ { .compatible = "rohm,bu18tl82-bridge", }, { .compatible = "rohm,bu18rl82-bridge", }, { .compatible = "maxim,max96745-bridge", }, - { .compatible = "maxim,max96752-bridge", }, { .compatible = "maxim,max96755-bridge", }, - { .compatible = "maxim,max96772-bridge", }, + { .compatible = "maxim,max96789-bridge", }, { .compatible = "rockchip,rkx111-bridge", }, { .compatible = "rockchip,rkx121-bridge", }, { } -- Gitblit v1.6.2