• Home
  • Raw
  • Download

Lines Matching +full:ps +full:- +full:speed

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (C) 2004-2005 Nokia Corporation
131 hwa742.extif->set_bits_per_cycle(8); in hwa742_read_reg()
132 hwa742.extif->write_command(&reg, 1); in hwa742_read_reg()
133 hwa742.extif->read_data(&data, 1); in hwa742_read_reg()
140 hwa742.extif->set_bits_per_cycle(8); in hwa742_write_reg()
141 hwa742.extif->write_command(&reg, 1); in hwa742_write_reg()
142 hwa742.extif->write_data(&data, 1); in hwa742_write_reg()
150 x_end--; in set_window_regs()
151 y_end--; in set_window_regs()
161 hwa742.extif->set_bits_per_cycle(8); in set_window_regs()
164 hwa742.extif->write_command(&cmd, 1); in set_window_regs()
166 hwa742.extif->write_data(tmp, 8); in set_window_regs()
174 dev_dbg(hwa742.fbdev->dev, "hwa742: enabled pixel doubling\n"); in set_format_regs()
179 dev_dbg(hwa742.fbdev->dev, "hwa742: disabled pixel doubling\n"); in set_format_regs()
198 hwa742.extif->enable_tearsync(1, 0); in enable_tearsync()
203 hwa742.extif->enable_tearsync(1, 0); in enable_tearsync()
209 hwa742.extif->enable_tearsync(1, 0); in enable_tearsync()
213 hwa742.extif->enable_tearsync(1, y + 1); in enable_tearsync()
220 hwa742.extif->enable_tearsync(0, 0); in disable_tearsync()
242 list_del(&req->entry); in alloc_req()
245 INIT_LIST_HEAD(&req->entry); in alloc_req()
246 req->flags = req_flags; in alloc_req()
257 list_move(&req->entry, &hwa742.free_req_list); in free_req()
258 if (!(req->flags & REQ_FROM_IRQ_POOL)) in free_req()
279 if (req->handler(req) == REQ_PENDING) in process_pending_requests()
282 complete = req->complete; in process_pending_requests()
283 complete_data = req->complete_data; in process_pending_requests()
316 complete = req->complete; in request_complete()
317 complete_data = req->complete_data; in request_complete()
329 struct update_param *par = &req->par.update; in send_frame_handler()
330 int x = par->x; in send_frame_handler()
331 int y = par->y; in send_frame_handler()
332 int w = par->width; in send_frame_handler()
333 int h = par->height; in send_frame_handler()
337 int color_mode = par->color_mode; in send_frame_handler()
338 int flags = par->flags; in send_frame_handler()
339 int scr_width = hwa742.fbdev->panel->x_res; in send_frame_handler()
340 int scr_height = hwa742.fbdev->panel->y_res; in send_frame_handler()
343 dev_dbg(hwa742.fbdev->dev, "x %d y %d w %d h %d scr_width %d " in send_frame_handler()
365 return -EINVAL; in send_frame_handler()
374 flags = req->par.update.flags; in send_frame_handler()
385 hwa742.int_ctrl->setup_plane(OMAPFB_PLANE_GFX, in send_frame_handler()
389 hwa742.extif->set_bits_per_cycle(16); in send_frame_handler()
391 hwa742.int_ctrl->enable_plane(OMAPFB_PLANE_GFX, 1); in send_frame_handler()
392 hwa742.extif->transfer_area(w, h, request_complete, req); in send_frame_handler()
399 hwa742.int_ctrl->enable_plane(OMAPFB_PLANE_GFX, 0); in send_frame_complete()
404 req->handler = send_frame_handler; \
405 req->complete = send_frame_complete; \
406 req->par.update.x = _x; \
407 req->par.update.y = _y; \
408 req->par.update.width = _w; \
409 req->par.update.height = _h; \
410 req->par.update.color_mode = color_mode;\
411 req->par.update.flags = flags; \
412 list_add_tail(&req->entry, req_head); \
419 int x = win->x; in create_req_list()
420 int y = win->y; in create_req_list()
421 int width = win->width; in create_req_list()
422 int height = win->height; in create_req_list()
426 flags = win->format & ~OMAPFB_FORMAT_MASK; in create_req_list()
427 color_mode = win->format & OMAPFB_FORMAT_MASK; in create_req_list()
431 width--; in create_req_list()
444 yspan = height - yspan; in create_req_list()
450 width -= xspan; in create_req_list()
472 last->complete = auto_update_complete; in hwa742_update_window_auto()
473 last->complete_data = NULL; in hwa742_update_window_auto()
488 dev_dbg(hwa742.fbdev->dev, "invalid update mode\n"); in hwa742_update_window_async()
489 r = -EINVAL; in hwa742_update_window_async()
492 if (unlikely(win->format & in hwa742_update_window_async()
495 dev_dbg(hwa742.fbdev->dev, "invalid window flag\n"); in hwa742_update_window_async()
496 r = -EINVAL; in hwa742_update_window_async()
503 last->complete = complete_callback; in hwa742_update_window_async()
504 last->complete_data = (void *)complete_callback_data; in hwa742_update_window_async()
520 return -EINVAL; in hwa742_setup_plane()
528 return -EINVAL; in hwa742_enable_plane()
530 hwa742.int_ctrl->enable_plane(plane, enable); in hwa742_enable_plane()
537 complete(req->par.sync); in sync_handler()
549 req->handler = sync_handler; in hwa742_sync()
550 req->complete = NULL; in hwa742_sync()
552 req->par.sync = ∁ in hwa742_sync()
554 list_add(&req->entry, &req_list); in hwa742_sync()
562 dev_dbg(hwa742.fbdev->dev, "update_mode %d\n", hwa742.update_mode); in hwa742_bind_client()
572 return -EINVAL; in hwa742_set_update_mode()
577 dev_info(hwa742.fbdev->dev, "HWA742: setting update mode to %s\n", in hwa742_set_update_mode()
616 static unsigned long round_to_extif_ticks(unsigned long ps, int div) in round_to_extif_ticks() argument
619 return (ps + bus_tick - 1) / bus_tick * bus_tick; in round_to_extif_ticks()
636 dev_dbg(hwa742.fbdev->dev, "HWA742 systim %lu ps extif_clk_period %u ps" in calc_reg_timing()
641 t->clk_div = div; in calc_reg_timing()
642 t->cs_on_time = 0; in calc_reg_timing()
643 t->we_on_time = round_to_extif_ticks(t->cs_on_time + 2000, div); in calc_reg_timing()
644 t->re_on_time = round_to_extif_ticks(t->cs_on_time + 2000, div); in calc_reg_timing()
645 t->access_time = round_to_extif_ticks(t->re_on_time + 12200, div); in calc_reg_timing()
646 t->we_off_time = round_to_extif_ticks(t->we_on_time + 1000, div); in calc_reg_timing()
647 t->re_off_time = round_to_extif_ticks(t->re_on_time + 16000, div); in calc_reg_timing()
648 t->cs_off_time = round_to_extif_ticks(t->re_off_time + 1000, div); in calc_reg_timing()
649 t->we_cycle_time = round_to_extif_ticks(2 * systim + 2000, div); in calc_reg_timing()
650 if (t->we_cycle_time < t->we_off_time) in calc_reg_timing()
651 t->we_cycle_time = t->we_off_time; in calc_reg_timing()
652 t->re_cycle_time = round_to_extif_ticks(2 * systim + 2000, div); in calc_reg_timing()
653 if (t->re_cycle_time < t->re_off_time) in calc_reg_timing()
654 t->re_cycle_time = t->re_off_time; in calc_reg_timing()
655 t->cs_pulse_width = 0; in calc_reg_timing()
657 dev_dbg(hwa742.fbdev->dev, "[reg]cson %d csoff %d reon %d reoff %d\n", in calc_reg_timing()
658 t->cs_on_time, t->cs_off_time, t->re_on_time, t->re_off_time); in calc_reg_timing()
659 dev_dbg(hwa742.fbdev->dev, "[reg]weon %d weoff %d recyc %d wecyc %d\n", in calc_reg_timing()
660 t->we_on_time, t->we_off_time, t->re_cycle_time, in calc_reg_timing()
661 t->we_cycle_time); in calc_reg_timing()
662 dev_dbg(hwa742.fbdev->dev, "[reg]rdaccess %d cspulse %d\n", in calc_reg_timing()
663 t->access_time, t->cs_pulse_width); in calc_reg_timing()
665 return hwa742.extif->convert_timings(t); in calc_reg_timing()
683 dev_dbg(hwa742.fbdev->dev, "HWA742 systim %lu ps extif_clk_period %u ps" in calc_lut_timing()
689 t->clk_div = div; in calc_lut_timing()
691 t->cs_on_time = 0; in calc_lut_timing()
692 t->we_on_time = round_to_extif_ticks(t->cs_on_time + 2000, div); in calc_lut_timing()
693 t->re_on_time = round_to_extif_ticks(t->cs_on_time + 2000, div); in calc_lut_timing()
694 t->access_time = round_to_extif_ticks(t->re_on_time + 4 * systim + in calc_lut_timing()
696 t->we_off_time = round_to_extif_ticks(t->we_on_time + 1000, div); in calc_lut_timing()
697 t->re_off_time = round_to_extif_ticks(t->re_on_time + 4 * systim + in calc_lut_timing()
699 t->cs_off_time = round_to_extif_ticks(t->re_off_time + 1000, div); in calc_lut_timing()
700 t->we_cycle_time = round_to_extif_ticks(2 * systim + 2000, div); in calc_lut_timing()
701 if (t->we_cycle_time < t->we_off_time) in calc_lut_timing()
702 t->we_cycle_time = t->we_off_time; in calc_lut_timing()
703 t->re_cycle_time = round_to_extif_ticks(2000 + 4 * systim + 26000, div); in calc_lut_timing()
704 if (t->re_cycle_time < t->re_off_time) in calc_lut_timing()
705 t->re_cycle_time = t->re_off_time; in calc_lut_timing()
706 t->cs_pulse_width = 0; in calc_lut_timing()
708 dev_dbg(hwa742.fbdev->dev, "[lut]cson %d csoff %d reon %d reoff %d\n", in calc_lut_timing()
709 t->cs_on_time, t->cs_off_time, t->re_on_time, t->re_off_time); in calc_lut_timing()
710 dev_dbg(hwa742.fbdev->dev, "[lut]weon %d weoff %d recyc %d wecyc %d\n", in calc_lut_timing()
711 t->we_on_time, t->we_off_time, t->re_cycle_time, in calc_lut_timing()
712 t->we_cycle_time); in calc_lut_timing()
713 dev_dbg(hwa742.fbdev->dev, "[lut]rdaccess %d cspulse %d\n", in calc_lut_timing()
714 t->access_time, t->cs_pulse_width); in calc_lut_timing()
716 return hwa742.extif->convert_timings(t); in calc_lut_timing()
724 hwa742.extif->get_clk_info(&hwa742.extif_clk_period, &max_clk_div); in calc_extif_timings()
745 dev_err(hwa742.fbdev->dev, "can't setup timings\n"); in calc_extif_timings()
746 return -1; in calc_extif_timings()
767 dev_dbg(hwa742.fbdev->dev, in calc_hwa742_clk_rates()
770 dev_dbg(hwa742.fbdev->dev, "sys_clk %ld pix_clk %ld\n", in calc_hwa742_clk_rates()
799 /* time to transfer one pixel (16bpp) in ps */ in setup_tearsync()
801 if (hwa742.extif->get_max_tx_rate != NULL) { in setup_tearsync()
807 unsigned long max_tx_rate = hwa742.extif->get_max_tx_rate(); in setup_tearsync()
809 dev_dbg(hwa742.fbdev->dev, "max_tx_rate %ld HZ\n", in setup_tearsync()
811 min_tx_time = 1000000000 / (max_tx_rate / 1000); /* ps */ in setup_tearsync()
816 /* time to update one line in ps */ in setup_tearsync()
821 * transfer speed too low, we might have to use both in setup_tearsync()
826 /* decent transfer speed, we'll always use only VS */ in setup_tearsync()
853 hs = hs * 1000000 / (pix_clk / 1000); /* ps */ in setup_tearsync()
856 vs = vs * (hdisp + hndp) * 1000000 / (pix_clk / 1000); /* ps */ in setup_tearsync()
860 return -EDOM; in setup_tearsync()
874 dev_dbg(hwa742.fbdev->dev, in setup_tearsync()
875 "pix_clk %ld HZ pix_tx_time %ld ps line_upd_time %ld ps\n", in setup_tearsync()
877 dev_dbg(hwa742.fbdev->dev, in setup_tearsync()
878 "hs %d ps vs %d ps mode %d vsync_only %d\n", in setup_tearsync()
881 return hwa742.extif->setup_tearsync(1, hs, vs, in setup_tearsync()
887 hwa742.int_ctrl->get_caps(plane, caps); in hwa742_get_caps()
888 caps->ctrl |= OMAPFB_CAPS_MANUAL_UPDATE | in hwa742_get_caps()
891 caps->ctrl |= OMAPFB_CAPS_TEARSYNC; in hwa742_get_caps()
892 caps->wnd_color |= (1 << OMAPFB_COLOR_RGB565) | in hwa742_get_caps()
931 BUG_ON(!fbdev->ext_if || !fbdev->int_ctrl); in hwa742_init()
934 hwa742.extif = fbdev->ext_if; in hwa742_init()
935 hwa742.int_ctrl = fbdev->int_ctrl; in hwa742_init()
937 omapfb_conf = dev_get_platdata(fbdev->dev); in hwa742_init()
943 if ((r = hwa742.int_ctrl->init(fbdev, 1, req_vram)) < 0) in hwa742_init()
946 if ((r = hwa742.extif->init(fbdev)) < 0) in hwa742_init()
952 hwa742.extif->set_timings(&hwa742.reg_timings); in hwa742_init()
958 hwa742.extif->set_timings(&hwa742.reg_timings); in hwa742_init()
962 dev_err(fbdev->dev, "HWA742: invalid revision %02x\n", rev); in hwa742_init()
963 r = -ENODEV; in hwa742_init()
969 dev_err(fbdev->dev, in hwa742_init()
971 r = -ENODEV; in hwa742_init()
976 dev_err(hwa742.fbdev->dev, in hwa742_init()
982 hwa742.max_transmit_size = hwa742.extif->max_transmit_size; in hwa742_init()
988 hwa742.auto_update_window.width = fbdev->panel->x_res; in hwa742_init()
989 hwa742.auto_update_window.height = fbdev->panel->y_res; in hwa742_init()
994 hwa742.prev_color_mode = -1; in hwa742_init()
1004 sema_init(&hwa742.req_sema, i - IRQ_REQ_POOL_SIZE); in hwa742_init()
1007 dev_info(fbdev->dev, ": Epson HWA742 LCD controller rev %d " in hwa742_init()
1014 hwa742.extif->cleanup(); in hwa742_init()
1016 hwa742.int_ctrl->cleanup(); in hwa742_init()
1024 hwa742.extif->cleanup(); in hwa742_cleanup()
1025 hwa742.int_ctrl->cleanup(); in hwa742_cleanup()