📄 lcdspi.c
字号:
void spi_write_gram(unsigned short data){ unsigned char bytes[3] = {0,0,0}; spi_select_register(0x22); bytes[0] = START_BYTE(RS_CONTROL_REGISTER, RW_WRITE); // = 0x76 bytes[1] = (unsigned char)(data>>8); bytes[2] = (unsigned char)data; spi_transaction(bytes,3);}void delay_100us(void){ udelay(100);}void delay_10ms(void){ mdelay(10);}void delay_20ms(void){ mdelay(20);} void delay_100ms(void){ mdelay(100);} void LCDWriteReg(unsigned short R){#ifdef Samsung_22 unsigned char bytes[2]={0,0}; unsigned char byte_zero[1]={0}; bytes[0] = (unsigned char)(R>>8); bytes[1] = (unsigned char)R; //2 Send Option 1: 8bit or 16bit //2 Send Option 2: data sequence //2 Send Option 3: drive RS manually //GPCR2 |= GPIO_bit(77); spi_transaction(bytes, 1); //spi_transaction(byte_zero, 1); //GPSR2 |= GPIO_bit(77); spi_transaction(&bytes[1], 1); //spi_transaction(byte_zero, 1);#else unsigned short index = (R >> 8); unsigned short data = (R & 0xff); spi_write_register(index, data);#endif}void SS_22_PowerSetting_1(void){ delay_100us(); LCDWriteReg(0x2201); delay_100us(); LCDWriteReg(0x0301);}void SS_22_PowerSetting_2(void){ delay_20ms(); LCDWriteReg(0x1d08); delay_20ms(); delay_20ms(); LCDWriteReg(0x2300); delay_20ms(); LCDWriteReg(0x2494); delay_20ms(); LCDWriteReg(0x256f); delay_20ms(); }void SS_22_PowerSetting_3(void){ LCDWriteReg(0x281e); delay_20ms(); LCDWriteReg(0x1a00); delay_20ms(); LCDWriteReg(0x2110); delay_20ms(); LCDWriteReg(0x1825); delay_20ms(); delay_20ms(); LCDWriteReg(0x1948); delay_20ms(); LCDWriteReg(0x18e5); delay_20ms(); delay_20ms(); LCDWriteReg(0x18f7); delay_20ms(); delay_20ms(); LCDWriteReg(0x1b07); delay_20ms(); delay_20ms(); LCDWriteReg(0x1f5a); delay_20ms(); LCDWriteReg(0x2054); delay_20ms(); LCDWriteReg(0x1ec1); delay_20ms(); delay_20ms(); LCDWriteReg(0x2100); delay_100us(); LCDWriteReg(0x3b01); delay_20ms(); delay_20ms(); LCDWriteReg(0x0020); delay_20ms(); LCDWriteReg(0x0201); delay_20ms(); delay_20ms();}void SS_22_InitialFunction_1(void){ LCDWriteReg(0x00a0); delay_100us(); LCDWriteReg(0x0110); delay_100us(); LCDWriteReg(0x0200); delay_20ms(); LCDWriteReg(0x0500); delay_20ms(); LCDWriteReg(0x0d00); delay_20ms(); delay_20ms();}void SS_22_InitialFunction_2(void){ LCDWriteReg(0x0e00); delay_100us(); LCDWriteReg(0x0f00); delay_100us(); LCDWriteReg(0x1000); delay_100us(); LCDWriteReg(0x1100); delay_100us(); LCDWriteReg(0x1200); delay_100us(); LCDWriteReg(0x1300); delay_100us(); LCDWriteReg(0x1400); delay_100us(); LCDWriteReg(0x1500); delay_100us(); LCDWriteReg(0x1600); delay_100us(); LCDWriteReg(0x1700); delay_100us(); LCDWriteReg(0x3401); delay_100us(); LCDWriteReg(0x3500); }void SS_22_InitialFunction_3(void){ LCDWriteReg(0x8d01); delay_100us(); LCDWriteReg(0x8b28); delay_100us(); LCDWriteReg(0x4b00); delay_100us(); LCDWriteReg(0x4c00); delay_100us(); LCDWriteReg(0x4d00); delay_100us(); LCDWriteReg(0x4e00); delay_100us(); LCDWriteReg(0x4f00); delay_100us(); LCDWriteReg(0x5000); delay_100us(); LCDWriteReg(0x8600); delay_100us(); LCDWriteReg(0x8726); delay_100us(); LCDWriteReg(0x8802); delay_100us(); LCDWriteReg(0x8905); delay_100us(); LCDWriteReg(0x3301); delay_100us(); LCDWriteReg(0x3706); delay_100us(); LCDWriteReg(0x7600); delay_100us();}void SS_22_InitialFunction_4(void){ LCDWriteReg(0x4200); delay_100us(); LCDWriteReg(0x4300); delay_100us(); LCDWriteReg(0x4400); delay_100us(); LCDWriteReg(0x4500); delay_100us(); LCDWriteReg(0x46ef); delay_100us(); LCDWriteReg(0x4700); delay_100us(); LCDWriteReg(0x4800); delay_100us(); LCDWriteReg(0x4901); delay_100us(); LCDWriteReg(0x4a3f); delay_100us(); LCDWriteReg(0x3c00); delay_100us(); LCDWriteReg(0x3d00); delay_100us(); LCDWriteReg(0x3e01); delay_100us(); LCDWriteReg(0x3f3f); delay_100us(); LCDWriteReg(0x4001); delay_100us(); LCDWriteReg(0x410a); delay_100us();}void SS_22_InitialFunction_5(void){ LCDWriteReg(0x8f05); delay_100us(); LCDWriteReg(0x9005); delay_100us(); LCDWriteReg(0x9144); delay_100us(); LCDWriteReg(0x9244); delay_100us(); LCDWriteReg(0x9344); delay_100us(); LCDWriteReg(0x9433); delay_100us(); LCDWriteReg(0x9505); delay_100us(); LCDWriteReg(0x9605); delay_100us(); LCDWriteReg(0x9744); delay_100us(); LCDWriteReg(0x9844); delay_100us(); LCDWriteReg(0x9944); delay_100us(); LCDWriteReg(0x9a33); delay_100us(); LCDWriteReg(0x9b33); delay_100us(); LCDWriteReg(0x9c33); delay_100us(); LCDWriteReg(0x9d80); delay_100us();}void Samsung_LCM_22(void){ delay_10ms(); SS_22_PowerSetting_1(); SS_22_InitialFunction_1(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_InitialFunction_2(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_InitialFunction_3(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_InitialFunction_4(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_InitialFunction_5(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_PowerSetting_2(); delay_20ms(); delay_20ms(); //delay 40ms SS_22_PowerSetting_3(); }static int __init modinit(void){ //unsigned int reg; //unsigned int *io_base; //SSP3 ioremap printk("It's me, Leon\n"); /* The example code below display how register was mapped to memory */ /* printk("GPDR0=%08x\n", GPDR0); //__REG(0x40E0000C) reg = 0xf2e0000c; printk("GPDR0=%08x\n", *((unsigned int *)reg) ); */ /* If SSP3 registers have not been mapped to memory, we can still handle that */ /* io_base = ioremap(0x41900000, 0x1000); printk("io_base=%08x\n", io_base); printk("SSP3_SSCR0=%08x\n", *io_base); */ printk("SSP3_SSCR0=%08x\n", SSP3_SSCR0); /* We should set RS low */ GAFR2_L &= 0xf3ffffff; //L_BIAS GPIO 77 GPCR2 |= GPIO_bit(77); ssp3_enable(); mdelay(2000); Samsung_LCM_22(); printk("GAFR2_U=%08x\n", GAFR2_U); printk("GAFR1_U=%08x\n", GAFR1_U); printk("SSP3_SSCR0=%08x\n", SSP3_SSCR0); printk("SSP3_SSCR1=%08x\n", SSP3_SSCR1); printk("SSP3_SSSR=%08x\n", SSP3_SSSR); /* Fixme: We might restore RS original setting */ //GAFR2_L |= 0x08000000; //L_BIAS GPIO 77 return 0;}static void __exit modexit(void){ ssp3_disable();}module_init(modinit);module_exit(modexit);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -