12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294 |
- /*
- * drivers/input/keyboard/epaper.c
- * AUO epaper Interface on S3C2416 in Qisda eBook
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- */
- #include "epaper.h"
- #ifdef EPAPER_BOOT_CODE
- #include <common.h>
- #include <regs.h>
- #include <asm/io.h>
- #else //KERNEL
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/input.h>
- #include <linux/platform_device.h>
- #include <linux/miscdevice.h>
- #include <linux/delay.h>
- #include <asm/hardware.h>
- #include <asm/io.h>
- #include <asm/delay.h>
- #include <asm/irq.h>
- #include <asm/arch/regs-gpio.h>
- #include <asm/arch/regs-timer.h>
- #include <asm/arch/regs-lcd.h>
- #include <asm/arch/regs-watchdog.h>
- #include <linux/clk.h>
- #endif
-
- //#define S3C_EPAPER_QISDA_DEBUG
- #ifdef S3C_EPAPER_QISDA_DEBUG
- #ifdef EPAPER_BOOT_CODE
- #define DPRINTK(x...) //Be careful of code size if printf too much
- #else //KERNEL
- #define DPRINTK(x...) printk("S3C-Epaper-qisda " x)
- #endif
- #else
- #define DPRINTK(x...) /* !!!! */
- #endif
- #ifdef EPAPER_BOOT_CODE
- #define rGPCCON GPCCON
- #define rGPCDAT GPCDAT
- #define rGPDCON GPDCON
- #define rGPDDAT GPDDAT
- #define rGPCUDP GPCPU
- #define rGPDUDP GPDPU
- #define rGPLDAT GPLDAT
- #define rGPLCON GPLCON
- #define rGPLUDP GPLPU
- #define rGPBCON GPBCON
- #define rGPBDAT GPBDAT
- #define rGPGCON GPGCON
- #define rGPGDAT GPGDAT
- #define rGPECON GPECON
- #define rGPEDAT GPEDAT
- #define rGPFCON GPFCON
- #define rGPFDAT GPFDAT
- #define rVIDCON0 VIDCON0 //VIDEO CONTROL REGTISTER 0
- #define rSYSIFCON0 SYSIFCON0 //SYSTEM INTERFACE MAIN LDI
- #define rSYSIFCON1 SYSIFCON1 //SYSTEM INTERFACE SUB LDI
- #define rSIFCCON0 SIFCCON0 //SYSTEM INTERFACE COMMAND CONTROL
- #define rSIFCCON1 SIFCCON1 //SYSTEM IF COMMAND DATA WRITE CONTROL
- #define rSIFCCON2 SIFCCON2
- #else //KERNEL
- #define rGPCCON S3C2410_GPCCON
- #define rGPCDAT S3C2410_GPCDAT
- #define rGPDCON S3C2410_GPDCON
- #define rGPDDAT S3C2410_GPDDAT
- #define rGPCUDP S3C2410_GPCUP
- #define rGPDUDP S3C2410_GPDUP
- #define rGPLDAT S3C2410_GPLDAT
- #define rGPLCON S3C2410_GPLCON
- #define rGPLUDP S3C2410_GPLUP
- #define rGPBCON S3C2410_GPBCON
- #define rGPBDAT S3C2410_GPBDAT
- #define rGPBUDP S3C2410_GPBUP
- #define rGPGCON S3C2410_GPGCON
- #define rGPGDAT S3C2410_GPGDAT
- #define rGPECON S3C2410_GPECON
- #define rGPEDAT S3C2410_GPEDAT
- #define rGPFCON S3C2410_GPFCON
- #define rGPFDAT S3C2410_GPFDAT
- #define rTCFG0 S3C2410_TCFG0 //Configures the two 8-bit presclers
- #define rTCFG1 S3C2410_TCFG1 //5-MUX & DMA mode selecton
- #define rTCNTB3 S3C2410_TCNTB(3) //Timer 3 count buffer
- #define rTCMPB3 S3C2410_TCMPB(3) //Timer 3 compare buffer
- #define rTCON S3C2410_TCON //Timer control
- #define rVIDCON0 S3C_VIDCON0 //VIDEO CONTROL REGTISTER 0
- #define rSYSIFCON0 S3C_SYSIFCON0 //SYSTEM INTERFACE MAIN LDI
- #define rSYSIFCON1 S3C_SYSIFCON1 //SYSTEM INTERFACE SUB LDI
- #define rSIFCCON0 S3C_SIFCCON0 //SYSTEM INTERFACE COMMAND CONTROL
- #define rSIFCCON1 S3C_SIFCCON1 //SYSTEM IF COMMAND DATA WRITE CONTROL
- #define rSIFCCON2 S3C_SIFCCON2
- #define rVIDTCON2 S3C_VIDTCON2
- #endif
- #define I80_LANDSCAPE_CS_SETUP (0)
- #define I80_LANDSCAPE_WR_SETUP (0)
- #define I80_LANDSCAPE_WR_ACT (1)
- #define I80_LANDSCAPE_WR_HOLD (0)
- #define I80_PORTRAIT_CS_SETUP (0)
- #define I80_PORTRAIT_WR_SETUP (2+1) //+1
- #define I80_PORTRAIT_WR_ACT (6+2) //+2
- #define I80_PORTRAIT_WR_HOLD (2+1) //+1
- #define I80_LANDSCAPE_HANDWRITING_CS_SETUP (0)
- #define I80_LANDSCAPE_HANDWRITING_WR_SETUP (1)
- #define I80_LANDSCAPE_HANDWRITING_WR_ACT (1)
- #define I80_LANDSCAPE_HANDWRITING_WR_HOLD (0)
- #define I80_PORTRAIT_HANDWRITING_CS_SETUP (0)
- #define I80_PORTRAIT_HANDWRITING_WR_SETUP (2)
- #define I80_PORTRAIT_HANDWRITING_WR_ACT (6)
- #define I80_PORTRAIT_HANDWRITING_WR_HOLD (2)
- #define VIDTCON2_LINEVAL_S (11)
- #define VIDTCON2_HOZVAL_S (0)
- #define VIDCON0_S_CPU_IF_MAIN (2<<22)
- #define VIDCON0_S_RGB_PAR (0<<13)
- #define VIDCON0_S_VCLK_GATING_OFF (1<<5)
- #define VIDCON0_S_CLKDIR_DIVIDED (1<<4)
- #define VIDCON0_S_CLKSEL_HCLK (0<<2)
- #define VIDCON0_CLKVAL_F_SHIFT (6)
- #define VIDCON0_ENVID_ENABLE (1<<1)
- #define VIDCON0_ENVID_F_ENABLE (1<<0)
- #define SYS_WR_CON (1<<6)
- #define SYS_OE_CON (1<<7)
-
- #define rWTCON S3C2410_WTCON //Watch-dog timer mode
- #define rWTDAT S3C2410_WTDAT //Watch-dog timer data
- #define rWTCNT S3C2410_WTCNT //Watch-dog timer count
- #define LCD_DELAY_1MS 18000
-
- #define BUSY_WAIT_TIMEOUT (40*5*2) //panel time out = 1s
- #define PROGRESS_BAR_X (29)
- #define PROGRESS_BAR_Y (769)
- #define PROGRESS_BAR_W (563-28)
- #define PROGRESS_BAR_H (785-769)
- #define PROGRESS_BAR_90_X (101)
- #define PROGRESS_BAR_90_Y (301)
- #define PROGRESS_BAR_90_W (400)
- #define PROGRESS_BAR_90_H (60)
- #define PROGRESS_BAR_FRAME_LINE_W 8
- typedef enum {
- EN_I80_NONE = -1,
- EN_I80_LANDSCAPE = 0,
- EN_I80_PORTRAIT,
- EN_I80_LANDSCAPE_HANDWRITING,
- EN_I80_PORTRAIT_HANDWRITING,
- }I80_HWE_SPEED_MODE;
- //Global var
- static int delayLoopCount =150;//2M
- static int partial_update_mode = PARTIAL_DSP_MODE_0;
- static int gUser_h_resolution = AUO_EPAPER_PHYSICAL_H_RESOLUTION; //This is logic resolution, not PHYSICAL resolution, depand on rotation degree
- static int gUser_v_resolution = AUO_EPAPER_PHYSICAL_V_RESOLUTION; //This is logic resolution, not PHYSICAL resolution, depand on rotation degree
- static int gRotateDegree = 0;
- static unsigned char lcd_vbpd=0,lcd_vfpd=0,lcd_vspw=0,lcd_hbpd=0,lcd_hfpd=0,lcd_hspw=0;
- static unsigned short lcd_horizon_value=0,lcd_line_value=0;
- static unsigned char lcd_cs_setup=0,lcd_wr_setup=0,lcd_wr_act=0,lcd_wr_hold=0;
- static unsigned char lcd_frame_rate=50;
- static I80_HWE_SPEED_MODE gI80_Current_Speed = EN_I80_NONE;
- #ifdef EPAPER_BOOT_CODE
- //extern unsigned short Loading_Data[];
- #else
- extern unsigned short shutdown[];
- EXPORT_SYMBOL(Epaper_Shutdown_Logo);
- EXPORT_SYMBOL(Epaper_Get_Partial_Update_Mode);
- EXPORT_SYMBOL(Epaper_Power);
- EXPORT_SYMBOL(Epaper_Draw_Point);
- #endif
- /*
- 1. loops = 1 --> 25ns
- 2. loops = 75 --> 1 us
- 3. loops = 100000 --> 1ms
- */
- static inline void nDelay(unsigned long loops) //in ns
- {
- int i;
- __asm__ volatile ("1:\n" "subs %0, %1, #1\n" "bne 1b":"=r" (loops):"0"(loops));
-
- }
- static void __mDelay(unsigned long mTime)
- {
- unsigned long cnt=0;
- for(cnt=0;cnt<mTime;cnt++)
- nDelay(100000);
- }
- static void __uDelay(unsigned long uTime)
- {
- unsigned long cnt=0;
- for(cnt=0;cnt<uTime;cnt++)
- nDelay(75);
- }
- void Epaper_Change_I80_Speed(I80_HWE_SPEED_MODE i80_speed, unsigned short w, unsigned short h)
- {
- unsigned long tmp;
- unsigned char clkval=0;
- unsigned short h_cnt,v_cnt;
- unsigned long vclk;
- struct clk *lcd_clock;
- int HCLK ;
- if(gI80_Current_Speed == EN_I80_NONE)
- {
- Epaper_Set_I80_Default_Speed(i80_speed, w, h);
- return;
- }
-
- lcd_line_value = h;
- if((w%32) != 0) //DMA use WINCONx_4WORD_BURST, i.e. 16 bytes, i.e. 32 pixel
- w += 32 - (w%32);
- //printk("\nNew ( %d, %d)\n", w,h);
- lcd_horizon_value = w;
- switch(i80_speed)
- {
- default:
- case EN_I80_LANDSCAPE:
- lcd_cs_setup = I80_LANDSCAPE_CS_SETUP;
- lcd_wr_setup = I80_LANDSCAPE_WR_SETUP;
- lcd_wr_act = I80_LANDSCAPE_WR_ACT;
- lcd_wr_hold = I80_LANDSCAPE_WR_HOLD;
- break;
- case EN_I80_PORTRAIT:
- lcd_cs_setup = I80_PORTRAIT_CS_SETUP;
- lcd_wr_setup = I80_PORTRAIT_WR_SETUP;
- lcd_wr_act = I80_PORTRAIT_WR_ACT;
- lcd_wr_hold = I80_PORTRAIT_WR_HOLD;
- break;
- case EN_I80_LANDSCAPE_HANDWRITING:
- lcd_cs_setup = I80_LANDSCAPE_HANDWRITING_CS_SETUP;
- lcd_wr_setup = I80_LANDSCAPE_HANDWRITING_WR_SETUP;
- lcd_wr_act = I80_LANDSCAPE_HANDWRITING_WR_ACT;
- lcd_wr_hold = I80_LANDSCAPE_HANDWRITING_WR_HOLD;
- break;
- case EN_I80_PORTRAIT_HANDWRITING:
- lcd_cs_setup = I80_PORTRAIT_HANDWRITING_CS_SETUP;
- lcd_wr_setup = I80_PORTRAIT_HANDWRITING_WR_SETUP;
- lcd_wr_act = I80_PORTRAIT_HANDWRITING_WR_ACT;
- lcd_wr_hold = I80_PORTRAIT_HANDWRITING_WR_HOLD;
- break;
-
- }
- tmp = __raw_readl(rSYSIFCON0);
- tmp = (lcd_cs_setup<<16)|(lcd_wr_setup<<12)|(lcd_wr_act<<8)|(lcd_wr_hold<<4)|(1<<2)|(1<<1)|(1);
- __raw_writel(tmp, rSYSIFCON0);
- tmp = __raw_readl(rSYSIFCON1);
- tmp = (lcd_cs_setup<<16)|(lcd_wr_setup<<12)|(lcd_wr_act<<8)|(lcd_wr_hold<<4)|(1<<2)|(1<<1)|(1);
- __raw_writel(tmp, rSYSIFCON1);
- tmp = __raw_readl(rVIDTCON2);
- tmp = ((lcd_line_value-1)<<VIDTCON2_LINEVAL_S)|((lcd_horizon_value/4)-1);
- __raw_writel(tmp, rVIDTCON2);
- gI80_Current_Speed = i80_speed;
- }
- void Epaper_Set_I80_Default_Speed(I80_HWE_SPEED_MODE i80_speed, unsigned short w, unsigned short h)
- {
- unsigned long tmp;
- unsigned char clkval=0;
- unsigned short h_cnt,v_cnt;
- unsigned long vclk;
- struct clk *lcd_clock;
- int HCLK ;
- lcd_line_value = h;
- lcd_horizon_value = w;
- switch(i80_speed)
- {
- default:
- case EN_I80_LANDSCAPE:
- lcd_cs_setup = I80_LANDSCAPE_CS_SETUP;
- lcd_wr_setup = I80_LANDSCAPE_WR_SETUP;
- lcd_wr_act = I80_LANDSCAPE_WR_ACT;
- lcd_wr_hold = I80_LANDSCAPE_WR_HOLD;
- break;
- case EN_I80_PORTRAIT:
- lcd_cs_setup = I80_PORTRAIT_CS_SETUP;
- lcd_wr_setup = I80_PORTRAIT_WR_SETUP;
- lcd_wr_act = I80_PORTRAIT_WR_ACT;
- lcd_wr_hold = I80_PORTRAIT_WR_HOLD;
- break;
- case EN_I80_LANDSCAPE_HANDWRITING:
- lcd_cs_setup = I80_LANDSCAPE_HANDWRITING_CS_SETUP;
- lcd_wr_setup = I80_LANDSCAPE_HANDWRITING_WR_SETUP;
- lcd_wr_act = I80_LANDSCAPE_HANDWRITING_WR_ACT;
- lcd_wr_hold = I80_LANDSCAPE_HANDWRITING_WR_HOLD;
- break;
- case EN_I80_PORTRAIT_HANDWRITING:
- lcd_cs_setup = I80_PORTRAIT_HANDWRITING_CS_SETUP;
- lcd_wr_setup = I80_PORTRAIT_HANDWRITING_WR_SETUP;
- lcd_wr_act = I80_PORTRAIT_HANDWRITING_WR_ACT;
- lcd_wr_hold = I80_PORTRAIT_HANDWRITING_WR_HOLD;
- break;
-
- }
- tmp = __raw_readl(rVIDCON0);
- tmp = VIDCON0_S_CPU_IF_MAIN|VIDCON0_S_RGB_PAR|VIDCON0_S_VCLK_GATING_OFF|\
- VIDCON0_S_CLKDIR_DIVIDED|VIDCON0_S_CLKSEL_HCLK;
- __raw_writel(tmp, rVIDCON0);
- v_cnt = (lcd_vbpd+lcd_vfpd+lcd_vspw+lcd_line_value);
- h_cnt = (lcd_hbpd+lcd_hfpd+lcd_hspw+lcd_horizon_value);
- lcd_clock = clk_get(NULL, "hclk");
- HCLK = clk_get_rate(lcd_clock);
- //printk("\nHCLK=%d\n",HCLK);
- clkval = (unsigned int)(HCLK/(v_cnt*h_cnt*lcd_frame_rate)); //clkval=3 if 1024*768*50
- //clkval = 0x3f;
-
- vclk = (HCLK/(clkval+1))/1000;
- //DPRINTK("VCLK: %dKHz, clkval=%d\n",vclk, clkval);
- /*if(clkval > 0x3f)
- {
- DPRINTK("!!! Check frame rate: clkval = %d, over flow !!!\n",clkval);
- }*/
-
- tmp = __raw_readl(rVIDCON0);
- tmp |= (clkval <<VIDCON0_CLKVAL_F_SHIFT);
- __raw_writel(tmp, rVIDCON0);
- tmp = __raw_readl(rSYSIFCON0);
- tmp = (lcd_cs_setup<<16)|(lcd_wr_setup<<12)|(lcd_wr_act<<8)|(lcd_wr_hold<<4)|(1<<2)|(1<<1)|(1);
- __raw_writel(tmp, rSYSIFCON0);
- tmp = __raw_readl(rSYSIFCON1);
- tmp = (lcd_cs_setup<<16)|(lcd_wr_setup<<12)|(lcd_wr_act<<8)|(lcd_wr_hold<<4)|(1<<2)|(1<<1)|(1);
- __raw_writel(tmp, rSYSIFCON1);
- tmp = __raw_readl(rVIDTCON2);
- tmp = ((lcd_line_value-1)<<VIDTCON2_LINEVAL_S)|((lcd_horizon_value/4)-1);
- __raw_writel(tmp, rVIDTCON2);
- gI80_Current_Speed = i80_speed;
- }
- #ifdef EPAPER_BOOT_CODE
- void Epaper_Show_Progress(int percent)
- {
- T_DISPLAY_FRAME stDisFrame;
- int i;
- unsigned short u16ProgressBar_x, u16ProgressBar_y, u16ProgressBar_w, u16ProgressBar_h;
- static unsigned short progress_bar[PROGRESS_BAR_W*PROGRESS_BAR_H/4];
- int line_bytes;
- return;
-
- memset((unsigned char*)progress_bar, 0xff, PROGRESS_BAR_W*PROGRESS_BAR_H/4*2);
- switch(gRotateDegree)
- {
- default:
- case 0:
- {
- u16ProgressBar_x = PROGRESS_BAR_X;
- u16ProgressBar_y = PROGRESS_BAR_Y;
- u16ProgressBar_w = PROGRESS_BAR_W;
- u16ProgressBar_h = PROGRESS_BAR_H;
-
- line_bytes = u16ProgressBar_w/4*2;
- //draw percent
- memset((unsigned char*)progress_bar+(u16ProgressBar_h-(u16ProgressBar_h/100*percent))*line_bytes, 0x0,
- (u16ProgressBar_h/100*percent)*line_bytes);
- break;
- }
- case 90:
- {
- int draw_len = 0;
- u16ProgressBar_x = PROGRESS_BAR_90_X;
- u16ProgressBar_y = PROGRESS_BAR_90_Y;
- u16ProgressBar_w = PROGRESS_BAR_90_W;
- u16ProgressBar_h = PROGRESS_BAR_90_H;
- line_bytes = u16ProgressBar_w/4*2;
- //draw percent
- if((u16ProgressBar_w*percent/100)%4 != 0)
- {
- draw_len = (u16ProgressBar_w*percent/100) + (4)-((u16ProgressBar_w*percent/100)%4);
- }
- else
- draw_len = (u16ProgressBar_w*percent/100);
- for(i=0; i< u16ProgressBar_h; i++)
- {
- memset((unsigned char*)progress_bar + (u16ProgressBar_w/2)*i, 0x0, (draw_len/2));
- }
- break;
- }
- }
-
- //draw top frame line, line width = 8
- memset((unsigned char*)progress_bar, 0x0, PROGRESS_BAR_FRAME_LINE_W*line_bytes);
- //draw right frame line, line width = 8
- for(i=0;i<u16ProgressBar_h;i++)
- {
- memset(((unsigned char*)progress_bar)+((u16ProgressBar_w-PROGRESS_BAR_FRAME_LINE_W)/4*2)+(i*line_bytes), 0x0,
- PROGRESS_BAR_FRAME_LINE_W/4*2);
- }
- //draw left frame line, line width = 8
- for(i=0;i<u16ProgressBar_h;i++)
- {
- memset(((unsigned char*)progress_bar)+(i*line_bytes), 0x0, PROGRESS_BAR_FRAME_LINE_W/4*2);
- }
- //draw bottom frame line, line width = 8
- memset((unsigned char*)progress_bar+(u16ProgressBar_h-PROGRESS_BAR_FRAME_LINE_W)*line_bytes, 0x0,
- PROGRESS_BAR_FRAME_LINE_W*line_bytes);
-
-
- //send data
- partial_update_mode = 1;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- stDisFrame.tFrameRange.X = u16ProgressBar_x;
- stDisFrame.tFrameRange.Y = u16ProgressBar_y;
- stDisFrame.tFrameRange.W = u16ProgressBar_w;
- stDisFrame.tFrameRange.H = u16ProgressBar_h;
- stDisFrame.pFrameData = progress_bar;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper Progress %d",percent);
- Epaper_Disp(stDisFrame);
- }
- }
- void Epaper_Clean_Panel(void)
- {
- //unsigned short clean_frame[gUser_h_resolution*gUser_v_resolution/4];
- unsigned short clean_frame[AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4];
- T_DISPLAY_FRAME stDisFrame;
- partial_update_mode = 0;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- stDisFrame.tFrameRange.X = 1;
- stDisFrame.tFrameRange.Y = 1;
- stDisFrame.tFrameRange.W = gUser_h_resolution;
- stDisFrame.tFrameRange.H = gUser_v_resolution;
- memset((unsigned char*)clean_frame, 0xff, AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4*2);
- stDisFrame.pFrameData = clean_frame;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper clean panel");
- Epaper_Disp(stDisFrame);
- }
- }
- #else //KERNEL
- void Epaper_Show_Progress(int percent)
- {
- T_DISPLAY_FRAME stDisFrame;
- int i;
- unsigned short u16ProgressBar_x, u16ProgressBar_y, u16ProgressBar_w, u16ProgressBar_h;
- static unsigned short progress_bar[PROGRESS_BAR_W*PROGRESS_BAR_H/4];
- int line_bytes;
- return;
- memset((unsigned char*)progress_bar, 0xff, PROGRESS_BAR_W*PROGRESS_BAR_H/4*2);
- switch(gRotateDegree)
- {
- default:
- case 0:
- {
- u16ProgressBar_x = PROGRESS_BAR_X;
- u16ProgressBar_y = PROGRESS_BAR_Y;
- u16ProgressBar_w = PROGRESS_BAR_W;
- u16ProgressBar_h = PROGRESS_BAR_H;
-
- line_bytes = u16ProgressBar_w/4*2;
- //draw percent
- memset((unsigned char*)progress_bar+(u16ProgressBar_h-(u16ProgressBar_h/100*percent))*line_bytes, 0x0,
- (u16ProgressBar_h/100*percent)*line_bytes);
- break;
- }
- case 90:
- {
- int draw_len = 0;
- u16ProgressBar_x = PROGRESS_BAR_90_X;
- u16ProgressBar_y = PROGRESS_BAR_90_Y;
- u16ProgressBar_w = PROGRESS_BAR_90_W;
- u16ProgressBar_h = PROGRESS_BAR_90_H;
- line_bytes = u16ProgressBar_w/4*2;
- //draw percent
- if((u16ProgressBar_w*percent/100)%4 != 0)
- {
- draw_len = (u16ProgressBar_w*percent/100) + (4)-((u16ProgressBar_w*percent/100)%4);
- }
- else
- draw_len = (u16ProgressBar_w*percent/100);
- for(i=0; i< u16ProgressBar_h; i++)
- {
- memset((unsigned char*)progress_bar + (u16ProgressBar_w/2)*i, 0x0, (draw_len/2));
- }
- break;
- }
- }
-
- //draw top frame line, line width = 8
- memset((unsigned char*)progress_bar, 0x0, PROGRESS_BAR_FRAME_LINE_W*line_bytes);
- //draw right frame line, line width = 8
- for(i=0;i<u16ProgressBar_h;i++)
- {
- memset(((unsigned char*)progress_bar)+((u16ProgressBar_w-PROGRESS_BAR_FRAME_LINE_W)/4*2)+(i*line_bytes), 0x0,
- PROGRESS_BAR_FRAME_LINE_W/4*2);
- }
- //draw left frame line, line width = 8
- for(i=0;i<u16ProgressBar_h;i++)
- {
- memset(((unsigned char*)progress_bar)+(i*line_bytes), 0x0, PROGRESS_BAR_FRAME_LINE_W/4*2);
- }
- //draw bottom frame line, line width = 8
- memset((unsigned char*)progress_bar+(u16ProgressBar_h-PROGRESS_BAR_FRAME_LINE_W)*line_bytes, 0x0,
- PROGRESS_BAR_FRAME_LINE_W*line_bytes);
-
-
- //send data
- partial_update_mode = 1;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- stDisFrame.tFrameRange.X = u16ProgressBar_x;
- stDisFrame.tFrameRange.Y = u16ProgressBar_y;
- stDisFrame.tFrameRange.W = u16ProgressBar_w;
- stDisFrame.tFrameRange.H = u16ProgressBar_h;
- stDisFrame.pFrameData = progress_bar;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper Progress %d",percent);
- Epaper_Disp(stDisFrame);
- }
- }
- void Epaper_Clean_Panel(void)
- {
- //unsigned short clean_frame[gUser_h_resolution*gUser_v_resolution/4];
- static unsigned short clean_frame[AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4];
- T_DISPLAY_FRAME stDisFrame;
- partial_update_mode = 0;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- stDisFrame.tFrameRange.X = 1;
- stDisFrame.tFrameRange.Y = 1;
- stDisFrame.tFrameRange.W = gUser_h_resolution;
- stDisFrame.tFrameRange.H = gUser_v_resolution;
- memset((unsigned char*)clean_frame, 0xff, AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4*2);
- stDisFrame.pFrameData = clean_frame;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper clean panel");
- Epaper_Disp(stDisFrame);
- }
- }
- void Epaper_Pre_Display_Image(void)
- {
- //unsigned short clean_frame[gUser_h_resolution*gUser_v_resolution/4];
- static unsigned short clean_frame[AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4];
- T_DISPLAY_FRAME stDisFrame;
- partial_update_mode = 0;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PRE_DISPLAY_START;
- stDisFrame.tFrameRange.X = 1;
- stDisFrame.tFrameRange.Y = 1;
- stDisFrame.tFrameRange.W = gUser_h_resolution;
- stDisFrame.tFrameRange.H = gUser_v_resolution;
- memset((unsigned char*)clean_frame, 0xff, AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4*2);
- stDisFrame.pFrameData = clean_frame;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper clean panel");
- Epaper_Disp(stDisFrame);
- }
- }
- void Epaper_Shutdown_Logo(void)
- {
- #if 0
- T_DISPLAY_FRAME stDisFrame;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- partial_update_mode = 0;
- stDisFrame.tFrameRange.X = 1;
- stDisFrame.tFrameRange.Y = 1;
- stDisFrame.tFrameRange.W = gUser_h_resolution;
- stDisFrame.tFrameRange.H = gUser_v_resolution;
- stDisFrame.pFrameData = shutdown;
-
- if(is_Epaper_Write_Ready())
- {
- printk("\nEpaper shutdown logo");
- Epaper_Disp(stDisFrame);
- }
- #else
- static unsigned short clean_frame[AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4];
- //static unsigned short clean_frame[1024*768/4];
- T_DISPLAY_FRAME stDisFrame;
- partial_update_mode = 0;
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- stDisFrame.tFrameRange.X = 1;
- stDisFrame.tFrameRange.Y = 1;
- stDisFrame.tFrameRange.W = gUser_h_resolution;
- stDisFrame.tFrameRange.H = gUser_v_resolution;
- memset((unsigned char*)clean_frame, 0x00, AUO_EPAPER_PHYSICAL_H_RESOLUTION*AUO_EPAPER_PHYSICAL_V_RESOLUTION/4*2);
- stDisFrame.pFrameData = clean_frame;
- if(is_Epaper_Write_Ready())
- {
-
- //DPRINTK("\nEpaper clean panel");
- Epaper_Disp(stDisFrame);
- }
- #endif
- }
- void Epaper_Draw_Point(int x, int y)
- {
- unsigned short pint_data[4*4/4];
- T_DISPLAY_FRAME stDisFrame;
- if( ((x/2)*2) == x)
- return;
-
- stDisFrame.u16EpaperCommand = AUO_EPAPER_CMD_PARTIALDISP;
- partial_update_mode = 4;
- stDisFrame.tFrameRange.X = x;
- stDisFrame.tFrameRange.Y = y;
- stDisFrame.tFrameRange.W = 4;
- stDisFrame.tFrameRange.H = 4;
- stDisFrame.pFrameData = pint_data;
-
- if(is_Epaper_Write_Ready())
- {
-
- Epaper_Disp(stDisFrame);
- }
- }
- #endif //EPAPER_BOOT_CODE
- //This is logic resolution, not PHYSICAL resolution, depand on rotation degree
- void Epaper_Set_Resolution(int h_res, int v_res)
- {
- gUser_h_resolution = h_res;
- gUser_v_resolution = v_res;
- }
- int is_Epaper_Write_Ready_No_Wait(void)
- {
- unsigned long tmp;
- int iBusyCnt=0;
- tmp = __raw_readl(rGPBDAT);
- if((tmp & (1<<2))==0)
- {
- //DPRINTK("<= BAN =>panel is BUSY\n");
- return 0;
- }
- return 1;
- }
- int is_Epaper_Write_Ready(void)
- {
- unsigned long tmp;
- int iBusyCnt=0;
- int i=0;
- wait_queue_head_t busy_wq;
- init_waitqueue_head(&busy_wq);
- tmp = __raw_readl(rGPBDAT);
- while((tmp & (1<<2))==0)
- {
- //DPRINTK("<= BAN =>panel is BUSY\n");
- sleep_on_timeout(&busy_wq, 4);
-
- //msleep(100);
- /*for(i=0; i<20; i++)
- __mDelay(1);*/
-
- iBusyCnt ++;
- if(iBusyCnt>= BUSY_WAIT_TIMEOUT)
- {
- //DPRINTK("<= BAN =>Panel Disp Fail: BUSY time out\n");
- return 0;
- }
- tmp = __raw_readl(rGPBDAT);
- }
-
- return 1;
- }
- int is_Epaper_Write_Ready_Wait(unsigned long waitTime) //ms
- {
- unsigned long tmp;
- int iBusyCnt=0;
- int i=0;
- wait_queue_head_t busy_wq;
- init_waitqueue_head(&busy_wq);
- tmp = __raw_readl(rGPBDAT);
- while((tmp & (1<<2))==0)
- {
- sleep_on_timeout(&busy_wq, 4);
- //DPRINTK("<= BAN =>panel is BUSY\n");
- //msleep(100);
- /*for(i=0; i<20; i++)
- __mDelay(1);*/
-
- iBusyCnt ++;
- if(iBusyCnt>= (waitTime/20))
- {
- DPRINTK("<= BAN =>Panel Disp Fail: BUSY time out\n");
- return 0;
- }
- tmp = __raw_readl(rGPBDAT);
- }
- return 1;
- }
- int is_Epaper_Write_Ready_Busy_Wait(unsigned long waitTime) //ms
- {
- unsigned long tmp;
- int iBusyCnt=0;
- int i=0;
- wait_queue_head_t busy_wq;
- init_waitqueue_head(&busy_wq);
- tmp = __raw_readl(rGPBDAT);
- while((tmp & (1<<2))==0)
- {
- //sleep_on_timeout(&busy_wq, 4);
- //DPRINTK("<= BAN =>panel is BUSY\n");
- //msleep(100);
- for(i=0; i<20; i++)
- __mDelay(1);
-
- iBusyCnt ++;
- if(iBusyCnt>= (waitTime/20))
- {
- DPRINTK("<= BAN =>Panel Disp Fail: BUSY time out\n");
- return 0;
- }
- tmp = __raw_readl(rGPBDAT);
- }
- return 1;
- }
- static inline void s3c2416_i80_write(int data)
- {
- int tmp;
-
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- __raw_writel(data, rSIFCCON1); //rSIFCCON1 = CMD;
- tmp = __raw_readl(rSIFCCON0); // nWE disables
- tmp &= ~SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static inline void s3c2416_i80_write_Rotate(int data)
- {
- int tmp;
-
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
- //__uDelay(1);
- nDelay(25); //down to 1.5M
- __raw_writel(data, rSIFCCON1); //rSIFCCON1 = CMD;
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static inline void s3c2416_i80_write_HandWriting(int data)
- {
- int tmp;
-
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- nDelay(15); //down to 2M
-
- __raw_writel(data, rSIFCCON1); //rSIFCCON1 = CMD;
-
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static inline void s3c2416_i80_write_Rotate_HandWriting(int data)
- {
- int tmp;
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- __raw_writel(data, rSIFCCON1); //rSIFCCON1 = CMD;
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static inline void s3c2416_i80_write_LUT(int data)
- {
- int tmp;
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- __raw_writel(data, rSIFCCON1); //rSIFCCON1 = CMD;
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~SYS_WR_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static inline void s3c2416_i80_read(unsigned short* data)
- {
- int tmp;
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nRD enable
- tmp |= SYS_OE_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- //__mDelay(1); //Ivan : must do
- __uDelay(1);
- *data = __raw_readl(rSIFCCON2); //CMD = rSIFCCON2;
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nRD disable
- tmp &= ~SYS_OE_CON;
- __raw_writel(tmp, rSIFCCON0);
-
- }
- static int DISP_CMD_OUT(unsigned short CMD, unsigned short* pdata, int data_length)
- {
- unsigned long tmp;
- unsigned long cnt;
- int ret = 0;
- tmp = __raw_readl(rSYSIFCON0); //polarity of RS, set 1 for normal access
- tmp |= (1<<2);
- __raw_writel(tmp, rSYSIFCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode enable
- tmp |= (1<<0);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) enable
- tmp |= (1<<8);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS low
- tmp &= ~(1<<1);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= (1<<6);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- __raw_writel(CMD, rSIFCCON1); //rSIFCCON1 = CMD;
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- if(data_length > 0)
- {
- switch(CMD)
- {
- case AUO_EPAPER_CMD_INIT:
- {
- s3c2416_i80_write(*pdata);
- break;
- }
- case AUO_EPAPER_CMD_LUT_START:
- {
- for(cnt=0;cnt<data_length;cnt++)
- {
- __uDelay(1);
- if(is_Epaper_Write_Ready_Busy_Wait(10000))
- {
- __uDelay(1);
- s3c2416_i80_write_LUT((unsigned short)pdata[cnt]);
- }
- else
- {
- DPRINTK("EPD: Can not send LUT data\n");
- ret = -1;
- goto DISP_CMD_OUT_ERROR;
- }
- }
-
- if(is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); //rSIFCCON0 &= ~(1<<1); // RS low
- tmp &= ~(1<<1); // RS low
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
-
- s3c2416_i80_write(AUO_EPAPER_CMD_LUT_STOP);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- }
- else
- {
- DPRINTK("EPD: Can not send AUO_EPAPER_CMD_LUT_STOP\n");
- ret = -1;
- goto DISP_CMD_OUT_ERROR;
- }
- break;
- }
-
- default:
- DPRINTK("unkonwn command\n");
- break;
- }
- }
- DISP_CMD_OUT_ERROR:
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- }
- //Send 1 command and read parameters
- static void DISP_DATA_IN(unsigned short CMD, unsigned short* val_array, int val_count)
- {
- unsigned long tmp;
- int cnt;
- tmp = __raw_readl(rSYSIFCON0); //polarity of RS, set 1 for normal access
- tmp |= (1<<2);
- __raw_writel(tmp, rSYSIFCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // command mode enable
- tmp |= (1<<0);
- __raw_writel(tmp, rSIFCCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) enable
- tmp |= (1<<8);
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS low
- tmp &= ~(1<<1);
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= (1<<6);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- __raw_writel(CMD, rSIFCCON1); //rSIFCCON1 = CMD;
-
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- switch(CMD)
- {
- case AUO_EPAPER_CMD_TEMPER:
- {
- for(cnt=0;cnt<val_count;cnt++)
- {
- __mDelay(1);
- s3c2416_i80_read(&val_array[cnt]);
- }
- break;
- }
- case AUO_EPAPER_CMD_LUT_READ:
- {
- DPRINTK("\nLUT Read");
- for(cnt=0;cnt<val_count;cnt++)
- {
- if(is_Epaper_Write_Ready())
- {
- s3c2416_i80_read(&val_array[cnt]);
-
- }
- }
-
- if(is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); //rSIFCCON0 &= ~(1<<1); // RS low
- tmp &= ~(1<<1); // RS low
- __raw_writel(tmp, rSIFCCON0);
- __uDelay(1);
- s3c2416_i80_write(AUO_EPAPER_CMD_LUT_STOP);
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- }
- break;
- }
- default:
- DPRINTK("unkonwn command\n");
- break;
- }
- __uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- }
- static DISP_DATA_OUT(unsigned short CMD, unsigned short* pdata, T_DISPLAY_REGION REGION)
- {
- unsigned long tmp;
- unsigned long cnt;
- tmp = __raw_readl(rSYSIFCON0); //polarity of RS, set 1 for normal access
- tmp |= (1<<2);
- __raw_writel(tmp, rSYSIFCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // command mode enable
- tmp |= (1<<0);
- __raw_writel(tmp, rSIFCCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) enable
- tmp |= (1<<8);
- __raw_writel(tmp, rSIFCCON0);
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS low
- tmp &= ~(1<<1);
- __raw_writel(tmp, rSIFCCON0);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- //busy
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= (1<<6);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- //busy
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- __raw_writel(CMD, rSIFCCON1); //rSIFCCON1 = CMD;
-
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- /* BAN 20090406 + for test panel*/
- switch(CMD)
- {
- case AUO_EPAPER_CMD_FULLDISP:
- {
-
- break;
- }
- case AUO_EPAPER_CMD_PARTIALDISP:
- case AUO_EPAPER_CMD_PRE_DISPLAY_START:
- {
- unsigned short current_mode=0;
- DPRINTK("<= BAN =>AUO_EPAPER_CMD_PARTIALDISP, region=(%d(%d,%d) %d X %d)\n",partial_update_mode, REGION.X,REGION.Y,REGION.W,REGION.H);
-
- //__uDelay(1);
- //MOD + X
- current_mode = ((unsigned short)partial_update_mode )<<12;
- //if(partial_update_mode == PARTIAL_DSP_MODE_4)
- // current_mode |= 0x8000; //Set "Write"
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- printk(" EPAPER: ---- RX: 0x%04X\n", current_mode|REGION.X);
- s3c2416_i80_write(current_mode|REGION.X);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //Y
- printk(" EPAPER: ---- RY: 0x%04X\n", REGION.Y);
- s3c2416_i80_write(REGION.Y);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //W
- printk(" EPAPER: ---- RW: 0x%04X\n", REGION.W);
- s3c2416_i80_write(REGION.W);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //H
- printk(" EPAPER: ---- RH: 0x%04X\n", REGION.H);
- s3c2416_i80_write(REGION.H);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- DPRINTK("busy...\n");
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- if((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W))
- {
- DPRINTK("busy...\n");
- if(gRotateDegree!=0)
- {
- DPRINTK("\nHand writing + Rotate");
- for(cnt=0; cnt<(REGION.W*REGION.H/4); cnt++)
- {
- s3c2416_i80_write_Rotate_HandWriting((unsigned short)pdata[cnt]); //rSIFCCON1 = CMD;
- }
- }
- else
- {
- DPRINTK("\nHand writing");
- for(cnt=0; cnt<(REGION.W*REGION.H/4); cnt++)
- {
- s3c2416_i80_write_HandWriting((unsigned short)pdata[cnt]); //rSIFCCON1 = CMD;
- }
- }
- }
- else if(gRotateDegree!=0)
- {
- DPRINTK("\nRotate");
- for(cnt=0; cnt<(REGION.W*REGION.H/4); cnt++)
- {
- s3c2416_i80_write_Rotate((unsigned short)pdata[cnt]); //rSIFCCON1 = CMD;
- }
- }
- else
- {
- DPRINTK("\nnormal");
- for(cnt=0; cnt<(REGION.W*REGION.H/4); cnt++)
- {
- s3c2416_i80_write((unsigned short)pdata[cnt]); //rSIFCCON1 = CMD;
- }
- }
-
-
- break;
- }
- case AUO_EPAPER_CMD_STOP:
- break;
- default:
- DPRINTK("unkonwn command\n");
- break;
- }
- /* BAN 20090406 + for test panel*/
- // STOP
- tmp = __raw_readl(rSIFCCON0); //rSIFCCON0 &= ~(1<<1); // RS low
- tmp &= ~(1<<1); // RS low
- __raw_writel(tmp, rSIFCCON0);
- //__uDelay(1);
- switch(CMD)
- {
- default:
- case AUO_EPAPER_CMD_PARTIALDISP:
- {
- s3c2416_i80_write(AUO_EPAPER_CMD_STOP);
- break;
- }
- case AUO_EPAPER_CMD_PRE_DISPLAY_START:
- {
- s3c2416_i80_write(AUO_EPAPER_CMD_PRE_DISPLAY_STOP);
- break;
- }
- }
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- return 0;
- }
- //Send mode, x, y, w, h only
- static int DISP_PRE_DATA_OUT(unsigned short CMD, T_DISPLAY_REGION REGION)
- {
- unsigned long tmp;
- unsigned long cnt;
- unsigned short current_mode=0;
- if((CMD != AUO_EPAPER_CMD_PARTIALDISP) && (CMD != AUO_EPAPER_CMD_PRE_DISPLAY_START))
- return -1;
- tmp = __raw_readl(rSYSIFCON0); //polarity of RS, set 1 for normal access
- tmp |= (1<<2);
- __raw_writel(tmp, rSYSIFCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // command mode enable
- tmp |= (1<<0);
- __raw_writel(tmp, rSIFCCON0);
-
-
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) enable
- tmp |= (1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // RS low
- tmp &= ~(1<<1);
- __raw_writel(tmp, rSIFCCON0);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- //busy
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- tmp = __raw_readl(rSIFCCON0); // nWE enable
- tmp |= (1<<6);
- __raw_writel(tmp, rSIFCCON0);
-
- __uDelay(1);
-
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- //busy
- //__uDelay(1);
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- __raw_writel(CMD, rSIFCCON1); //rSIFCCON1 = CMD;
-
- tmp = __raw_readl(rSIFCCON0); // nWE disable
- tmp &= ~(1<<6);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // RS Hi
- tmp |= (1<<1);
- __raw_writel(tmp, rSIFCCON0);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- //MOD + X
- //partial_update_mode = 0xC;
- current_mode = ((unsigned short)partial_update_mode )<<12;
- __mDelay(1);
- s3c2416_i80_write(current_mode|REGION.X);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- //Y
- s3c2416_i80_write(REGION.Y);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
-
- //W
- s3c2416_i80_write(REGION.W);
- __mDelay(1);
- //check busy again
- if((!is_Epaper_Write_Ready_No_Wait())&&((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W)))
- {
- if(!is_Epaper_Write_Ready())
- {
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- DPRINTK("ERROR, Still BUSY");
- return -1;
- }
- }
- //end
- //H
- s3c2416_i80_write(REGION.H);
- __mDelay(1);
- //printk("\nEPAPER (x,y,w,h)=(%d,%d,%d,%d)\n", REGION.X, REGION.Y, REGION.W, REGION.H);
- if((partial_update_mode == PARTIAL_DSP_MODE_4)||(partial_update_mode == PARTIAL_DSP_MODE_4_W))
- {
- if(gRotateDegree!=0) //Rotate + handwriting
- {
- Epaper_Change_I80_Speed(EN_I80_PORTRAIT_HANDWRITING, REGION.W, REGION.H);
- }
- else //only handwriting
- {
- Epaper_Change_I80_Speed(EN_I80_LANDSCAPE_HANDWRITING, REGION.W, REGION.H);
- }
- }
- else
- {
- if(gRotateDegree!=0) //Rotate
- {
- Epaper_Change_I80_Speed(EN_I80_PORTRAIT, REGION.W, REGION.H);
- }
- else //not rotate
- {
- Epaper_Change_I80_Speed(EN_I80_LANDSCAPE, REGION.W, REGION.H);
- }
- }
- tmp = __raw_readl(rSIFCCON0); // nCS0(Main) disable
- tmp &= ~(1<<8);
- __raw_writel(tmp, rSIFCCON0);
- tmp = __raw_readl(rSIFCCON0); // command mode disable //must do this, or HWE will not send
- tmp &= ~(1<<0);
- __raw_writel(tmp, rSIFCCON0);
- return 0;
- }
-
- void Epaper_SetLcdPort(void)
- {
- unsigned long tmp;
- printk("TCON init - ");
-
- // set gpio for lcd
- tmp =__raw_readl(rGPCCON);
- //tmp = (tmp & ~(0xffff03ff))|(0xaaaa02aa);
- tmp = (tmp & ~(0xffff033f))|(0xaaaa022a); //Do not config SYS_CS1(GPC3)
- __raw_writel(tmp, rGPCCON);
- printk("Cybook Orizon Layout\n");
- tmp =__raw_readl(rGPDCON); //tmp=0x40000
- tmp = (tmp & ~(0x0CFFFF))|(0x04AAAA);
- __raw_writel(tmp, rGPDCON); // GPD9 is RST_N
- __raw_writel(0, rGPCUDP); //rGPCUDP = 0;
- __raw_writel(0, rGPDUDP); //rGPDUDP = 0;
- Epaper_Set_I80_Default_Speed(EN_I80_LANDSCAPE, AUO_EPAPER_PHYSICAL_H_RESOLUTION, AUO_EPAPER_PHYSICAL_V_RESOLUTION);
- // POWER pin config
- tmp =__raw_readl(rGPBCON);
- tmp = (tmp & ~(3<<6))|(1<<6);
- __raw_writel(tmp, rGPBCON);
- // BUSY pin config
- tmp =__raw_readl(rGPBCON);
- tmp = (tmp & ~(3<<4));
- __raw_writel(tmp, rGPBCON);
- /*
- tmp =__raw_readl(rGPBUDP);
- tmp = (tmp & ~(3<<4));
- //tmp = 0;
- __raw_writel(tmp, rGPBUDP);*/
- // SLEEP pin config
- tmp =__raw_readl(rGPBCON);
- tmp = (tmp & ~(3<<2))|(1<<2);
- __raw_writel(tmp, rGPBCON);
- __mDelay(1);
- //SLEEP Pin High
- /* tmp = __raw_readl(rGPBDAT);
- tmp |= (1<<1);
- __raw_writel(tmp, rGPBDAT);
-
- udelay(1000);*/
- // Panel power on
- tmp = __raw_readl(rGPBDAT);
- tmp |= (1<<3);
- //SLP_N high
- tmp |= (1<<1);
- __raw_writel(tmp, rGPBDAT);
-
- msleep(100);
- // LCD module reset
- tmp = __raw_readl(rGPDDAT);
- tmp |= (1<<9);
- __raw_writel(tmp, rGPDDAT);
-
- tmp = __raw_readl(rGPDDAT); // goes to LOW
- tmp &= ~(1<<9);
- __raw_writel(tmp, rGPDDAT);
-
- __uDelay(5);
-
- tmp = __raw_readl(rGPDDAT); // goes to HIGH
- tmp |= (1<<9);
- __raw_writel(tmp, rGPDDAT);
-
- // delay about 10ms
- msleep(10);
- }
- void EPaper_CloseLcdPort(void)
- {
- unsigned long tmp;
-
- //gpc0 input
- s3c2410_gpio_pullup(S3C2410_GPC0,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC0, S3C2410_GPC0_INP);
- //gpc1 input
- s3c2410_gpio_pullup(S3C2410_GPC1,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC1, S3C2410_GPC1_INP);
- //gpc2 input
- s3c2410_gpio_pullup(S3C2410_GPC2,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC2, S3C2410_GPC2_INP);
- //gpc4 input
- s3c2410_gpio_pullup(S3C2410_GPC4,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC4, S3C2410_GPC4_INP);
- //gpc8 input
- s3c2410_gpio_pullup(S3C2410_GPC8,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC8, S3C2410_GPC8_INP);
- //gpc9 input
- s3c2410_gpio_pullup(S3C2410_GPC9,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC9, S3C2410_GPC9_INP);
- //gpc10 input
- s3c2410_gpio_pullup(S3C2410_GPC10,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC10, S3C2410_GPC10_INP);
- //gpc11 input
- s3c2410_gpio_pullup(S3C2410_GPC11,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC11, S3C2410_GPC11_INP);
- //gpc12 input
- s3c2410_gpio_pullup(S3C2410_GPC12,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC12, S3C2410_GPC12_INP);
- //gpc13 input
- s3c2410_gpio_pullup(S3C2410_GPC13,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC13, S3C2410_GPC13_INP);
- //gpc14 input
- s3c2410_gpio_pullup(S3C2410_GPC14,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC14, S3C2410_GPC14_INP);
- //gpc15 input
- s3c2410_gpio_pullup(S3C2410_GPC15,1);
- s3c2410_gpio_cfgpin(S3C2410_GPC15, S3C2410_GPC15_INP);
- //gpd0 input
- s3c2410_gpio_pullup(S3C2410_GPD0,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD0, S3C2410_GPD0_INP);
- //gpd1 input
- s3c2410_gpio_pullup(S3C2410_GPD1,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD1, S3C2410_GPD1_INP);
- //gpd2 input
- s3c2410_gpio_pullup(S3C2410_GPD2,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD2, S3C2410_GPD2_INP);
- //gpd3 input
- s3c2410_gpio_pullup(S3C2410_GPD3,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD3, S3C2410_GPD3_INP);
- //gpd4 input
- s3c2410_gpio_pullup(S3C2410_GPD4,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD4, S3C2410_GPD4_INP);
- //gpd5 input
- s3c2410_gpio_pullup(S3C2410_GPD5,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD5, S3C2410_GPD5_INP);
- //gpd6 input
- s3c2410_gpio_pullup(S3C2410_GPD6,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD6, S3C2410_GPD6_INP);
- //gpd7 input
- s3c2410_gpio_pullup(S3C2410_GPD7,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD7, S3C2410_GPD7_INP);
- //gpd9 output
- s3c2410_gpio_pullup(S3C2410_GPD9,1);
- s3c2410_gpio_cfgpin(S3C2410_GPD9, S3C2410_GPD9_OUTP);
- s3c2410_gpio_setpin(S3C2410_GPD9,0);
- //gpb1 input
- s3c2410_gpio_pullup(S3C2410_GPB1,1);
- s3c2410_gpio_cfgpin(S3C2410_GPB1, S3C2410_GPB1_INP);
- //gpb2 input
- s3c2410_gpio_pullup(S3C2410_GPB2,1);
- s3c2410_gpio_cfgpin(S3C2410_GPB2, S3C2410_GPB2_INP);
- //gpb3 output
- /*
- s3c2410_gpio_pullup(S3C2410_GPB3,1);
- s3c2410_gpio_cfgpin(S3C2410_GPB3, S3C2410_GPB3_OUTP);
- s3c2410_gpio_setpin(S3C2410_GPB3,0);
- */
- /*tmp = __raw_readl(rGPCDAT);
- DPRINTK("\nGPC=0x%x", tmp);
- tmp = __raw_readl(rGPDDAT);
- DPRINTK("\nGPD=0x%x", tmp);*/
-
- gRotateDegree = 0;
- }
- int Epaper_Disp(T_DISPLAY_FRAME tFrame)
- {
- unsigned long tmp;
- int iBusyCnt=0;
- DPRINTK("<= BAN =>I80 Write\n");
- DISP_DATA_OUT(tFrame.u16EpaperCommand,tFrame.pFrameData,tFrame.tFrameRange);
-
- return 0;
- }
-
- void Epaper_Set_Partial_Update_Mode(int mode)
- {
- partial_update_mode = mode;
- }
- int Epaper_Get_Partial_Update_Mode(void)
- {
- return partial_update_mode;
- }
- void Epaper_Enter_Standby_Mode(int isEnter)
- {
- unsigned long tmp;
- if(isEnter)
- {
- //send 0x0001 to T-CON to enter standby mode
- DISP_CMD_OUT(AUO_EPAPER_CMD_STANDBY, NULL, 0);
- }
- else
- {
- //send 0x0002 to T-CON to leave standby mode
- DISP_CMD_OUT(AUO_EPAPER_CMD_WAKEUP, NULL, 0);
- }
- }
- void Epaper_Enter_Sleep_Mode(int isEnter)
- {
- unsigned long tmp;
- if(isEnter)
- {
- tmp = __raw_readl(rGPBDAT);
- tmp &= ~(1<<1);
- __raw_writel(tmp, rGPBDAT);
- }
- else
- {
- tmp = __raw_readl(rGPBDAT);
- tmp |= (1<<1);
- __raw_writel(tmp, rGPBDAT);
- }
- }
- void Epaper_Power(int isEnable)
- {
- unsigned long tmp;
- if(isEnable)
- {
- tmp = __raw_readl(rGPBDAT);
- tmp |= (1<<3);
- __raw_writel(tmp, rGPBDAT);
- }
- else
- {
- tmp = __raw_readl(rGPBDAT);
- tmp &= ~(1<<3);
- __raw_writel(tmp, rGPBDAT);
- }
- }
- void Epaper_Read_R_TEMP(unsigned short* val0, unsigned short* val1, unsigned short* val2, unsigned short* val3)
- {
- unsigned long tmp;
- unsigned short val[4];
- memset(val, 0x0, 8);
- DISP_DATA_IN(AUO_EPAPER_CMD_TEMPER, val, 4);
-
- *val0 = val[0];
- *val1 = val[1];
- *val2 = val[2];
- *val3 = val[3];
- }
- void Epaper_Display_Refresh(void)
- {
- DISP_CMD_OUT(AUO_EPAPER_CMD_REFRESH, NULL, 0);
- }
- int Epaper_Init(int h_Res, int v_Res, int temp_ave, int data_filter, int rotation, int data_inverse, int inputdata_arrangement, int outputdata_arrangement,int UD, int SHL)
- {
- unsigned short u16InitPara=0;
-
- if(is_Epaper_Write_Ready())
- {
- //TEMP_AVE_EN
- if((temp_ave != 0) && (temp_ave != 1))
- return -1;
- u16InitPara = u16InitPara | (temp_ave<<13);
- //M23_FILTER
- //ROT
- gRotateDegree = rotation;
- if(rotation == 0)
- {
- gUser_h_resolution = h_Res;
- gUser_v_resolution = v_Res;
- Epaper_Change_I80_Speed(EN_I80_LANDSCAPE, gUser_h_resolution, gUser_v_resolution);
- }
- else if(rotation == 90)
- {
- u16InitPara = u16InitPara | (1<<10);
-
- gUser_h_resolution = v_Res;
- gUser_v_resolution = h_Res;
- Epaper_Change_I80_Speed(EN_I80_PORTRAIT, gUser_h_resolution, gUser_v_resolution);
- }
- else if(rotation == 180)
- {
- u16InitPara = u16InitPara | (2<<10);
- gUser_h_resolution = h_Res;
- gUser_v_resolution = v_Res;
- Epaper_Change_I80_Speed(EN_I80_PORTRAIT, gUser_h_resolution, gUser_v_resolution); //not test
- }
- else if(rotation == 270)
- {
- u16InitPara = u16InitPara | (3<<10);
- gUser_h_resolution = v_Res;
- gUser_v_resolution = h_Res;
- Epaper_Change_I80_Speed(EN_I80_PORTRAIT, gUser_h_resolution, gUser_v_resolution);//not test
- }
- else
- {
- gUser_h_resolution = h_Res;
- gUser_v_resolution = v_Res;
- Epaper_Change_I80_Speed(EN_I80_LANDSCAPE, gUser_h_resolution, gUser_v_resolution);
- }
-
- //DI
- //BN
- //CHDA
- //RES
- if(AUO_EPAPER_PHYSICAL_H_RESOLUTION==1024 && AUO_EPAPER_PHYSICAL_V_RESOLUTION==768)
- u16InitPara = u16InitPara | (1<<2);
- else if(AUO_EPAPER_PHYSICAL_H_RESOLUTION==800 && AUO_EPAPER_PHYSICAL_V_RESOLUTION==600)
- {
- }
- else
- {
- }
- //UD
- //SHL
- u16InitPara = u16InitPara | 1;
- DISP_CMD_OUT(AUO_EPAPER_CMD_INIT, &u16InitPara, 1);
- DPRINTK("\nInit size=%d, Init data =0x%x\n", sizeof(unsigned short),u16InitPara);
- return 0;
- }
- return -1;
- }
- //u32LUTLength: length in (unsigned short)
- int Epaper_Update_LUT(unsigned short* u16LUT, unsigned long u32LUTLength)
- {
- unsigned long cnt=0;
- if(is_Epaper_Write_Ready_Wait(10000))
- {
-
- return DISP_CMD_OUT(AUO_EPAPER_CMD_LUT_START, u16LUT, u32LUTLength);
- }
- else
- return -1;
- }
- //u32LUTLength: length in (unsigned short)
- int Epaper_Read_LUT(unsigned short* u16LUT, unsigned long u32LUTLength)
- {
- DISP_DATA_IN(AUO_EPAPER_CMD_LUT_READ, u16LUT, u32LUTLength);
- return 0;
- }
- void Epaper_Reset(void)
- {
- DISP_CMD_OUT(AUO_EPAPER_CMD_RESET, NULL, 0);
- }
- int Epaper_Pre_DMA_Disp_Start(T_DISPLAY_FRAME tFrame)
- {
- DISP_PRE_DATA_OUT(tFrame.u16EpaperCommand, tFrame.tFrameRange);
- return 0;
- }
- int Epaper_Pre_DMA_Disp_Stop(T_DISPLAY_FRAME tFrame)
- {
- if(tFrame.u16EpaperCommand == AUO_EPAPER_CMD_PRE_DISPLAY_START)
- DISP_CMD_OUT(AUO_EPAPER_CMD_PRE_DISPLAY_STOP, NULL, 0);
- else
- DISP_CMD_OUT(AUO_EPAPER_CMD_STOP, NULL, 0);
- return 0;
- }
- /* ########################################################################## */
- #undef printk
- #include <linux/auofb_ioctl.h>
- /* [MTR] Add generic command function */
- enum InfoLevel
- {
- INFO_ERROR = 0,
- INFO_WARNING,
- INFO_NORMAL,
- INFO_DEBUG,
- INFO_VERBOSE,
- };
- //#define EPAPER_DEBUG
- //#define VERBOSE_LEVEL INFO_VERBOSE
- #ifndef VERBOSE_LEVEL
- #define VERBOSE_LEVEL INFO_WARNING
- #endif
- #ifdef EPAPER_DEBUG
- static int _dbgFL = 0;
- #define FUNC_IN() do { int i; _dbgFL++; printk(KERN_ERR "+"); for (i = 0; i < _dbgFL; i++) printk("-"); printk(">> %s() >>\n", __func__); } while(0)
- #define FUNC_OUT() do { int i; printk(KERN_ERR "+"); for (i = 0; i < _dbgFL; i++) printk("-"); printk("<< %s() <<\n", __func__); _dbgFL--; } while(0)
- #define FUNC_OUTR(val) do { int i; printk(KERN_ERR "+"); for (i = 0; i < _dbgFL; i++) printk("-"); printk("<< %s() = %d <<\n", __func__, val); _dbgFL--; } while(0)
- #define INFOL(level, s) do { if (level <= VERBOSE_LEVEL) { int i; printk(KERN_ERR "+"); for (i = 0; i < _dbgFL; i++) printk("-"); printk("||%s:%s(): ", __FILE__, __func__); printk s; printk("\n"); } } while(0)
- #define INFO(s) do { int i; printk(KERN_ERR "+"); for (i = 0; i < _dbgFL; i++) printk("-"); printk("||%s:%s(): ", __FILE__, __func__); printk s; printk("\n"); } while(0)
- #else
- #define FUNC_IN() do {} while(0)
- #define FUNC_OUT() do {} while(0)
- #define FUNC_OUTR(val) do {} while(0)
- #define INFOL(level, s) do { if (level <= VERBOSE_LEVEL) { printk("<%d>%s:%s(): ", level, __FILE__, __func__); printk s; printk("\n"); } } while(0)
- #define INFO(s) do { printk("%s:%s(): ", __FILE__, __func__); printk s; printk("\n"); } while(0)
- #endif
- /* [/MTR] */
|