/* * nt35950_inject_black_image - Display a completely black image * @dsi_ctx: context for mipi_dsi functions * * After IC setup, the attached panel may show random data * due to driveric behavior changes (resolution, compression, * scaling, etc). This function, called after parameters setup, * makes the driver ic to output a completely black image to * the display. * It makes sense to push a black image before sending the sleep-out * and display-on commands.
*/ staticvoid nt35950_inject_black_image(struct mipi_dsi_multi_context *dsi_ctx)
{ const u8 cmd0_black_img[] = { 0x6f, 0x01 }; const u8 cmd1_black_img[] = { 0xf3, 0x10 };
u8 cmd_test[] = { 0xff, 0xaa, 0x55, 0xa5, 0x80 };
/* Enable test command */
mipi_dsi_dcs_write_buffer_multi(dsi_ctx, cmd_test, ARRAY_SIZE(cmd_test));
/* Send a black image */
mipi_dsi_dcs_write_buffer_multi(dsi_ctx, cmd0_black_img,
ARRAY_SIZE(cmd0_black_img));
mipi_dsi_dcs_write_buffer_multi(dsi_ctx, cmd1_black_img,
ARRAY_SIZE(cmd1_black_img));
if (mode_data[nt->cur_mode].is_video_mode)
cmd_dispout[1] |= MCS_DISP_OUT_VIDEO_MODE; if (mode_data[nt->cur_mode].enable_sram)
cmd_dispout[1] |= MCS_DISP_OUT_SRAM_EN;
/* Return the default (first) mode if no info available yet */ if (!connector->state || !connector->state->crtc) return 0;
crtc_state = connector->state->crtc->state;
for (i = 0; i < nt->desc->num_modes; i++) { if (drm_mode_match(&crtc_state->mode,
&nt->desc->mode_data[i].mode,
DRM_MODE_MATCH_TIMINGS | DRM_MODE_MATCH_CLOCK)) return i;
}
ret = regulator_is_supported_voltage(nt->vregs[0].consumer,
1750000, 1950000); if (!ret) return -EINVAL;
ret = regulator_is_supported_voltage(nt->vregs[1].consumer,
5200000, 5900000); if (!ret) return -EINVAL; /* AVEE is negative: -5.90V to -5.20V */
ret = regulator_is_supported_voltage(nt->vregs[2].consumer,
5200000, 5900000); if (!ret) return -EINVAL;
ret = regulator_is_supported_voltage(nt->vregs[3].consumer,
1300000, 1400000); if (!ret) return -EINVAL;
nt = devm_drm_panel_alloc(dev, struct nt35950, panel, &nt35950_panel_funcs,
DRM_MODE_CONNECTOR_DSI); if (IS_ERR(nt)) return PTR_ERR(nt);
ret = nt35950_sharp_init_vregs(nt, dev); if (ret) return dev_err_probe(dev, ret, "Regulator init failure.\n");
nt->desc = of_device_get_match_data(dev); if (!nt->desc) return -ENODEV;
nt->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); if (IS_ERR(nt->reset_gpio)) { return dev_err_probe(dev, PTR_ERR(nt->reset_gpio), "Failed to get reset gpio\n");
}
/* If the panel is connected on two DSIs then DSI0 left, DSI1 right */ if (nt->desc->is_dual_dsi) {
info = &nt->desc->dsi_info;
dsi_r = of_graph_get_remote_node(dsi->dev.of_node, 1, -1); if (!dsi_r) {
dev_err(dev, "Cannot get secondary DSI node.\n"); return -ENODEV;
}
dsi_r_host = of_find_mipi_dsi_host_by_node(dsi_r);
of_node_put(dsi_r); if (!dsi_r_host) return dev_err_probe(dev, -EPROBE_DEFER, "Cannot get secondary DSI host\n");
nt->dsi[1] = mipi_dsi_device_register_full(dsi_r_host, info); if (IS_ERR(nt->dsi[1])) {
dev_err(dev, "Cannot get secondary DSI node\n"); return PTR_ERR(nt->dsi[1]);
}
num_dsis++;
}
nt->dsi[0] = dsi;
mipi_dsi_set_drvdata(dsi, nt);
ret = drm_panel_of_backlight(&nt->panel); if (ret) { if (num_dsis == 2)
mipi_dsi_device_unregister(nt->dsi[1]);
return dev_err_probe(dev, ret, "Failed to get backlight\n");
}
drm_panel_add(&nt->panel);
for (i = 0; i < num_dsis; i++) {
nt->dsi[i]->lanes = nt->desc->num_lanes;
nt->dsi[i]->format = MIPI_DSI_FMT_RGB888;
if (nt->desc->mode_data[0].is_video_mode)
nt->dsi[i]->mode_flags |= MIPI_DSI_MODE_VIDEO;
ret = mipi_dsi_attach(nt->dsi[i]); if (ret < 0) { /* If we fail to attach to either host, we're done */ if (num_dsis == 2)
mipi_dsi_device_unregister(nt->dsi[1]);
ret = mipi_dsi_detach(nt->dsi[0]); if (ret < 0)
dev_err(&dsi->dev, "Failed to detach from DSI0 host: %d\n", ret);
if (nt->dsi[1]) {
ret = mipi_dsi_detach(nt->dsi[1]); if (ret < 0)
dev_err(&dsi->dev, "Failed to detach from DSI1 host: %d\n", ret);
mipi_dsi_device_unregister(nt->dsi[1]);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.