static void tegra_dc_dsi_enable(struct tegra_dc *dc) { struct tegra_dc_dsi_data *dsi = tegra_dc_get_outdata(dc); int err; tegra_dc_io_start(dc); mutex_lock(&dsi->lock); if (dsi->ulpm) { tegra_dsi_exit_ulpm(dsi); if (dsi->info.panel_reset) { err = tegra_dsi_send_panel_cmd(dc, dsi, dsi->info.dsi_init_cmd, dsi->info.n_init_cmd); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: error while sending dsi init cmd\n"); return; } } } else { err = tegra_dsi_init_hw(dc, dsi); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: not able to init dsi hardware\n"); return; } err = tegra_dsi_set_to_lp_mode(dc, dsi); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: not able to set to lp mode\n"); return; } err = tegra_dsi_send_panel_cmd(dc, dsi, dsi->info.dsi_init_cmd, dsi->info.n_init_cmd); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: error while sending dsi init cmd\n"); return; } err = tegra_dsi_set_to_hs_mode(dc, dsi); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: not able to set to hs mode\n"); return; } } if (dsi->status.driven == DSI_DRIVEN_MODE_DC) { tegra_dsi_start_dc_stream(dc, dsi); } mutex_unlock(&dsi->lock); tegra_dc_io_end(dc); }
static void tegra_dc_dsi_suspend(struct tegra_dc *dc) { struct tegra_dc_dsi_data *dsi; int err; dsi = tegra_dc_get_outdata(dc); tegra_dc_io_start(dc); mutex_lock(&dsi->lock); if (dsi->ulpm) tegra_dsi_exit_ulpm(dsi); err = tegra_dsi_send_panel_cmd(dc, dsi, dsi->info.dsi_suspend_cmd, dsi->info.n_suspend_cmd); if (err < 0) { dev_err(&dc->ndev->dev, "dsi: error while sending dsi suspend cmd\n"); return; } clk_disable(dsi->dsi_clk); mutex_unlock(&dsi->lock); tegra_dc_io_end(dc); }
static int send_backlight_cmd(struct tegra_dsi_bl_data *tbl, int brightness) { int err = 0; struct tegra_dc *dc = tegra_dc_get_dc(tbl->which_dc); struct tegra_dc_dsi_data *dsi = dc->out_data; struct tegra_dsi_cmd *cur_cmd; if (tbl->dsi_backlight_cmd) cur_cmd = tbl->dsi_backlight_cmd; else return -EINVAL; mutex_lock(&dsi->lock); cur_cmd->sp_len_dly.sp.data1 = brightness; err = tegra_dsi_send_panel_cmd(dc, dsi, tbl->dsi_backlight_cmd, tbl->n_backlight_cmd); if (err < 0) goto fail; fail: mutex_unlock(&dsi->lock); return err; }