linux/drivers/video/pxa3xx-gcu.c
<<
>>
Prefs
   1/*
   2 *  pxa3xx-gcu.c - Linux kernel module for PXA3xx graphics controllers
   3 *
   4 *  This driver needs a DirectFB counterpart in user space, communication
   5 *  is handled via mmap()ed memory areas and an ioctl.
   6 *
   7 *  Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
   8 *  Copyright (c) 2009 Janine Kropp <nin@directfb.org>
   9 *  Copyright (c) 2009 Denis Oliver Kropp <dok@directfb.org>
  10 *
  11 *  This program is free software; you can redistribute it and/or modify
  12 *  it under the terms of the GNU General Public License as published by
  13 *  the Free Software Foundation; either version 2 of the License, or
  14 *  (at your option) any later version.
  15 *
  16 *  This program is distributed in the hope that it will be useful,
  17 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19 *  GNU General Public License for more details.
  20 *
  21 *  You should have received a copy of the GNU General Public License
  22 *  along with this program; if not, write to the Free Software
  23 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24 */
  25
  26/*
  27 * WARNING: This controller is attached to System Bus 2 of the PXA which
  28 * needs its arbiter to be enabled explicitly (CKENB & 1<<9).
  29 * There is currently no way to do this from Linux, so you need to teach
  30 * your bootloader for now.
  31 */
  32
  33#include <linux/module.h>
  34#include <linux/platform_device.h>
  35#include <linux/dma-mapping.h>
  36#include <linux/miscdevice.h>
  37#include <linux/interrupt.h>
  38#include <linux/spinlock.h>
  39#include <linux/uaccess.h>
  40#include <linux/ioctl.h>
  41#include <linux/delay.h>
  42#include <linux/sched.h>
  43#include <linux/slab.h>
  44#include <linux/clk.h>
  45#include <linux/fs.h>
  46#include <linux/io.h>
  47
  48#include "pxa3xx-gcu.h"
  49
  50#define DRV_NAME        "pxa3xx-gcu"
  51#define MISCDEV_MINOR   197
  52
  53#define REG_GCCR        0x00
  54#define GCCR_SYNC_CLR   (1 << 9)
  55#define GCCR_BP_RST     (1 << 8)
  56#define GCCR_ABORT      (1 << 6)
  57#define GCCR_STOP       (1 << 4)
  58
  59#define REG_GCISCR      0x04
  60#define REG_GCIECR      0x08
  61#define REG_GCRBBR      0x20
  62#define REG_GCRBLR      0x24
  63#define REG_GCRBHR      0x28
  64#define REG_GCRBTR      0x2C
  65#define REG_GCRBEXHR    0x30
  66
  67#define IE_EOB          (1 << 0)
  68#define IE_EEOB         (1 << 5)
  69#define IE_ALL          0xff
  70
  71#define SHARED_SIZE     PAGE_ALIGN(sizeof(struct pxa3xx_gcu_shared))
  72
  73/* #define PXA3XX_GCU_DEBUG */
  74/* #define PXA3XX_GCU_DEBUG_TIMER */
  75
  76#ifdef PXA3XX_GCU_DEBUG
  77#define QDUMP(msg)                                      \
  78        do {                                            \
  79                QPRINT(priv, KERN_DEBUG, msg);          \
  80        } while (0)
  81#else
  82#define QDUMP(msg)      do {} while (0)
  83#endif
  84
  85#define QERROR(msg)                                     \
  86        do {                                            \
  87                QPRINT(priv, KERN_ERR, msg);            \
  88        } while (0)
  89
  90struct pxa3xx_gcu_batch {
  91        struct pxa3xx_gcu_batch *next;
  92        u32                     *ptr;
  93        dma_addr_t               phys;
  94        unsigned long            length;
  95};
  96
  97struct pxa3xx_gcu_priv {
  98        void __iomem             *mmio_base;
  99        struct clk               *clk;
 100        struct pxa3xx_gcu_shared *shared;
 101        dma_addr_t                shared_phys;
 102        struct resource          *resource_mem;
 103        struct miscdevice         misc_dev;
 104        struct file_operations    misc_fops;
 105        wait_queue_head_t         wait_idle;
 106        wait_queue_head_t         wait_free;
 107        spinlock_t                spinlock;
 108        struct timeval            base_time;
 109
 110        struct pxa3xx_gcu_batch *free;
 111
 112        struct pxa3xx_gcu_batch *ready;
 113        struct pxa3xx_gcu_batch *ready_last;
 114        struct pxa3xx_gcu_batch *running;
 115};
 116
 117static inline unsigned long
 118gc_readl(struct pxa3xx_gcu_priv *priv, unsigned int off)
 119{
 120        return __raw_readl(priv->mmio_base + off);
 121}
 122
 123static inline void
 124gc_writel(struct pxa3xx_gcu_priv *priv, unsigned int off, unsigned long val)
 125{
 126        __raw_writel(val, priv->mmio_base + off);
 127}
 128
 129#define QPRINT(priv, level, msg)                                        \
 130        do {                                                            \
 131                struct timeval tv;                                      \
 132                struct pxa3xx_gcu_shared *shared = priv->shared;        \
 133                u32 base = gc_readl(priv, REG_GCRBBR);                  \
 134                                                                        \
 135                do_gettimeofday(&tv);                                   \
 136                                                                        \
 137                printk(level "%ld.%03ld.%03ld - %-17s: %-21s (%s, "     \
 138                        "STATUS "                                       \
 139                        "0x%02lx, B 0x%08lx [%ld], E %5ld, H %5ld, "    \
 140                        "T %5ld)\n",                                    \
 141                        tv.tv_sec - priv->base_time.tv_sec,             \
 142                        tv.tv_usec / 1000, tv.tv_usec % 1000,           \
 143                        __func__, msg,                                  \
 144                        shared->hw_running ? "running" : "   idle",     \
 145                        gc_readl(priv, REG_GCISCR),                     \
 146                        gc_readl(priv, REG_GCRBBR),                     \
 147                        gc_readl(priv, REG_GCRBLR),                     \
 148                        (gc_readl(priv, REG_GCRBEXHR) - base) / 4,      \
 149                        (gc_readl(priv, REG_GCRBHR) - base) / 4,        \
 150                        (gc_readl(priv, REG_GCRBTR) - base) / 4);       \
 151        } while (0)
 152
 153static void
 154pxa3xx_gcu_reset(struct pxa3xx_gcu_priv *priv)
 155{
 156        QDUMP(priv  NB & 1<<9).pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] class="sref">pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/video/pxa3xxss="line" name="L28">  28  28  2L28">  28  71#define R1EG_GC161ncgcu.c#L148" id="L148" class="line" >pxa3 ingda hrepri1     e49U Gen'=pxa3xx_gcu_reset" class="sref"+code=RE1G_GCRBLR" class="sref">R1EG_GC16             *pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/deo/pxa3xx-gcu.c#L54" id="L54u_reset" class="2a href="drivers/video/pxa3xx-gcu.c#L57"8  28R1EG_GC16_t               pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/deo/pxa3xx-gcu.c#L54" id="L54u_28  28R1EG_GC16="line" name="L85">  85#define REG_16ait_queue_head_t        mempxa3xx_gcu_priv" cmempxa+code=mmio_base" class="sref">mmio_base + hw_running ?u_2u_reset" class="2PAGE_ALIGN" class="sref">PAGE_ALIGN(s8  28 *  TThis program is distributa>(privmmio_base + hw_running ?href="+code=tv_sec" cufferxa3xx-gcu.c#L102" idcufferxa3xx="+code=shared" class="sref">shared;        \
 102        struct"+code=IE1_EOB" class="sref">IE_EO1B16_t                mmio_base + hw_running ?href="+code=tv_sec" magidrivers/video/pxmagid="+code=shared" class= id="L77" cAGE_ALIMAGICrivers/video/px id="L77" cAGE_ALIMAGICss="line" name="L102"> 102        struct"" name="L_EEOB" class="sref">IE_E1EOB 129#define IE_AL1L16a"line" name="L13q] class="sf="+code=tv" class="sref">tv);                                   \ss="sref">base_time.tv_sec,             8  28  71#define 1SHARE171ncgcu.c#L148" id="L148" class="line" xa3 up" id=span cuffer poref="e=pri1     e49U Gen'=pxa3xx_gcu_reset" class="srefs/video/p1xa3xx-gcu.c#L73" id="L731" cla17             *pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#u_28  28/* 1#define PXA3XX_GCU_DEBUG1 */               pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#de=mmio_base" class="sref">mmio_base +   28               pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/hr="sref">base) / 4);       \de=mmio_base" class="sref">mmio_base +   28  76#ifdef P176ncgcu.c#L148" id="L148" class="line" driver all IRQs except EOB=pri1     e49U Gen'=pxa3xx_gcu_reset" class="srefsent"> *  bbut WITHOUT ANY WARRANTY;17_t                pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/video/pxa3xxss="line" name="L28">  reset" class="2s/video/pxa3xx-gcu.c#L70" id="L7#L29" ~reset" class="2s/v"drivers/video/pxa3xx-gcu.c#8  28 128
QP17ss="line" name="L110"> 110        struct(0)
 154tv_sec,fump_whole_4" crxx_gcu_priv *priv)
 155{
QDUMP<1/a>(<1 href=line" name="L156"> 156        pxa3xx_gcu_batch *shared = shared;        \
hw_running ?  28                = gc_readl(priv, REG_GCRBBR);                  \
  28QERRO1R18="line" name="L76">  76#ifdef privQP18lt;9).level "%class="sref">msg);          \
(p19"sref">gc_readl("running" : "   idle",     \
.priv, REG_GCRBBR);                  \
u32 1     19tv.priv, REG_GCRBBR);                  \
d1ma_ad19 bs="sref">priv, REG_GCRBLR),                     \
shared->priv, REG_GCRBEXHR) - base) / 4,      \
gc_readl(priv, REG_GCRBHR) - base) / 4,        \
gc_readl(priv, REG_GCRBTR) - base) / 4);       \
px19ass="line" name="L128"> 128
__io19ss="line" name="L129"> 129#define c1lk 154priv)
 155{
2ma_ad2r_t 156        r2source          *running;
shared;        \
 115};
         running;
  92          85#define   98        void gc_readl(  92        shared;        \
 111
ti20"sref">gc_readl(<=shared" class="sref">shared;        \
 111
c210" c20NT(  92        pxa3xx_gline" name="L128"> 128
 112        struc2 shared;        \
  92        line" name="L128"> 128
  85#define  154 *priv)
 155{
inlin2 2nsignene" name="L98">  98        void gc_readl(str21"sref">gc_reaed long   92        shared = priv->shared;        \
  92        pxa3xx_gcu_batch *free;
shared;        \
 113        struc2vers/vide2/pxa3xx-gcu.c#L122" id="2122" 22ss="line" name="L112"> 112        struc2ers/video2pxa3xx-gcu.c#L123" id="L223" c22             *inlin2 2oid
gc_writel2/a>(s224t                 76#ifdef hw_running ?href="+code=tv_sec" cuffer/pxa3xx-gcu.c#L1uffera> ?[ef="+code=val" nuxx-gcu.c#L103" inuxss="++]ode0x05000000>gc_rea class=ref="drivers/vi3cu.c#L113" id="L113" class="aine" name="L98">  98        void QPRI2T22NT(hw_running ?href="+code=tv_sec" cuffer/pxa3xx-gcu.c#L1uffera> ?[ef="+code=val" nuxx-gcu.c#L103" inuxss="++]ode0x00000001>gc_readl(hw_running ?href="+code=tv_sec" cuffer/pxa3xx-gcu.c#L1uffera> ?[ef="+code=val" nuxx-gcu.c#L103" inuxss="++]oderef="drivers/vi3cu.c#L113" id="L113" class="href="+code=tv_sec" u.c#L94" id="L94" class="line" name="L94">  94        unsigned2  struct 2a href="+code=timeval" c2ass="2ref">timeval   92         128
hw_running ?href="+code=tv_sec" cuffer/pxa3xx-gcu.c#L1uffera> ?[ef="+code=val" nuxx-gcu.c#L103" inuxss="++]ode0x05000000>        "sref">shared;        \
shared;        \
 113        struc2         2                        2     23writel(shared;        \
shared;        \
  92        pr23_t                pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#u_28  28&qu2t;STA23L89" id="L89"G_GCRBBR" class" class="sref">hw_running ? "running" : &qu2t;0x&23ss="line" name="L110"> 110        struc2         2&qu2t;T &237;5ld)\n"" id="L148" class="line" >pan case srefese=pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre2         2                pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#de=mmio_base" cla" class="sref">hw_running ?href="+code=tv_sec" cufferxa3xx-gcu.c#L102" idcufferxa3xx="+c8  28 153static void
<2         2__func_" id="L148" class="line" >pan tail srefese=pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre2         2pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/hr="sref">base) / 4);       \de=mmio_base" cla" class="sref">hw_running ?href="+code=tv_sec" cufferxa3xx-gcu.c#L102" idcufferxa3xx="+co/video/pxa3xx-gcunuxx-gcu.c#L103" inuxss="o*51" .  76#ifdef gc_read" id="L148" class="line" >pan  class=pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre2                  pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#u_(52 2a"line" nuxx-gcu.c#L103" inuxss="o+ 63)7#L29" ~63)7*51" . 128
 110        struc2         2( 2a"line" irqa>(( 110        struc2         2ref="drivers/video/pxa3x2-gcu.25class"L13q] class="s/a>;
free;
freefree 155{
 156                 priv)
freepx23xx_g25ref">pxa3xx_gcu_batch *shared = priv->shared;        \
  92                ase = priv, REG_GCRBBR);                  \
  92        QDUMP2/a>(<25ss="line" name="L117"> 117static   NB &2 1<25_t                 129#define pxa3xx_2cu_52 2a>   3xx_gcu_2222a"line" name=if "!ref="drivers/vi4" cux-gcu.c#L102" id=" cux="+cline" name="L155"> 155{
  2L28">  282/a>gc_readl((PIRQ_NON"d="L"e" name="L92">  92        R2EG_GC26ss="line" name="L112"> 112        struc2"+code=RE2G_GCRBLR" class="sref">R2EG_GC26             *base_time.R2EG_GC26_t               hw_running ?href="+code=tv_sec" nux_ref="+codex-gcu.c#L103" inux_ref="+codess="++>R2EG_GC26="line" name="L85">  85#define REG_26ait_queue_heaif "c_readl" class=4" cux-gcu.c#L102" id=" cux="+co#L29"              \
s/vE"drivers/video/pxa3xx--gcu.c#8ine" name="L98">  98        void  * 2TThis program is distrib2ta>(<26sref">gc_readl(IE_EO2B26lt;9).IE_E2EOBgc_readl(<=shared" class=flush"running"base_time.pxa3xx_2_ALL" class="sref">IE_AL2L26NT(priv, base_time.  71#define 2SHARE27ef">timeval shared;        \
  98        void .base_time./* 2#define PXA3XX_GCU_DEBUG2 */  98        void shared-> :  * 23XX_GCU_DEBUG" class="sr2ef">P276ncgc= id="L148" class="linhared-> * 2bbut WITHOUT ANY WARRANT2;27sref">gc_readl(hw_running ?href="+code=tv_sec" nux_rdlgcu.c#L107" id="nux_rdlgss="++>hw_running ? "running" : QP27ss="line" name="L110"> 110        struc2(0)
 112        struc2"+code=QD2UMP" class="sref">QDUMP<2/a>(<28tv.__func__, pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/href="drivers/video/pxa3xx-gcu.c#u_28  28  85#define QERRO2R28sref">gc_readl(priv, base_time.gc_readl( 128
QP28lt;9).gc_readl(<=shared" class=" class="sref">hw_running ?href="+code=tv_sec" nux_dongcu.c#L107" id="nux_dongss="++>(  98        void p29"sref">gc_readl(.tv_sec,fump_whole_4" crxx_gc              \ss="sref">base_time.u32 2     29 class="sref"line" name="L128"> 128
d2ma_ad29id
shared        ref">pxa3xx_gcu_52 2a>   3xx_gcu_52 2a"line" name="L13q] clas3de/lixx_gcu_reset" class="2l-ers/vref="drivers/video/pxa3xx-gcu.c#de=mmio_base" cla"" cux-gcu.c#L102" id=" cux="+cl>(base_time.px29lt;9).__io29"sref">gc_reaa>(PIRQ_HANDLEDd="L"e" name="L92">  92        c2lk 128
  71#define 3ma_ad3r_t  71#define u32 3ef">r3sourceh * *priv)
 155{
  98        void shared  76#ifdef (ti30incgcu.c#L148" id="L148" class="line" Does not need=to be atomic. There's a  claaa =us   9pace,i1     e49U Gen'=pxa3xx_gcu_reset" class="sre3 9a href=3+ode=clk" class="sref">c310" c30NTpxa3xx_g=shared" class="sref">shared;        \
 112        struc3 shared;        \
"running" :   98        void __func__, shared;        \
shared->        ase = priv, REG_GCRBBR);                  \
base) / 4,      \
  76#ifdef gc_readl(REG_GCRBBR);   href="+code=tv_sec" /pxa3rdlgcu.c#L107" id="/pxa3rdlg.inlin3 31sref">gc_readl(shared;        \
"running" : gc_readl(str31ss="line" name="L129"> 129#define ( 155{
,       b="+k . 112        struc3ers/video3pxa3xx-gcu.c#L123" id="L323" c32tv.priv, REG_GCRBBR);                  \
base) / 4,      \
 112        struc3einlin3 32sref">__func__, shared;        \
  98        void gc_writel3/a>(s32ef">shared->gc_readl(gc_readl(gc_readl( 128
gc_realine" name="L128"> 128
QPRI3T32ss="line" name="L110"> 110        struc3         3                        3     33ref">pxa3xx_g=shared" class=sclude/lixx_gcu_reset" class="sref1o id="/a> 112        struc3  struct 3a href="+code=pxa3xx_gcu3share3" class="sref"a>(line" name="L128"> 128
  85#define   71#define  *priv)
 155{
pr33signene" name="L98">  98        void &qu3t;STA33L89" id="L89"a href="+code=val" rxa3xx_gcu_priv" creass="ode0>&qu3t;0x&33ss="line" name="L110"> 110        struc3         3&qu3t;T &34ref">pxa3xx_g=shared" class=sclude/lixx_gcu_reset" class="sref1o id="/a> 112        struc3         3shared;        \
  76#ifdef gc_read class=!ref="drivers/vi"sref">shared;        \
  98        void (priv, REG_GCRBBR);                  \
base) / 4,      \
 129#define REG_GCRBBR);   href="+code=tv_sec" /pxa3xx-gcu.c#L107" id="L107" class="".,                                      ref="drivers/vi"sref">shared;        \
 112        struc3ers/video3pxa3xx-gcu.c#L153" id="L353" c35tv. 155{
__func__, px33xx_g35="line" name="L85">  85#define gc_readl( 155{
QDUMP3/a>(<35sref">gc_readl(  NB &3 1<35lt;9).gc_readl(priv, REG_GCRBBR);                  \
base) / 4,      \
  98        void pxa3xx_3cu_52 2a>   3xx_gcu_3235NT(  2L28">  283/a>gc_readl(<        ref="drivers/virxa3xx_gcu_priv" creass="ode-code=priv" clasETIMEDOUe3xx_gcu_priv" cETIMEDOUess=">R3EG_GC36tv.R3EG_GC36tv. 128
R3EG_GC36_t       line" name="L128"> 128
R3EG_GC36="line" name="L85">  85#define REG_36ait_queue_head_t        sclude/lixx_gcu_reset" class="sref1o id="/a> * 3TThis program is distrib3ta>(<36ss="line" name="L117"> 117static IE_EO3B36tk((IE_E3EOB 128
pxa3xx_3_ALL" class="sref">IE_AL3L36ss="line" name="L110"> 110        struc3s/video/p3xa3xx-gcu.c#L71" id="L713" cla3s="lin* id="L148" class="line" Misc device layer=pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre3"+code=SH3ARED_SIZE" class="sref">3SHARE37ss="line" name="L112"> 112        struc3s/video/p3xa3xx-gcu.c#L73" id="L733" cla37tv 2a"line" ssize=spinlock" class=ssize=ss="line" name="L112"> 112        struc3shref="dr3#define PXA3XX_GCU_DEBUG3 */ *priv)
shared-> 2a"line" size=spinlock" class=size=ss="le=shared" class=counspinlock" class=couns;                  \
loff=spinlock" class=loff=sivers/video/pxa3xx-gcoffpcu.c#L107" id="offpss="line" name="L155"> 155{
  98        void  * 33XX_GCU_DEBUG" class="sr3ef">P37sref">gc_reada href="+code=val" rxa3xx_gcu_priv" creass="> * 3bbut WITHOUT ANY WARRANT3;37sref">gc_readed long free;
QP37              *priv)
=shared" class=contavidr_ofcu.c#L107" id="contavidr_ofde=REG_GCRBBR" classfilpcu.c#L107" id="filp;   
priv)
 112        struc3"+code=QD3UMP" class="sref">QDUMP<3/a>(<38tv.sharedQERRO3R38="lin= id="L148" class="linhared* but anyhow," iis is jus7 for"4" clsclas.=pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre3         3                        3     38writel(shared;        \
QP38lt;9).shared;        \
 110        struc3+code=pxa33xx_gcu_batch" class="sr3ef">p397;5ld)\n"" id="L148" class="line" Las7 wordea>s  ved=for"f="dr cuffer end lassand pri1     e49U Gen'=pxa3xx_gcu_reset" class="sre3+ivers/vi3code=pxa3xx_gcu_batch" c3lass=39tv.pxa3xcu.287;5ld)\n id="3156" 35sref">gc_readl( 128
shared.pxa3xx_gcu_52 23>   339"+co#L29"        /viu.c#L111" id="L111" class="8ine" name="L98">  98        void (priv)
{
 155{
__func__ href="+c3de=privIRQ_HANDLED class3"sref39w_running ? IE_E3EOB 1283/a>
IE_E3EOB  714define 3ma_ad3r_t...(  92        shared;      4 \
3ma_ad3r_t 112<4a>        struc3 shared4     41omic. There's a  claaa =us   9paceCopyreset"from6ode=Rinen'=="sre3de=pxa3xx_gcu_batch" c3lass=39tv.{
  92        pxa3xx_3pt=cu_p+codec_readl 155{
(  92        shared;  span class="-Ieu.c#L133" id="L133href="+code=tv_sec" nux_ref="void #define  ?href="+code=tv_sec" nux_dongcuhrefef="+c_   2rstor="+code=priv" cl hrefef="+c_   2rstor=
IE_E3EOB 112<4a>        struc3ers/vide43pxa34x-gcu.c#L123" id="L323" c32tv.pri4,4  92        share4;42  shared.  92        pxa3xx_3pt=cu_p[video/pxa3xx-gc id="L563<>pxa3xx_3xa3xx-gcu.]clasx01000000c#L90" id="L903" cla38ss="line" name="L4,IE_EO3B36tk((<4( 128
. 128
. 110<4a>        struc3        43    42s7 for"4" clsclas.=pri1     e49U Gen'e=pxa3xx_gcu_batch" c3lass=39tv. 112<4a>        struc3  struct43a hr4f="+code=pxa3xx_gcu3share3" class="sref"a>(<4 href="+c4de=privrxa3xx_gcu_priv" 4reass43a href="+codexa3ev="l_ref="+6" id="L563s>pxa3xx_3+code=QPRI">  92         1284/a>
shared  854define  155{
d="L113" class="8ine" name="L98">  98        void .  71#define {
  98        voi_  < href="dr3 href="dvoi_  < ="+crss/video/pxa3xx-gcNU href=2v        2NU hgcu.nc#L90" id="L903" cla38ss="line" name="L41IE_EO3B36tk((<4">  98shared;  span class="-Ieu.c#L133" id="L133href="+code=tv_sec" nux_ref="  voi_  < href="dr3 href="dvoi_  < ="+c">  92         110<4a>        struc3        43  98        void 3ma_ad3r_t 112<4a>        struc3        43  98        voi_  < href="dr3 href="dvoi_  < ="+crs/video/pxa3xx-gc6" id="L563s>pxa3xx_3+code=QPRIc#L90" id="L903" cla38ss="line" name="L4ehref="+c4ss="line" Does not need=4o be 4tomic.#L90" id="L903" cla38ss="line" name="L4e28"> 1284ared* but anyhow," i4s is 443gc_readl" cle="L/video/pxa3xx-gcu.c#L133" id="L133href="+code=tv_sec" ">"running" : __func__shared;      4 \
  98       ">base_time./* 2#define PXA3XX_GCU_DEBUG2 */  764ifdef gc_read cla4s=!ref="d4ivers/vi"sref">shared =  129<4a>#define   92 class=couns;   L151> 110<4class="s3xa3xx_gcu_priv"4creas44=pxa3xx_gcu_shared"3class30="line" name="L714an>,     4                        4     45r_t" class="sref">3ma_ad3r_t 112<4a>        struc3ers/vide43pxa34x-gcu.c#L153" id="L353" c35tv.. 1284"b="+k . * :cmg".__func__  854define .shared;  span class="-Ieilpcu.c#L107" id="filp;   
priv)
pri4,45ef="+code=gc_readl3 clas34NT(.. 112<4"b="+k . 128
/* 2#define PXA3XX_GCU_DEBUG2 */ 128
4define gc_read cla417"> 117<4a>static (.shared;  ="L"e" name="L92">  92ass="sref">privpriv)
/* 2#define PXA3XX_GCU_DEBUG2 */
pxa3x4_3_AL46f=3PRINT" class="sref">QPRI3T32ss="line" name="L410"> 110<4a>        struc3s/video/43xa3x4-gcu.c#L71" id="L713" cla3s="lin* id="L148" 4lass="lin4" Misc device layer=pri14    e47 creass="ode-eadl 112<4a>        struc3s/video/43xa3x4-gcu.css="sref">QPRI3T32ss="line" name="L42a"line" 4size=spinlock" class=ssi4e=ss=47omic.#L90" id="L903" cla38ss="line" name="L4"+code=pr4v" misc   3xxs="sref">pr4v4
priv" u_priv *__func__  98 4 33XX4GCU_DEBUG" class="sr3ef">P37sref">gc_reada hr4f="+code=4al" rxa3xx_gcu_priv" cre4ss=">4spa+codec_readspa+codec_sec" counspinlock"    id="L562+a href=   ="+crs/video/pxa3xx-gcvma#L107" id="cuffvma.c#La+codec_readl :vm_eng="+cr-/video/pxa3xx-gcvma#L107" id="cuffvma.c#La+codec_readl *4a href="+code=free" clas4="sre47g ?href="+code=tv_sec" nux_dongcilpcu.c#L107" id="filp;   
priv)
=share4" class=contavidr_ofcu.c4L107"4id="contavidr_swiclas/viu_opcu.c#L107vma#L107" id="cuffvma.c#La+codec_readl. 112<4a>        struc3"+code=Q43UMP"4833" class="licaseg0:#L73" id="L732" cla27tv.. 155{
    id="L562+a href=   ="+cr!s/video/pxa3xx-gcSHARED_SIZEid="L563"+code=SHARED_SIZE.c#L/pxa3xx-gcu.c#3154" 35sref">__func__gc_read cla4="+code=v4"sref">shared;      4 \
  92dmaammal_corese void shared-&g4c#L33" id4"L33" class="li3(0)
shared;        \
video/pxa3xx-gcu.c#L133" id="L133href="+code=tv_sec" ">"running" : "running_phy void shared;      4 \
( 110<4a>        struc3+code=px433xx_4893" class="licasegvideo/pxa3xx-gcSHARED_SIZEid="L563"+code=SHARED_SIZE.c#Lsref"" clac_readl(.s 4ved=f49d="contavidr_ofde=REG_n'=pxa3xx_gcu_reset" clahi3cooutre2++MMIO basegss="dire"drregister access=pxa3xx_gcu_batch" c3lass=39tv.. 128
 155{
    id="L562+a href=   ="+cr!s/video/pxa3xx-gcresource_    id="L562+a hrefresource_    
/* 2#define P"L98">  98        source_me __func__REG_36ait_queue_head_t<4_ass="lin4ref">pxa3xx_gcu_52 24>   349ass="o>e0line" namvideo/pxa3xx-gcvma#L107" id="cuffvma.c#La+codec_readl :pg
 ?   92io_remal_pfn_rang id="L562+a hrefio_remal_pfn_rang 
shared-&g4128"> 1284/a>
/* 2#define P"L98">  98        source_me "ru  rc#L107" id="cuff   rc    sref"" clac_readl(shared-&g5>  715define shared;    155"> 155{
    id="L562+a href=   ="+c+codec_readl  71#define QPRI3T32ss="line" name="L5f="+code=5unn/pxa3rdlgcu.c#L107" i5=""+c50omic.#L90" id="L903" cla38ss="line" name="L5f3"+code=5uc#L56" id="L562+/video/5=3+co5033" class="lieadlQPRI3T32ss="line" name="L5f5"+code=5aef">pxa3xx_gcu_52 253ait_5ueue_head_t" class=3sref"30writel(IE_EO3B36tk((<5>7+code=v5sL33" class="li2href="+c53+cod50ef1o #ifdefgc_readl(IE_EO3B36tk((<5>8+code=v5se=privIRQ_HANDLED class5o be 50ef="+       ref="driver           +codr_li"Lntref1o id="/a>+codr_li"L3" cliver               \
misc debug"+cod="L563s>pxa3xx_3p   \
misc debug"+cod=                  3     37S "
shared;      5 \
    \
misc debug"+coddBBR
__func__ 112<5a>        struc3 .shared5     51omic. There&#ref="drivers/video/pxa3xx-gcu.c#L155" id="L155" class="od)dlpxa3xx_3pt=cu_p              3     37S "shared = (.f "c_retCU_DEBUG_E3G_elass="sre+++++iverse="3_EEOB" class="sref">IE_E3EOBshared;      5 \
(IE_E3EOB)dl.IE_E3EOB(IE_E3EOB 112<4a5        s5ruc3ers/vide43pxa34x-gcu5c#L125" id="L323" c32tv.IE_E3Eadd" clas="d5ivers51ef1o id="/a>share4;42  pxa3xx_5xa3xx-gcu.]clasx010000005#L90"5id="L9#3154" 35sref">__func__ 112<5a> ="+k .shared;      5 \
IE_E3EOB 128. 128 128QPRI3T32ss="line" name="L5f="+code=5una3xx-gcNU5href=2v        2NU hgcu.5#L90"53d="L903" cla38ss="line" name="L4"+code=pr4v" misc   35>
  98        voadd"8">  9="d5i5" class="odpxa3xx_latform_s="linThere&#ref="drivers/vs="      4 \
(.shared5     51omic. There&#ref="drivers/video/pxa3xx-gcu.c#L155" id= debug"+coddBBR
__func__ 112<5a> n/pxa3xx-5cu.c#L107" i4=""+c43clas5="sre53      3     37S "free;
pxa3xx_3+code=QPRI5#L90"53_DEBUG2 */(free;
<)drivers/vi"sref">GFP_KERNE5uc#L56" id="L56GFP_KERNE5" xa3xx-gcu.c#L1   \
misc debug"+cod="L563s>p-gc6" id=5L563s>pxa3xx_3+code=QPRI5#L90"54tch" c3lass=38ss="line" name="L4ehre4="+code=v4sclude/lixx_gcu_r debug"+coddBBR
.s="lin* id="L148" 4lass="lMEMuc#L56" id="L562"lMEM-gcu.c#L1uffera> ?>pxa3xx_3+code=QPRI5#L90"5id="L903" cla38ss="line" name="L4ehref="+c4s5="line" D5es not need=4o be 4tomic5#L90"5id="L903" cla3line" name="L4ehre4="+code=v4sclude/lixx_gcu_rxa3xx_g4u_pri42ef1o id="/a>;      4 \
;="d5ivers51ef1o id="/a>pxa3xcu.287;5ld)\n id="3156" 35sref">gc_re  43f   rc    sref"" clac_readl(__________________________vers51ef1o id="/a>/* 2#define PX53XX_G54tch" c3lass=39tv.;  span clkcu_priv" c/pxa3ev="l_reuhre4="+code=v4sclude/lixx_gcu_r xx-gcu.c#L1   \
misc debug"+cod="L563s>p-/pxa3xx-5563s" name="3          n5#L90"54d="L732" cla27tv. ?> = 
.  92        3ma_ad3r_t 112<4a5        s5ruc3ers/vide43pxa34x-gcu5c#L1555 id="L323" c32tv.shared;  span class="-Ieu.c#L133" id="L133href="+code=tv_sec" nux_ref="void 
((share"8">  9codec_readl  9c="d5i5" class="odpxa3xx_latform_s="linThere&#ref="drivers/vs="      4 \
(pri4,45ef="5code=55_DEBUG3_TIME37ef">7tv.shared5     51omic. There&#ref="drivers/video/pxa3xx-gcu.c#L155" id= debug"+coddBBR
 :cmg".free;
pxa3xx_3+code=QPRI">  92        /* 2#define PX53XX_G5U_DEBUG2 */pxa3xx_3+href="+code=tv_sec" nux_ref="void   92  5_GC46ss=s5ze=ss="le=shared="L"e" 05#L90"5id="L903" cla38ss="line" name="L4a>       4s5lude/lixx5gcu_reset" c4ass="46f="+5ode=g56      3     37S ";      4 \
;="d5ivers51ef1o id="/a>pxa3xcu.287;5ld)\n id="3156" 35sref">gc_re  43f   rc    sref"" clac_readl(...................a>./* 2#define PX53XX_G56_DEBUG2 */p5a3x4_3_AL46f=3PRINT" cla5s="sr56d="L903" cla38ss="line" name="L4f0">khared;  span clkcu_priv" c/pxa3ev="l_reuhre4="+code=v4sclude/lixx_gcu_r xx-gcu.c#L1   \
misc debug"+cod="L563s>p        s5ruc3s/video/43xa3x4-gcu.5#L71"57hared"3class30="line" name="L714an>,     4 5-gcuNOSYS5287;5ld)\n id=uNOSYS    5     57d="L732" cla27tv.ideo/pxa3xx-gccuffer/pxa3xx-gcud="L563s>pxa3xx_3+href=rs/video/pxa3xx-gc6" id="L563s>pxa3xx_3+code=QPRI">  92  5       st5uc3s/video/43xa3x4-gcu.c5s="sr57 id="L323" c37 
4
sharedshared;  span class="-Ieu.c#L133" id="L133code=QPRI">  92        
 4 33XX4GCU_DE5UG" c57class=3sref"30writel((s>5     51omicobnd="L563s>pxa3xx_5     51omicobn="d5i5" class="odpxa3xx_latform_s="linThere&#ref="drivers/vs="      4 \
pxa3xxirqn'=5++++++++++++rq    .shared5     51omic. There&#ref="drivers/video/pxa3xx-gcu.c#L155" id=id sharedshared5     51omic. Ther)drivers/vi"sref">GFP_KERNE5uc#L56" id="L56GFP_KERNE5" xa3xx-gcu.c#L1   \
misc debug"+cod="L563s>p-gcuINVAh5ef=2v        2uINVAh    5     58tch" c3lass=39tv.* b5t anyhow," i4s is 48f="+5ode=g5_readl"3class3"sref">gc_read  id="L148" 4lass="lMEMuc#L56" id="L562"lMEM-gcu.c#L1uffera> ?>shar5d;      4 \
f "4,   98        voadd"8">  9="d5i_g4u_pri42ef1o s="      4 \
privpriv)
.4\
 15egss="dir5"drregister access=pxa3x5_gcu_59d="L732" cla27tv.8ss="line" name="L4f0">oev_er98        vooev_er9="d5ivers51ef1o id="/a>.........gopriv ?>_7 

;queue_hea_page\
;queue_hea_="d5ivers51ef1o id="/a>sx_gcu_priv" 4reass46i"sr/a>;  ="L"e" ref1o id="/a>.;queue_hea_page\
;queue_hea_="d5ivers51ef1o id="/a>sx_gcuhared;  span clx_gcuhare"e" ref1o id="/a>sr=
shar507" id="cuffvm_   rc    53XX_G59      3     37S "(.QPRc3lass=39tv..s            \
misc fopex-gcu.c#L103" cu.c#L10id=".ok1own 98        voown 9ch" c3lnuxx-gcu.c#L403" THIS_MODU3"+code=I43_EOB46THIS_MODU3"-gcu.c#L1uffera> ?>pxa3xx6gcu_52 253ait_5ueue_6ead_t60      3     3 source_me ="+chref=4+++++++++++++++++!ref="d4ivers4vi"sref">s            \
misc fopex-gcu.c#L103" cu.c#L10id=".ok1writed;  span clxritech" c3lnuxx-gcu.c#L403" >5     51om-gcu.writed;  span cl>5     51om-gcu.write-gcu.c#L1uffera> ?>pxa3xx6g="cuffvm_page\
s            \
misc fopex-gcu.c#L103" cu.c#L10id=".ok1class=ed"> 1284"b="+k . 128-gcud="L563s>pxa3xx_3+c5     51om-gcu.> 1284"b="+k . ?>pxa3xx6gli2href="+c42de=_49iver6="sre60etCU_DEBUG_E3G_elass="sre++++ref=4+++++++++++++++++!ref="d4ivers4vi"sref">s            \
misc fopex-gcu.c#L103" cu.c#L10id=".ok1="+co4 2a"line"c4ass=si c3lnuxx-gcu.c#L403" >5     51om-gcu.="+co4 2a"line" size=spinl4ck" c4ass=si.c#L1uffera> ?>pxa3xx6g7" id="cuffvm_   rc    6     6       3     37S "
.s     s="      4 \
c#L107" 6t="L563s>pxa3xx_3pt=cu_p6pxa3x61sref">3ma_ad3r_t 112<4a>        struc3        433ma_nuxx-gcu.c#L403" DRV_NAM"+code=I43_EOB46DRV_NAM""cuff 3     37S "2#L107" 6uc3 .s     s="      4 \
3ma_nuvers51ef1o id="/a>s            \
misc fopex-gcu.c#L103" f 3     37S "3#L107" 6t="L563s>pxa3xx_3pt=cu_p6     6       3     37S "(.s     s="      4 \
 16ainitre2+6+cod=#ref="durOn'e=pxa3x6_gcu_61pxa3xx3-gcu.387;5ld)\n"        vooev_er9="d5ivers51ef1o id="/a>8>pxa3xx6 \
misc debug"+cod=    /6>f "c61pxa3xx3-gcu.38L89" id87;5ld)\n"priv ?>
IE_E3EOB 112<4a6        s6ruc3ers/vide43pxa34x-gcu6c#L126" id="L323" c32a href="+4"L148" cl4ss="linele IO as="L562saer42i1     e49U Gen'=pxa3xx_gcu_reset" claApp+i6xx-gc id=6L563<>pxa3xx_3xa3xx-gcu.6#L90"62d="L903" cla3line" name="L4epxa3xx-gccuffer/f="volnuxx-gcu.c#L403" >latform_get_id="L562d_tlatform_get_id="L562="d5i_g4u_pri42ef1o s="      4 \
share4;42    92         =  16e" class=6sre3+ivers/vi3code=pxa3x6_gcu_62"sref"3>REG_36ait_queue_head_t<4_assoev_er98        vooev_er9="d5ivers51ef1o id="/a> ?> ?>pxa3xx6a3xx_gcu_reset" cl=pxa3x6_gcu_62_DEBUG2 */
  98        source_me  155{
    id="L562+a href=   ="+cr!s/vi;xa3xx-gccuffer/f="vo)drivers/vi"sref">s="      4 \
 16/j-g id="6563s" name="3          n6#L90"63d="L732" cla27tv.oev_er98        vooev_er9="d5ivers51ef1o id="/a>_go ?>

s mio_s 4vo4 2a"line"c4io_s 4v="volnuxx-gcu.c#L403" ioning  98        source_me  155{
    id="L562+a href=   ="+cr!s/vi;xa3xx-gccuffer/f="vo)ref1o id="/a>s mio_s 4vo4 2a"line"c4io_s 4v="vo =  16/8>pxa3xx6L563s>pxa3xx_3+code=QPRI6#L90"63pxa3xx3-gcu.387;5ld)\n"        vooev_er9="d5ivers51ef1o id="/a>f "4, pxa3xx_3+code=QPRI6#L90"64d="L732" cla27tv.go ?>  71#6-gc6" id=6L563s>pxa3xx_3+code=QPRI6#L90"6id="L903" cla38ss="line" name="L4ehref="+c4s6="line" D6es not need=4o be 4tomic6#L90"6id="L903" cla3la href="+4"L148" cl4ss="allocate dma memory er42i1     e49U Gen'=pxa3xx_gcu_reset" claApp+i6uot;shareds>;        \
video/pxa3xx-gcu.c#eset" c4ass="4ref1ode"allocared;      4 \
;="d5ivers51ef1o id="/a> 110<4a>        struc3+code=px433xx_48f 3     37S "/* 2#define PX63XX_G64"sref"3>REG_36ait_queeeeeeeeeeeeeeeeeeeeeeeeeeevers51ef1o id="/a>sr(.s>;        \
video/pxa3xx-gcu.c# =  16-gc6" id=6/a> = f "4,  ?>.go ?>  71#6        s6ruc3ers/vide43pxa34x-gcu6c#L1565d="L903" cla38ss="line" name="L4ehref="+c4s6xa3xx_gcu6p4iv" c45ine" name="L_re6c#L1565d="L903" cla3la href="+4"L148" cl4ss="enable deo/cass= er42i1     e49U Gen'=pxa3xx_gcu_reset" claApp+i6cu.c#L56"6rsharedsclv_sec" xa3xx-gcuclvu.c#eset" c4ass="4ref1clv_get_sec" xa3xx-gcuclv_get="d5ivers51ef1o id="/a>  92         .c#L1uffera> ?>sclv_sec" xa3xx-gcuclvu.c#) =  16#L56" id=6L563s" name="3          6     65      3     37S "        vooev_er9="d5ivers51ef1o id="/a> ?>;    155er9"care"dha-gcu.c#L1uffera> ?>pri4,45ef="6code=65_DEBUG3_TIME37   71#6.c#L107cm6" :cmg".3ma_ad3r_tsclv_sec" xa3xx-gcuclvu.c#).c#L1uffera> ?> < 0 =  16#L56" id=6L562ment">/* 2#define PX63XX_G66gcu.c#3154" 35sref">_;        vooev_er9="d5ivers51ef1o id="/a> ?>  71#6.L56" id=6gcu_reset" c4ass="46f="+6ode=g66class=3sref"30writel((/* 2#define PX63XX_G66etCU_DEBUG_E3G_elass="sre+++irqn'=5++++++++++++rq    lnuxx-gcu.c#L403" >latform_get_irqn'=5+++++++++++>latform_get_irq="d5i_g4u_pri42ef1o s="      4 \
p6a3x4_3_AL46f=3PRINT" cla6s="sr66d="L903" cla39tv<4" i3d="ref=de"irqn'=5++++++++++++rq    l< 0 =  16        s6ruc3s/video/43xa3x4-gcu.6#L71"67d="L732" cla27tv.;        vooev_er9="d5ivers51ef1o id="/a>.f "4,  ?> ?>  71#6xs="sref"6pr4v4
.size=spinllinele_irqx_48f 3     37S " 4 33XX4GCU_DE6UG" c67      3     37S "tttttttttt0f84" i3d="ref=de"DRV_NAM"+code=I43_EOB46DRV_NAM""cuff84" i3d="ref=de"ss="sref">privpriv)
 16 L56" id=6L563(0)
priv)
p6f "4, .go ?>  71#6+code=Q436MP"4833" class="licaseg06#L73"68d="L903" cla38ss="line" name="L4ehref="+c4s6+e=spinlo6latform_set_drv4ord="d5i_g4u_pri42ef1o s="      4 \
privpriv)
shared 155{
    id="Lmemval" nuxx-gcu.c#L403" rxa3xx-gccuffer/f="voiv" class="sref">priv)
.priv)
.pxa3xx_3init"+cod+++++-Ieinit"+co="d5iriv" class="sref">priv)
shar6d;      4 \
  98        source_me sr.DEBUG_E3G_elass="sre+++0"> 110<4a>        struc3+code=px433xx_48f3G_elass="sre+++irqn'=5++++++++++++rq    riv" class="sref">priv)
sharedsclv_sec" xa3xx-gcuclvu.c#).c#L1uffera> ?>.;      5 \
sclv_sec" xa3xx-gcuclvu.c#).c#L1uffera> ?>(;    155er9"care"dha-gcu:03" cla38ss="line" name="L4ehref="+c4s6e;      4 \
;="d5ivers51ef1o id="/a> 110<4a>        struc3+code=px433xx_48f 3     37S "shar607" id="cuffvm_   rc    63XX_G69d="L903" cla38ss="linnnnnnnnnxx-gcu.c#L403" href=4+++++++++++++++++!ref="d4ivers4vi"sref">srprivsr. 2a"line"ioun"+ca href=   ="+cr!s/vihref=4+++++++++++++++++!ref="d4ivers4vi"sref">s mio_s 4vo4 2a"line"c4io_s 4v="vo .c#L1uffera> ?>.  98        source_me  155{
    id="L562+a href=   ="+cr!s/vi;xa3xx-gccuffer/f="vo)ref1o id="/a>pxa3xx7gcu_52 253ait_5ueue_7ead_t70class=3sref"30writel(pxa3xx7gli2href="+c42de=_49iver7="sre70etCU_DEBUG_E3G_elass="sre+++     s=tavidr_o   \
misc fopex     s=tavidr_o-gcuivers51ef1o id="/a>s     s="      4 \
privc#L107" 7t="L563s>pxa3xx_3pt=cu_p7pxa3x71sref">3ma_ad3r_tlatform_set_drv4ord="d5i_g4u_pri42ef1o s="      4 \
  92         .c#L1uffera> ?>2#L107" 7uc3 .  9codec_readl  9c="d5i_g4u_pri42ef1o s="      4 \
privpriv)
3#L107" 7t="L563s>pxa3xx_3pt=cu_p7     71d="L903" cla3line" name="L4ekhared;  span clkcu_priv" c/pxa3ev="l_reuss="sref">privpriv)
gcuINVAh7nuxx-gcu.c#L503" i51  f "4, priv)
5cuINVAh73cod= code * 3TThis prog7am is71d="L77 
((f "c71d="L9vers4vi"sref">s>5     51omremoved;  span cl>5     51omremoveriv" 5" class="odpxa3xx_latform_s="linThere&#ref="drivers/vs="      4 \
pxa3xx7563s" name="3          n7#L90"71_DEBU" id="cuffvma.c#La+codec_readl.shared5     51omic. There&#ref="drivers/video/pxa3xx-gcu.c#L155" id=lnuxx-gcu.c#L403" >latform_get_drv4ord      4 \
latform_get_drv4ord="d5i_g4u_pri42ef1o s="      4 \
priv)
  92         155{
    id="Lmemval"iv" class="sref">priv)
pxa3xx_3xa3xx-gcu.7#L90"72d="L903" cla3line" name="L4e>5     51omx_gcu_priv" 4reass46i"sr>5     51omx_gcu_pririv" c/pxa3ev="l_reuss="sref">privpriv)
share4;42  .s     s="      4 \
.;      4 \
;="d5ivers51ef1o id="/a> 110<4a>        struc3+code=px433xx_48f 3     37S "srprivsr 2a"line"ioun"+ca href=   ="+cr!s/vihref=4+++++++++++++++++!ref="d4ivers4vi"sref">s mio_s 4vo4 2a"line"c4io_s 4v="vo .c#L1uffera> ?>  98        source_me  155{
    id="L562+a href=   ="+cr!s/vi;xa3xx-gccuffer/f="vo)ref1o id="/a>.latform_set_drv4ord="d5i_g4u_pri42ef1o s="      4 \
  92         .c#L1uffera> ?>3ma_ad3r_tsclv_sec" xa3xx-gcuclvu.c#).c#L1uffera> ?>.  9codec_readl  9c="d5i_g4u_pri42ef1o s="      4 \
privpriv)
privpriv)

4define 
pxa3xx7L563s>pxa3xx_3+code=QPRI7#L90"73pxa3x13" cla5" class="odpxa3xx_5     51omsa hre="vod="" id="cuffvma.c#La+codec_readlpxa3xx_cobn="d5cla3nuxx-gcu.c#L403" >5     51omicobnd="L563s>pxa3xx_5     51omicobn="d5f 3     37S "pxa3xx_3+code=QPRI7#L90"74d="L732" cla2cu.c#L10id=".ok1removed;  span clremoveriv"a3nuxx-gcu.c#L403" __s="exif_co4 2a"line"__s="exif_criv" c/pxa3ev="l_reus5     51omremoved;  span cl>5     51omremoveriv")f 3     37S "pxa3xxsa hre="vodd="" id="cuffvma.c#La+codec_readlpxa3xx_3+code=QPRI7#L90"74d="L903" cla38ss="lincu.c#L10id=".ok1own 98        voown 9ch" c3nuxx-gcu.c#L403" THIS_MODU3"+code=I43_EOB46THIS_MODU3"-gcuf 3     37S "_cu.c#L10id=".ok1pt=c=rs/video/pxa3xxt=cref">3mnuxx-gcu.c#L403" DRV_NAM"+code=I43_EOB46DRV_NAM""cuff 3     37S "/* 2#define PX73XX_G74"sref}=b4   854define (pxa3xx_5     51omsa hre="voriv" class="sref">priv)
 = priv)
#L56"IMEOUentriv" class="sref">priv)
priv)
_;a hre5="+co5e=gc_readl" clDenis Olspa+ Kroppl<dok@directfb.org"d4i, #L56"IMEOUentf1o id="/a>priv)



The original LXR software by deo/" class="http:// id="forge.net/projects/lxo >LXR a hrunity"cuff87 is experire5(al f">pion by " class="mailto:lxo@43/ux.no">lxo@43/ux.no"cuf.
lxo.43/ux.no kindly hosted by " class="http://www.redpill-43/pro.no">Redpill L3/pro AS"cuff8proiv