| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769 |
- /*************************************************************************************************
- * AW2015_LED.c
- *
- * Create Date :
- *
- * Modify Date :
- *
- * Create by : AWINIC Technology CO., LTD
- *
- * Version : 0.9, 2016/02/15
- *************************************************************************************************/
- #include <linux/i2c.h>
- #include <linux/gpio.h>
- #include <linux/interrupt.h>
- #include <linux/delay.h>
- #include <linux/irq.h>
- #include <linux/firmware.h>
- #include <linux/platform_device.h>
- #include <linux/slab.h>
- #include <linux/fs.h>
- #include <linux/proc_fs.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
- #include <linux/init.h>
- #include <linux/pci.h>
- #include <linux/dma-mapping.h>
- #include <linux/gameport.h>
- #include <linux/moduleparam.h>
- #include <linux/mutex.h>
- #include <linux/wakelock.h>
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- #define AW2015_I2C_NAME "pressure"
- #define AW2015_I2C_BUS 0
- #define AW2015_I2C_ADDR 0x64
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- static ssize_t AW2015_get_reg(struct device* cd,struct device_attribute *attr, char* buf);
- static ssize_t AW2015_set_reg(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_set_debug(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_get_debug(struct device* cd, struct device_attribute *attr, char* buf);
- static ssize_t AW2015_Set_Red(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Green(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Blue(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Red_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Red_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Green_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Green_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Blue_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Blue_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_White(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_White_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_White_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Gray(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Gray_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Gray_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Yellow(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Yellow_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Yellow_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Pink(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Pink_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static ssize_t AW2015_Set_Pink_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
- static DEVICE_ATTR(reg, 0660, AW2015_get_reg, AW2015_set_reg);
- static DEVICE_ATTR(debug, 0660, AW2015_get_debug, AW2015_set_debug);
- static DEVICE_ATTR(Red, 0660, NULL, AW2015_Set_Red);
- static DEVICE_ATTR(Green, 0660, NULL, AW2015_Set_Green);
- static DEVICE_ATTR(Blue, 0660, NULL, AW2015_Set_Blue);
- static DEVICE_ATTR(White, 0660, NULL, AW2015_Set_White);
- static DEVICE_ATTR(Gray, 0660, NULL, AW2015_Set_Gray);
- static DEVICE_ATTR(Yellow, 0660, NULL, AW2015_Set_Yellow);
- static DEVICE_ATTR(Pink, 0660, NULL, AW2015_Set_Pink);
- static int RED_DELAY_OFF = 0,RED_DELAY_ON = 0;
- static DEVICE_ATTR(Red_delay_off, 0660, NULL, AW2015_Set_Red_delay_off);
- static DEVICE_ATTR(Red_delay_on, 0660, NULL, AW2015_Set_Red_delay_on);
- static int GREEN_DELAY_OFF = 0,GREEN_DELAY_ON = 0;
- static DEVICE_ATTR(Green_delay_off, 0660, NULL, AW2015_Set_Green_delay_off);
- static DEVICE_ATTR(Green_delay_on, 0660, NULL, AW2015_Set_Green_delay_on);
- static int BLUE_DELAY_OFF = 0,BLUE_DELAY_ON = 0;
- static DEVICE_ATTR(Blue_delay_off, 0660, NULL, AW2015_Set_Blue_delay_off);
- static DEVICE_ATTR(Blue_delay_on, 0660, NULL, AW2015_Set_Blue_delay_on);
- static int WHITE_DELAY_OFF = 0,WHITE_DELAY_ON = 0;
- static DEVICE_ATTR(White_delay_off, 0660, NULL, AW2015_Set_White_delay_off);
- static DEVICE_ATTR(White_delay_on, 0660, NULL, AW2015_Set_White_delay_on);
- static int GRAY_DELAY_OFF = 0,GRAY_DELAY_ON = 0;
- static DEVICE_ATTR(Gray_delay_off, 0660, NULL, AW2015_Set_Gray_delay_off);
- static DEVICE_ATTR(Gray_delay_on, 0660, NULL, AW2015_Set_Gray_delay_on);
- static int YELLOW_DELAY_OFF = 0,YELLOW_DELAY_ON = 0;
- static DEVICE_ATTR(Yellow_delay_off, 0660, NULL, AW2015_Set_Yellow_delay_off);
- static DEVICE_ATTR(Yellow_delay_on, 0660, NULL, AW2015_Set_Yellow_delay_on);
- static int PINK_DELAY_OFF = 0,PINK_DELAY_ON = 0;
- static DEVICE_ATTR(Pink_delay_off, 0660, NULL, AW2015_Set_Pink_delay_off);
- static DEVICE_ATTR(Pink_delay_on, 0660, NULL, AW2015_Set_Pink_delay_on);
- struct i2c_client *AW2015_i2c_client;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // i2c write and read
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////
- unsigned char I2C_write_reg(unsigned char addr, unsigned char reg_data)
- {
- char ret;
- u8 wdbuf[512] = {0};
-
- struct i2c_msg msg[] = {
- {
- .addr = AW2015_i2c_client->addr,
- .flags = 0,
- .len = 2,
- .buf = wdbuf,
- },
- };
- wdbuf[0] = addr;
- wdbuf[1] = reg_data;
- ret = i2c_transfer(AW2015_i2c_client->adapter, msg, 1);
- if (ret < 0)
- pr_err("msg %s i2c read error: %d\n", __func__, ret);
- return ret;
- }
- unsigned char I2C_read_reg(unsigned char addr)
- {
- int ret = 0;
- u8 rdbuf[512] = {0};
- struct i2c_msg msg[2] = {
- {
- .addr = AW2015_i2c_client->addr,
- .flags = 0,
- .len = 1,
- .buf = rdbuf,
- },
- {
- .addr = AW2015_i2c_client->addr,
- .flags = I2C_M_RD,
- .len = 1,
- .buf = rdbuf,
- },
- };
- rdbuf[0] = addr;
-
- ret = i2c_transfer(AW2015_i2c_client->adapter, msg, 2);
- if (ret < 0)
- pr_err("msg %s i2c read error: %d\n", __func__, ret);
- return rdbuf[0];
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // AW2015 LED
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- unsigned int ms2timer(unsigned int time)
- {
- int i;
- unsigned int ref[16] = {4, 128, 256, 384, 512, 762, 1024, 1524, 2048, 2560, 3072, 4096, 5120, 6144, 7168, 8192};
-
- for(i=0; i<15; i++)
- {
- if(time <= ref[0])
- {
- return 0;
- }
- else if(time > ref[15])
- {
- return 15;
- }
- else if((time>ref[i]) && (time<=ref[i+1]))
- {
- if((time-ref[i]) <= (ref[i+1]-time))
- {
- return i;
- }
- else
- {
- return (i+1);
- }
- }
- }
- return 0;
- }
- unsigned char AW2015_LED_ON(unsigned char r, unsigned char g, unsigned char b)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
-
- I2C_write_reg(0x10, r ); // ILED1
- I2C_write_reg(0x11, g ); // ILED2
- I2C_write_reg(0x12, b ); // ILED3
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
-
- return 0;
- }
- unsigned char AW2015_LED_OFF(void)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- return 0;
- }
- unsigned char AW2015_LED_Blink(unsigned char r, unsigned char g, unsigned char b, unsigned int trise_ms, unsigned int ton_ms, unsigned int tfall_ms, unsigned int toff_ms)
- {
- unsigned char trise, ton, tfall, toff;
-
- trise = ms2timer(trise_ms);
- ton = ms2timer(ton_ms);
- tfall = ms2timer(tfall_ms);
- toff = ms2timer(toff_ms);
-
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
-
- I2C_write_reg(0x10, r ); // ILED1
- I2C_write_reg(0x11, g ); // ILED2
- I2C_write_reg(0x12, b ); // ILED3
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
-
- I2C_write_reg(0x30, (trise<<4)|ton); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, (tfall<<4)|toff); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tdelay
- I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
-
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- return 0;
- }
- static ssize_t AW2015_Set_Red_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- RED_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Red_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- RED_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Green_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- GREEN_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Green_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- GREEN_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Blue_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- BLUE_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Blue_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- BLUE_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_White_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- WHITE_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_White_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- WHITE_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Gray_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- GRAY_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Gray_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- GRAY_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Yellow_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- YELLOW_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Yellow_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- YELLOW_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Pink_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- PINK_DELAY_OFF = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_Pink_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
- PINK_DELAY_ON = iNewPsSensorState;
- return len;
- }
- static ssize_t AW2015_Set_White(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(WHITE_DELAY_OFF == 500)
- {
- if(WHITE_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(WHITE_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(WHITE_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- WHITE_DELAY_ON = 0;
- WHITE_DELAY_OFF = 0;
- }
- return len;
- }
- static ssize_t AW2015_Set_Gray(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(GRAY_DELAY_OFF == 500)
- {
- if(GRAY_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x80); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(GRAY_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x80); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(GRAY_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x80); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x80); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- GRAY_DELAY_ON = 0;
- GRAY_DELAY_OFF = 0;
- }
- return len;
- }
- static ssize_t AW2015_Set_Yellow(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(YELLOW_DELAY_OFF == 500)
- {
- if(YELLOW_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(YELLOW_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(YELLOW_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- YELLOW_DELAY_ON = 0;
- YELLOW_DELAY_OFF = 0;
- }
- return len;
- }
- static ssize_t AW2015_Set_Pink(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(PINK_DELAY_OFF == 500)
- {
- if(PINK_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(PINK_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(PINK_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- PINK_DELAY_ON = 0;
- PINK_DELAY_OFF = 0;
- }
- return len;
- }
- static ssize_t AW2015_Set_Red(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(RED_DELAY_OFF == 500)
- {
- if(RED_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
-
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(RED_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(RED_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- RED_DELAY_ON = 0;
- RED_DELAY_OFF = 0;
- }
- return len;
- }
- static ssize_t AW2015_Set_Green(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(GREEN_DELAY_OFF == 500)
- {
- if(GREEN_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
-
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(GREEN_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(GREEN_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- GREEN_DELAY_ON = 0;
- GREEN_DELAY_OFF = 0;
- }
- return len;
- }
- unsigned char AW2015_Set_Green_on_off(int status)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(status!=0)
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0xFF); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- return 0;
- }
- EXPORT_SYMBOL(AW2015_Set_Green_on_off);
- static ssize_t AW2015_Set_Blue(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- if(databuf[0]!=0)
- {
- if(BLUE_DELAY_OFF == 500)
- {
- if(BLUE_DELAY_ON == 500)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(BLUE_DELAY_ON == 1000)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
- else if(BLUE_DELAY_ON == 1499)
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }else
- {
- I2C_write_reg(0x00, 0x55); // software reset
-
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x00); // LCFG1
- I2C_write_reg(0x05, 0x00); // LCFG2
- I2C_write_reg(0x06, 0x00); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0xFF); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- }
-
- }
- else
- {
- I2C_write_reg(0x10, 0x00); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0x00); // PWM1
- I2C_write_reg(0x1D, 0x00); // PWM2
- I2C_write_reg(0x1E, 0x00); // PWM3
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- BLUE_DELAY_ON = 0;
- BLUE_DELAY_OFF = 0;
- }
- return len;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////
- // |-|_|-|______|-|_|-|______|-|_|-|______
- ///////////////////////////////////////////////////////////////////////////////////////////
- unsigned char AW2015_Multi_Pulse(void)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
-
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
-
- I2C_write_reg(0x30, 0x03); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x08); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x30); // PAT_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
-
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // R -> G -> B -> W -> R ...
- //////////////////////////////////////////////////////////////////////////////////////////
- unsigned char AW2015_Multi_Color(void)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
-
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x13, 0x00); // Color2_R
- I2C_write_reg(0x14, 0xFF); // Color2_G
- I2C_write_reg(0x15, 0x00); // Color2_B
- I2C_write_reg(0x16, 0x00); // Color3_R
- I2C_write_reg(0x17, 0x00); // Color3_G
- I2C_write_reg(0x18, 0xFF); // Color3_B
- I2C_write_reg(0x19, 0xFF); // Color4_R
- I2C_write_reg(0x1A, 0xFF); // Color4_G
- I2C_write_reg(0x1B, 0xFF); // Color4_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
-
- I2C_write_reg(0x30, 0x60); // PAT_T1 Trise & Ton
- I2C_write_reg(0x31, 0x64); // PAT_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x00); // PAT_T3 Tdelay
- I2C_write_reg(0x33, 0x0F); // PAT_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
-
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- // S O S
- // . . . - - - . . .
- // |-|__|-|__|-|_______ |---|__|---|__|---|_______ |-|__|-|__|-|_______
- //////////////////////////////////////////////////////////////////////////////////////////
- unsigned char AW2015_SOS(void)
- {
- I2C_write_reg(0x00, 0x55); // software reset
- I2C_write_reg(0x01, 0x03); // GCR
- I2C_write_reg(0x03, 0x01); // IMAX
- I2C_write_reg(0x04, 0x01); // LCFG1
- I2C_write_reg(0x05, 0x01); // LCFG2
- I2C_write_reg(0x06, 0x01); // LCFG3
- I2C_write_reg(0x07, 0x07); // LEDEN
- I2C_write_reg(0x08, 0x08); // LEDCTR
-
- I2C_write_reg(0x10, 0xFF); // Color1_R
- I2C_write_reg(0x11, 0x00); // Color1_G
- I2C_write_reg(0x12, 0x00); // Color1_B
- I2C_write_reg(0x1C, 0xFF); // PWM1
- I2C_write_reg(0x1D, 0xFF); // PWM2
- I2C_write_reg(0x1E, 0xFF); // PWM3
-
- I2C_write_reg(0x30, 0x04); // PAT1_T1 Trise & Ton
- I2C_write_reg(0x31, 0x0B); // PAT1_T2 Tfall & Toff
- I2C_write_reg(0x32, 0x70); // PAT1_T3 Tslot & Tdelay
- I2C_write_reg(0x33, 0xE0); // PAT1_T4 PAT_CTR & Color
- I2C_write_reg(0x34, 0x00); // PAT1_T5 Timer
- I2C_write_reg(0x35, 0x07); // PAT2_T1 Trise & Ton
- I2C_write_reg(0x36, 0x0B); // PAT2_T2 Tfall & Toff
- I2C_write_reg(0x37, 0x70); // PAT2_T3 Tslot & Tdelay
- I2C_write_reg(0x38, 0xE0); // PAT2_T4 PAT_CTR & Color
- I2C_write_reg(0x39, 0x00); // PAT2_T5 Timer
- I2C_write_reg(0x3A, 0x04); // PAT3_T1 Trise & Ton
- I2C_write_reg(0x3B, 0x0B); // PAT3_T2 Tfall & Toff
- I2C_write_reg(0x3C, 0x70); // PAT3_T3 Tslot & Tdelay
- I2C_write_reg(0x3D, 0xE0); // PAT3_T4 PAT_CTR & Color
- I2C_write_reg(0x3E, 0x00); // PAT3_T5 Timer
-
- I2C_write_reg(0x09, 0x07); // PAT_RIN
- return 0;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- static ssize_t AW2015_get_reg(struct device* cd,struct device_attribute *attr, char* buf)
- {
- unsigned char reg_val;
- unsigned char i;
- ssize_t len = 0;
- for(i=0;i<0x3A;i++)
- {
- reg_val = I2C_read_reg(i);
- len += snprintf(buf+len, PAGE_SIZE-len, "reg%2X = 0x%2X, ", i,reg_val);
- }
- return len;
- }
- static ssize_t AW2015_set_reg(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[2];
- if(2 == sscanf(buf,"%x %x",&databuf[0], &databuf[1]))
- {
- I2C_write_reg(databuf[0],databuf[1]);
- }
- return len;
- }
- static ssize_t AW2015_get_debug(struct device* cd,struct device_attribute *attr, char* buf)
- {
- ssize_t len = 0;
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_OFF(void)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 0 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_ON(r, g, b)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 1 r g b > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 1 255 255 255 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_Blink(r, g, b, trise, ton, tfall, tfall)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 2 r g b trise ton tfall toff > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 2 255 255 255 1000 0 1000 1000 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_Multi_Pulse(void)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 3 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_Multi_Color(void)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 4 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_SOS(void)\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "echo 5 > debug\n");
- len += snprintf(buf+len, PAGE_SIZE-len, "\n");
- return len;
- }
- static ssize_t AW2015_set_debug(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
- {
- unsigned int databuf[16];
- sscanf(buf,"%d",&databuf[0]);
- if(databuf[0] == 0) { // OFF
- AW2015_LED_OFF();
- } else if(databuf[0] == 1) { //ON
- sscanf(&buf[1], "%d %d %d", &databuf[1], &databuf[2], &databuf[3]);
- AW2015_LED_ON(databuf[1], databuf[2], databuf[3]);
- } else if(databuf[0] == 2) { //Blink
- sscanf(&buf[1], "%d %d %d %d %d %d %d", &databuf[1], &databuf[2], &databuf[3], &databuf[4], &databuf[5], &databuf[6], &databuf[7]);
- AW2015_LED_Blink(databuf[1], databuf[2], databuf[3], databuf[4], databuf[5], databuf[6], databuf[7]);
- } else if(databuf[0] == 3) { //Multi Pulse
- AW2015_Multi_Pulse();
- } else if(databuf[0] == 4) { //Multi Color
- AW2015_Multi_Color();
- } else if(databuf[0] == 5) { //SOS
- AW2015_SOS();
- }
- return len;
- }
- static int AW2015_create_sysfs(struct i2c_client *client)
- {
- int err;
- struct device *dev = &(client->dev);
- err = device_create_file(dev, &dev_attr_reg);
- err = device_create_file(dev, &dev_attr_debug);
- err = device_create_file(dev, &dev_attr_Red);
- err = device_create_file(dev, &dev_attr_Green);
- err = device_create_file(dev, &dev_attr_Blue);
- err = device_create_file(dev, &dev_attr_Red_delay_off);
- err = device_create_file(dev, &dev_attr_Red_delay_on);
- err = device_create_file(dev, &dev_attr_Green_delay_off);
- err = device_create_file(dev, &dev_attr_Green_delay_on);
- err = device_create_file(dev, &dev_attr_Blue_delay_off);
- err = device_create_file(dev, &dev_attr_Blue_delay_on);
- err = device_create_file(dev, &dev_attr_White);
- err = device_create_file(dev, &dev_attr_White_delay_off);
- err = device_create_file(dev, &dev_attr_White_delay_on);
- err = device_create_file(dev, &dev_attr_Gray);
- err = device_create_file(dev, &dev_attr_Gray_delay_off);
- err = device_create_file(dev, &dev_attr_Gray_delay_on);
- err = device_create_file(dev, &dev_attr_Yellow);
- err = device_create_file(dev, &dev_attr_Yellow_delay_off);
- err = device_create_file(dev, &dev_attr_Yellow_delay_on);
- err = device_create_file(dev, &dev_attr_Pink);
- err = device_create_file(dev, &dev_attr_Pink_delay_off);
- err = device_create_file(dev, &dev_attr_Pink_delay_on);
- return err;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- static int AW2015_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
- {
- unsigned char reg_value;
- unsigned char cnt = 5;
- int err = 0;
- //pr_err("AW2015_i2c_probe xmwuwh start\n");
- if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- err = -ENODEV;
- goto exit_check_functionality_failed;
- }
- //client->addr = 0x64;
- AW2015_i2c_client = client;
- while(cnt>0)
- {
- reg_value = I2C_read_reg(0x00);
- printk("AW2015 CHIPID=0x%2x\n", reg_value);
- if(reg_value == 0x31)
- {
- break;
- }
- cnt --;
- msleep(10);
- }
- if(!cnt)
- {
- err = -ENODEV;
- goto exit_create_singlethread;
- }
- AW2015_create_sysfs(client);
- I2C_write_reg(0x00, 0x55); // software reset
- return 0;
- exit_create_singlethread:
- AW2015_i2c_client = NULL;
- exit_check_functionality_failed:
- return err;
- }
- static int AW2015_i2c_remove(struct i2c_client *client)
- {
- AW2015_i2c_client = NULL;
- return 0;
- }
- static const struct i2c_device_id AW2015_i2c_id[] = {
- { AW2015_I2C_NAME, 0 },
- { }
- };
- #ifdef CONFIG_OF
- static const struct of_device_id aw2015_i2c_of_match[] = {
- {.compatible = "awinic,pressure"},
- {},
- };
- #endif
- static struct i2c_driver AW2015_i2c_driver = {
- .driver = {
- .name = AW2015_I2C_NAME,
- #ifdef CONFIG_OF
- .of_match_table = aw2015_i2c_of_match,
- #endif
- },
- .probe = AW2015_i2c_probe,
- .remove = AW2015_i2c_remove,
- .id_table = AW2015_i2c_id,
- };
- static int AW2015_led_remove(struct platform_device *pdev)
- {
- printk("AW2015 remove\n");
- i2c_del_driver(&AW2015_i2c_driver);
- return 0;
- }
- static int AW2015_led_probe(struct platform_device *pdev)
- {
- int ret;
- printk("%s 1 start!\n", __func__);
-
- ret = i2c_add_driver(&AW2015_i2c_driver);
- if (ret != 0) {
- printk("[%s] failed to register AW2015 i2c driver.\n", __func__);
- return ret;
- } else {
- printk("[%s] Success to register AW2015 i2c driver.\n", __func__);
- }
- return 0;
- }
- #ifdef CONFIG_OF
- static const struct of_device_id aw2015plt_of_match[] = {
- {.compatible = "awinic,aw2015_led"},
- {},
- };
- #endif
- //static void aw2015_led_shutdown(struct platform_device *dev)
- //{
- // AW2015_LED_OFF();
- // pr_err("******** xmwuwh aw2015_led_shutdown!! ********\n");
- //}
- static struct platform_driver AW2015_led_driver = {
- .probe = AW2015_led_probe,
- .remove = AW2015_led_remove,
- //.shutdown = aw2015_led_shutdown,
- .driver = {
- .name = "aw2015_led",
- #ifdef CONFIG_OF
- .of_match_table = aw2015plt_of_match,
- #endif
- }
- };
- static int __init AW2015_led_init(void) {
- int ret;
- //pr_err("%s xmwuwh start\n", __func__);
-
- ret = platform_driver_register(&AW2015_led_driver);
- if (ret) {
- printk("****[%s] Unable to register driver (%d)\n", __func__, ret);
- return ret;
- }
- return 0;
- }
- static void __exit AW2015_led_exit(void) {
- printk("%s exit\n", __func__);
- platform_driver_unregister(&AW2015_led_driver);
- }
- module_init(AW2015_led_init);
- module_exit(AW2015_led_exit);
- MODULE_AUTHOR("<liweilei@awinic.com.cn>");
- MODULE_DESCRIPTION("AWINIC AW2015 LED Driver");
- MODULE_LICENSE("GPL");
|