From 92f7012d3c74b4d87a236b3a4e4ec394dbb0cdc7 Mon Sep 17 00:00:00 2001 From: Guochun Huang Date: Wed, 6 Dec 2023 04:22:17 +0000 Subject: [PATCH] misc: rk628: post_process: add scaler color_bar debugfs node Enable horizontal color bar echo 1 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar Enable vertical color bar echo 2 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar Disable color bar echo 0 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar Change-Id: Ic47d7edf27f174b16ea1c2841cbf7b9df8c63546 Signed-off-by: Guochun Huang --- drivers/misc/rk628/rk628.c | 2 + drivers/misc/rk628/rk628.h | 2 + drivers/misc/rk628/rk628_post_process.c | 60 +++++++++++++++++++++++++ drivers/misc/rk628/rk628_post_process.h | 2 +- 4 files changed, 65 insertions(+), 1 deletion(-) diff --git a/drivers/misc/rk628/rk628.c b/drivers/misc/rk628/rk628.c index 505c83026860..d8ca0e1956a0 100644 --- a/drivers/misc/rk628/rk628.c +++ b/drivers/misc/rk628/rk628.c @@ -1224,6 +1224,8 @@ static void rk628_debugfs_create(struct rk628 *rk628) /* path example: /sys/kernel/debug/rk628/2-0050/summary */ debugfs_create_file("summary", 0400, rk628->debug_dir, rk628, &rk628_debugfs_summary_fops); + + rk628_post_process_create_debugfs_file(rk628); rk628_mipi_dsi_create_debugfs_file(rk628); } diff --git a/drivers/misc/rk628/rk628.h b/drivers/misc/rk628/rk628.h index da2247bd9966..a9f8a3e152ca 100644 --- a/drivers/misc/rk628/rk628.h +++ b/drivers/misc/rk628/rk628.h @@ -66,6 +66,8 @@ #define GRF_AS_DSIPHY(x) UPDATE(x, 0, 0) #define GRF_SCALER_CON0 0x0010 #define SCL_8_PIXEL_ALIGN(x) HIWORD_UPDATE(x, 12, 12) +#define SCL_COLOR_VER_EN(x) HIWORD_UPDATE(x, 10, 10) +#define SCL_COLOR_BAR_EN(x) HIWORD_UPDATE(x, 9, 9) #define SCL_VER_DOWN_MODE(x) HIWORD_UPDATE(x, 8, 8) #define SCL_HOR_DOWN_MODE(x) HIWORD_UPDATE(x, 7, 7) #define SCL_BIC_COE_SEL(x) HIWORD_UPDATE(x, 6, 5) diff --git a/drivers/misc/rk628/rk628_post_process.c b/drivers/misc/rk628/rk628_post_process.c index 9be54c37e92c..cb5a765b60c3 100644 --- a/drivers/misc/rk628/rk628_post_process.c +++ b/drivers/misc/rk628/rk628_post_process.c @@ -4,6 +4,8 @@ * * Author: Wyon Bi */ + +#include #include "rk628.h" #include "rk628_config.h" #include "rk628_cru.h" @@ -198,6 +200,64 @@ static void rk628_post_process_scaler_init(struct rk628 *rk628, DSP_VBOR_ST(dsp_vbor_st)); } +static int rk628_scaler_color_bar_show(struct seq_file *s, void *data) +{ + seq_puts(s, " Enable horizontal color bar:\n"); + seq_puts(s, " example: echo 1 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar\n"); + seq_puts(s, " Enable vertical color bar:\n"); + seq_puts(s, " example: echo 2 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar\n"); + seq_puts(s, " Disable color bar:\n"); + seq_puts(s, " example: echo 0 > /sys/kernel/debug/rk628/2-0050/scaler_color_bar\n"); + + return 0; +} + +static int rk628_scaler_color_bar_open(struct inode *inode, struct file *file) +{ + return single_open(file, rk628_scaler_color_bar_show, inode->i_private); +} + +static ssize_t rk628_scaler_color_bar_write(struct file *file, const char __user *ubuf, + size_t len, loff_t *offp) +{ + struct rk628 *rk628 = ((struct seq_file *)file->private_data)->private; + u8 mode; + + if (kstrtou8_from_user(ubuf, len, 0, &mode)) + return -EFAULT; + + switch (mode) { + case 0: + rk628_i2c_write(rk628, GRF_SCALER_CON0, SCL_COLOR_BAR_EN(0)); + break; + case 1: + rk628_i2c_write(rk628, GRF_SCALER_CON0, SCL_COLOR_BAR_EN(1)); + rk628_i2c_write(rk628, GRF_SCALER_CON0, SCL_COLOR_VER_EN(0)); + break; + case 2: + default: + rk628_i2c_write(rk628, GRF_SCALER_CON0, SCL_COLOR_BAR_EN(1)); + rk628_i2c_write(rk628, GRF_SCALER_CON0, SCL_COLOR_VER_EN(1)); + } + + return len; +} + +static const struct file_operations rk628_scaler_color_bar_fops = { + .owner = THIS_MODULE, + .open = rk628_scaler_color_bar_open, + .read = seq_read, + .write = rk628_scaler_color_bar_write, + .llseek = seq_lseek, + .release = single_release, +}; + +void rk628_post_process_create_debugfs_file(struct rk628 *rk628) +{ + debugfs_create_file("scaler_color_bar", 0600, rk628->debug_dir, + rk628, &rk628_scaler_color_bar_fops); +} + void rk628_post_process_init(struct rk628 *rk628) { struct rk628_display_mode *src = &rk628->src_mode; diff --git a/drivers/misc/rk628/rk628_post_process.h b/drivers/misc/rk628/rk628_post_process.h index 62a7fd05f8ff..3b0b2b761af8 100644 --- a/drivers/misc/rk628/rk628_post_process.h +++ b/drivers/misc/rk628/rk628_post_process.h @@ -11,5 +11,5 @@ void rk628_post_process_init(struct rk628 *rk628); void rk628_post_process_enable(struct rk628 *rk628); void rk628_post_process_disable(struct rk628 *rk628); - +void rk628_post_process_create_debugfs_file(struct rk628 *rk628); #endif