1 #include <kprobe/swap_kprobes.h>
5 static const char path_backlight[] =
6 "/sys/class/backlight/s6e8aa0-bl/brightness";
7 static const char path_backlight_min[] =
8 "/sys/class/backlight/s6e8aa0-bl/min_brightness";
9 static const char path_backlight_max[] =
10 "/sys/class/backlight/s6e8aa0-bl/max_brightness";
11 static const char path_power[] =
12 "/sys/class/lcd/s6e8aa0/lcd_power";
14 static const char * const all_path[] = {
22 all_path_cnt = sizeof(all_path) / sizeof(char *)
27 static int s6e8aa0_check(struct lcd_ops *ops)
31 for (i = 0; i < all_path_cnt; ++i) {
32 int ret = read_val(all_path[i]);
34 if (IS_ERR_VALUE(ret))
41 static unsigned long s6e8aa0_get_parameter(struct lcd_ops *ops,
42 enum lcd_parameter_type type)
45 case LPD_MIN_BRIGHTNESS:
46 return read_val(path_backlight_min);
47 case LPD_MAX_BRIGHTNESS:
48 return read_val(path_backlight_max);
50 return read_val(path_backlight);
52 return read_val(path_power);
60 static int entry_handler_set_power(struct kretprobe_instance *ri,
61 struct pt_regs *regs);
62 static int ret_handler_set_power(struct kretprobe_instance *ri,
63 struct pt_regs *regs);
65 static struct kretprobe set_power_krp = {
66 .kp.symbol_name = "s6e8aa0_set_power",
67 .entry_handler = entry_handler_set_power,
68 .handler = ret_handler_set_power,
69 .data_size = sizeof(int)
73 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
74 struct pt_regs *regs);
75 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
76 struct pt_regs *regs);
78 static struct kretprobe set_backlight_krp = {
79 .kp.symbol_name = "s6e8aa0_gamma_ctrl",
80 .entry_handler = entry_handler_set_backlight,
81 .handler = ret_handler_set_backlight,
82 .data_size = sizeof(int)
85 int s6e8aa0_set(struct lcd_ops *ops)
89 ret = swap_register_kretprobe(&set_power_krp);
93 ret = swap_register_kretprobe(&set_backlight_krp);
95 swap_unregister_kretprobe(&set_power_krp);
100 int s6e8aa0_unset(struct lcd_ops *ops)
102 swap_unregister_kretprobe(&set_backlight_krp);
103 swap_unregister_kretprobe(&set_power_krp);
108 static struct lcd_ops s6e8aa0_ops = {
110 .check = s6e8aa0_check,
112 .unset = s6e8aa0_unset,
113 .get = s6e8aa0_get_parameter
116 struct lcd_ops *LCD_MAKE_FNAME(s6e8aa0)(void)
125 /* ============================================================================
127 * ============================================================================
129 static int entry_handler_set_power(struct kretprobe_instance *ri,
130 struct pt_regs *regs)
132 int *power = (int *)ri->data;
134 *power = (int)swap_get_karg(regs, 1);
139 static int ret_handler_set_power(struct kretprobe_instance *ri,
140 struct pt_regs *regs)
142 int ret = regs_return_value(regs);
143 int *power = (int *)ri->data;
145 if (!ret && s6e8aa0_ops.notifier)
146 s6e8aa0_ops.notifier(&s6e8aa0_ops, LAT_POWER, (void *)*power);
155 /* ============================================================================
157 * ============================================================================
159 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
160 struct pt_regs *regs)
162 int *brightness = (int *)ri->data;
163 *brightness = (int)swap_get_karg(regs, 1);
168 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
169 struct pt_regs *regs)
171 int ret = regs_return_value(regs);
172 int *brightness = (int *)ri->data;
174 if (!ret && s6e8aa0_ops.notifier)
175 s6e8aa0_ops.notifier(&s6e8aa0_ops, LAT_BRIGHTNESS,
176 (void *)*brightness);