From 85b969a8a7fd45806c9ed5eafdcaebd64cafeb08 Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Thu, 6 Jan 2005 16:54:54 +0000 Subject: [lcd4linux @ 2005-01-06 16:54:53 by reinelt] M50530 fixes --- drv_M50530.c | 55 +++++++++++++++++++++++++++++---------------------- drv_generic_parport.c | 24 ++++++++++++---------- lcd4linux.conf.sample | 12 +++++------ 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/drv_M50530.c b/drv_M50530.c index 2132c55..4c399ac 100644 --- a/drv_M50530.c +++ b/drv_M50530.c @@ -1,4 +1,4 @@ -#/* $Id: drv_M50530.c,v 1.14 2004/06/26 12:04:59 reinelt Exp $ +#/* $Id: drv_M50530.c,v 1.15 2005/01/06 16:54:53 reinelt Exp $ * * new style driver for M50530-based displays * @@ -23,6 +23,9 @@ * * * $Log: drv_M50530.c,v $ + * Revision 1.15 2005/01/06 16:54:53 reinelt + * M50530 fixes + * * Revision 1.14 2004/06/26 12:04:59 reinelt * * uh-oh... the last CVS log message messed up things a lot... @@ -156,13 +159,13 @@ static void drv_M5_command (const unsigned int cmd, const int delay) { /* put data on DB1..DB8 */ - drv_generic_parport_data (cmd&0xff); - + drv_generic_parport_data (cmd & 0xff); + /* set I/OC1 */ /* set I/OC2 */ - drv_generic_parport_control (SIGNAL_IOC1|SIGNAL_IOC2, - (cmd&0x200?SIGNAL_IOC1:0) | - (cmd&0x100?SIGNAL_IOC2:0)); + drv_generic_parport_control (SIGNAL_IOC1 | SIGNAL_IOC2, + (cmd & 0x100 ? SIGNAL_IOC1 : 0) | + (cmd & 0x200 ? SIGNAL_IOC2 : 0)); /* Control data setup time */ ndelay(200); @@ -195,8 +198,8 @@ static void drv_M5_write (const int row, const int col, const char *data, const drv_M5_command (0x300 | pos, 20); while (l--) { - cmd = *data++; - drv_M5_command (0x100 | cmd, 20); + cmd = *(unsigned char*)data++; + drv_M5_command (0x200 | cmd, 20); } } @@ -205,12 +208,12 @@ static void drv_M5_defchar (const int ascii, const unsigned char *matrix) { int i; - drv_M5_command (0x300+192+8*(ascii-CHAR0), 20); + drv_M5_command (0x300 + 192 + 8 * (ascii - CHAR0), 20); /* Fixme: looks like the M50530 cannot control the bottom line */ /* therefore we have only 7 bytes here */ - for (i=0; i<7; i++) { - drv_M5_command (0x100|(matrix[i] & 0x3f), 20); + for (i = 0; i < 7; i++) { + drv_M5_command (0x200 | (matrix[i] & 0x3f), 20); } } @@ -282,11 +285,14 @@ static int drv_M5_start (const char *section, const int quiet) if ((SIGNAL_EX = drv_generic_parport_wire_ctrl ("EX", "STROBE"))==0xff) return -1; if ((SIGNAL_IOC1 = drv_generic_parport_wire_ctrl ("IOC1", "SELECT"))==0xff) return -1; if ((SIGNAL_IOC2 = drv_generic_parport_wire_ctrl ("IOC2", "AUTOFD"))==0xff) return -1; - if ((SIGNAL_GPO = drv_generic_parport_wire_ctrl ("GPO", "INIT" ))==0xff) return -1; + if ((SIGNAL_GPO = drv_generic_parport_wire_ctrl ("GPO", "GND" ))==0xff) return -1; /* clear all signals */ drv_generic_parport_control (SIGNAL_EX|SIGNAL_IOC1|SIGNAL_IOC2|SIGNAL_GPO, 0); - + + /* for any mysterious reason, this delay is necessary... */ + udelay(2000); + /* set direction: write */ drv_generic_parport_direction (0); @@ -362,37 +368,37 @@ int drv_M5_init (const char *section, const int quiet) /* start display */ - if ((ret=drv_M5_start (section, quiet))!=0) + if ((ret = drv_M5_start (section, quiet)) != 0) return ret; /* initialize generic text driver */ - if ((ret=drv_generic_text_init(section, Name))!=0) + if ((ret = drv_generic_text_init(section, Name)) != 0) return ret; /* initialize generic icon driver */ - if ((ret=drv_generic_text_icon_init())!=0) + if ((ret = drv_generic_text_icon_init()) != 0) return ret; /* initialize generic bar driver */ - if ((ret=drv_generic_text_bar_init(0))!=0) + if ((ret = drv_generic_text_bar_init(0)) != 0) return ret; /* add fixed chars to the bar driver */ - drv_generic_text_bar_add_segment (0,0,255,32); /* ASCII 32 = blank */ + drv_generic_text_bar_add_segment (0, 0, 255, 32); /* ASCII 32 = blank */ /* register text widget */ - wc=Widget_Text; - wc.draw=drv_generic_text_draw; + wc = Widget_Text; + wc.draw = drv_generic_text_draw; widget_register(&wc); /* register icon widget */ - wc=Widget_Icon; - wc.draw=drv_generic_text_icon_draw; + wc = Widget_Icon; + wc.draw = drv_generic_text_icon_draw; widget_register(&wc); /* register bar widget */ - wc=Widget_Bar; - wc.draw=drv_generic_text_bar_draw; + wc = Widget_Bar; + wc.draw = drv_generic_text_bar_draw; widget_register(&wc); /* register plugins */ @@ -420,6 +426,7 @@ int drv_M5_quit (const int quiet) { /* clear all signals */ drv_generic_parport_control (SIGNAL_EX|SIGNAL_IOC1|SIGNAL_IOC2|SIGNAL_GPO, 0); + /* close port */ drv_generic_parport_close(); return (0); diff --git a/drv_generic_parport.c b/drv_generic_parport.c index 5ec6bbd..945a573 100644 --- a/drv_generic_parport.c +++ b/drv_generic_parport.c @@ -1,4 +1,4 @@ -/* $Id: drv_generic_parport.c,v 1.11 2004/09/18 15:58:57 reinelt Exp $ +/* $Id: drv_generic_parport.c,v 1.12 2005/01/06 16:54:54 reinelt Exp $ * * generic driver helper for serial and parport access * @@ -23,6 +23,9 @@ * * * $Log: drv_generic_parport.c,v $ + * Revision 1.12 2005/01/06 16:54:54 reinelt + * M50530 fixes + * * Revision 1.11 2004/09/18 15:58:57 reinelt * even more HD44780 cleanups, hardwiring for LCM-162 * @@ -426,11 +429,11 @@ void drv_generic_parport_toggle (const unsigned char bits, const int level, cons /* any signal affected? */ /* Note: this may happen in case a signal is hardwired to GND */ - if (bits==0) return; + if (bits == 0) return; /* prepare value */ - value1=level?bits:0; - value2=level?0:bits; + value1 = level ? bits : 0; + value2 = level ? 0 : bits; /* Strobe, Select and AutoFeed are inverted! */ value1 = bits & (value1 ^ (PARPORT_CONTROL_STROBE|PARPORT_CONTROL_SELECT|PARPORT_CONTROL_AUTOFD)); @@ -440,18 +443,19 @@ void drv_generic_parport_toggle (const unsigned char bits, const int level, cons #ifdef WITH_PPDEV if (PPdev) { struct ppdev_frob_struct frob; - frob.mask=bits; - + frob.mask = bits; + /* rise */ - frob.val=value1; + frob.val = value1; ioctl (PPfd, PPFCONTROL, &frob); - + /* pulse width */ ndelay(delay); - + /* lower */ - frob.val=value2; + frob.val = value2; ioctl (PPfd, PPFCONTROL, &frob); + } else #endif { diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index 09ea972..567cf92 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -126,7 +126,7 @@ Display HD44780-I2C { Display M50530-24x8 { Driver 'M50530' - Port '/dev/parports/0' + Port '/dev/parport0' # Port '0x378' Size '24x8' Wire.EX 'STROBE' @@ -301,7 +301,7 @@ Widget Disk { # expression (proc_stat::disk('.*', 'rblk', 500)+proc_stat::disk('.*', 'wblk', 500))/2 # with kernel 2.6, disk_io disappeared from /proc/stat but moved to /proc/diskstat # therefore you have to use another function called 'diskstats': - expression diskstats('.*', 'read_sectors', 500) + diskstats('.*', 'write_sectors', 500) + expression diskstats('hd.', 'read_sectors', 500) + diskstats('hd.', 'write_sectors', 500) prefix 'disk' postfix ' ' width 10 @@ -315,8 +315,8 @@ Widget DiskBar { #expression proc_stat::disk('.*', 'rblk', 500) #expression2 proc_stat::disk('.*', 'wblk', 500) # for kernel 2.6: - expression diskstats('.*', 'read_sectors', 500) - expression2 diskstats('.*', 'write_sectors', 500) + expression diskstats('hd.', 'read_sectors', 500) + expression2 diskstats('hd.', 'write_sectors', 500) length 14 direction 'E' update tack @@ -687,10 +687,10 @@ Layout testMySQL { #Display 'SC1602D' #Display 'LCM-162' #Display 'CF631' -Display 'CF632' +#Display 'CF632' #Display 'CF633' #Display 'Curses' -#Display 'M50530-24x8' +Display 'M50530-24x8' #Display 'CT20x4' #Display 'T6963-240x64' #Display 'XWindow' -- cgit v1.2.3