Lines Matching +full:sync +full:- +full:clk +full:- +full:ps
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (C) 2004-2005 Nokia Corporation
10 #include <linux/clk.h>
15 #include <linux/omap-dma.h>
16 #include <linux/soc/ti/omap1-io.h>
22 #define MODULE_NAME "omapfb-sossi"
49 struct clk *fck;
114 static u32 ps_to_sossi_ticks(u32 ps, int div) in ps_to_sossi_ticks() argument
117 return (clk_period + ps - 1) / clk_period; in ps_to_sossi_ticks()
124 int div = t->clk_div; in calc_rd_timings()
130 reon = ps_to_sossi_ticks(t->re_on_time, div); in calc_rd_timings()
133 return -1; in calc_rd_timings()
135 reoff = ps_to_sossi_ticks(t->re_off_time, div); in calc_rd_timings()
140 tw0 = reoff - reon; in calc_rd_timings()
142 return -1; in calc_rd_timings()
144 recyc = ps_to_sossi_ticks(t->re_cycle_time, div); in calc_rd_timings()
148 tw1 = recyc - tw0; in calc_rd_timings()
153 return -1; in calc_rd_timings()
155 actim = ps_to_sossi_ticks(t->access_time, div); in calc_rd_timings()
162 if (actim - reoff > 1) in calc_rd_timings()
163 return -1; in calc_rd_timings()
165 t->tim[0] = tw0 - 1; in calc_rd_timings()
166 t->tim[1] = tw1 - 1; in calc_rd_timings()
175 int div = t->clk_div; in calc_wr_timings()
181 weon = ps_to_sossi_ticks(t->we_on_time, div); in calc_wr_timings()
184 return -1; in calc_wr_timings()
186 weoff = ps_to_sossi_ticks(t->we_off_time, div); in calc_wr_timings()
189 tw0 = weoff - weon; in calc_wr_timings()
191 return -1; in calc_wr_timings()
193 wecyc = ps_to_sossi_ticks(t->we_cycle_time, div); in calc_wr_timings()
197 tw1 = wecyc - tw0; in calc_wr_timings()
202 return -1; in calc_wr_timings()
204 t->tim[2] = tw0 - 1; in calc_wr_timings()
205 t->tim[3] = tw1 - 1; in calc_wr_timings()
215 dev_dbg(sossi.fbdev->dev, "Using TW0 = %d, TW1 = %d, div = %d\n", in _set_timing()
234 l |= ((bus_pick_count - 1) << 5) | ((bus_pick_width - 1) & 0x1f); in _set_bits_per_cycle()
243 l &= ~(((1 << 11) - 1) << 15); in _set_tearsync_mode()
289 len -= 4; in send_data()
294 len -= 2; in send_data()
299 len--; in send_data()
308 BUG_ON((nr_cycles - 1) & ~0x3ffff); in set_cycles()
311 sossi_set_bits(SOSSI_INIT1_REG, (nr_cycles - 1) & 0x3ffff); in set_cycles()
317 int div = t->clk_div; in sossi_convert_timings()
319 t->converted = 0; in sossi_convert_timings()
322 return -1; in sossi_convert_timings()
331 t->tim[4] = div; in sossi_convert_timings()
333 t->converted = 1; in sossi_convert_timings()
340 BUG_ON(!t->converted); in sossi_set_timings()
342 sossi.clk_tw0[RD_ACCESS] = t->tim[0]; in sossi_set_timings()
343 sossi.clk_tw1[RD_ACCESS] = t->tim[1]; in sossi_set_timings()
345 sossi.clk_tw0[WR_ACCESS] = t->tim[2]; in sossi_set_timings()
346 sossi.clk_tw1[WR_ACCESS] = t->tim[3]; in sossi_set_timings()
348 sossi.clk_div = t->tim[4]; in sossi_set_timings()
391 return -EINVAL; in sossi_setup_tearsync()
396 return -EDOM; in sossi_setup_tearsync()
398 vs--; in sossi_setup_tearsync()
402 hs--; in sossi_setup_tearsync()
404 dev_dbg(sossi.fbdev->dev, in sossi_setup_tearsync()
410 l &= ~((1 << 15) - 1); in sossi_setup_tearsync()
431 dev_dbg(sossi.fbdev->dev, "tearsync %d line %d\n", enable, line); in sossi_enable_tearsync()
433 return -EINVAL; in sossi_enable_tearsync()
496 * Wait for the sync signal and start the transfer only in sossi_transfer_area()
497 * then. We can't seem to be able to use HW sync DMA for in sossi_transfer_area()
530 len -= 4; in sossi_read_data()
535 len -= 2; in sossi_read_data()
540 len--; in sossi_read_data()
553 sossi.vsync_dma_pending--; in sossi_match_irq()
563 struct clk *fck; in sossi_init()
564 struct clk *dpll1out_ck; in sossi_init()
569 dev_err(fbdev->dev, "can't ioremap SoSSI\n"); in sossi_init()
570 return -ENOMEM; in sossi_init()
576 dpll1out_ck = clk_get(fbdev->dev, "ck_dpll1out"); in sossi_init()
578 dev_err(fbdev->dev, "can't get DPLL1OUT clock\n"); in sossi_init()
589 fck = clk_get(fbdev->dev, "ck_sossi"); in sossi_init()
591 dev_err(fbdev->dev, "can't get SoSSI functional clock\n"); in sossi_init()
621 dev_err(fbdev->dev, in sossi_init()
622 "invalid SoSSI sync pattern: %08x, %08x\n", l, k); in sossi_init()
623 r = -ENODEV; in sossi_init()
628 dev_err(fbdev->dev, "can't get LCDC IRQ\n"); in sossi_init()
629 r = -ENODEV; in sossi_init()
635 dev_info(fbdev->dev, "SoSSI version %d.%d initialized\n", in sossi_init()
643 if ((r = request_irq(fbdev->ext_irq, sossi_match_irq, in sossi_init()
645 "sossi_match", sossi.fbdev->dev)) < 0) { in sossi_init()
646 dev_err(sossi.fbdev->dev, "can't get SoSSI match IRQ\n"); in sossi_init()