Lines Matching refs:data
80 struct picolcd_data *data = hid_get_drvdata(hdev); in picolcd_send_and_wait() local
86 if (!report || !data) in picolcd_send_and_wait()
88 if (data->status & PICOLCD_FAILED) in picolcd_send_and_wait()
99 mutex_lock(&data->mutex); in picolcd_send_and_wait()
100 spin_lock_irqsave(&data->lock, flags); in picolcd_send_and_wait()
106 if (data->status & PICOLCD_FAILED) { in picolcd_send_and_wait()
110 data->pending = work; in picolcd_send_and_wait()
111 hid_hw_request(data->hdev, report, HID_REQ_SET_REPORT); in picolcd_send_and_wait()
112 spin_unlock_irqrestore(&data->lock, flags); in picolcd_send_and_wait()
114 spin_lock_irqsave(&data->lock, flags); in picolcd_send_and_wait()
115 data->pending = NULL; in picolcd_send_and_wait()
117 spin_unlock_irqrestore(&data->lock, flags); in picolcd_send_and_wait()
118 mutex_unlock(&data->mutex); in picolcd_send_and_wait()
125 static int picolcd_raw_keypad(struct picolcd_data *data, in picolcd_raw_keypad() argument
140 for (j = 0; j < sizeof(data->pressed_keys); j++) in picolcd_raw_keypad()
141 if (data->pressed_keys[j] == raw_data[i]) in picolcd_raw_keypad()
143 for (j = 0; j < sizeof(data->pressed_keys); j++) in picolcd_raw_keypad()
144 if (data->pressed_keys[j] == 0) { in picolcd_raw_keypad()
145 data->pressed_keys[j] = raw_data[i]; in picolcd_raw_keypad()
148 input_event(data->input_keys, EV_MSC, MSC_SCAN, raw_data[i]); in picolcd_raw_keypad()
150 key_code = data->keycode[raw_data[i]]; in picolcd_raw_keypad()
156 input_report_key(data->input_keys, key_code, 1); in picolcd_raw_keypad()
158 input_sync(data->input_keys); in picolcd_raw_keypad()
164 for (j = 0; j < sizeof(data->pressed_keys); j++) { in picolcd_raw_keypad()
166 if (data->pressed_keys[j] == 0) in picolcd_raw_keypad()
169 if (data->pressed_keys[j] == raw_data[i]) in picolcd_raw_keypad()
171 input_event(data->input_keys, EV_MSC, MSC_SCAN, data->pressed_keys[j]); in picolcd_raw_keypad()
172 if (data->pressed_keys[j] < PICOLCD_KEYS) in picolcd_raw_keypad()
173 key_code = data->keycode[data->pressed_keys[j]]; in picolcd_raw_keypad()
178 data->pressed_keys[j], key_code); in picolcd_raw_keypad()
179 input_report_key(data->input_keys, key_code, 0); in picolcd_raw_keypad()
181 input_sync(data->input_keys); in picolcd_raw_keypad()
182 data->pressed_keys[j] = 0; in picolcd_raw_keypad()
191 struct picolcd_data *data = hid_get_drvdata(hdev); in picolcd_check_version() local
195 if (!data) in picolcd_check_version()
205 data->version[0] = verinfo->raw_data[1]; in picolcd_check_version()
206 data->version[1] = verinfo->raw_data[0]; in picolcd_check_version()
207 if (data->status & PICOLCD_BOOTLOADER) { in picolcd_check_version()
227 struct picolcd_data *data = hid_get_drvdata(hdev); in picolcd_reset() local
232 if (!data || !report || report->maxfield != 1) in picolcd_reset()
235 spin_lock_irqsave(&data->lock, flags); in picolcd_reset()
237 data->status |= PICOLCD_BOOTLOADER; in picolcd_reset()
241 if (data->status & PICOLCD_FAILED) { in picolcd_reset()
242 spin_unlock_irqrestore(&data->lock, flags); in picolcd_reset()
246 spin_unlock_irqrestore(&data->lock, flags); in picolcd_reset()
252 picolcd_resume_lcd(data); in picolcd_reset()
253 picolcd_resume_backlight(data); in picolcd_reset()
254 picolcd_fb_refresh(data); in picolcd_reset()
255 picolcd_leds_set(data); in picolcd_reset()
265 struct picolcd_data *data = dev_get_drvdata(dev); in picolcd_operation_mode_show() local
267 if (data->status & PICOLCD_BOOTLOADER) in picolcd_operation_mode_show()
276 struct picolcd_data *data = dev_get_drvdata(dev); in picolcd_operation_mode_store() local
279 int timeout = data->opmode_delay; in picolcd_operation_mode_store()
283 if (data->status & PICOLCD_BOOTLOADER) in picolcd_operation_mode_store()
284 report = picolcd_out_report(REPORT_EXIT_FLASHER, data->hdev); in picolcd_operation_mode_store()
288 if (!(data->status & PICOLCD_BOOTLOADER)) in picolcd_operation_mode_store()
289 report = picolcd_out_report(REPORT_EXIT_KEYBOARD, data->hdev); in picolcd_operation_mode_store()
301 spin_lock_irqsave(&data->lock, flags); in picolcd_operation_mode_store()
304 hid_hw_request(data->hdev, report, HID_REQ_SET_REPORT); in picolcd_operation_mode_store()
305 spin_unlock_irqrestore(&data->lock, flags); in picolcd_operation_mode_store()
318 struct picolcd_data *data = dev_get_drvdata(dev); in picolcd_operation_mode_delay_show() local
320 return snprintf(buf, PAGE_SIZE, "%hu\n", data->opmode_delay); in picolcd_operation_mode_delay_show()
326 struct picolcd_data *data = dev_get_drvdata(dev); in picolcd_operation_mode_delay_store() local
333 data->opmode_delay = u; in picolcd_operation_mode_delay_store()
346 struct picolcd_data *data = hid_get_drvdata(hdev); in picolcd_raw_event() local
350 if (!data) in picolcd_raw_event()
360 if (data->input_keys) in picolcd_raw_event()
361 ret = picolcd_raw_keypad(data, report, raw_data+1, size-1); in picolcd_raw_event()
363 ret = picolcd_raw_cir(data, report, raw_data+1, size-1); in picolcd_raw_event()
365 spin_lock_irqsave(&data->lock, flags); in picolcd_raw_event()
370 if (data->pending) { in picolcd_raw_event()
371 memcpy(data->pending->raw_data, raw_data+1, size-1); in picolcd_raw_event()
372 data->pending->raw_size = size-1; in picolcd_raw_event()
373 data->pending->in_report = report; in picolcd_raw_event()
374 complete(&data->pending->ready); in picolcd_raw_event()
376 spin_unlock_irqrestore(&data->lock, flags); in picolcd_raw_event()
379 picolcd_debug_raw_event(data, hdev, report, raw_data, size); in picolcd_raw_event()
424 static int picolcd_init_keys(struct picolcd_data *data, in picolcd_init_keys() argument
427 struct hid_device *hdev = data->hdev; in picolcd_init_keys()
445 memcpy(data->keycode, def_keymap, sizeof(def_keymap)); in picolcd_init_keys()
454 idev->keycode = &data->keycode; in picolcd_init_keys()
456 idev->keycodesize = sizeof(data->keycode[0]); in picolcd_init_keys()
460 input_set_capability(idev, EV_KEY, data->keycode[i]); in picolcd_init_keys()
467 data->input_keys = idev; in picolcd_init_keys()
471 static void picolcd_exit_keys(struct picolcd_data *data) in picolcd_exit_keys() argument
473 struct input_dev *idev = data->input_keys; in picolcd_exit_keys()
475 data->input_keys = NULL; in picolcd_exit_keys()
480 static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data) in picolcd_probe_lcd() argument
485 error = picolcd_init_keys(data, picolcd_in_report(REPORT_KEY_STATE, hdev)); in picolcd_probe_lcd()
490 error = picolcd_init_cir(data, picolcd_in_report(REPORT_IR_DATA, hdev)); in picolcd_probe_lcd()
495 error = picolcd_init_framebuffer(data); in picolcd_probe_lcd()
500 error = picolcd_init_lcd(data, picolcd_out_report(REPORT_CONTRAST, hdev)); in picolcd_probe_lcd()
505 error = picolcd_init_backlight(data, picolcd_out_report(REPORT_BRIGHTNESS, hdev)); in picolcd_probe_lcd()
510 error = picolcd_init_leds(data, picolcd_out_report(REPORT_LED_STATE, hdev)); in picolcd_probe_lcd()
514 picolcd_init_devfs(data, picolcd_out_report(REPORT_EE_READ, hdev), in picolcd_probe_lcd()
521 picolcd_exit_leds(data); in picolcd_probe_lcd()
522 picolcd_exit_backlight(data); in picolcd_probe_lcd()
523 picolcd_exit_lcd(data); in picolcd_probe_lcd()
524 picolcd_exit_framebuffer(data); in picolcd_probe_lcd()
525 picolcd_exit_cir(data); in picolcd_probe_lcd()
526 picolcd_exit_keys(data); in picolcd_probe_lcd()
530 static int picolcd_probe_bootloader(struct hid_device *hdev, struct picolcd_data *data) in picolcd_probe_bootloader() argument
532 picolcd_init_devfs(data, NULL, NULL, in picolcd_probe_bootloader()
541 struct picolcd_data *data; in picolcd_probe() local
550 data = kzalloc(sizeof(struct picolcd_data), GFP_KERNEL); in picolcd_probe()
551 if (data == NULL) { in picolcd_probe()
557 spin_lock_init(&data->lock); in picolcd_probe()
558 mutex_init(&data->mutex); in picolcd_probe()
559 data->hdev = hdev; in picolcd_probe()
560 data->opmode_delay = 5000; in picolcd_probe()
562 data->status |= PICOLCD_BOOTLOADER; in picolcd_probe()
563 hid_set_drvdata(hdev, data); in picolcd_probe()
596 if (data->status & PICOLCD_BOOTLOADER) in picolcd_probe()
597 error = picolcd_probe_bootloader(hdev, data); in picolcd_probe()
599 error = picolcd_probe_lcd(hdev, data); in picolcd_probe()
615 kfree(data); in picolcd_probe()
624 struct picolcd_data *data = hid_get_drvdata(hdev); in picolcd_remove() local
628 spin_lock_irqsave(&data->lock, flags); in picolcd_remove()
629 data->status |= PICOLCD_FAILED; in picolcd_remove()
630 spin_unlock_irqrestore(&data->lock, flags); in picolcd_remove()
632 picolcd_exit_devfs(data); in picolcd_remove()
639 spin_lock_irqsave(&data->lock, flags); in picolcd_remove()
640 if (data->pending) in picolcd_remove()
641 complete(&data->pending->ready); in picolcd_remove()
642 spin_unlock_irqrestore(&data->lock, flags); in picolcd_remove()
645 picolcd_exit_leds(data); in picolcd_remove()
647 picolcd_exit_backlight(data); in picolcd_remove()
648 picolcd_exit_lcd(data); in picolcd_remove()
649 picolcd_exit_framebuffer(data); in picolcd_remove()
651 picolcd_exit_cir(data); in picolcd_remove()
652 picolcd_exit_keys(data); in picolcd_remove()
655 mutex_destroy(&data->mutex); in picolcd_remove()
657 kfree(data); in picolcd_remove()