Created
July 26, 2013 15:00
-
-
Save rtzui/6089580 to your computer and use it in GitHub Desktop.
itdb0232wd is 3.2" wide screen display, this is absolutely untested.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <linux/module.h> | |
#include <linux/kernel.h> | |
#include <linux/init.h> | |
#include <linux/gpio.h> | |
#include <linux/spi/spi.h> | |
#include <linux/delay.h> | |
#include "fbtft.h" | |
#define DRVNAME "itdb0232wd" | |
#define WIDTH 239 | |
#define HEIGHT 399 | |
/* Module Parameter: debug (also available through sysfs) */ | |
MODULE_PARM_DEBUG; | |
static int itdb0232wd_init_display(struct fbtft_par *par) | |
{ | |
fbtft_dev_dbg(DEBUG_INIT_DISPLAY, par->info->device, "%s()\n", __func__); | |
printk("Hello World!\n I guess the initialisation sequence should go here."); | |
// utft.cpp line 1055 and following | |
write_cmd(par,0x83); | |
write_data(par,0x02); //TESTM=1 | |
write_cmd(par,0x85); | |
write_data(par,0x03); //VDC_SEL=011 | |
write_cmd(par,0x8B); | |
write_data(par,0x01); | |
write_cmd(par,0x8C); | |
write_data(par,0x93); //STBA[7]=1,STBA[5:4]=01,STBA[1:0]=11 | |
write_cmd(par,0x91); | |
write_data(par,0x01); //DCDC_SYNC=1 | |
write_cmd(par,0x83); | |
write_data(par,0x00); //TESTM=0 | |
//Gamma Setting | |
write_cmd(par,0x3E); | |
write_data(par,0xB0); | |
write_cmd(par,0x3F); | |
write_data(par,0x03); | |
write_cmd(par,0x40); | |
write_data(par,0x10); | |
write_cmd(par,0x41); | |
write_data(par,0x56); | |
write_cmd(par,0x42); | |
write_data(par,0x13); | |
write_cmd(par,0x43); | |
write_data(par,0x46); | |
write_cmd(par,0x44); | |
write_data(par,0x23); | |
write_cmd(par,0x45); | |
write_data(par,0x76); | |
write_cmd(par,0x46); | |
write_data(par,0x00); | |
write_cmd(par,0x47); | |
write_data(par,0x5E); | |
write_cmd(par,0x48); | |
write_data(par,0x4F); | |
write_cmd(par,0x49); | |
write_data(par,0x40); | |
//**********Power On sequence************ | |
write_cmd(par,0x17); | |
write_data(par,0x91); | |
write_cmd(par,0x2B); | |
write_data(par,0xF9); | |
mdelay(10); | |
write_cmd(par,0x1B); | |
write_data(par,0x14); | |
write_cmd(par,0x1A); | |
write_data(par,0x11); | |
write_cmd(par,0x1C); | |
write_data(par,0x06); | |
write_cmd(par,0x1F); | |
write_data(par,0x42); | |
mdelay(20); | |
write_cmd(par,0x19); | |
write_data(par,0x0A); | |
write_cmd(par,0x19); | |
write_data(par,0x1A); | |
mdelay(40); | |
write_cmd(par,0x19); | |
write_data(par,0x12); | |
mdelay(40); | |
write_cmd(par,0x1E); | |
write_data(par,0x27); | |
mdelay(100); | |
//**********DISPLAY ON SETTING*********** | |
write_cmd(par,0x24); | |
write_data(par,0x60); | |
write_cmd(par,0x3D); | |
write_data(par,0x40); | |
write_cmd(par,0x34); | |
write_data(par,0x38); | |
write_cmd(par,0x35); | |
write_data(par,0x38); | |
write_cmd(par,0x24); | |
write_data(par,0x38); | |
mdelay(40); | |
write_cmd(par,0x24); | |
write_data(par,0x3C); | |
write_cmd(par,0x16); | |
write_data(par,0x1C); | |
write_cmd(par,0x01); | |
write_data(par,0x06); | |
write_cmd(par,0x55); | |
write_data(par,0x00); | |
write_cmd(par,0x02); | |
write_data(par,0x00); | |
write_cmd(par,0x03); | |
write_data(par,0x00); | |
write_cmd(par,0x04); | |
write_data(par,0x00); | |
write_cmd(par,0x05); | |
write_data(par,0xef); | |
write_cmd(par,0x06); | |
write_data(par,0x00); | |
write_cmd(par,0x07); | |
write_data(par,0x00); | |
write_cmd(par,0x08); | |
write_data(par,0x01); | |
write_cmd(par,0x09); | |
write_data(par,0x8f); | |
write_cmd(par,0x22); | |
// init sequence end. | |
return 0; | |
} | |
static int itdb0232wd_write_vmem(struct fbtft_par *par) | |
{ | |
u16 *vmem16 = (u16 *)par->info->screen_base; | |
int x, y; | |
char r,g,b; | |
fbtft_fbtft_dev_dbg(DEBUG_WRITE_VMEM, par, par->info->device, "%s()\n", __func__); | |
for (x=0;x<239;x++) { | |
for (y=0;y<399;y++) { | |
drawPixel(x,y,vmem16[y*399+x]); | |
} | |
} | |
} | |
// straight from the utft libary. | |
void drawPixel(int x, int y, u16 pixel) | |
{ | |
//cbi(P_CS, B_CS); | |
//PORT_CS &= ~(1<<P_CS); | |
// pull CS to low | |
write_cmd(0x20) | |
setXY(x, y, x, y); | |
//setPixel(fcolorr, fcolorg, fcolorb); | |
//write_data(((r&248)|g>>5),((g&28)<<3|b>>3)); // rrrrrggggggbbbbb | |
write_data(pixel); // rrrrrggggggbbbbb ?!?!? | |
//sbi(P_CS, B_CS); | |
//PORT_CS &= ~(1<<P_CS); | |
// pull CS to high | |
write_cmd(0x21) | |
// clrXY(); | |
setXY(0,0,239,399); | |
} | |
void setXY(char x1, char y1, char x2, char y2) | |
{ | |
LCD_Write_COM_DATA(0x02,x1>>8); | |
LCD_Write_COM_DATA(0x03,x1); | |
LCD_Write_COM_DATA(0x04,x2>>8); | |
LCD_Write_COM_DATA(0x05,x2); | |
LCD_Write_COM_DATA(0x06,y1>>8); | |
LCD_Write_COM_DATA(0x07,y1); | |
LCD_Write_COM_DATA(0x08,y2>>8); | |
LCD_Write_COM_DATA(0x09,y2); | |
write_cmd(par,0x22); | |
} | |
void LCD_Write_COM_DATA(char com1,int dat1) | |
{ | |
write_cmd(com1); | |
write_data(dat1); | |
} | |
struct fbtft_display itdb0232wd_display = { | |
.width = WIDTH, | |
.height = HEIGHT, | |
}; | |
static int itdb0232wd_probe(struct spi_device *spi) | |
{ | |
struct fb_info *info; | |
struct fbtft_par *par; | |
int ret; | |
fbtft_dev_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, &spi->dev, "%s()\n", __func__); | |
info = fbtft_framebuffer_alloc(&itdb0232wd_display, &spi->dev); | |
if (!info) | |
return -ENOMEM; | |
par = info->par; | |
par->spi = spi; | |
fbtft_debug_init(par); | |
par->fbtftops.init_display = itdb0232wd_init_display; | |
ret = fbtft_register_framebuffer(info); | |
if (ret < 0) | |
goto out_release; | |
return 0; | |
out_release: | |
fbtft_framebuffer_release(info); | |
return ret; | |
} | |
static int itdb0232wd_remove(struct spi_device *spi) | |
{ | |
struct fb_info *info = spi_get_drvdata(spi); | |
fbtft_dev_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, &spi->dev, "%s()\n", __func__); | |
if (info) { | |
fbtft_unregister_framebuffer(info); | |
fbtft_framebuffer_release(info); | |
} | |
return 0; | |
} | |
static struct spi_driver itdb0232wd_driver = { | |
.driver = { | |
.name = DRVNAME, | |
.owner = THIS_MODULE, | |
}, | |
.probe = itdb0232wd_probe, | |
.remove = itdb0232wd_remove, | |
}; | |
static int __init itdb0232wd_init(void) | |
{ | |
fbtft_pr_debug("\n\n"DRVNAME": %s()\n", __func__); | |
return spi_register_driver(&itdb0232wd_driver); | |
} | |
static void __exit itdb0232wd_exit(void) | |
{ | |
fbtft_pr_debug(DRVNAME": %s()\n", __func__); | |
spi_unregister_driver(&itdb0232wd_driver); | |
} | |
/* ------------------------------------------------------------------------- */ | |
module_init(itdb0232wd_init); | |
module_exit(itdb0232wd_exit); | |
MODULE_DESCRIPTION("First try itdb02-32wd driver"); | |
MODULE_AUTHOR("rtzui"); | |
MODULE_LICENSE("GPL"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http://www.exp-tech.de/service/datasheet/ITDB02_3.2WD/_16_9LCDTest.rar | |
https://github.com/ozracing/UTFT | |
https://github.com/notro/fbtft |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment