changeset 77:fcbe1332b197

pirexplore: LCD init and BL control work now
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 01 Aug 2013 00:57:49 +0000
parents 07b686248ab7
children 2c266d4339ff
files target-utils/pirexplore/cmdtab.c target-utils/pirexplore/lcd.c target-utils/pirexplore/main.c
diffstat 3 files changed, 70 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/target-utils/pirexplore/cmdtab.c	Thu Aug 01 00:26:29 2013 +0000
+++ b/target-utils/pirexplore/cmdtab.c	Thu Aug 01 00:57:49 2013 +0000
@@ -3,6 +3,7 @@
 extern void cmd_baud_switch();
 extern void cmd_dieid();
 extern void cmd_jump();
+extern void cmd_lcdinit();
 extern void cmd_r8();
 extern void cmd_r16();
 extern void cmd_r32();
@@ -18,6 +19,7 @@
 	{"baud", cmd_baud_switch},
 	{"dieid", cmd_dieid},
 	{"jump", cmd_jump},
+	{"lcdinit", cmd_lcdinit},
 	{"r8", cmd_r8},
 	{"r16", cmd_r16},
 	{"r32", cmd_r32},
--- a/target-utils/pirexplore/lcd.c	Thu Aug 01 00:26:29 2013 +0000
+++ b/target-utils/pirexplore/lcd.c	Thu Aug 01 00:57:49 2013 +0000
@@ -57,3 +57,67 @@
 	fb_spca_write(0x19, 0x08);	/* backlight: 0x08 is on, 0x0c is off */
 	fb_spca_write(0x23, 0x18);
 }
+
+enum s6b33b1x_cmdflag { CMD, DATA, END };
+
+struct s6b33b1x_cmdlist {
+	enum s6b33b1x_cmdflag is_cmd:8;	/* 1: is a command, 0: is data, 2: end marker! */
+	u_char data;			/* 8 bit to send to LC display */
+};
+
+static const struct s6b33b1x_cmdlist
+s6b33b1x_initdata[] = {
+	{ CMD,  0x26 }, /* CMD   DCDC and AMP ON/OFF set */
+	{ DATA, 0x00 }, /* DATA: everything off */
+	{ CMD,  0x02 }, /* CMD   Oscillation Mode Set */
+	{ DATA, 0x00 }, /* DATA: oscillator off */
+	{ CMD,  0x2c }, /* CMD   Standby Mode off */
+	{ CMD,  0x50 }, /* CMD   Display off */
+	{ CMD,  0x02 }, /* CMD   Oscillation Mode Set */
+	{ DATA, 0x01 }, /* DATA: oscillator on */
+	{ CMD,  0x26 }, /* CMD   DCDC and AMP ON/OFF set */
+	{ DATA, 0x01 }, /* DATA: Booster 1 on */
+	{ CMD,  0x26 }, /* CMD   DCDC and AMP ON/OFF set */
+	{ DATA, 0x09 }, /* DATA: Booster 1 on, OP-AMP on */
+	{ CMD,  0x26 }, /* CMD   DCDC and AMP ON/OFF set */
+	{ DATA, 0x0b }, /* DATA: Booster 1 + 2 on, OP-AMP on */
+	{ CMD,  0x26 }, /* CMD   DCDC and AMP ON/OFF set */
+	{ DATA, 0x0f }, /* DATA: Booster 1 + 2 + 3 on, OP-AMP on */
+	{ CMD,  0x20 }, /* CMD   DC-DC Select */
+	{ DATA, 0x01 }, /* DATA: step up x1.5 */
+	{ CMD,  0x24 }, /* CMD   DCDC Clock Division Set */
+	{ DATA, 0x0a }, /* DATA: fPCK = fOSC/6 */
+	{ CMD,  0x2a }, /* CMD   Contrast Control */
+	{ DATA, 0x2d }, /* DATA: default contrast */
+	{ CMD,  0x30 }, /* CMD   Adressing mode set */
+	{ DATA, 0x0b }, /* DATA: 65536 color mode */
+	{ CMD,  0x10 }, /* CMD   Driver output mode set */
+	{ DATA, 0x03 }, /* DATA: Display duty: 1/132 */
+	{ CMD,  0x34 }, /* CMD   N-line inversion set */
+	{ DATA, 0x88 }, /* DATA: inversion on, one frame, every 8 blocks */
+	{ CMD,  0x40 }, /* CMD   Entry mode set */
+	{ DATA, 0x00 }, /* DATA: Y address counter mode */
+	{ CMD,  0x28 }, /* CMD   Temperature Compensation set */
+	{ DATA, 0x01 }, /* DATA: slope -0.05%/degC */
+	{ CMD,  0x32 }, /* CMD   ROW vector mode set */
+	{ DATA, 0x01 }, /* DATA: every 2 subgroup */
+	{ CMD,  0x51 }, /* CMD   Display on */
+	{ END,  0x00 }, /* MARKER: end of list */
+};
+
+static void
+fb_s6b33b1x_send_cmdlist(p)
+	struct s6b33b1x_cmdlist *p;
+{
+	while(p->is_cmd != END) {
+		nCS4_ADDR0 = p->data;
+		p++;
+	}
+}
+
+void
+cmd_lcdinit()
+{
+	GPIO_OUT_REG |= 0x0080;
+	fb_s6b33b1x_send_cmdlist(s6b33b1x_initdata);
+}
--- a/target-utils/pirexplore/main.c	Thu Aug 01 00:26:29 2013 +0000
+++ b/target-utils/pirexplore/main.c	Thu Aug 01 00:57:49 2013 +0000
@@ -25,12 +25,15 @@
 	 * Other register settings replicating what OsmocomBB does
 	 * in board/pirelli_dpl10/init.c
 	 */
-	*(volatile u16 *)0xfffef008 = 0x7080;
+	*(volatile u16 *)0xfffef008 = 0x7090;
 	*(volatile u16 *)0xfffef00a = 0x021F;
 	*(volatile u16 *)0xfffe4804 = 0xFF6D;
 	*(volatile u16 *)0xfffe4802 = 0x0000;
 	/* nCS4 setup for SPCA552E */
 	*(volatile u16 *)0xfffffb0a = 0x00A7;
+	/* initialize PWL registers like OsmocomBB does */
+	*(volatile u8 *)0xfffe8000 = 0x32;
+	*(volatile u8 *)0xfffe8001 = 0x01;
 	for (;;) {
 		putchar('=');
 		if (command_entry())