| // SPDX-License-Identifier: (GPL-2.0+ OR MIT) |
| /* |
| * Copyright (c) 2019 Amlogic, Inc. All rights reserved. |
| */ |
| |
| #include <linux/types.h> |
| #include <linux/init.h> |
| #include <linux/module.h> |
| #include <linux/kernel.h> |
| #include <linux/errno.h> |
| #include <linux/debugfs.h> |
| #include <linux/uaccess.h> |
| #include <linux/amlogic/media/amvecm/amvecm.h> |
| #include <linux/amlogic/media/amvecm/hdr10_tmo_alg.h> |
| |
| #include "am_hdr10_tm.h" |
| #include "am_hdr10_tmo_fw.h" |
| #include "../set_hdr2_v0.h" |
| |
| static int pr_tmo_en; |
| module_param(pr_tmo_en, int, 0664); |
| MODULE_PARM_DESC(pr_tmo_en, "\n pr_tmo_en\n"); |
| |
| #define pr_tmo_dbg(fmt, args...)\ |
| do {\ |
| if (pr_tmo_en)\ |
| pr_info("HDR10_TMO: " fmt, ##args);\ |
| } while (0) |
| |
| static unsigned int eo_lut_28[143] = { |
| 0, 1, 4, 7, 12, 17, 24, 31, 39, 49, 59, 71, 83, 97, |
| 111, 127, 144, 320, 578, 931, 1392, 1977, 2701, 3582, |
| 4638, 5891, 7362, 9076, 11058, 13337, 15942, 18907, |
| 22266, 26058, 30324, 35106, 40454, 46418, 53052, 60415, |
| 68572, 77590, 87542, 98508, 110570, 123821, 138356, 154282, |
| 171708, 190757, 211556, 234243, 258967, 285886, 315170, 347002, |
| 381578, 419105, 459810, 503932, 551729, 603476, 659470, 720026, |
| 785484, 856207, 932584, 1015032, 1103997, 1199956, 1303424, |
| 1414947, 1535113, 1664552, 1803938, 1953994, 2115494, 2289267, |
| 2476202, 2677251, 2893435, 3125848, 3375662, 3644136, 3932616, |
| 4242547, 4575481, 4933078, 5317122, 5729526, 6172341, 6647771, |
| 7158178, 7706100, 8294261, 8925586, 9603216, 10330526, 11111139, |
| 11948953, 12848153, 13813241, 14849055, 15960799, 17154072, 18434897, |
| 19809755, 21285624, 22870015, 24571018, 26397348, 28358395, 30464279, |
| 32725910, 35155053, 37764399, 40567642, 43579559, 46816107, 50294518, |
| 54033406, 58052888, 62374710, 67022388, 72021358, 77399146, 83185550, |
| 89412833, 96115952, 103332784, 111104394, 119475320, 128493881, 138212527, |
| 148688209, 159982795, 172163524, 185303500, 199482248, 214786307, |
| 231309901, 249155666, 268435456 |
| }; |
| |
| struct aml_tmo_reg_sw tmo_reg = { |
| .tmo_en = 1, |
| .reg_highlight = 185, |
| .reg_light_th = 110, |
| .reg_hist_th = 120, |
| .reg_highlight_th1 = 70, |
| .reg_highlight_th2 = 12, |
| .reg_display_e = 700, |
| .reg_middle_a = 102, |
| .reg_middle_a_adj = 315, |
| .reg_middle_b = 27, |
| .reg_middle_s = 64, |
| .reg_max_th1 = 50, |
| .reg_middle_th = 500, |
| .reg_thold1 = 300, |
| .reg_thold2 = 30, |
| .reg_thold3 = 100, |
| .reg_thold4 = 250, |
| .reg_max_th2 = 18, |
| .reg_pnum_th = 5000, |
| .reg_hl0 = 60, |
| .reg_hl1 = 38, |
| .reg_hl2 = 102, |
| .reg_hl3 = 80, |
| .reg_display_adj = 115, |
| .reg_low_adj = 38, |
| .reg_high_en = 2, |
| .reg_high_adj1 = 13, |
| .reg_high_adj2 = 77, |
| .reg_high_maxdiff = 64, |
| .reg_high_mindiff = 8, |
| .reg_avg_th = 0, |
| .reg_avg_adj = 150, |
| .alpha = 250, |
| .eo_lut = eo_lut_28, |
| |
| /*param for alg func*/ |
| .w = 3840, |
| .h = 2160, |
| .oo_gain = NULL, |
| .pre_hdr10_tmo_alg = NULL, |
| }; |
| |
| void change_param(int val) |
| { |
| if (val == 0 || val == 1) { |
| tmo_reg.reg_highlight = 185; |
| tmo_reg.reg_middle_a = 102; |
| tmo_reg.reg_low_adj = 38; |
| tmo_reg.reg_hl0 = 60; |
| tmo_reg.reg_hl1 = 38; |
| tmo_reg.reg_hl2 = 102; |
| tmo_reg.reg_hl3 = 80; |
| } else if (val == 2) { |
| tmo_reg.reg_highlight = 832; |
| tmo_reg.reg_middle_a = 80; |
| tmo_reg.reg_low_adj = 30; |
| tmo_reg.reg_hl0 = 40; |
| tmo_reg.reg_hl1 = 60; |
| tmo_reg.reg_hl2 = 80; |
| tmo_reg.reg_hl3 = 90; |
| } |
| pr_info("tmo_reg changed from %d to %d\n", tmo_reg.tmo_en, val); |
| } |
| |
| void hdr10_tmo_reg_set(struct hdr_tmo_sw *pre_tmo_reg) |
| { |
| if (!pre_tmo_reg) { |
| pr_tmo_dbg("pre_tmo_reg is NULL\n"); |
| pr_tmo_en = 0; |
| return; |
| } |
| |
| pr_tmo_dbg("tmo_en = %d\n", pre_tmo_reg->tmo_en); |
| pr_tmo_dbg("reg_highlight = %d\n", pre_tmo_reg->reg_highlight); |
| pr_tmo_dbg("reg_light_th = %d\n", pre_tmo_reg->reg_light_th); |
| pr_tmo_dbg("reg_hist_th = %d\n", pre_tmo_reg->reg_hist_th); |
| pr_tmo_dbg("reg_highlight_th1 = %d\n", pre_tmo_reg->reg_highlight_th1); |
| pr_tmo_dbg("reg_highlight_th2 = %d\n", pre_tmo_reg->reg_highlight_th2); |
| pr_tmo_dbg("reg_display_e = %d\n", pre_tmo_reg->reg_display_e); |
| pr_tmo_dbg("reg_middle_a = %d\n", pre_tmo_reg->reg_middle_a); |
| pr_tmo_dbg("reg_middle_a_adj = %d\n", pre_tmo_reg->reg_middle_a_adj); |
| pr_tmo_dbg("reg_middle_b = %d\n", pre_tmo_reg->reg_middle_b); |
| pr_tmo_dbg("reg_middle_s = %d\n", pre_tmo_reg->reg_middle_s); |
| pr_tmo_dbg("reg_max_th1 = %d\n", pre_tmo_reg->reg_max_th1); |
| pr_tmo_dbg("reg_middle_th = %d\n", pre_tmo_reg->reg_middle_th); |
| pr_tmo_dbg("reg_thold2 = %d\n", pre_tmo_reg->reg_thold2); |
| pr_tmo_dbg("reg_thold3 = %d\n", pre_tmo_reg->reg_thold3); |
| pr_tmo_dbg("reg_thold4 = %d\n", pre_tmo_reg->reg_thold4); |
| pr_tmo_dbg("reg_thold1 = %d\n", pre_tmo_reg->reg_thold1); |
| pr_tmo_dbg("reg_max_th2 = %d\n", pre_tmo_reg->reg_max_th2); |
| pr_tmo_dbg("reg_pnum_th = %d\n", pre_tmo_reg->reg_pnum_th); |
| pr_tmo_dbg("reg_hl0 = %d\n", pre_tmo_reg->reg_hl0); |
| pr_tmo_dbg("reg_hl1 = %d\n", pre_tmo_reg->reg_hl1); |
| pr_tmo_dbg("reg_hl2 = %d\n", pre_tmo_reg->reg_hl2); |
| pr_tmo_dbg("reg_hl3 = %d\n", pre_tmo_reg->reg_hl3); |
| pr_tmo_dbg("reg_display_adj = %d\n", pre_tmo_reg->reg_display_adj); |
| pr_tmo_dbg("reg_low_adj = %d\n", pre_tmo_reg->reg_low_adj); |
| pr_tmo_dbg("reg_high_en = %d\n", pre_tmo_reg->reg_high_en); |
| pr_tmo_dbg("reg_high_adj1 = %d\n", pre_tmo_reg->reg_high_adj1); |
| pr_tmo_dbg("reg_high_adj2 = %d\n", pre_tmo_reg->reg_high_adj2); |
| pr_tmo_dbg("reg_high_maxdiff = %d\n", pre_tmo_reg->reg_high_maxdiff); |
| pr_tmo_dbg("reg_high_mindiff = %d\n", pre_tmo_reg->reg_high_mindiff); |
| pr_tmo_dbg("reg_avg_th = %d\n", pre_tmo_reg->reg_avg_th); |
| pr_tmo_dbg("reg_avg_adj = %d\n", pre_tmo_reg->reg_avg_adj); |
| pr_tmo_dbg("alpha = %d\n", pre_tmo_reg->alpha); |
| |
| if (tmo_reg.tmo_en != pre_tmo_reg->tmo_en) |
| change_param((int)pre_tmo_reg->tmo_en); |
| tmo_reg.tmo_en = pre_tmo_reg->tmo_en; |
| tmo_reg.reg_highlight = pre_tmo_reg->reg_highlight; |
| tmo_reg.reg_hist_th = pre_tmo_reg->reg_hist_th; |
| tmo_reg.reg_light_th = pre_tmo_reg->reg_light_th; |
| tmo_reg.reg_highlight_th1 = pre_tmo_reg->reg_highlight_th1; |
| tmo_reg.reg_highlight_th2 = pre_tmo_reg->reg_highlight_th2; |
| tmo_reg.reg_display_e = pre_tmo_reg->reg_display_e; |
| tmo_reg.reg_middle_a = pre_tmo_reg->reg_middle_a; |
| tmo_reg.reg_middle_a_adj = pre_tmo_reg->reg_middle_a_adj; |
| tmo_reg.reg_middle_b = pre_tmo_reg->reg_middle_b; |
| tmo_reg.reg_middle_s = pre_tmo_reg->reg_middle_s; |
| tmo_reg.reg_max_th1 = pre_tmo_reg->reg_max_th1; |
| tmo_reg.reg_middle_th = pre_tmo_reg->reg_middle_th; |
| tmo_reg.reg_thold1 = pre_tmo_reg->reg_thold1; |
| tmo_reg.reg_thold2 = pre_tmo_reg->reg_thold2; |
| tmo_reg.reg_thold3 = pre_tmo_reg->reg_thold3; |
| tmo_reg.reg_thold4 = pre_tmo_reg->reg_thold4; |
| tmo_reg.reg_max_th2 = pre_tmo_reg->reg_max_th2; |
| tmo_reg.reg_pnum_th = pre_tmo_reg->reg_pnum_th; |
| tmo_reg.reg_hl0 = pre_tmo_reg->reg_hl0; |
| tmo_reg.reg_hl1 = pre_tmo_reg->reg_hl1; |
| tmo_reg.reg_hl2 = pre_tmo_reg->reg_hl2; |
| tmo_reg.reg_hl3 = pre_tmo_reg->reg_hl3; |
| tmo_reg.reg_display_adj = pre_tmo_reg->reg_display_adj; |
| tmo_reg.reg_avg_th = pre_tmo_reg->reg_avg_th; |
| tmo_reg.reg_avg_adj = pre_tmo_reg->reg_avg_adj; |
| tmo_reg.reg_low_adj = pre_tmo_reg->reg_low_adj; |
| tmo_reg.reg_high_en = pre_tmo_reg->reg_high_en; |
| tmo_reg.reg_high_adj1 = pre_tmo_reg->reg_high_adj1; |
| tmo_reg.reg_high_adj2 = pre_tmo_reg->reg_high_adj2; |
| tmo_reg.reg_high_maxdiff = pre_tmo_reg->reg_high_maxdiff; |
| tmo_reg.reg_high_mindiff = pre_tmo_reg->reg_high_mindiff; |
| tmo_reg.alpha = pre_tmo_reg->alpha; |
| } |
| |
| // struct hdr_tmo_sw pre_tmo_reg_s; |
| void hdr10_tmo_reg_get(struct hdr_tmo_sw *pre_tmo_reg_s) |
| { |
| pre_tmo_reg_s->tmo_en = tmo_reg.tmo_en; |
| pre_tmo_reg_s->reg_highlight = tmo_reg.reg_highlight; |
| pre_tmo_reg_s->reg_hist_th = tmo_reg.reg_hist_th; |
| pre_tmo_reg_s->reg_light_th = tmo_reg.reg_light_th; |
| pre_tmo_reg_s->reg_highlight_th1 = tmo_reg.reg_highlight_th1; |
| pre_tmo_reg_s->reg_highlight_th2 = tmo_reg.reg_highlight_th2; |
| pre_tmo_reg_s->reg_display_e = tmo_reg.reg_display_e; |
| pre_tmo_reg_s->reg_middle_a = tmo_reg.reg_middle_a; |
| pre_tmo_reg_s->reg_middle_a_adj = tmo_reg.reg_middle_a_adj; |
| pre_tmo_reg_s->reg_middle_b = tmo_reg.reg_middle_b; |
| pre_tmo_reg_s->reg_middle_s = tmo_reg.reg_middle_s; |
| pre_tmo_reg_s->reg_max_th1 = tmo_reg.reg_max_th1; |
| pre_tmo_reg_s->reg_middle_th = tmo_reg.reg_middle_th; |
| pre_tmo_reg_s->reg_thold1 = tmo_reg.reg_thold1; |
| pre_tmo_reg_s->reg_thold2 = tmo_reg.reg_thold2; |
| pre_tmo_reg_s->reg_thold3 = tmo_reg.reg_thold3; |
| pre_tmo_reg_s->reg_thold4 = tmo_reg.reg_thold4; |
| pre_tmo_reg_s->reg_max_th2 = tmo_reg.reg_max_th2; |
| pre_tmo_reg_s->reg_pnum_th = tmo_reg.reg_pnum_th; |
| pre_tmo_reg_s->reg_hl0 = tmo_reg.reg_hl0; |
| pre_tmo_reg_s->reg_hl1 = tmo_reg.reg_hl1; |
| pre_tmo_reg_s->reg_hl2 = tmo_reg.reg_hl2; |
| pre_tmo_reg_s->reg_hl3 = tmo_reg.reg_hl3; |
| pre_tmo_reg_s->reg_display_adj = tmo_reg.reg_display_adj; |
| pre_tmo_reg_s->reg_avg_th = tmo_reg.reg_avg_th; |
| pre_tmo_reg_s->reg_avg_adj = tmo_reg.reg_avg_adj; |
| pre_tmo_reg_s->reg_low_adj = tmo_reg.reg_low_adj; |
| pre_tmo_reg_s->reg_high_en = tmo_reg.reg_high_en; |
| pre_tmo_reg_s->reg_high_adj1 = tmo_reg.reg_high_adj1; |
| pre_tmo_reg_s->reg_high_adj2 = tmo_reg.reg_high_adj2; |
| pre_tmo_reg_s->reg_high_maxdiff = tmo_reg.reg_high_maxdiff; |
| pre_tmo_reg_s->reg_high_mindiff = tmo_reg.reg_high_mindiff; |
| pre_tmo_reg_s->alpha = tmo_reg.alpha; |
| } |
| |
| struct aml_tmo_reg_sw *tmo_fw_param_get(void) |
| { |
| return &tmo_reg; |
| }; |
| EXPORT_SYMBOL(tmo_fw_param_get); |
| |
| void hdr10_tmo_gen(u32 *oo_gain) |
| { |
| struct aml_tmo_reg_sw *pre_tmo_reg; |
| |
| pre_tmo_reg = tmo_fw_param_get(); |
| if (!pre_tmo_reg->pre_hdr10_tmo_alg) |
| pr_tmo_dbg("%s: hdr10_tmo alg func is NULL\n", __func__); |
| else |
| tmo_reg.pre_hdr10_tmo_alg(pre_tmo_reg, oo_gain, hdr_hist[15]); |
| } |
| |
| void hdr10_tmo_parm_show(void) |
| { |
| pr_info("tmo_en = %d\n", tmo_reg.tmo_en); |
| pr_info("reg_highlight = %d\n", tmo_reg.reg_highlight); |
| pr_info("reg_light_th = %d\n", tmo_reg.reg_light_th); |
| pr_info("reg_hist_th = %d\n", tmo_reg.reg_hist_th); |
| pr_info("reg_highlight_th1 = %d\n", tmo_reg.reg_highlight_th1); |
| pr_info("reg_highlight_th2 = %d\n", tmo_reg.reg_highlight_th2); |
| pr_info("reg_display_e = %d\n", tmo_reg.reg_display_e); |
| pr_info("reg_middle_a = %d\n", tmo_reg.reg_middle_a); |
| pr_info("reg_middle_a_adj = %d\n", tmo_reg.reg_middle_a_adj); |
| pr_info("reg_middle_b = %d\n", tmo_reg.reg_middle_b); |
| pr_info("reg_middle_s = %d\n", tmo_reg.reg_middle_s); |
| pr_info("reg_max_th1 = %d\n", tmo_reg.reg_max_th1); |
| pr_info("reg_middle_th = %d\n", tmo_reg.reg_middle_th); |
| pr_info("reg_thold2 = %d\n", tmo_reg.reg_thold2); |
| pr_info("reg_thold3 = %d\n", tmo_reg.reg_thold3); |
| pr_info("reg_thold4 = %d\n", tmo_reg.reg_thold4); |
| pr_info("reg_thold1 = %d\n", tmo_reg.reg_thold1); |
| pr_info("reg_max_th2 = %d\n", tmo_reg.reg_max_th2); |
| pr_info("reg_pnum_th = %d\n", tmo_reg.reg_pnum_th); |
| pr_info("reg_hl0 = %d\n", tmo_reg.reg_hl0); |
| pr_info("reg_hl1 = %d\n", tmo_reg.reg_hl1); |
| pr_info("reg_hl2 = %d\n", tmo_reg.reg_hl2); |
| pr_info("reg_hl3 = %d\n", tmo_reg.reg_hl3); |
| pr_info("reg_display_adj = %d\n", tmo_reg.reg_display_adj); |
| pr_info("reg_low_adj = %d\n", tmo_reg.reg_low_adj); |
| pr_info("reg_high_en = %d\n", tmo_reg.reg_high_en); |
| pr_info("reg_high_adj1 = %d\n", tmo_reg.reg_high_adj1); |
| pr_info("reg_high_adj2 = %d\n", tmo_reg.reg_high_adj2); |
| pr_info("reg_high_maxdiff = %d\n", tmo_reg.reg_high_maxdiff); |
| pr_info("reg_high_mindiff = %d\n", tmo_reg.reg_high_mindiff); |
| pr_info("reg_avg_th = %d\n", tmo_reg.reg_avg_th); |
| pr_info("reg_avg_adj = %d\n", tmo_reg.reg_avg_adj); |
| pr_info("alpha = %d\n", tmo_reg.alpha); |
| } |
| |
| int hdr10_tmo_dbg(char **parm) |
| { |
| long val; |
| |
| if (!strcmp(parm[0], "tmo_en")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| if (tmo_reg.tmo_en != (int)val) |
| change_param((int)val); |
| tmo_reg.tmo_en = (int)val; |
| pr_tmo_dbg("tmo_en = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "highlight")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_highlight = (int)val; |
| pr_tmo_dbg("reg_highlight = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "light_th")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_light_th = (int)val; |
| pr_tmo_dbg("reg_light_th = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "hist_th")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_hist_th = (int)val; |
| pr_tmo_dbg("reg_hist_th = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "highlight_th1")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_highlight_th1 = (int)val; |
| pr_tmo_dbg("reg_highlight_th1 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "highlight_th2")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_highlight_th2 = (int)val; |
| pr_tmo_dbg("reg_highlight_th2 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "display_e")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_display_e = (int)val; |
| pr_tmo_dbg("reg_display_e = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "middle_a")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_middle_a = (int)val; |
| pr_tmo_dbg("reg_middle_a = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "middle_a_adj")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_middle_a_adj = (int)val; |
| pr_tmo_dbg("reg_middle_a_adj = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "middle_b")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_middle_b = (int)val; |
| pr_tmo_dbg("reg_middle_b = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "middle_s")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_middle_s = (int)val; |
| pr_tmo_dbg("reg_middle_s = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "max_th1")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_max_th1 = (int)val; |
| pr_tmo_dbg("reg_max_th1 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "max_th2")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_max_th2 = (int)val; |
| pr_tmo_dbg("reg_max_th2 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "middle_th")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_middle_th = (int)val; |
| pr_tmo_dbg("reg_middle_th = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "thold1")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_thold1 = (int)val; |
| pr_tmo_dbg("reg_thold1 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "thold2")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_thold2 = (int)val; |
| pr_tmo_dbg("reg_thold2 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "thold3")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_thold3 = (int)val; |
| pr_tmo_dbg("reg_thold3 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "thold4")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_thold4 = (int)val; |
| pr_tmo_dbg("reg_thold4 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "pnum_th")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_pnum_th = (int)val; |
| pr_tmo_dbg("reg_pnum_th = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "hl0")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_hl0 = (int)val; |
| pr_tmo_dbg("reg_hl0 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "hl1")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_hl1 = (int)val; |
| pr_tmo_dbg("reg_hl1 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "hl2")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_hl2 = (int)val; |
| pr_tmo_dbg("reg_hl2 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "hl3")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_hl3 = (int)val; |
| pr_tmo_dbg("reg_hl3 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "display_adj")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_display_adj = (int)val; |
| pr_tmo_dbg("reg_display_adj = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "low_adj")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_low_adj = (int)val; |
| pr_tmo_dbg("reg_low_adj = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "high_en")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_high_en = (int)val; |
| pr_tmo_dbg("reg_high_en = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "high_adj1")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_high_adj1 = (int)val; |
| pr_tmo_dbg("reg_high_adj1 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "high_adj2")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_high_adj2 = (int)val; |
| pr_tmo_dbg("reg_high_adj2 = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "high_maxdiff")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_high_maxdiff = (int)val; |
| pr_tmo_dbg("reg_high_maxdiff = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "high_mindiff")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_high_mindiff = (int)val; |
| pr_tmo_dbg("reg_high_mindiff = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "avg_th")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_avg_th = (int)val; |
| pr_tmo_dbg("reg_avg_th = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "avg_adj")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.reg_avg_adj = (int)val; |
| pr_tmo_dbg("reg_avg_adj = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "alpha")) { |
| if (kstrtoul(parm[1], 10, &val) < 0) |
| goto error; |
| tmo_reg.alpha = (int)val; |
| pr_tmo_dbg("alpha = %d\n", (int)val); |
| pr_info("\n"); |
| } else if (!strcmp(parm[0], "read_param")) { |
| hdr10_tmo_parm_show(); |
| } |
| |
| return 0; |
| |
| error: |
| return -1; |
| } |