summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeizhung Ding <weizhungding@google.com>2021-07-12 09:41:37 +0800
committerTreeHugger Robot <treehugger-gerrit@google.com>2021-07-14 03:31:28 +0000
commitc25c90856ba20c77da29fd058cce4d17aa845499 (patch)
tree15b99773cb37b89513e4f76d0d35cfbcdb3f0f34
parent5a368eaaeaed3652f16b8eb7de49eef3890127a7 (diff)
downloaddisplay-c25c90856ba20c77da29fd058cce4d17aa845499.tar.gz
samsung: panel: add set_power function
Add set_power function for panel specific power on/off sequence. Bug: 184105950 Test: suspend/resume Change-Id: I8ed6a58f80edc18c26594831c6ec449a7cdc4a3c Signed-off-by: Weizhung Ding <weizhungding@google.com>
-rw-r--r--samsung/panel/panel-samsung-drv.c26
-rw-r--r--samsung/panel/panel-samsung-drv.h7
2 files changed, 29 insertions, 4 deletions
diff --git a/samsung/panel/panel-samsung-drv.c b/samsung/panel/panel-samsung-drv.c
index f408b5b..76903ba 100644
--- a/samsung/panel/panel-samsung-drv.c
+++ b/samsung/panel/panel-samsung-drv.c
@@ -385,13 +385,10 @@ void exynos_panel_reset(struct exynos_panel *ctx)
}
EXPORT_SYMBOL(exynos_panel_reset);
-int exynos_panel_set_power(struct exynos_panel *ctx, bool on)
+static int _exynos_panel_set_power(struct exynos_panel *ctx, bool on)
{
int ret;
- if (IS_ENABLED(CONFIG_BOARD_EMULATOR))
- return 0;
-
if (on) {
if (ctx->enable_gpio) {
gpiod_set_value(ctx->enable_gpio, 1);
@@ -485,6 +482,27 @@ int exynos_panel_set_power(struct exynos_panel *ctx, bool on)
}
}
+ return 0;
+}
+
+int exynos_panel_set_power(struct exynos_panel *ctx, bool on)
+{
+ const struct exynos_panel_funcs *funcs = ctx->desc->exynos_panel_func;
+ int ret;
+
+ if (IS_ENABLED(CONFIG_BOARD_EMULATOR))
+ return 0;
+
+ if (funcs && funcs->set_power)
+ ret = funcs->set_power(ctx, on);
+ else
+ ret = _exynos_panel_set_power(ctx, on);
+
+ if (ret) {
+ dev_err(ctx->dev, "failed to set power: ret %d \n", ret);
+ return ret;
+ }
+
ctx->bl->props.power = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN;
return 0;
diff --git a/samsung/panel/panel-samsung-drv.h b/samsung/panel/panel-samsung-drv.h
index c88a581..615eaeb 100644
--- a/samsung/panel/panel-samsung-drv.h
+++ b/samsung/panel/panel-samsung-drv.h
@@ -155,6 +155,13 @@ struct exynos_panel_funcs {
void (*set_local_hbm_mode)(struct exynos_panel *exynos_panel,
bool local_hbm_en);
/**
+ * @set_power:
+ *
+ * This callback is used to implement panel specific power on/off sequence.
+ */
+ int (*set_power)(struct exynos_panel *exynos_panel, bool enable);
+
+ /**
* @is_mode_seamless:
*
* This callback is used to check if a switch to a particular mode can be done