AW2015_LED_M.c 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995
  1. /*************************************************************************************************
  2. * AW2015_LED.c
  3. *
  4. * Create Date :
  5. *
  6. * Modify Date :
  7. *
  8. * Create by : AWINIC Technology CO., LTD
  9. *
  10. * Version : 0.9, 2016/02/15
  11. *************************************************************************************************/
  12. #include <linux/i2c.h>
  13. #include <linux/gpio.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/delay.h>
  16. #include <linux/irq.h>
  17. #include <linux/firmware.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/slab.h>
  20. #include <linux/fs.h>
  21. #include <linux/proc_fs.h>
  22. #include <asm/uaccess.h>
  23. #include <asm/io.h>
  24. #include <linux/init.h>
  25. #include <linux/pci.h>
  26. #include <linux/dma-mapping.h>
  27. #include <linux/gameport.h>
  28. #include <linux/moduleparam.h>
  29. #include <linux/mutex.h>
  30. #include <linux/wakelock.h>
  31. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  32. #define AW2015_I2C_NAME "pressure"
  33. #define AW2015_I2C_BUS 0
  34. #define AW2015_I2C_ADDR 0x64
  35. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. static ssize_t AW2015_get_reg(struct device* cd,struct device_attribute *attr, char* buf);
  37. static ssize_t AW2015_set_reg(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  38. static ssize_t AW2015_set_debug(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  39. static ssize_t AW2015_get_debug(struct device* cd, struct device_attribute *attr, char* buf);
  40. static ssize_t AW2015_Set_Red(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  41. static ssize_t AW2015_Set_Green(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  42. static ssize_t AW2015_Set_Blue(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  43. static ssize_t AW2015_Set_Red_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  44. static ssize_t AW2015_Set_Red_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  45. static ssize_t AW2015_Set_Green_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  46. static ssize_t AW2015_Set_Green_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  47. static ssize_t AW2015_Set_Blue_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  48. static ssize_t AW2015_Set_Blue_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  49. static ssize_t AW2015_Set_White(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  50. static ssize_t AW2015_Set_White_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  51. static ssize_t AW2015_Set_White_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  52. static ssize_t AW2015_Set_Gray(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  53. static ssize_t AW2015_Set_Gray_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  54. static ssize_t AW2015_Set_Gray_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  55. static ssize_t AW2015_Set_Yellow(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  56. static ssize_t AW2015_Set_Yellow_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  57. static ssize_t AW2015_Set_Yellow_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  58. static ssize_t AW2015_Set_Pink(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  59. static ssize_t AW2015_Set_Pink_delay_off(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  60. static ssize_t AW2015_Set_Pink_delay_on(struct device* cd, struct device_attribute *attr,const char* buf, size_t len);
  61. static DEVICE_ATTR(reg, 0660, AW2015_get_reg, AW2015_set_reg);
  62. static DEVICE_ATTR(debug, 0660, AW2015_get_debug, AW2015_set_debug);
  63. static DEVICE_ATTR(Red, 0660, NULL, AW2015_Set_Red);
  64. static DEVICE_ATTR(Green, 0660, NULL, AW2015_Set_Green);
  65. static DEVICE_ATTR(Blue, 0660, NULL, AW2015_Set_Blue);
  66. static DEVICE_ATTR(White, 0660, NULL, AW2015_Set_White);
  67. static DEVICE_ATTR(Gray, 0660, NULL, AW2015_Set_Gray);
  68. static DEVICE_ATTR(Yellow, 0660, NULL, AW2015_Set_Yellow);
  69. static DEVICE_ATTR(Pink, 0660, NULL, AW2015_Set_Pink);
  70. static int RED_DELAY_OFF = 0,RED_DELAY_ON = 0;
  71. static DEVICE_ATTR(Red_delay_off, 0660, NULL, AW2015_Set_Red_delay_off);
  72. static DEVICE_ATTR(Red_delay_on, 0660, NULL, AW2015_Set_Red_delay_on);
  73. static int GREEN_DELAY_OFF = 0,GREEN_DELAY_ON = 0;
  74. static DEVICE_ATTR(Green_delay_off, 0660, NULL, AW2015_Set_Green_delay_off);
  75. static DEVICE_ATTR(Green_delay_on, 0660, NULL, AW2015_Set_Green_delay_on);
  76. static int BLUE_DELAY_OFF = 0,BLUE_DELAY_ON = 0;
  77. static DEVICE_ATTR(Blue_delay_off, 0660, NULL, AW2015_Set_Blue_delay_off);
  78. static DEVICE_ATTR(Blue_delay_on, 0660, NULL, AW2015_Set_Blue_delay_on);
  79. static int WHITE_DELAY_OFF = 0,WHITE_DELAY_ON = 0;
  80. static DEVICE_ATTR(White_delay_off, 0660, NULL, AW2015_Set_White_delay_off);
  81. static DEVICE_ATTR(White_delay_on, 0660, NULL, AW2015_Set_White_delay_on);
  82. static int GRAY_DELAY_OFF = 0,GRAY_DELAY_ON = 0;
  83. static DEVICE_ATTR(Gray_delay_off, 0660, NULL, AW2015_Set_Gray_delay_off);
  84. static DEVICE_ATTR(Gray_delay_on, 0660, NULL, AW2015_Set_Gray_delay_on);
  85. static int YELLOW_DELAY_OFF = 0,YELLOW_DELAY_ON = 0;
  86. static DEVICE_ATTR(Yellow_delay_off, 0660, NULL, AW2015_Set_Yellow_delay_off);
  87. static DEVICE_ATTR(Yellow_delay_on, 0660, NULL, AW2015_Set_Yellow_delay_on);
  88. static int PINK_DELAY_OFF = 0,PINK_DELAY_ON = 0;
  89. static DEVICE_ATTR(Pink_delay_off, 0660, NULL, AW2015_Set_Pink_delay_off);
  90. static DEVICE_ATTR(Pink_delay_on, 0660, NULL, AW2015_Set_Pink_delay_on);
  91. struct i2c_client *AW2015_i2c_client;
  92. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  93. // i2c write and read
  94. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  95. unsigned char I2C_write_reg(unsigned char addr, unsigned char reg_data)
  96. {
  97. char ret;
  98. u8 wdbuf[512] = {0};
  99. struct i2c_msg msg[] = {
  100. {
  101. .addr = AW2015_i2c_client->addr,
  102. .flags = 0,
  103. .len = 2,
  104. .buf = wdbuf,
  105. },
  106. };
  107. wdbuf[0] = addr;
  108. wdbuf[1] = reg_data;
  109. ret = i2c_transfer(AW2015_i2c_client->adapter, msg, 1);
  110. if (ret < 0)
  111. pr_err("msg %s i2c read error: %d\n", __func__, ret);
  112. return ret;
  113. }
  114. unsigned char I2C_read_reg(unsigned char addr)
  115. {
  116. int ret = 0;
  117. u8 rdbuf[512] = {0};
  118. struct i2c_msg msg[2] = {
  119. {
  120. .addr = AW2015_i2c_client->addr,
  121. .flags = 0,
  122. .len = 1,
  123. .buf = rdbuf,
  124. },
  125. {
  126. .addr = AW2015_i2c_client->addr,
  127. .flags = I2C_M_RD,
  128. .len = 1,
  129. .buf = rdbuf,
  130. },
  131. };
  132. rdbuf[0] = addr;
  133. ret = i2c_transfer(AW2015_i2c_client->adapter, msg, 2);
  134. if (ret < 0)
  135. pr_err("msg %s i2c read error: %d\n", __func__, ret);
  136. return rdbuf[0];
  137. }
  138. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  139. // AW2015 LED
  140. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  141. unsigned int ms2timer(unsigned int time)
  142. {
  143. int i;
  144. unsigned int ref[16] = {4, 128, 256, 384, 512, 762, 1024, 1524, 2048, 2560, 3072, 4096, 5120, 6144, 7168, 8192};
  145. for(i=0; i<15; i++)
  146. {
  147. if(time <= ref[0])
  148. {
  149. return 0;
  150. }
  151. else if(time > ref[15])
  152. {
  153. return 15;
  154. }
  155. else if((time>ref[i]) && (time<=ref[i+1]))
  156. {
  157. if((time-ref[i]) <= (ref[i+1]-time))
  158. {
  159. return i;
  160. }
  161. else
  162. {
  163. return (i+1);
  164. }
  165. }
  166. }
  167. return 0;
  168. }
  169. unsigned char AW2015_LED_ON(unsigned char r, unsigned char g, unsigned char b)
  170. {
  171. I2C_write_reg(0x00, 0x55); // software reset
  172. I2C_write_reg(0x01, 0x03); // GCR
  173. I2C_write_reg(0x03, 0x01); // IMAX
  174. I2C_write_reg(0x04, 0x00); // LCFG1
  175. I2C_write_reg(0x05, 0x00); // LCFG2
  176. I2C_write_reg(0x06, 0x00); // LCFG3
  177. I2C_write_reg(0x07, 0x07); // LEDEN
  178. I2C_write_reg(0x10, r ); // ILED1
  179. I2C_write_reg(0x11, g ); // ILED2
  180. I2C_write_reg(0x12, b ); // ILED3
  181. I2C_write_reg(0x1C, 0xFF); // PWM1
  182. I2C_write_reg(0x1D, 0xFF); // PWM2
  183. I2C_write_reg(0x1E, 0xFF); // PWM3
  184. return 0;
  185. }
  186. unsigned char AW2015_LED_OFF(void)
  187. {
  188. I2C_write_reg(0x00, 0x55); // software reset
  189. I2C_write_reg(0x10, 0x00); // Color1_R
  190. I2C_write_reg(0x11, 0x00); // Color1_G
  191. I2C_write_reg(0x12, 0x00); // Color1_B
  192. I2C_write_reg(0x1C, 0x00); // PWM1
  193. I2C_write_reg(0x1D, 0x00); // PWM2
  194. I2C_write_reg(0x1E, 0x00); // PWM3
  195. return 0;
  196. }
  197. EXPORT_SYMBOL(AW2015_LED_OFF);
  198. static int RED_DELAY_OFF_BEFORE;
  199. static int RED_DELAY_ON_BEFORE;
  200. // set red delay off and on to 0 by xmwuwh@20161122
  201. unsigned char AW2015_LED_RED_ON(void)
  202. {
  203. RED_DELAY_OFF_BEFORE = RED_DELAY_OFF;
  204. RED_DELAY_ON_BEFORE = RED_DELAY_ON;
  205. RED_DELAY_OFF = 0;
  206. RED_DELAY_ON = 0;
  207. I2C_write_reg(0x00, 0x55); // software reset
  208. I2C_write_reg(0x01, 0x03); // GCR
  209. I2C_write_reg(0x03, 0x01); // IMAX
  210. I2C_write_reg(0x04, 0x00); // LCFG1
  211. I2C_write_reg(0x05, 0x00); // LCFG2
  212. I2C_write_reg(0x06, 0x00); // LCFG3
  213. I2C_write_reg(0x07, 0x07); // LEDEN
  214. I2C_write_reg(0x10, 0xFF); // Color1_R
  215. I2C_write_reg(0x11, 0x00); // Color1_G
  216. I2C_write_reg(0x12, 0x00); // Color1_B
  217. I2C_write_reg(0x1C, 0xFF); // PWM1
  218. I2C_write_reg(0x1D, 0xFF); // PWM2
  219. I2C_write_reg(0x1E, 0xFF); // PWM3
  220. I2C_write_reg(0x09, 0x07); // PAT_RIN
  221. return 0;
  222. }
  223. EXPORT_SYMBOL(AW2015_LED_RED_ON);
  224. // set red delay off and on to before value by xmwuwh@20161122
  225. unsigned char AW2015_LED_RED_OFF(void)
  226. {
  227. RED_DELAY_OFF = RED_DELAY_OFF_BEFORE;
  228. RED_DELAY_ON = RED_DELAY_ON_BEFORE;
  229. return 0;
  230. }
  231. EXPORT_SYMBOL(AW2015_LED_RED_OFF);
  232. 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)
  233. {
  234. unsigned char trise, ton, tfall, toff;
  235. trise = ms2timer(trise_ms);
  236. ton = ms2timer(ton_ms);
  237. tfall = ms2timer(tfall_ms);
  238. toff = ms2timer(toff_ms);
  239. I2C_write_reg(0x00, 0x55); // software reset
  240. I2C_write_reg(0x01, 0x03); // GCR
  241. I2C_write_reg(0x03, 0x01); // IMAX
  242. I2C_write_reg(0x04, 0x01); // LCFG1
  243. I2C_write_reg(0x05, 0x01); // LCFG2
  244. I2C_write_reg(0x06, 0x01); // LCFG3
  245. I2C_write_reg(0x07, 0x07); // LEDEN
  246. I2C_write_reg(0x08, 0x08); // LEDCTR
  247. I2C_write_reg(0x10, r ); // ILED1
  248. I2C_write_reg(0x11, g ); // ILED2
  249. I2C_write_reg(0x12, b ); // ILED3
  250. I2C_write_reg(0x1C, 0xFF); // PWM1
  251. I2C_write_reg(0x1D, 0xFF); // PWM2
  252. I2C_write_reg(0x1E, 0xFF); // PWM3
  253. I2C_write_reg(0x30, (trise<<4)|ton); // PAT_T1 Trise & Ton
  254. I2C_write_reg(0x31, (tfall<<4)|toff); // PAT_T2 Tfall & Toff
  255. I2C_write_reg(0x32, 0x00); // PAT_T3 Tdelay
  256. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  257. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  258. I2C_write_reg(0x09, 0x07); // PAT_RIN
  259. return 0;
  260. }
  261. static ssize_t AW2015_Set_Red_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  262. {
  263. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  264. RED_DELAY_OFF = iNewPsSensorState;
  265. return len;
  266. }
  267. static ssize_t AW2015_Set_Red_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  268. {
  269. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  270. RED_DELAY_ON = iNewPsSensorState;
  271. return len;
  272. }
  273. static ssize_t AW2015_Set_Green_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  274. {
  275. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  276. GREEN_DELAY_OFF = iNewPsSensorState;
  277. return len;
  278. }
  279. static ssize_t AW2015_Set_Green_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  280. {
  281. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  282. GREEN_DELAY_ON = iNewPsSensorState;
  283. return len;
  284. }
  285. static ssize_t AW2015_Set_Blue_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  286. {
  287. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  288. BLUE_DELAY_OFF = iNewPsSensorState;
  289. return len;
  290. }
  291. static ssize_t AW2015_Set_Blue_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  292. {
  293. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  294. BLUE_DELAY_ON = iNewPsSensorState;
  295. return len;
  296. }
  297. static ssize_t AW2015_Set_White_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  298. {
  299. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  300. WHITE_DELAY_OFF = iNewPsSensorState;
  301. return len;
  302. }
  303. static ssize_t AW2015_Set_White_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  304. {
  305. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  306. WHITE_DELAY_ON = iNewPsSensorState;
  307. return len;
  308. }
  309. static ssize_t AW2015_Set_Gray_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  310. {
  311. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  312. GRAY_DELAY_OFF = iNewPsSensorState;
  313. return len;
  314. }
  315. static ssize_t AW2015_Set_Gray_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  316. {
  317. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  318. GRAY_DELAY_ON = iNewPsSensorState;
  319. return len;
  320. }
  321. static ssize_t AW2015_Set_Yellow_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  322. {
  323. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  324. YELLOW_DELAY_OFF = iNewPsSensorState;
  325. return len;
  326. }
  327. static ssize_t AW2015_Set_Yellow_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  328. {
  329. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  330. YELLOW_DELAY_ON = iNewPsSensorState;
  331. return len;
  332. }
  333. static ssize_t AW2015_Set_Pink_delay_off(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  334. {
  335. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  336. PINK_DELAY_OFF = iNewPsSensorState;
  337. return len;
  338. }
  339. static ssize_t AW2015_Set_Pink_delay_on(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  340. {
  341. unsigned long iNewPsSensorState = simple_strtoul(buf, NULL, 10);
  342. PINK_DELAY_ON = iNewPsSensorState;
  343. return len;
  344. }
  345. static ssize_t AW2015_Set_White(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  346. {
  347. unsigned int databuf[16];
  348. sscanf(buf,"%d",&databuf[0]);
  349. I2C_write_reg(0x00, 0x55); // software reset
  350. I2C_write_reg(0x01, 0x03); // GCR
  351. I2C_write_reg(0x03, 0x01); // IMAX
  352. I2C_write_reg(0x04, 0x00); // LCFG1
  353. I2C_write_reg(0x05, 0x00); // LCFG2
  354. I2C_write_reg(0x06, 0x00); // LCFG3
  355. I2C_write_reg(0x07, 0x07); // LEDEN
  356. if(databuf[0]!=0)
  357. {
  358. if(WHITE_DELAY_OFF == 500)
  359. {
  360. if(WHITE_DELAY_ON == 500)
  361. {
  362. I2C_write_reg(0x00, 0x55); // software reset
  363. I2C_write_reg(0x01, 0x03); // GCR
  364. I2C_write_reg(0x03, 0x01); // IMAX
  365. I2C_write_reg(0x04, 0x01); // LCFG1
  366. I2C_write_reg(0x05, 0x01); // LCFG2
  367. I2C_write_reg(0x06, 0x01); // LCFG3
  368. I2C_write_reg(0x07, 0x07); // LEDEN
  369. I2C_write_reg(0x08, 0x08); // LEDCTR
  370. I2C_write_reg(0x10, 0xFF); // Color1_R
  371. I2C_write_reg(0x11, 0xFF); // Color1_G
  372. I2C_write_reg(0x12, 0xFF); // Color1_B
  373. I2C_write_reg(0x1C, 0xFF); // PWM1
  374. I2C_write_reg(0x1D, 0xFF); // PWM2
  375. I2C_write_reg(0x1E, 0xFF); // PWM3
  376. I2C_write_reg(0x09, 0x07); // PAT_RIN
  377. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  378. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  379. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  380. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  381. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  382. I2C_write_reg(0x09, 0x07); // PAT_RIN
  383. }
  384. else if(WHITE_DELAY_ON == 1000)
  385. {
  386. I2C_write_reg(0x00, 0x55); // software reset
  387. I2C_write_reg(0x01, 0x03); // GCR
  388. I2C_write_reg(0x03, 0x01); // IMAX
  389. I2C_write_reg(0x04, 0x01); // LCFG1
  390. I2C_write_reg(0x05, 0x01); // LCFG2
  391. I2C_write_reg(0x06, 0x01); // LCFG3
  392. I2C_write_reg(0x07, 0x07); // LEDEN
  393. I2C_write_reg(0x08, 0x08); // LEDCTR
  394. I2C_write_reg(0x10, 0xFF); // Color1_R
  395. I2C_write_reg(0x11, 0xFF); // Color1_G
  396. I2C_write_reg(0x12, 0xFF); // Color1_B
  397. I2C_write_reg(0x1C, 0xFF); // PWM1
  398. I2C_write_reg(0x1D, 0xFF); // PWM2
  399. I2C_write_reg(0x1E, 0xFF); // PWM3
  400. I2C_write_reg(0x09, 0x07); // PAT_RIN
  401. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  402. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  403. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  404. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  405. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  406. I2C_write_reg(0x09, 0x07); // PAT_RIN
  407. }
  408. else if(WHITE_DELAY_ON == 1499)
  409. {
  410. I2C_write_reg(0x00, 0x55); // software reset
  411. I2C_write_reg(0x01, 0x03); // GCR
  412. I2C_write_reg(0x03, 0x01); // IMAX
  413. I2C_write_reg(0x04, 0x01); // LCFG1
  414. I2C_write_reg(0x05, 0x01); // LCFG2
  415. I2C_write_reg(0x06, 0x01); // LCFG3
  416. I2C_write_reg(0x07, 0x07); // LEDEN
  417. I2C_write_reg(0x08, 0x08); // LEDCTR
  418. I2C_write_reg(0x10, 0xFF); // Color1_R
  419. I2C_write_reg(0x11, 0xFF); // Color1_G
  420. I2C_write_reg(0x12, 0xFF); // Color1_B
  421. I2C_write_reg(0x1C, 0xFF); // PWM1
  422. I2C_write_reg(0x1D, 0xFF); // PWM2
  423. I2C_write_reg(0x1E, 0xFF); // PWM3
  424. I2C_write_reg(0x09, 0x07); // PAT_RIN
  425. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  426. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  427. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  428. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  429. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  430. I2C_write_reg(0x09, 0x07); // PAT_RIN
  431. }
  432. } else if(WHITE_DELAY_ON!=0 &&WHITE_DELAY_OFF!=0)
  433. {
  434. I2C_write_reg(0x00, 0x55); // software reset
  435. I2C_write_reg(0x01, 0x03); // GCR
  436. I2C_write_reg(0x03, 0x01); // IMAX
  437. I2C_write_reg(0x04, 0x01); // LCFG1
  438. I2C_write_reg(0x05, 0x01); // LCFG2
  439. I2C_write_reg(0x06, 0x01); // LCFG3
  440. I2C_write_reg(0x07, 0x07); // LEDEN
  441. I2C_write_reg(0x08, 0x08); // LEDCTR
  442. I2C_write_reg(0x10, 0xFF); // Color1_R
  443. I2C_write_reg(0x11, 0xFF); // Color1_G
  444. I2C_write_reg(0x12, 0xFF); // Color1_B
  445. I2C_write_reg(0x1C, 0xFF); // PWM1
  446. I2C_write_reg(0x1D, 0xFF); // PWM2
  447. I2C_write_reg(0x1E, 0xFF); // PWM3
  448. I2C_write_reg(0x09, 0x07); // PAT_RIN
  449. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  450. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  451. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  452. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  453. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  454. I2C_write_reg(0x09, 0x07); // PAT_RIN
  455. }
  456. else
  457. {
  458. I2C_write_reg(0x00, 0x55); // software reset
  459. I2C_write_reg(0x01, 0x03); // GCR
  460. I2C_write_reg(0x03, 0x01); // IMAX
  461. I2C_write_reg(0x04, 0x00); // LCFG1
  462. I2C_write_reg(0x05, 0x00); // LCFG2
  463. I2C_write_reg(0x06, 0x00); // LCFG3
  464. I2C_write_reg(0x07, 0x07); // LEDEN
  465. I2C_write_reg(0x10, 0xFF); // Color1_R
  466. I2C_write_reg(0x11, 0xFF); // Color1_G
  467. I2C_write_reg(0x12, 0xFF); // Color1_B
  468. I2C_write_reg(0x1C, 0xFF); // PWM1
  469. I2C_write_reg(0x1D, 0xFF); // PWM2
  470. I2C_write_reg(0x1E, 0xFF); // PWM3
  471. I2C_write_reg(0x09, 0x07); // PAT_RIN
  472. }
  473. }
  474. else
  475. {
  476. I2C_write_reg(0x10, 0x00); // Color1_R
  477. I2C_write_reg(0x11, 0x00); // Color1_G
  478. I2C_write_reg(0x12, 0x00); // Color1_B
  479. I2C_write_reg(0x1C, 0x00); // PWM1
  480. I2C_write_reg(0x1D, 0x00); // PWM2
  481. I2C_write_reg(0x1E, 0x00); // PWM3
  482. I2C_write_reg(0x09, 0x07); // PAT_RIN
  483. WHITE_DELAY_ON = 0;
  484. WHITE_DELAY_OFF = 0;
  485. }
  486. return len;
  487. }
  488. static ssize_t AW2015_Set_Gray(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  489. {
  490. unsigned int databuf[16];
  491. sscanf(buf,"%d",&databuf[0]);
  492. I2C_write_reg(0x00, 0x55); // software reset
  493. I2C_write_reg(0x01, 0x03); // GCR
  494. I2C_write_reg(0x03, 0x01); // IMAX
  495. I2C_write_reg(0x04, 0x00); // LCFG1
  496. I2C_write_reg(0x05, 0x00); // LCFG2
  497. I2C_write_reg(0x06, 0x00); // LCFG3
  498. I2C_write_reg(0x07, 0x07); // LEDEN
  499. if(databuf[0]!=0)
  500. {
  501. if(GRAY_DELAY_OFF == 500)
  502. {
  503. if(GRAY_DELAY_ON == 500)
  504. {
  505. I2C_write_reg(0x00, 0x55); // software reset
  506. I2C_write_reg(0x01, 0x03); // GCR
  507. I2C_write_reg(0x03, 0x01); // IMAX
  508. I2C_write_reg(0x04, 0x01); // LCFG1
  509. I2C_write_reg(0x05, 0x01); // LCFG2
  510. I2C_write_reg(0x06, 0x01); // LCFG3
  511. I2C_write_reg(0x07, 0x07); // LEDEN
  512. I2C_write_reg(0x08, 0x08); // LEDCTR
  513. I2C_write_reg(0x10, 0x00); // Color1_R
  514. I2C_write_reg(0x11, 0xFF); // Color1_G
  515. I2C_write_reg(0x12, 0x80); // Color1_B
  516. I2C_write_reg(0x1C, 0xFF); // PWM1
  517. I2C_write_reg(0x1D, 0xFF); // PWM2
  518. I2C_write_reg(0x1E, 0xFF); // PWM3
  519. I2C_write_reg(0x09, 0x07); // PAT_RIN
  520. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  521. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  522. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  523. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  524. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  525. I2C_write_reg(0x09, 0x07); // PAT_RIN
  526. }
  527. else if(GRAY_DELAY_ON == 1000)
  528. {
  529. I2C_write_reg(0x00, 0x55); // software reset
  530. I2C_write_reg(0x01, 0x03); // GCR
  531. I2C_write_reg(0x03, 0x01); // IMAX
  532. I2C_write_reg(0x04, 0x01); // LCFG1
  533. I2C_write_reg(0x05, 0x01); // LCFG2
  534. I2C_write_reg(0x06, 0x01); // LCFG3
  535. I2C_write_reg(0x07, 0x07); // LEDEN
  536. I2C_write_reg(0x08, 0x08); // LEDCTR
  537. I2C_write_reg(0x10, 0x00); // Color1_R
  538. I2C_write_reg(0x11, 0xFF); // Color1_G
  539. I2C_write_reg(0x12, 0x80); // Color1_B
  540. I2C_write_reg(0x1C, 0xFF); // PWM1
  541. I2C_write_reg(0x1D, 0xFF); // PWM2
  542. I2C_write_reg(0x1E, 0xFF); // PWM3
  543. I2C_write_reg(0x09, 0x07); // PAT_RIN
  544. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  545. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  546. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  547. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  548. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  549. I2C_write_reg(0x09, 0x07); // PAT_RIN
  550. }
  551. else if(GRAY_DELAY_ON == 1499)
  552. {
  553. I2C_write_reg(0x00, 0x55); // software reset
  554. I2C_write_reg(0x01, 0x03); // GCR
  555. I2C_write_reg(0x03, 0x01); // IMAX
  556. I2C_write_reg(0x04, 0x01); // LCFG1
  557. I2C_write_reg(0x05, 0x01); // LCFG2
  558. I2C_write_reg(0x06, 0x01); // LCFG3
  559. I2C_write_reg(0x07, 0x07); // LEDEN
  560. I2C_write_reg(0x08, 0x08); // LEDCTR
  561. I2C_write_reg(0x10, 0x00); // Color1_R
  562. I2C_write_reg(0x11, 0xFF); // Color1_G
  563. I2C_write_reg(0x12, 0x80); // Color1_B
  564. I2C_write_reg(0x1C, 0xFF); // PWM1
  565. I2C_write_reg(0x1D, 0xFF); // PWM2
  566. I2C_write_reg(0x1E, 0xFF); // PWM3
  567. I2C_write_reg(0x09, 0x07); // PAT_RIN
  568. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  569. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  570. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  571. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  572. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  573. I2C_write_reg(0x09, 0x07); // PAT_RIN
  574. }
  575. }else if(GRAY_DELAY_ON!=0 && GRAY_DELAY_OFF!=0)
  576. {
  577. I2C_write_reg(0x00, 0x55); // software reset
  578. I2C_write_reg(0x01, 0x03); // GCR
  579. I2C_write_reg(0x03, 0x01); // IMAX
  580. I2C_write_reg(0x04, 0x01); // LCFG1
  581. I2C_write_reg(0x05, 0x01); // LCFG2
  582. I2C_write_reg(0x06, 0x01); // LCFG3
  583. I2C_write_reg(0x07, 0x07); // LEDEN
  584. I2C_write_reg(0x08, 0x08); // LEDCTR
  585. I2C_write_reg(0x10, 0x00); // Color1_R
  586. I2C_write_reg(0x11, 0xFF); // Color1_G
  587. I2C_write_reg(0x12, 0x80); // Color1_B
  588. I2C_write_reg(0x1C, 0xFF); // PWM1
  589. I2C_write_reg(0x1D, 0xFF); // PWM2
  590. I2C_write_reg(0x1E, 0xFF); // PWM3
  591. I2C_write_reg(0x09, 0x07); // PAT_RIN
  592. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  593. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  594. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  595. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  596. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  597. I2C_write_reg(0x09, 0x07); // PAT_RIN
  598. }else
  599. {
  600. I2C_write_reg(0x00, 0x55); // software reset
  601. I2C_write_reg(0x01, 0x03); // GCR
  602. I2C_write_reg(0x03, 0x01); // IMAX
  603. I2C_write_reg(0x04, 0x00); // LCFG1
  604. I2C_write_reg(0x05, 0x00); // LCFG2
  605. I2C_write_reg(0x06, 0x00); // LCFG3
  606. I2C_write_reg(0x07, 0x07); // LEDEN
  607. I2C_write_reg(0x10, 0x00); // Color1_R
  608. I2C_write_reg(0x11, 0xFF); // Color1_G
  609. I2C_write_reg(0x12, 0x80); // Color1_B
  610. I2C_write_reg(0x1C, 0xFF); // PWM1
  611. I2C_write_reg(0x1D, 0xFF); // PWM2
  612. I2C_write_reg(0x1E, 0xFF); // PWM3
  613. I2C_write_reg(0x09, 0x07); // PAT_RIN
  614. }
  615. }
  616. else
  617. {
  618. I2C_write_reg(0x10, 0x00); // Color1_R
  619. I2C_write_reg(0x11, 0x00); // Color1_G
  620. I2C_write_reg(0x12, 0x00); // Color1_B
  621. I2C_write_reg(0x1C, 0x00); // PWM1
  622. I2C_write_reg(0x1D, 0x00); // PWM2
  623. I2C_write_reg(0x1E, 0x00); // PWM3
  624. I2C_write_reg(0x09, 0x07); // PAT_RIN
  625. GRAY_DELAY_ON = 0;
  626. GRAY_DELAY_OFF = 0;
  627. }
  628. return len;
  629. }
  630. static ssize_t AW2015_Set_Yellow(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  631. {
  632. unsigned int databuf[16];
  633. sscanf(buf,"%d",&databuf[0]);
  634. I2C_write_reg(0x00, 0x55); // software reset
  635. I2C_write_reg(0x01, 0x03); // GCR
  636. I2C_write_reg(0x03, 0x01); // IMAX
  637. I2C_write_reg(0x04, 0x00); // LCFG1
  638. I2C_write_reg(0x05, 0x00); // LCFG2
  639. I2C_write_reg(0x06, 0x00); // LCFG3
  640. I2C_write_reg(0x07, 0x07); // LEDEN
  641. if(databuf[0]!=0)
  642. {
  643. if(YELLOW_DELAY_OFF == 500)
  644. {
  645. if(YELLOW_DELAY_ON == 500)
  646. {
  647. I2C_write_reg(0x00, 0x55); // software reset
  648. I2C_write_reg(0x01, 0x03); // GCR
  649. I2C_write_reg(0x03, 0x01); // IMAX
  650. I2C_write_reg(0x04, 0x01); // LCFG1
  651. I2C_write_reg(0x05, 0x01); // LCFG2
  652. I2C_write_reg(0x06, 0x01); // LCFG3
  653. I2C_write_reg(0x07, 0x07); // LEDEN
  654. I2C_write_reg(0x08, 0x08); // LEDCTR
  655. I2C_write_reg(0x10, 0xFF); // Color1_R
  656. I2C_write_reg(0x11, 0xFF); // Color1_G
  657. I2C_write_reg(0x12, 0x00); // Color1_B
  658. I2C_write_reg(0x1C, 0xFF); // PWM1
  659. I2C_write_reg(0x1D, 0xFF); // PWM2
  660. I2C_write_reg(0x1E, 0xFF); // PWM3
  661. I2C_write_reg(0x09, 0x07); // PAT_RIN
  662. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  663. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  664. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  665. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  666. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  667. I2C_write_reg(0x09, 0x07); // PAT_RIN
  668. }
  669. else if(YELLOW_DELAY_ON == 1000)
  670. {
  671. I2C_write_reg(0x00, 0x55); // software reset
  672. I2C_write_reg(0x01, 0x03); // GCR
  673. I2C_write_reg(0x03, 0x01); // IMAX
  674. I2C_write_reg(0x04, 0x01); // LCFG1
  675. I2C_write_reg(0x05, 0x01); // LCFG2
  676. I2C_write_reg(0x06, 0x01); // LCFG3
  677. I2C_write_reg(0x07, 0x07); // LEDEN
  678. I2C_write_reg(0x08, 0x08); // LEDCTR
  679. I2C_write_reg(0x10, 0xFF); // Color1_R
  680. I2C_write_reg(0x11, 0xFF); // Color1_G
  681. I2C_write_reg(0x12, 0x00); // Color1_B
  682. I2C_write_reg(0x1C, 0xFF); // PWM1
  683. I2C_write_reg(0x1D, 0xFF); // PWM2
  684. I2C_write_reg(0x1E, 0xFF); // PWM3
  685. I2C_write_reg(0x09, 0x07); // PAT_RIN
  686. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  687. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  688. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  689. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  690. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  691. I2C_write_reg(0x09, 0x07); // PAT_RIN
  692. }
  693. else if(YELLOW_DELAY_ON == 1499)
  694. {
  695. I2C_write_reg(0x00, 0x55); // software reset
  696. I2C_write_reg(0x01, 0x03); // GCR
  697. I2C_write_reg(0x03, 0x01); // IMAX
  698. I2C_write_reg(0x04, 0x01); // LCFG1
  699. I2C_write_reg(0x05, 0x01); // LCFG2
  700. I2C_write_reg(0x06, 0x01); // LCFG3
  701. I2C_write_reg(0x07, 0x07); // LEDEN
  702. I2C_write_reg(0x08, 0x08); // LEDCTR
  703. I2C_write_reg(0x10, 0xFF); // Color1_R
  704. I2C_write_reg(0x11, 0xFF); // Color1_G
  705. I2C_write_reg(0x12, 0x00); // Color1_B
  706. I2C_write_reg(0x1C, 0xFF); // PWM1
  707. I2C_write_reg(0x1D, 0xFF); // PWM2
  708. I2C_write_reg(0x1E, 0xFF); // PWM3
  709. I2C_write_reg(0x09, 0x07); // PAT_RIN
  710. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  711. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  712. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  713. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  714. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  715. I2C_write_reg(0x09, 0x07); // PAT_RIN
  716. }
  717. }else if(YELLOW_DELAY_ON!=0 && YELLOW_DELAY_OFF!=0)
  718. {
  719. I2C_write_reg(0x00, 0x55); // software reset
  720. I2C_write_reg(0x01, 0x03); // GCR
  721. I2C_write_reg(0x03, 0x01); // IMAX
  722. I2C_write_reg(0x04, 0x01); // LCFG1
  723. I2C_write_reg(0x05, 0x01); // LCFG2
  724. I2C_write_reg(0x06, 0x01); // LCFG3
  725. I2C_write_reg(0x07, 0x07); // LEDEN
  726. I2C_write_reg(0x08, 0x08); // LEDCTR
  727. I2C_write_reg(0x10, 0xFF); // Color1_R
  728. I2C_write_reg(0x11, 0xFF); // Color1_G
  729. I2C_write_reg(0x12, 0x00); // Color1_B
  730. I2C_write_reg(0x1C, 0xFF); // PWM1
  731. I2C_write_reg(0x1D, 0xFF); // PWM2
  732. I2C_write_reg(0x1E, 0xFF); // PWM3
  733. I2C_write_reg(0x09, 0x07); // PAT_RIN
  734. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  735. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  736. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  737. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  738. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  739. I2C_write_reg(0x09, 0x07); // PAT_RIN
  740. }else
  741. {
  742. I2C_write_reg(0x00, 0x55); // software reset
  743. I2C_write_reg(0x01, 0x03); // GCR
  744. I2C_write_reg(0x03, 0x01); // IMAX
  745. I2C_write_reg(0x04, 0x00); // LCFG1
  746. I2C_write_reg(0x05, 0x00); // LCFG2
  747. I2C_write_reg(0x06, 0x00); // LCFG3
  748. I2C_write_reg(0x07, 0x07); // LEDEN
  749. I2C_write_reg(0x10, 0xFF); // Color1_R
  750. I2C_write_reg(0x11, 0xFF); // Color1_G
  751. I2C_write_reg(0x12, 0x00); // Color1_B
  752. I2C_write_reg(0x1C, 0xFF); // PWM1
  753. I2C_write_reg(0x1D, 0xFF); // PWM2
  754. I2C_write_reg(0x1E, 0xFF); // PWM3
  755. I2C_write_reg(0x09, 0x07); // PAT_RIN
  756. }
  757. }
  758. else
  759. {
  760. I2C_write_reg(0x10, 0x00); // Color1_R
  761. I2C_write_reg(0x11, 0x00); // Color1_G
  762. I2C_write_reg(0x12, 0x00); // Color1_B
  763. I2C_write_reg(0x1C, 0x00); // PWM1
  764. I2C_write_reg(0x1D, 0x00); // PWM2
  765. I2C_write_reg(0x1E, 0x00); // PWM3
  766. I2C_write_reg(0x09, 0x07); // PAT_RIN
  767. YELLOW_DELAY_ON = 0;
  768. YELLOW_DELAY_OFF = 0;
  769. }
  770. return len;
  771. }
  772. static ssize_t AW2015_Set_Pink(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  773. {
  774. unsigned int databuf[16];
  775. sscanf(buf,"%d",&databuf[0]);
  776. I2C_write_reg(0x00, 0x55); // software reset
  777. I2C_write_reg(0x01, 0x03); // GCR
  778. I2C_write_reg(0x03, 0x01); // IMAX
  779. I2C_write_reg(0x04, 0x00); // LCFG1
  780. I2C_write_reg(0x05, 0x00); // LCFG2
  781. I2C_write_reg(0x06, 0x00); // LCFG3
  782. I2C_write_reg(0x07, 0x07); // LEDEN
  783. if(databuf[0]!=0)
  784. {
  785. if(PINK_DELAY_OFF == 500)
  786. {
  787. if(PINK_DELAY_ON == 500)
  788. {
  789. I2C_write_reg(0x00, 0x55); // software reset
  790. I2C_write_reg(0x01, 0x03); // GCR
  791. I2C_write_reg(0x03, 0x01); // IMAX
  792. I2C_write_reg(0x04, 0x01); // LCFG1
  793. I2C_write_reg(0x05, 0x01); // LCFG2
  794. I2C_write_reg(0x06, 0x01); // LCFG3
  795. I2C_write_reg(0x07, 0x07); // LEDEN
  796. I2C_write_reg(0x08, 0x08); // LEDCTR
  797. I2C_write_reg(0x10, 0xFF); // Color1_R
  798. I2C_write_reg(0x11, 0x00); // Color1_G
  799. I2C_write_reg(0x12, 0xFF); // Color1_B
  800. I2C_write_reg(0x1C, 0xFF); // PWM1
  801. I2C_write_reg(0x1D, 0xFF); // PWM2
  802. I2C_write_reg(0x1E, 0xFF); // PWM3
  803. I2C_write_reg(0x09, 0x07); // PAT_RIN
  804. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  805. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  806. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  807. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  808. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  809. I2C_write_reg(0x09, 0x07); // PAT_RIN
  810. }
  811. else if(PINK_DELAY_ON == 1000)
  812. {
  813. I2C_write_reg(0x00, 0x55); // software reset
  814. I2C_write_reg(0x01, 0x03); // GCR
  815. I2C_write_reg(0x03, 0x01); // IMAX
  816. I2C_write_reg(0x04, 0x01); // LCFG1
  817. I2C_write_reg(0x05, 0x01); // LCFG2
  818. I2C_write_reg(0x06, 0x01); // LCFG3
  819. I2C_write_reg(0x07, 0x07); // LEDEN
  820. I2C_write_reg(0x08, 0x08); // LEDCTR
  821. I2C_write_reg(0x10, 0xFF); // Color1_R
  822. I2C_write_reg(0x11, 0x00); // Color1_G
  823. I2C_write_reg(0x12, 0xFF); // Color1_B
  824. I2C_write_reg(0x1C, 0xFF); // PWM1
  825. I2C_write_reg(0x1D, 0xFF); // PWM2
  826. I2C_write_reg(0x1E, 0xFF); // PWM3
  827. I2C_write_reg(0x09, 0x07); // PAT_RIN
  828. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  829. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  830. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  831. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  832. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  833. I2C_write_reg(0x09, 0x07); // PAT_RIN
  834. }
  835. else if(PINK_DELAY_ON == 1499)
  836. {
  837. I2C_write_reg(0x00, 0x55); // software reset
  838. I2C_write_reg(0x01, 0x03); // GCR
  839. I2C_write_reg(0x03, 0x01); // IMAX
  840. I2C_write_reg(0x04, 0x01); // LCFG1
  841. I2C_write_reg(0x05, 0x01); // LCFG2
  842. I2C_write_reg(0x06, 0x01); // LCFG3
  843. I2C_write_reg(0x07, 0x07); // LEDEN
  844. I2C_write_reg(0x08, 0x08); // LEDCTR
  845. I2C_write_reg(0x10, 0xFF); // Color1_R
  846. I2C_write_reg(0x11, 0x00); // Color1_G
  847. I2C_write_reg(0x12, 0xFF); // Color1_B
  848. I2C_write_reg(0x1C, 0xFF); // PWM1
  849. I2C_write_reg(0x1D, 0xFF); // PWM2
  850. I2C_write_reg(0x1E, 0xFF); // PWM3
  851. I2C_write_reg(0x09, 0x07); // PAT_RIN
  852. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  853. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  854. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  855. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  856. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  857. I2C_write_reg(0x09, 0x07); // PAT_RIN
  858. }
  859. }else if(PINK_DELAY_ON!=0 &&PINK_DELAY_OFF!=0)
  860. {
  861. I2C_write_reg(0x00, 0x55); // software reset
  862. I2C_write_reg(0x01, 0x03); // GCR
  863. I2C_write_reg(0x03, 0x01); // IMAX
  864. I2C_write_reg(0x04, 0x01); // LCFG1
  865. I2C_write_reg(0x05, 0x01); // LCFG2
  866. I2C_write_reg(0x06, 0x01); // LCFG3
  867. I2C_write_reg(0x07, 0x07); // LEDEN
  868. I2C_write_reg(0x08, 0x08); // LEDCTR
  869. I2C_write_reg(0x10, 0xFF); // Color1_R
  870. I2C_write_reg(0x11, 0x00); // Color1_G
  871. I2C_write_reg(0x12, 0xFF); // Color1_B
  872. I2C_write_reg(0x1C, 0xFF); // PWM1
  873. I2C_write_reg(0x1D, 0xFF); // PWM2
  874. I2C_write_reg(0x1E, 0xFF); // PWM3
  875. I2C_write_reg(0x09, 0x07); // PAT_RIN
  876. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  877. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  878. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  879. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  880. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  881. I2C_write_reg(0x09, 0x07); // PAT_RIN
  882. }else
  883. {
  884. I2C_write_reg(0x00, 0x55); // software reset
  885. I2C_write_reg(0x01, 0x03); // GCR
  886. I2C_write_reg(0x03, 0x01); // IMAX
  887. I2C_write_reg(0x04, 0x00); // LCFG1
  888. I2C_write_reg(0x05, 0x00); // LCFG2
  889. I2C_write_reg(0x06, 0x00); // LCFG3
  890. I2C_write_reg(0x07, 0x07); // LEDEN
  891. I2C_write_reg(0x10, 0xFF); // Color1_R
  892. I2C_write_reg(0x11, 0x00); // Color1_G
  893. I2C_write_reg(0x12, 0xFF); // Color1_B
  894. I2C_write_reg(0x1C, 0xFF); // PWM1
  895. I2C_write_reg(0x1D, 0xFF); // PWM2
  896. I2C_write_reg(0x1E, 0xFF); // PWM3
  897. I2C_write_reg(0x09, 0x07); // PAT_RIN
  898. }
  899. }
  900. else
  901. {
  902. I2C_write_reg(0x10, 0x00); // Color1_R
  903. I2C_write_reg(0x11, 0x00); // Color1_G
  904. I2C_write_reg(0x12, 0x00); // Color1_B
  905. I2C_write_reg(0x1C, 0x00); // PWM1
  906. I2C_write_reg(0x1D, 0x00); // PWM2
  907. I2C_write_reg(0x1E, 0x00); // PWM3
  908. I2C_write_reg(0x09, 0x07); // PAT_RIN
  909. PINK_DELAY_ON = 0;
  910. PINK_DELAY_OFF = 0;
  911. }
  912. return len;
  913. }
  914. static ssize_t AW2015_Set_Red(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  915. {
  916. unsigned int databuf[16];
  917. sscanf(buf,"%d",&databuf[0]);
  918. if(databuf[0]!=0)
  919. {
  920. if(RED_DELAY_OFF == 500)
  921. {
  922. if(RED_DELAY_ON == 500)
  923. {
  924. I2C_write_reg(0x00, 0x55); // software reset
  925. I2C_write_reg(0x01, 0x03); // GCR
  926. I2C_write_reg(0x03, 0x01); // IMAX
  927. I2C_write_reg(0x04, 0x01); // LCFG1
  928. I2C_write_reg(0x05, 0x01); // LCFG2
  929. I2C_write_reg(0x06, 0x01); // LCFG3
  930. I2C_write_reg(0x07, 0x07); // LEDEN
  931. I2C_write_reg(0x08, 0x08); // LEDCTR
  932. I2C_write_reg(0x10, 0xFF); // Color1_R
  933. I2C_write_reg(0x11, 0x00); // Color1_G
  934. I2C_write_reg(0x12, 0x00); // Color1_B
  935. I2C_write_reg(0x1C, 0xFF); // PWM1
  936. I2C_write_reg(0x1D, 0x00); // PWM2
  937. I2C_write_reg(0x1E, 0x00); // PWM3
  938. I2C_write_reg(0x09, 0x07); // PAT_RIN
  939. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  940. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  941. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  942. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  943. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  944. I2C_write_reg(0x09, 0x07); // PAT_RIN
  945. }
  946. else if(RED_DELAY_ON == 1000)
  947. {
  948. I2C_write_reg(0x00, 0x55); // software reset
  949. I2C_write_reg(0x01, 0x03); // GCR
  950. I2C_write_reg(0x03, 0x01); // IMAX
  951. I2C_write_reg(0x04, 0x01); // LCFG1
  952. I2C_write_reg(0x05, 0x01); // LCFG2
  953. I2C_write_reg(0x06, 0x01); // LCFG3
  954. I2C_write_reg(0x07, 0x07); // LEDEN
  955. I2C_write_reg(0x08, 0x08); // LEDCTR
  956. I2C_write_reg(0x10, 0xFF); // Color1_R
  957. I2C_write_reg(0x11, 0x00); // Color1_G
  958. I2C_write_reg(0x12, 0x00); // Color1_B
  959. I2C_write_reg(0x1C, 0xFF); // PWM1
  960. I2C_write_reg(0x1D, 0x00); // PWM2
  961. I2C_write_reg(0x1E, 0x00); // PWM3
  962. I2C_write_reg(0x09, 0x07); // PAT_RIN
  963. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  964. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  965. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  966. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  967. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  968. I2C_write_reg(0x09, 0x07); // PAT_RIN
  969. }
  970. else if(RED_DELAY_ON == 1499)
  971. {
  972. I2C_write_reg(0x00, 0x55); // software reset
  973. I2C_write_reg(0x01, 0x03); // GCR
  974. I2C_write_reg(0x03, 0x01); // IMAX
  975. I2C_write_reg(0x04, 0x01); // LCFG1
  976. I2C_write_reg(0x05, 0x01); // LCFG2
  977. I2C_write_reg(0x06, 0x01); // LCFG3
  978. I2C_write_reg(0x07, 0x07); // LEDEN
  979. I2C_write_reg(0x08, 0x08); // LEDCTR
  980. I2C_write_reg(0x10, 0xFF); // Color1_R
  981. I2C_write_reg(0x11, 0x00); // Color1_G
  982. I2C_write_reg(0x12, 0x00); // Color1_B
  983. I2C_write_reg(0x1C, 0xFF); // PWM1
  984. I2C_write_reg(0x1D, 0x00); // PWM2
  985. I2C_write_reg(0x1E, 0x00); // PWM3
  986. I2C_write_reg(0x09, 0x07); // PAT_RIN
  987. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  988. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  989. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  990. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  991. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  992. I2C_write_reg(0x09, 0x07); // PAT_RIN
  993. }
  994. }else if(RED_DELAY_ON!=0 && RED_DELAY_OFF!=0)
  995. {
  996. I2C_write_reg(0x00, 0x55); // software reset
  997. I2C_write_reg(0x01, 0x03); // GCR
  998. I2C_write_reg(0x03, 0x01); // IMAX
  999. I2C_write_reg(0x04, 0x01); // LCFG1
  1000. I2C_write_reg(0x05, 0x01); // LCFG2
  1001. I2C_write_reg(0x06, 0x01); // LCFG3
  1002. I2C_write_reg(0x07, 0x07); // LEDEN
  1003. I2C_write_reg(0x08, 0x08); // LEDCTR
  1004. I2C_write_reg(0x10, 0xFF); // Color1_R
  1005. I2C_write_reg(0x11, 0x00); // Color1_G
  1006. I2C_write_reg(0x12, 0x00); // Color1_B
  1007. I2C_write_reg(0x1C, 0xFF); // PWM1
  1008. I2C_write_reg(0x1D, 0x00); // PWM2
  1009. I2C_write_reg(0x1E, 0x00); // PWM3
  1010. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1011. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  1012. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  1013. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  1014. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  1015. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1016. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1017. }else
  1018. {
  1019. I2C_write_reg(0x00, 0x55); // software reset
  1020. I2C_write_reg(0x01, 0x03); // GCR
  1021. I2C_write_reg(0x03, 0x01); // IMAX
  1022. I2C_write_reg(0x04, 0x00); // LCFG1
  1023. I2C_write_reg(0x05, 0x00); // LCFG2
  1024. I2C_write_reg(0x06, 0x00); // LCFG3
  1025. I2C_write_reg(0x07, 0x07); // LEDEN
  1026. I2C_write_reg(0x10, 0xFF); // Color1_R
  1027. I2C_write_reg(0x11, 0x00); // Color1_G
  1028. I2C_write_reg(0x12, 0x00); // Color1_B
  1029. I2C_write_reg(0x1C, 0xFF); // PWM1
  1030. I2C_write_reg(0x1D, 0xFF); // PWM2
  1031. I2C_write_reg(0x1E, 0xFF); // PWM3
  1032. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1033. }
  1034. }
  1035. else
  1036. {
  1037. I2C_write_reg(0x00, 0x55); // software reset
  1038. I2C_write_reg(0x01, 0x03); // GCR
  1039. I2C_write_reg(0x03, 0x01); // IMAX
  1040. I2C_write_reg(0x04, 0x00); // LCFG1
  1041. I2C_write_reg(0x05, 0x00); // LCFG2
  1042. I2C_write_reg(0x06, 0x00); // LCFG3
  1043. I2C_write_reg(0x07, 0x07); // LEDEN
  1044. I2C_write_reg(0x10, 0x00); // Color1_R
  1045. I2C_write_reg(0x11, 0x00); // Color1_G
  1046. I2C_write_reg(0x12, 0x00); // Color1_B
  1047. I2C_write_reg(0x1C, 0x00); // PWM1
  1048. I2C_write_reg(0x1D, 0x00); // PWM2
  1049. I2C_write_reg(0x1E, 0x00); // PWM3
  1050. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1051. RED_DELAY_ON = 0;
  1052. RED_DELAY_OFF = 0;
  1053. }
  1054. return len;
  1055. }
  1056. static ssize_t AW2015_Set_Green(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  1057. {
  1058. unsigned int databuf[16];
  1059. sscanf(buf,"%d",&databuf[0]);
  1060. I2C_write_reg(0x00, 0x55); // software reset
  1061. I2C_write_reg(0x01, 0x03); // GCR
  1062. I2C_write_reg(0x03, 0x01); // IMAX
  1063. I2C_write_reg(0x04, 0x00); // LCFG1
  1064. I2C_write_reg(0x05, 0x00); // LCFG2
  1065. I2C_write_reg(0x06, 0x00); // LCFG3
  1066. I2C_write_reg(0x07, 0x07); // LEDEN
  1067. if(databuf[0]!=0)
  1068. {
  1069. if(GREEN_DELAY_OFF == 500)
  1070. {
  1071. if(GREEN_DELAY_ON == 500)
  1072. {
  1073. I2C_write_reg(0x00, 0x55); // software reset
  1074. I2C_write_reg(0x01, 0x03); // GCR
  1075. I2C_write_reg(0x03, 0x01); // IMAX
  1076. I2C_write_reg(0x04, 0x01); // LCFG1
  1077. I2C_write_reg(0x05, 0x01); // LCFG2
  1078. I2C_write_reg(0x06, 0x01); // LCFG3
  1079. I2C_write_reg(0x07, 0x07); // LEDEN
  1080. I2C_write_reg(0x08, 0x08); // LEDCTR
  1081. I2C_write_reg(0x10, 0x00); // Color1_R
  1082. I2C_write_reg(0x11, 0xFF); // Color1_G
  1083. I2C_write_reg(0x12, 0x00); // Color1_B
  1084. I2C_write_reg(0x1C, 0xFF); // PWM1
  1085. I2C_write_reg(0x1D, 0xFF); // PWM2
  1086. I2C_write_reg(0x1E, 0xFF); // PWM3
  1087. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  1088. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  1089. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  1090. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1091. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1092. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1093. }
  1094. else if(GREEN_DELAY_ON == 1000)
  1095. {
  1096. I2C_write_reg(0x00, 0x55); // software reset
  1097. I2C_write_reg(0x01, 0x03); // GCR
  1098. I2C_write_reg(0x03, 0x01); // IMAX
  1099. I2C_write_reg(0x04, 0x01); // LCFG1
  1100. I2C_write_reg(0x05, 0x01); // LCFG2
  1101. I2C_write_reg(0x06, 0x01); // LCFG3
  1102. I2C_write_reg(0x07, 0x07); // LEDEN
  1103. I2C_write_reg(0x08, 0x08); // LEDCTR
  1104. I2C_write_reg(0x10, 0x00); // Color1_R
  1105. I2C_write_reg(0x11, 0xFF); // Color1_G
  1106. I2C_write_reg(0x12, 0x00); // Color1_B
  1107. I2C_write_reg(0x1C, 0xFF); // PWM1
  1108. I2C_write_reg(0x1D, 0xFF); // PWM2
  1109. I2C_write_reg(0x1E, 0xFF); // PWM3
  1110. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  1111. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  1112. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  1113. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1114. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1115. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1116. }
  1117. else if(GREEN_DELAY_ON == 1499)
  1118. {
  1119. I2C_write_reg(0x00, 0x55); // software reset
  1120. I2C_write_reg(0x01, 0x03); // GCR
  1121. I2C_write_reg(0x03, 0x01); // IMAX
  1122. I2C_write_reg(0x04, 0x01); // LCFG1
  1123. I2C_write_reg(0x05, 0x01); // LCFG2
  1124. I2C_write_reg(0x06, 0x01); // LCFG3
  1125. I2C_write_reg(0x07, 0x07); // LEDEN
  1126. I2C_write_reg(0x08, 0x08); // LEDCTR
  1127. I2C_write_reg(0x10, 0x00); // Color1_R
  1128. I2C_write_reg(0x11, 0xFF); // Color1_G
  1129. I2C_write_reg(0x12, 0x00); // Color1_B
  1130. I2C_write_reg(0x1C, 0xFF); // PWM1
  1131. I2C_write_reg(0x1D, 0xFF); // PWM2
  1132. I2C_write_reg(0x1E, 0xFF); // PWM3
  1133. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  1134. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  1135. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  1136. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  1137. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1138. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1139. }
  1140. }
  1141. else if (GREEN_DELAY_ON!=0 &&GREEN_DELAY_OFF!=0)
  1142. {
  1143. I2C_write_reg(0x00, 0x55); // software reset
  1144. I2C_write_reg(0x01, 0x03); // GCR
  1145. I2C_write_reg(0x03, 0x01); // IMAX
  1146. I2C_write_reg(0x04, 0x01); // LCFG1
  1147. I2C_write_reg(0x05, 0x01); // LCFG2
  1148. I2C_write_reg(0x06, 0x01); // LCFG3
  1149. I2C_write_reg(0x07, 0x07); // LEDEN
  1150. I2C_write_reg(0x08, 0x08); // LEDCTR
  1151. I2C_write_reg(0x10, 0x00); // Color1_R
  1152. I2C_write_reg(0x11, 0xFF); // Color1_G
  1153. I2C_write_reg(0x12, 0x00); // Color1_B
  1154. I2C_write_reg(0x1C, 0xFF); // PWM1
  1155. I2C_write_reg(0x1D, 0xFF); // PWM2
  1156. I2C_write_reg(0x1E, 0xFF); // PWM3
  1157. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  1158. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  1159. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  1160. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1161. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1162. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1163. }else
  1164. {
  1165. I2C_write_reg(0x00, 0x55); // software reset
  1166. I2C_write_reg(0x01, 0x03); // GCR
  1167. I2C_write_reg(0x03, 0x01); // IMAX
  1168. I2C_write_reg(0x04, 0x00); // LCFG1
  1169. I2C_write_reg(0x05, 0x00); // LCFG2
  1170. I2C_write_reg(0x06, 0x00); // LCFG3
  1171. I2C_write_reg(0x07, 0x07); // LEDEN
  1172. I2C_write_reg(0x08, 0x08); // LEDCTR
  1173. I2C_write_reg(0x10, 0x00); // Color1_R
  1174. I2C_write_reg(0x11, 0xFF); // Color1_G
  1175. I2C_write_reg(0x12, 0x00); // Color1_B
  1176. I2C_write_reg(0x1C, 0xFF); // PWM1
  1177. I2C_write_reg(0x1D, 0xFF); // PWM2
  1178. I2C_write_reg(0x1E, 0xFF); // PWM3
  1179. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1180. }
  1181. }
  1182. else
  1183. {
  1184. I2C_write_reg(0x10, 0x00); // Color1_R
  1185. I2C_write_reg(0x11, 0x00); // Color1_G
  1186. I2C_write_reg(0x12, 0x00); // Color1_B
  1187. I2C_write_reg(0x1C, 0x00); // PWM1
  1188. I2C_write_reg(0x1D, 0x00); // PWM2
  1189. I2C_write_reg(0x1E, 0x00); // PWM3
  1190. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1191. GREEN_DELAY_ON = 0;
  1192. GREEN_DELAY_OFF = 0;
  1193. }
  1194. return len;
  1195. }
  1196. unsigned char AW2015_Set_Green_on_off(int status)
  1197. {
  1198. I2C_write_reg(0x00, 0x55); // software reset
  1199. I2C_write_reg(0x01, 0x03); // GCR
  1200. I2C_write_reg(0x03, 0x01); // IMAX
  1201. I2C_write_reg(0x04, 0x00); // LCFG1
  1202. I2C_write_reg(0x05, 0x00); // LCFG2
  1203. I2C_write_reg(0x06, 0x00); // LCFG3
  1204. I2C_write_reg(0x07, 0x07); // LEDEN
  1205. if(status!=0)
  1206. {
  1207. I2C_write_reg(0x10, 0x00); // Color1_R
  1208. I2C_write_reg(0x11, 0xFF); // Color1_G
  1209. I2C_write_reg(0x12, 0x00); // Color1_B
  1210. I2C_write_reg(0x1C, 0x00); // PWM1
  1211. I2C_write_reg(0x1D, 0xFF); // PWM2
  1212. I2C_write_reg(0x1E, 0x00); // PWM3
  1213. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1214. }
  1215. else
  1216. {
  1217. I2C_write_reg(0x10, 0x00); // Color1_R
  1218. I2C_write_reg(0x11, 0x00); // Color1_G
  1219. I2C_write_reg(0x12, 0x00); // Color1_B
  1220. I2C_write_reg(0x1C, 0x00); // PWM1
  1221. I2C_write_reg(0x1D, 0x00); // PWM2
  1222. I2C_write_reg(0x1E, 0x00); // PWM3
  1223. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1224. }
  1225. return 0;
  1226. }
  1227. EXPORT_SYMBOL(AW2015_Set_Green_on_off);
  1228. static ssize_t AW2015_Set_Blue(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  1229. {
  1230. unsigned int databuf[16];
  1231. sscanf(buf,"%d",&databuf[0]);
  1232. I2C_write_reg(0x00, 0x55); // software reset
  1233. I2C_write_reg(0x01, 0x03); // GCR
  1234. I2C_write_reg(0x03, 0x01); // IMAX
  1235. I2C_write_reg(0x04, 0x00); // LCFG1
  1236. I2C_write_reg(0x05, 0x00); // LCFG2
  1237. I2C_write_reg(0x06, 0x00); // LCFG3
  1238. I2C_write_reg(0x07, 0x07); // LEDEN
  1239. if(databuf[0]!=0)
  1240. {
  1241. if(BLUE_DELAY_OFF == 500)
  1242. {
  1243. if(BLUE_DELAY_ON == 500)
  1244. {
  1245. I2C_write_reg(0x00, 0x55); // software reset
  1246. I2C_write_reg(0x01, 0x03); // GCR
  1247. I2C_write_reg(0x03, 0x01); // IMAX
  1248. I2C_write_reg(0x04, 0x01); // LCFG1
  1249. I2C_write_reg(0x05, 0x01); // LCFG2
  1250. I2C_write_reg(0x06, 0x01); // LCFG3
  1251. I2C_write_reg(0x07, 0x07); // LEDEN
  1252. I2C_write_reg(0x08, 0x08); // LEDCTR
  1253. I2C_write_reg(0x10, 0x00); // Color1_R
  1254. I2C_write_reg(0x11, 0x00); // Color1_G
  1255. I2C_write_reg(0x12, 0xFF); // Color1_B
  1256. I2C_write_reg(0x1C, 0xFF); // PWM1
  1257. I2C_write_reg(0x1D, 0xFF); // PWM2
  1258. I2C_write_reg(0x1E, 0xFF); // PWM3
  1259. I2C_write_reg(0x30, 0x00); // PAT_T1 Trise & Ton
  1260. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  1261. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  1262. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1263. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1264. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1265. }
  1266. else if(BLUE_DELAY_ON == 1000)
  1267. {
  1268. I2C_write_reg(0x00, 0x55); // software reset
  1269. I2C_write_reg(0x01, 0x03); // GCR
  1270. I2C_write_reg(0x03, 0x01); // IMAX
  1271. I2C_write_reg(0x04, 0x01); // LCFG1
  1272. I2C_write_reg(0x05, 0x01); // LCFG2
  1273. I2C_write_reg(0x06, 0x01); // LCFG3
  1274. I2C_write_reg(0x07, 0x07); // LEDEN
  1275. I2C_write_reg(0x08, 0x08); // LEDCTR
  1276. I2C_write_reg(0x10, 0x00); // Color1_R
  1277. I2C_write_reg(0x11, 0x00); // Color1_G
  1278. I2C_write_reg(0x12, 0xFF); // Color1_B
  1279. I2C_write_reg(0x1C, 0xFF); // PWM1
  1280. I2C_write_reg(0x1D, 0xFF); // PWM2
  1281. I2C_write_reg(0x1E, 0xFF); // PWM3
  1282. I2C_write_reg(0x30, 0x13); // PAT_T1 Trise & Ton
  1283. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  1284. I2C_write_reg(0x32, 0x20); // PAT_T3 Tslot & Tdelay
  1285. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1286. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1287. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1288. }
  1289. else if(BLUE_DELAY_ON == 1499)
  1290. {
  1291. I2C_write_reg(0x00, 0x55); // software reset
  1292. I2C_write_reg(0x01, 0x03); // GCR
  1293. I2C_write_reg(0x03, 0x01); // IMAX
  1294. I2C_write_reg(0x04, 0x01); // LCFG1
  1295. I2C_write_reg(0x05, 0x01); // LCFG2
  1296. I2C_write_reg(0x06, 0x01); // LCFG3
  1297. I2C_write_reg(0x07, 0x07); // LEDEN
  1298. I2C_write_reg(0x08, 0x08); // LEDCTR
  1299. I2C_write_reg(0x10, 0x00); // Color1_R
  1300. I2C_write_reg(0x11, 0x00); // Color1_G
  1301. I2C_write_reg(0x12, 0xFF); // Color1_B
  1302. I2C_write_reg(0x1C, 0xFF); // PWM1
  1303. I2C_write_reg(0x1D, 0xFF); // PWM2
  1304. I2C_write_reg(0x1E, 0xFF); // PWM3
  1305. I2C_write_reg(0x30, 0x80); // PAT_T1 Trise & Ton
  1306. I2C_write_reg(0x31, 0x00); // PAT_T2 Tfall & Toff
  1307. I2C_write_reg(0x32, 0x00); // PAT_T3 Tslot & Tdelay
  1308. I2C_write_reg(0x33, 0x00); // PAT_T4 PAT_CTR & Color
  1309. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1310. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1311. }
  1312. }else if(BLUE_DELAY_ON!=0 &&BLUE_DELAY_OFF!=0)
  1313. {
  1314. I2C_write_reg(0x00, 0x55); // software reset
  1315. I2C_write_reg(0x01, 0x03); // GCR
  1316. I2C_write_reg(0x03, 0x01); // IMAX
  1317. I2C_write_reg(0x04, 0x01); // LCFG1
  1318. I2C_write_reg(0x05, 0x01); // LCFG2
  1319. I2C_write_reg(0x06, 0x01); // LCFG3
  1320. I2C_write_reg(0x07, 0x07); // LEDEN
  1321. I2C_write_reg(0x08, 0x08); // LEDCTR
  1322. I2C_write_reg(0x10, 0x00); // Color1_R
  1323. I2C_write_reg(0x11, 0x00); // Color1_G
  1324. I2C_write_reg(0x12, 0xFF); // Color1_B
  1325. I2C_write_reg(0x1C, 0xFF); // PWM1
  1326. I2C_write_reg(0x1D, 0xFF); // PWM2
  1327. I2C_write_reg(0x1E, 0xFF); // PWM3
  1328. I2C_write_reg(0x30, 0x14); // PAT_T1 Trise & Ton
  1329. I2C_write_reg(0x31, 0x01); // PAT_T2 Tfall & Toff
  1330. I2C_write_reg(0x32, 0x31); // PAT_T3 Tslot & Tdelay
  1331. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1332. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1333. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1334. }else
  1335. {
  1336. I2C_write_reg(0x00, 0x55); // software reset
  1337. I2C_write_reg(0x01, 0x03); // GCR
  1338. I2C_write_reg(0x03, 0x01); // IMAX
  1339. I2C_write_reg(0x04, 0x00); // LCFG1
  1340. I2C_write_reg(0x05, 0x00); // LCFG2
  1341. I2C_write_reg(0x06, 0x00); // LCFG3
  1342. I2C_write_reg(0x07, 0x07); // LEDEN
  1343. I2C_write_reg(0x08, 0x08); // LEDCTR
  1344. I2C_write_reg(0x10, 0x00); // Color1_R
  1345. I2C_write_reg(0x11, 0x00); // Color1_G
  1346. I2C_write_reg(0x12, 0xFF); // Color1_B
  1347. I2C_write_reg(0x1C, 0xFF); // PWM1
  1348. I2C_write_reg(0x1D, 0xFF); // PWM2
  1349. I2C_write_reg(0x1E, 0xFF); // PWM3
  1350. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1351. }
  1352. }
  1353. else
  1354. {
  1355. I2C_write_reg(0x10, 0x00); // Color1_R
  1356. I2C_write_reg(0x11, 0x00); // Color1_G
  1357. I2C_write_reg(0x12, 0x00); // Color1_B
  1358. I2C_write_reg(0x1C, 0x00); // PWM1
  1359. I2C_write_reg(0x1D, 0x00); // PWM2
  1360. I2C_write_reg(0x1E, 0x00); // PWM3
  1361. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1362. BLUE_DELAY_ON = 0;
  1363. BLUE_DELAY_OFF = 0;
  1364. }
  1365. return len;
  1366. }
  1367. ///////////////////////////////////////////////////////////////////////////////////////////
  1368. // |-|_|-|______|-|_|-|______|-|_|-|______
  1369. ///////////////////////////////////////////////////////////////////////////////////////////
  1370. unsigned char AW2015_Multi_Pulse(void)
  1371. {
  1372. I2C_write_reg(0x00, 0x55); // software reset
  1373. I2C_write_reg(0x01, 0x03); // GCR
  1374. I2C_write_reg(0x03, 0x01); // IMAX
  1375. I2C_write_reg(0x04, 0x01); // LCFG1
  1376. I2C_write_reg(0x05, 0x01); // LCFG2
  1377. I2C_write_reg(0x06, 0x01); // LCFG3
  1378. I2C_write_reg(0x07, 0x07); // LEDEN
  1379. I2C_write_reg(0x08, 0x08); // LEDCTR
  1380. I2C_write_reg(0x10, 0xFF); // Color1_R
  1381. I2C_write_reg(0x11, 0x00); // Color1_G
  1382. I2C_write_reg(0x12, 0x00); // Color1_B
  1383. I2C_write_reg(0x1C, 0xFF); // PWM1
  1384. I2C_write_reg(0x1D, 0xFF); // PWM2
  1385. I2C_write_reg(0x1E, 0xFF); // PWM3
  1386. I2C_write_reg(0x30, 0x03); // PAT_T1 Trise & Ton
  1387. I2C_write_reg(0x31, 0x08); // PAT_T2 Tfall & Toff
  1388. I2C_write_reg(0x32, 0x30); // PAT_T3 Tslot & Tdelay
  1389. I2C_write_reg(0x33, 0x10); // PAT_T4 PAT_CTR & Color
  1390. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1391. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1392. return 0;
  1393. }
  1394. //////////////////////////////////////////////////////////////////////////////////////////
  1395. // R -> G -> B -> W -> R ...
  1396. //////////////////////////////////////////////////////////////////////////////////////////
  1397. unsigned char AW2015_Multi_Color(void)
  1398. {
  1399. I2C_write_reg(0x00, 0x55); // software reset
  1400. I2C_write_reg(0x01, 0x03); // GCR
  1401. I2C_write_reg(0x03, 0x01); // IMAX
  1402. I2C_write_reg(0x04, 0x01); // LCFG1
  1403. I2C_write_reg(0x05, 0x01); // LCFG2
  1404. I2C_write_reg(0x06, 0x01); // LCFG3
  1405. I2C_write_reg(0x07, 0x07); // LEDEN
  1406. I2C_write_reg(0x08, 0x08); // LEDCTR
  1407. I2C_write_reg(0x10, 0xFF); // Color1_R
  1408. I2C_write_reg(0x11, 0x00); // Color1_G
  1409. I2C_write_reg(0x12, 0x00); // Color1_B
  1410. I2C_write_reg(0x13, 0x00); // Color2_R
  1411. I2C_write_reg(0x14, 0xFF); // Color2_G
  1412. I2C_write_reg(0x15, 0x00); // Color2_B
  1413. I2C_write_reg(0x16, 0x00); // Color3_R
  1414. I2C_write_reg(0x17, 0x00); // Color3_G
  1415. I2C_write_reg(0x18, 0xFF); // Color3_B
  1416. I2C_write_reg(0x19, 0xFF); // Color4_R
  1417. I2C_write_reg(0x1A, 0xFF); // Color4_G
  1418. I2C_write_reg(0x1B, 0xFF); // Color4_B
  1419. I2C_write_reg(0x1C, 0xFF); // PWM1
  1420. I2C_write_reg(0x1D, 0xFF); // PWM2
  1421. I2C_write_reg(0x1E, 0xFF); // PWM3
  1422. I2C_write_reg(0x30, 0x60); // PAT_T1 Trise & Ton
  1423. I2C_write_reg(0x31, 0x64); // PAT_T2 Tfall & Toff
  1424. I2C_write_reg(0x32, 0x00); // PAT_T3 Tdelay
  1425. I2C_write_reg(0x33, 0x0F); // PAT_T4 PAT_CTR & Color
  1426. I2C_write_reg(0x34, 0x00); // PAT_T5 Timer
  1427. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1428. return 0;
  1429. }
  1430. //////////////////////////////////////////////////////////////////////////////////////////
  1431. // S O S
  1432. // . . . - - - . . .
  1433. // |-|__|-|__|-|_______ |---|__|---|__|---|_______ |-|__|-|__|-|_______
  1434. //////////////////////////////////////////////////////////////////////////////////////////
  1435. unsigned char AW2015_SOS(void)
  1436. {
  1437. I2C_write_reg(0x00, 0x55); // software reset
  1438. I2C_write_reg(0x01, 0x03); // GCR
  1439. I2C_write_reg(0x03, 0x01); // IMAX
  1440. I2C_write_reg(0x04, 0x01); // LCFG1
  1441. I2C_write_reg(0x05, 0x01); // LCFG2
  1442. I2C_write_reg(0x06, 0x01); // LCFG3
  1443. I2C_write_reg(0x07, 0x07); // LEDEN
  1444. I2C_write_reg(0x08, 0x08); // LEDCTR
  1445. I2C_write_reg(0x10, 0xFF); // Color1_R
  1446. I2C_write_reg(0x11, 0x00); // Color1_G
  1447. I2C_write_reg(0x12, 0x00); // Color1_B
  1448. I2C_write_reg(0x1C, 0xFF); // PWM1
  1449. I2C_write_reg(0x1D, 0xFF); // PWM2
  1450. I2C_write_reg(0x1E, 0xFF); // PWM3
  1451. I2C_write_reg(0x30, 0x04); // PAT1_T1 Trise & Ton
  1452. I2C_write_reg(0x31, 0x0B); // PAT1_T2 Tfall & Toff
  1453. I2C_write_reg(0x32, 0x70); // PAT1_T3 Tslot & Tdelay
  1454. I2C_write_reg(0x33, 0xE0); // PAT1_T4 PAT_CTR & Color
  1455. I2C_write_reg(0x34, 0x00); // PAT1_T5 Timer
  1456. I2C_write_reg(0x35, 0x07); // PAT2_T1 Trise & Ton
  1457. I2C_write_reg(0x36, 0x0B); // PAT2_T2 Tfall & Toff
  1458. I2C_write_reg(0x37, 0x70); // PAT2_T3 Tslot & Tdelay
  1459. I2C_write_reg(0x38, 0xE0); // PAT2_T4 PAT_CTR & Color
  1460. I2C_write_reg(0x39, 0x00); // PAT2_T5 Timer
  1461. I2C_write_reg(0x3A, 0x04); // PAT3_T1 Trise & Ton
  1462. I2C_write_reg(0x3B, 0x0B); // PAT3_T2 Tfall & Toff
  1463. I2C_write_reg(0x3C, 0x70); // PAT3_T3 Tslot & Tdelay
  1464. I2C_write_reg(0x3D, 0xE0); // PAT3_T4 PAT_CTR & Color
  1465. I2C_write_reg(0x3E, 0x00); // PAT3_T5 Timer
  1466. I2C_write_reg(0x09, 0x07); // PAT_RIN
  1467. return 0;
  1468. }
  1469. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1470. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1471. static ssize_t AW2015_get_reg(struct device* cd,struct device_attribute *attr, char* buf)
  1472. {
  1473. unsigned char reg_val;
  1474. unsigned char i;
  1475. ssize_t len = 0;
  1476. for(i=0;i<0x3A;i++)
  1477. {
  1478. reg_val = I2C_read_reg(i);
  1479. len += snprintf(buf+len, PAGE_SIZE-len, "reg%2X = 0x%2X, ", i,reg_val);
  1480. }
  1481. return len;
  1482. }
  1483. static ssize_t AW2015_set_reg(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  1484. {
  1485. unsigned int databuf[2];
  1486. if(2 == sscanf(buf,"%x %x",&databuf[0], &databuf[1]))
  1487. {
  1488. I2C_write_reg(databuf[0],databuf[1]);
  1489. }
  1490. return len;
  1491. }
  1492. static ssize_t AW2015_get_debug(struct device* cd,struct device_attribute *attr, char* buf)
  1493. {
  1494. ssize_t len = 0;
  1495. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_OFF(void)\n");
  1496. len += snprintf(buf+len, PAGE_SIZE-len, "echo 0 > debug\n");
  1497. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1498. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_ON(r, g, b)\n");
  1499. len += snprintf(buf+len, PAGE_SIZE-len, "echo 1 r g b > debug\n");
  1500. len += snprintf(buf+len, PAGE_SIZE-len, "echo 1 255 255 255 > debug\n");
  1501. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1502. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_LED_Blink(r, g, b, trise, ton, tfall, tfall)\n");
  1503. len += snprintf(buf+len, PAGE_SIZE-len, "echo 2 r g b trise ton tfall toff > debug\n");
  1504. len += snprintf(buf+len, PAGE_SIZE-len, "echo 2 255 255 255 1000 0 1000 1000 > debug\n");
  1505. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1506. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_Multi_Pulse(void)\n");
  1507. len += snprintf(buf+len, PAGE_SIZE-len, "echo 3 > debug\n");
  1508. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1509. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_Multi_Color(void)\n");
  1510. len += snprintf(buf+len, PAGE_SIZE-len, "echo 4 > debug\n");
  1511. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1512. len += snprintf(buf+len, PAGE_SIZE-len, "AW2015_SOS(void)\n");
  1513. len += snprintf(buf+len, PAGE_SIZE-len, "echo 5 > debug\n");
  1514. len += snprintf(buf+len, PAGE_SIZE-len, "\n");
  1515. return len;
  1516. }
  1517. static ssize_t AW2015_set_debug(struct device* cd, struct device_attribute *attr, const char* buf, size_t len)
  1518. {
  1519. unsigned int databuf[16];
  1520. sscanf(buf,"%d",&databuf[0]);
  1521. if(databuf[0] == 0) { // OFF
  1522. AW2015_LED_OFF();
  1523. } else if(databuf[0] == 1) { //ON
  1524. sscanf(&buf[1], "%d %d %d", &databuf[1], &databuf[2], &databuf[3]);
  1525. AW2015_LED_ON(databuf[1], databuf[2], databuf[3]);
  1526. } else if(databuf[0] == 2) { //Blink
  1527. sscanf(&buf[1], "%d %d %d %d %d %d %d", &databuf[1], &databuf[2], &databuf[3], &databuf[4], &databuf[5], &databuf[6], &databuf[7]);
  1528. AW2015_LED_Blink(databuf[1], databuf[2], databuf[3], databuf[4], databuf[5], databuf[6], databuf[7]);
  1529. } else if(databuf[0] == 3) { //Multi Pulse
  1530. AW2015_Multi_Pulse();
  1531. } else if(databuf[0] == 4) { //Multi Color
  1532. AW2015_Multi_Color();
  1533. } else if(databuf[0] == 5) { //SOS
  1534. AW2015_SOS();
  1535. }
  1536. return len;
  1537. }
  1538. static int AW2015_create_sysfs(struct i2c_client *client)
  1539. {
  1540. int err;
  1541. struct device *dev = &(client->dev);
  1542. err = device_create_file(dev, &dev_attr_reg);
  1543. err = device_create_file(dev, &dev_attr_debug);
  1544. err = device_create_file(dev, &dev_attr_Red);
  1545. err = device_create_file(dev, &dev_attr_Green);
  1546. err = device_create_file(dev, &dev_attr_Blue);
  1547. err = device_create_file(dev, &dev_attr_Red_delay_off);
  1548. err = device_create_file(dev, &dev_attr_Red_delay_on);
  1549. err = device_create_file(dev, &dev_attr_Green_delay_off);
  1550. err = device_create_file(dev, &dev_attr_Green_delay_on);
  1551. err = device_create_file(dev, &dev_attr_Blue_delay_off);
  1552. err = device_create_file(dev, &dev_attr_Blue_delay_on);
  1553. err = device_create_file(dev, &dev_attr_White);
  1554. err = device_create_file(dev, &dev_attr_White_delay_off);
  1555. err = device_create_file(dev, &dev_attr_White_delay_on);
  1556. err = device_create_file(dev, &dev_attr_Gray);
  1557. err = device_create_file(dev, &dev_attr_Gray_delay_off);
  1558. err = device_create_file(dev, &dev_attr_Gray_delay_on);
  1559. err = device_create_file(dev, &dev_attr_Yellow);
  1560. err = device_create_file(dev, &dev_attr_Yellow_delay_off);
  1561. err = device_create_file(dev, &dev_attr_Yellow_delay_on);
  1562. err = device_create_file(dev, &dev_attr_Pink);
  1563. err = device_create_file(dev, &dev_attr_Pink_delay_off);
  1564. err = device_create_file(dev, &dev_attr_Pink_delay_on);
  1565. return err;
  1566. }
  1567. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1568. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1569. static int AW2015_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
  1570. {
  1571. unsigned char reg_value;
  1572. unsigned char cnt = 5;
  1573. int err = 0;
  1574. //pr_err("AW2015_i2c_probe xmwuwh start\n");
  1575. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  1576. err = -ENODEV;
  1577. goto exit_check_functionality_failed;
  1578. }
  1579. //client->addr = 0x64;
  1580. AW2015_i2c_client = client;
  1581. while(cnt>0)
  1582. {
  1583. reg_value = I2C_read_reg(0x00);
  1584. printk("AW2015 CHIPID=0x%2x\n", reg_value);
  1585. if(reg_value == 0x31)
  1586. {
  1587. break;
  1588. }
  1589. cnt --;
  1590. msleep(10);
  1591. }
  1592. if(!cnt)
  1593. {
  1594. err = -ENODEV;
  1595. goto exit_create_singlethread;
  1596. }
  1597. AW2015_create_sysfs(client);
  1598. I2C_write_reg(0x00, 0x55); // software reset
  1599. return 0;
  1600. exit_create_singlethread:
  1601. AW2015_i2c_client = NULL;
  1602. exit_check_functionality_failed:
  1603. return err;
  1604. }
  1605. static int AW2015_i2c_remove(struct i2c_client *client)
  1606. {
  1607. AW2015_i2c_client = NULL;
  1608. return 0;
  1609. }
  1610. static const struct i2c_device_id AW2015_i2c_id[] = {
  1611. { AW2015_I2C_NAME, 0 },
  1612. { }
  1613. };
  1614. #ifdef CONFIG_OF
  1615. static const struct of_device_id aw2015_i2c_of_match[] = {
  1616. {.compatible = "awinic,pressure"},
  1617. {},
  1618. };
  1619. #endif
  1620. static struct i2c_driver AW2015_i2c_driver = {
  1621. .driver = {
  1622. .name = AW2015_I2C_NAME,
  1623. #ifdef CONFIG_OF
  1624. .of_match_table = aw2015_i2c_of_match,
  1625. #endif
  1626. },
  1627. .probe = AW2015_i2c_probe,
  1628. .remove = AW2015_i2c_remove,
  1629. .id_table = AW2015_i2c_id,
  1630. };
  1631. static int AW2015_led_remove(struct platform_device *pdev)
  1632. {
  1633. printk("AW2015 remove\n");
  1634. i2c_del_driver(&AW2015_i2c_driver);
  1635. return 0;
  1636. }
  1637. static int AW2015_led_probe(struct platform_device *pdev)
  1638. {
  1639. int ret;
  1640. printk("%s 1 start!\n", __func__);
  1641. ret = i2c_add_driver(&AW2015_i2c_driver);
  1642. if (ret != 0) {
  1643. printk("[%s] failed to register AW2015 i2c driver.\n", __func__);
  1644. return ret;
  1645. } else {
  1646. printk("[%s] Success to register AW2015 i2c driver.\n", __func__);
  1647. }
  1648. return 0;
  1649. }
  1650. #ifdef CONFIG_OF
  1651. static const struct of_device_id aw2015plt_of_match[] = {
  1652. {.compatible = "awinic,aw2015_led"},
  1653. {},
  1654. };
  1655. #endif
  1656. //static void aw2015_led_shutdown(struct platform_device *dev)
  1657. //{
  1658. // AW2015_LED_OFF();
  1659. // pr_err("******** xmwuwh aw2015_led_shutdown!! ********\n");
  1660. //}
  1661. static struct platform_driver AW2015_led_driver = {
  1662. .probe = AW2015_led_probe,
  1663. .remove = AW2015_led_remove,
  1664. //.shutdown = aw2015_led_shutdown,
  1665. .driver = {
  1666. .name = "aw2015_led",
  1667. #ifdef CONFIG_OF
  1668. .of_match_table = aw2015plt_of_match,
  1669. #endif
  1670. }
  1671. };
  1672. static int __init AW2015_led_init(void) {
  1673. int ret;
  1674. //pr_err("%s xmwuwh start\n", __func__);
  1675. ret = platform_driver_register(&AW2015_led_driver);
  1676. if (ret) {
  1677. printk("****[%s] Unable to register driver (%d)\n", __func__, ret);
  1678. return ret;
  1679. }
  1680. return 0;
  1681. }
  1682. static void __exit AW2015_led_exit(void) {
  1683. printk("%s exit\n", __func__);
  1684. platform_driver_unregister(&AW2015_led_driver);
  1685. }
  1686. module_init(AW2015_led_init);
  1687. module_exit(AW2015_led_exit);
  1688. MODULE_AUTHOR("<liweilei@awinic.com.cn>");
  1689. MODULE_DESCRIPTION("AWINIC AW2015 LED Driver");
  1690. MODULE_LICENSE("GPL");