1 #include <kprobe/dbi_kprobes.h>
5 static const char path_backlight[] = "/sys/class/backlight/s6e8aa0-bl/brightness";
6 static const char path_backlight_min[] = "/sys/class/backlight/s6e8aa0-bl/min_brightness";
7 static const char path_backlight_max[] = "/sys/class/backlight/s6e8aa0-bl/max_brightness";
8 static const char path_power[] = "/sys/class/lcd/s6e8aa0/lcd_power";
10 static const char *all_path[] = {
18 all_path_cnt = sizeof(all_path) / sizeof(char *)
23 static int s6e8aa0_check(struct lcd_ops *ops)
27 for (i = 0; i < all_path_cnt; ++i) {
28 int ret = read_val(all_path[i]);
30 if (IS_ERR_VALUE(ret))
37 static unsigned long s6e8aa0_get_parameter(struct lcd_ops *ops,
38 enum lcd_parameter_type type)
41 case LPD_MIN_BRIGHTNESS:
42 return read_val(path_backlight_min);
43 case LPD_MAX_BRIGHTNESS:
44 return read_val(path_backlight_max);
46 return read_val(path_backlight);
48 return read_val(path_power);
56 static int entry_handler_set_power(struct kretprobe_instance *ri,
57 struct pt_regs *regs);
58 static int ret_handler_set_power(struct kretprobe_instance *ri,
59 struct pt_regs *regs);
61 static struct kretprobe set_power_krp = {
62 .kp.symbol_name = "s6e8aa0_set_power",
63 .entry_handler = entry_handler_set_power,
64 .handler = ret_handler_set_power,
65 .data_size = sizeof(int)
69 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
70 struct pt_regs *regs);
71 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
72 struct pt_regs *regs);
74 static struct kretprobe set_backlight_krp = {
75 .kp.symbol_name = "s6e8aa0_gamma_ctrl",
76 .entry_handler = entry_handler_set_backlight,
77 .handler = ret_handler_set_backlight,
78 .data_size = sizeof(int)
81 int s6e8aa0_set(struct lcd_ops *ops)
85 ret = dbi_register_kretprobe(&set_power_krp);
89 ret = dbi_register_kretprobe(&set_backlight_krp);
91 dbi_unregister_kretprobe(&set_power_krp);
96 int s6e8aa0_unset(struct lcd_ops *ops)
98 dbi_unregister_kretprobe(&set_backlight_krp);
99 dbi_unregister_kretprobe(&set_power_krp);
104 static struct lcd_ops s6e8aa0_ops = {
106 .check = s6e8aa0_check,
108 .unset = s6e8aa0_unset,
109 .get = s6e8aa0_get_parameter
112 struct lcd_ops *LCD_MAKE_FNAME(s6e8aa0)(void)
121 /* ============================================================================
123 * ============================================================================
125 static int entry_handler_set_power(struct kretprobe_instance *ri,
126 struct pt_regs *regs)
128 int *power = (int *)ri->data;
130 *power = (int)swap_get_karg(regs, 1);
135 static int ret_handler_set_power(struct kretprobe_instance *ri,
136 struct pt_regs *regs)
138 int ret = regs_return_value(regs);
139 int *power = (int *)ri->data;
141 if (!ret && s6e8aa0_ops.notifier)
142 s6e8aa0_ops.notifier(&s6e8aa0_ops, LAT_POWER, (void *)*power);
151 /* ============================================================================
153 * ============================================================================
155 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
156 struct pt_regs *regs)
158 int *brightness = (int *)ri->data;
159 *brightness = (int)swap_get_karg(regs, 1);
164 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
165 struct pt_regs *regs)
167 int ret = regs_return_value(regs);
168 int *brightness = (int *)ri->data;
170 if (!ret && s6e8aa0_ops.notifier)
171 s6e8aa0_ops.notifier(&s6e8aa0_ops, LAT_BRIGHTNESS,
172 (void *)*brightness);