在u-boot中配置hx8369,IO模拟SPI.
#include<regs.h>
#include <common.h>
#include <asm/io.h>
#ifdef CONFIG_GZSD210_LCD
static void set_cs(int cs)
{
int reg;
reg = readl(GPF1DAT);
reg &= ~(0x1 << 5);
reg |= (cs << 5);
writel(reg,GPF1DAT);
}
static void set_clk(int clk)
{
int reg;
reg = readl(GPF1DAT);
reg &= ~(0x1 << 4);
reg |= (clk << 4);
writel(reg,GPF1DAT);
}
static void set_outdata(int outdata)
{
int reg;
#if 0
reg = readl(GPF0CON);
reg &= ~(0xf << 20);
reg |= (0x1<< 20);
writel(reg,GPF0CON);
reg = readl(GPF0DAT);
reg &= ~(0x1 << 5);
reg |= (outdata << 5);
writel(reg,GPF0DAT);
#else
reg = readl(GPF0DAT);
reg &= ~(0x1 << 6);
reg |= (outdata << 6);
writel(reg,GPF0DAT);
#endif
}
static void send_data(unsigned int data)
{
unsigned int i;
int clk_num;
int clk_mask;
set_cs(0);
udelay(10);
set_clk(1);
set_outdata(1);
udelay(10);
clk_num = 9;
clk_mask = 0x100;
udelay(50);
for(i = 0; i < clk_num; ++i){
set_clk(0);
if(data & clk_mask){
set_outdata(1);
}
else{
set_outdata(0);
}
udelay(100);
set_clk(1);
udelay(100);
data <<= 1;
}
set_outdata(1);
set_cs(1);
}
static void hx8369_write_cmd(unsigned int cmd)
{
unsigned int out;
out = (cmd & 0xFF);
send_data(out);
}
static void hx8369_write_data(unsigned int data)
{
unsigned int out = (data & 0xFF) | 0x100;
send_data(out);
}
static void set_hx8369(void)
{
hx8369_write_cmd(0xB9); // SET password
hx8369_write_data(0xFF);
hx8369_write_data(0x83);
hx8369_write_data(0x69);
hx8369_write_cmd(0xB1); //Set Power
hx8369_write_data(0x01);
hx8369_write_data(0x00);
hx8369_write_data(0x34);
hx8369_write_data(0x06);
hx8369_write_data(0x00);
hx8369_write_data(0x11);
hx8369_write_data(0x11);
hx8369_write_data(0x2A);
hx8369_write_data(0x32);
hx8369_write_data(0x3F);
hx8369_write_data(0x3F);
hx8369_write_data(0x07);
hx8369_write_data(0x23);
hx8369_write_data(0x01);
hx8369_write_data(0xE6);
hx8369_write_data(0xE6);
hx8369_write_data(0xE6);
hx8369_write_data(0xE6);
hx8369_write_data(0xE6);
hx8369_write_cmd(0xB2); // SET Display 480x800
hx8369_write_data(0x00);
hx8369_write_data(0x2B);