hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mfd/display-serdes/serdes-bridge.c
....@@ -15,7 +15,7 @@
1515 }
1616
1717 static struct mipi_dsi_device *serdes_attach_dsi(struct serdes_bridge *serdes_bridge,
18
- struct device_node *dsi_node)
18
+ struct device_node *remote_node)
1919 {
2020 struct mipi_dsi_device_info info = { "serdes", 0, NULL };
2121 struct serdes *serdes = serdes_bridge->parent;
....@@ -29,7 +29,7 @@
2929 SERDES_DBG_MFD("%s: type=%s, name=%s\n", __func__,
3030 info.type, serdes->chip_data->name);
3131
32
- host = of_find_mipi_dsi_host_by_node(dsi_node);
32
+ host = of_find_mipi_dsi_host_by_node(remote_node);
3333 if (!host) {
3434 dev_err(serdes_bridge->dev, "failed to find serdes dsi host\n");
3535 return ERR_PTR(-EPROBE_DEFER);
....@@ -49,13 +49,17 @@
4949 (!strcmp(serdes->chip_data->name, "bu18rl82"))) {
5050 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
5151 MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET;
52
- SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n",
53
- __func__, dsi->mode_flags);
52
+ SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n",
53
+ __func__, serdes->chip_data->name, dsi->mode_flags);
54
+ } else {
55
+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
56
+ SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
57
+ __func__, serdes->chip_data->name, dsi->mode_flags);
5458 }
5559 } else {
5660 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
57
- SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
58
- __func__, dsi->mode_flags);
61
+ SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
62
+ __func__, serdes->chip_data->name, dsi->mode_flags);
5963 }
6064
6165 ret = mipi_dsi_attach(dsi);
....@@ -86,7 +90,7 @@
8690 dev_info(serdes_bridge->dev->parent, "serdes sel_mipi %d\n",
8791 serdes_bridge->sel_mipi);
8892 /* Attach primary DSI */
89
- serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->dsi_node);
93
+ serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->remote_node);
9094 if (IS_ERR(serdes_bridge->dsi))
9195 return PTR_ERR(serdes_bridge->dsi);
9296 }
....@@ -167,14 +171,17 @@
167171 if (serdes->chip_data->bridge_ops->init)
168172 ret = serdes->chip_data->bridge_ops->init(serdes);
169173
170
- if (serdes->chip_data->serdes_type == TYPE_DES)
171
- serdes_i2c_set_sequence(serdes);
172
-
173
- if (serdes_bridge->panel)
174
- ret = drm_panel_prepare(serdes_bridge->panel);
174
+ if (serdes->chip_data->serdes_type == TYPE_DES) {
175
+ if (serdes->chip_data->chip_init)
176
+ serdes->chip_data->chip_init(serdes);
177
+ ret = serdes_i2c_set_sequence(serdes);
178
+ }
175179
176180 if (serdes->chip_data->bridge_ops->pre_enable)
177181 ret = serdes->chip_data->bridge_ops->pre_enable(serdes);
182
+
183
+ if (serdes_bridge->panel)
184
+ ret = drm_panel_prepare(serdes_bridge->panel);
178185
179186 serdes_set_pinctrl_default(serdes);
180187
....@@ -198,7 +205,8 @@
198205 SERDES_DBG_MFD("%s: extcon is true\n", __func__);
199206 }
200207
201
- SERDES_DBG_MFD("%s: %s ret=%d\n", __func__, dev_name(serdes->dev), ret);
208
+ SERDES_DBG_MFD("%s: %s-%s ret=%d\n", __func__, dev_name(serdes->dev),
209
+ serdes->chip_data->name, ret);
202210 }
203211
204212 static enum drm_connector_status
....@@ -230,8 +238,8 @@
230238 if (serdes_bridge->panel)
231239 ret = drm_panel_get_modes(serdes_bridge->panel, connector);
232240
233
- SERDES_DBG_MFD("%s:name=%s, type=%d\n", __func__,
234
- serdes->chip_data->name, serdes->type);
241
+ SERDES_DBG_MFD("%s:name=%s, node=%s\n", __func__,
242
+ serdes->chip_data->name, serdes_bridge->dev->of_node->name);
235243
236244 return ret;
237245 }
....@@ -273,17 +281,22 @@
273281 return dev_err_probe(dev, -ENODEV, "failed to get serdes regmap\n");
274282
275283 serdes_bridge->sel_mipi = of_property_read_bool(dev->parent->of_node, "sel-mipi");
276
- if (serdes_bridge->sel_mipi) {
277
- serdes_bridge->dsi_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1);
278
- if (!serdes_bridge->dsi_node)
279
- return dev_err_probe(dev->parent, -ENODEV,
280
- "failed to get remote node for serdes dsi\n");
284
+ SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi);
281285
282
- SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi);
286
+ serdes_bridge->base_bridge.of_node = dev->parent->of_node;
287
+ serdes_bridge->remote_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1);
288
+ if (!serdes_bridge->remote_node) {
289
+ serdes_bridge->base_bridge.of_node = dev->of_node;
290
+ SERDES_DBG_MFD("warning: failed to get remote node for serdes on %s\n",
291
+ dev_name(dev->parent));
292
+ serdes_bridge->remote_node = of_graph_get_remote_node(dev->of_node, 0, -1);
293
+ if (!serdes_bridge->remote_node) {
294
+ return dev_err_probe(dev, -ENODEV,
295
+ "failed to get remote node for serdes dsi\n");
296
+ }
283297 }
284298
285299 serdes_bridge->base_bridge.funcs = &serdes_bridge_funcs;
286
- serdes_bridge->base_bridge.of_node = dev->parent->of_node;
287300 serdes_bridge->base_bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_MODES;
288301
289302 if (serdes_bridge->sel_mipi) {
....@@ -291,7 +304,7 @@
291304 SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_DSI\n", __func__);
292305 } else if (serdes_bridge->parent->chip_data->connector_type) {
293306 serdes_bridge->base_bridge.type = serdes_bridge->parent->chip_data->connector_type;
294
- SERDES_DBG_MFD("%s: type 0x%x\n", __func__, serdes_bridge->base_bridge.type);
307
+ SERDES_DBG_MFD("%s: type %d\n", __func__, serdes_bridge->base_bridge.type);
295308 } else {
296309 serdes_bridge->base_bridge.type = DRM_MODE_CONNECTOR_eDP;
297310 SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_LVDS\n", __func__);
....@@ -319,9 +332,8 @@
319332 { .compatible = "rohm,bu18tl82-bridge", },
320333 { .compatible = "rohm,bu18rl82-bridge", },
321334 { .compatible = "maxim,max96745-bridge", },
322
- { .compatible = "maxim,max96752-bridge", },
323335 { .compatible = "maxim,max96755-bridge", },
324
- { .compatible = "maxim,max96772-bridge", },
336
+ { .compatible = "maxim,max96789-bridge", },
325337 { .compatible = "rockchip,rkx111-bridge", },
326338 { .compatible = "rockchip,rkx121-bridge", },
327339 { }