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";
9 static const char *all_path[] = {
16 all_path_cnt = sizeof(all_path) / sizeof(char *)
21 static int s6e8aa0_check(struct lcd_ops *ops)
25 for (i = 0; i < all_path_cnt; ++i) {
26 int ret = read_val(all_path[i]);
28 if (IS_ERR_VALUE(ret))
35 static unsigned long s6e8aa0_get_parameter(struct lcd_ops *ops,
36 enum lcd_parameter_type type)
39 case LPD_MIN_BRIGHTNESS:
40 return read_val(path_backlight_min);
41 case LPD_MAX_BRIGHTNESS:
42 return read_val(path_backlight_max);
44 return read_val(path_backlight);
54 #if 0 /* is not supported */
55 /* ============================================================================
57 * ============================================================================
59 static int get_power(void)
61 const char *power_path = "/sys/class/lcd/s6e8aa0/lcd_power";
63 return read_val(power_path);
66 static int entry_handler_set_power(struct kretprobe_instance *ri,
69 int *power = (int *)ri->data;
71 *power = (int)regs->ARM_r1;
76 static int ret_handler_set_power(struct kretprobe_instance *ri,
79 int ret = regs_return_value(regs);
80 int *power = (int *)ri->data;
82 if (!ret && ops_s && ops_s->set_power)
83 ops_s->set_power(*power);
88 static struct kretprobe set_power_krp = {
89 .kp.symbol_name = "s6e8aa0_set_power",
90 .entry_handler = entry_handler_set_power,
91 .handler = ret_handler_set_power,
92 .data_size = sizeof(int)
98 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
99 struct pt_regs *regs);
100 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
101 struct pt_regs *regs);
103 static struct kretprobe set_backlight_krp = {
104 .kp.symbol_name = "s6e8aa0_gamma_ctrl",
105 .entry_handler = entry_handler_set_backlight,
106 .handler = ret_handler_set_backlight,
107 .data_size = sizeof(int)
110 int s6e8aa0_set(struct lcd_ops *ops)
112 return dbi_register_kretprobe(&set_backlight_krp);
115 int s6e8aa0_unset(struct lcd_ops *ops)
117 dbi_unregister_kretprobe(&set_backlight_krp);
121 static struct lcd_ops s6e8aa0_ops = {
123 .check = s6e8aa0_check,
125 .unset = s6e8aa0_unset,
126 .get = s6e8aa0_get_parameter
129 struct lcd_ops *LCD_MAKE_FNAME(s6e8aa0)(void)
138 /* ============================================================================
140 * ============================================================================
142 static int entry_handler_set_backlight(struct kretprobe_instance *ri,
143 struct pt_regs *regs)
145 int *brightness = (int *)ri->data;
146 *brightness = (int)swap_get_karg(regs, 1);
151 static int ret_handler_set_backlight(struct kretprobe_instance *ri,
152 struct pt_regs *regs)
154 int ret = regs_return_value(regs);
155 int *brightness = (int *)ri->data;
157 if (!ret && s6e8aa0_ops.notifier)
158 s6e8aa0_ops.notifier(&s6e8aa0_ops, LAT_BRIGHTNESS,
159 (void *)*brightness);