Lines Matching full:lcd

7  * This code drives an LCD module (/dev/lcd), and a keypad (/dev/keypad)
10 * The LCD module may either be an HD44780-like 8-bit parallel LCD, or a 1-bit
18 * Several profiles are provided for commonly found LCD+keypad modules on the
27 * - make the LCD a part of a virtual screen of Vx*Vy
200 /* lcd-specific variables */
219 } lcd; variable
225 * Bit masks to convert LCD signals to parallel port outputs.
234 * one entry for each bit on the LCD
254 * LCD protocols
261 * LCD character sets
267 * LCD types
410 MODULE_DESCRIPTION("Generic parallel port LCD/Keypad driver");
430 "LCD type: 0=none, 1=compiled-in, 2=old, 3=serial ks0074, 4=hantronix, 5=nexcom");
434 MODULE_PARM_DESC(lcd_height, "Number of lines on the LCD");
438 MODULE_PARM_DESC(lcd_width, "Number of columns on the LCD");
442 MODULE_PARM_DESC(lcd_bwidth, "Internal LCD line width (40)");
446 MODULE_PARM_DESC(lcd_hwidth, "LCD line hardware address (64)");
450 MODULE_PARM_DESC(lcd_charset, "LCD character set: 0=standard, 1=KS0074");
455 "LCD communication: 0=parallel (//), 1=serial, 2=TI LCD Interface");
458 * These are the parallel port pins the LCD control signals are connected to.
469 "# of the // port pin connected to LCD 'E' signal, with polarity (-17..17)");
474 "# of the // port pin connected to LCD 'RS' signal, with polarity (-17..17)");
479 "# of the // port pin connected to LCD 'RW' signal, with polarity (-17..17)");
484 "# of the // port pin connected to serial LCD 'SCL' signal, with polarity (-17..17)");
489 "# of the // port pin connected to serial LCD 'SDA' signal, with polarity (-17..17)");
494 "# of the // port pin connected to LCD backlight, with polarity (-17..17)");
506 /* for some LCD drivers (ks0074) we need a charset conversion table. */
683 * send a serial byte to the LCD panel. The caller is responsible for locking
692 * LCD reads D0 on STROBE's rising edge. in lcd_send_serial()
715 if (lcd.pins.bl == PIN_NONE) in lcd_backlight()
728 /* send a command to the LCD panel in serial mode */
739 /* send data to the LCD panel in serial mode */
750 /* send a command to the LCD panel in 8 bits parallel mode */
772 /* send data to the LCD panel in 8 bits parallel mode */
794 /* send a command to the TI LCD panel */
804 /* send data to the TI LCD panel */
896 /* initialize the LCD driver */
906 * Init lcd struct with load-time values to preserve exact in lcd_init()
917 lcd.proto = LCD_PROTO_PARALLEL; in lcd_init()
918 lcd.charset = LCD_CHARSET_NORMAL; in lcd_init()
919 lcd.pins.e = PIN_STROBE; in lcd_init()
920 lcd.pins.rs = PIN_AUTOLF; in lcd_init()
929 lcd.proto = LCD_PROTO_SERIAL; in lcd_init()
930 lcd.charset = LCD_CHARSET_KS0074; in lcd_init()
931 lcd.pins.bl = PIN_AUTOLF; in lcd_init()
932 lcd.pins.cl = PIN_STROBE; in lcd_init()
933 lcd.pins.da = PIN_D0; in lcd_init()
942 lcd.proto = LCD_PROTO_PARALLEL; in lcd_init()
943 lcd.charset = LCD_CHARSET_NORMAL; in lcd_init()
944 lcd.pins.e = PIN_AUTOLF; in lcd_init()
945 lcd.pins.rs = PIN_SELECP; in lcd_init()
946 lcd.pins.rw = PIN_INITP; in lcd_init()
955 lcd.proto = DEFAULT_LCD_PROTO; in lcd_init()
956 lcd.charset = DEFAULT_LCD_CHARSET; in lcd_init()
962 lcd.proto = LCD_PROTO_PARALLEL; in lcd_init()
963 lcd.charset = LCD_CHARSET_NORMAL; in lcd_init()
964 lcd.pins.e = PIN_STROBE; in lcd_init()
965 lcd.pins.rs = PIN_SELECP; in lcd_init()
984 lcd.charset = lcd_charset; in lcd_init()
986 lcd.proto = lcd_proto; in lcd_init()
988 lcd.pins.e = lcd_e_pin; in lcd_init()
990 lcd.pins.rs = lcd_rs_pin; in lcd_init()
992 lcd.pins.rw = lcd_rw_pin; in lcd_init()
994 lcd.pins.cl = lcd_cl_pin; in lcd_init()
996 lcd.pins.da = lcd_da_pin; in lcd_init()
998 lcd.pins.bl = lcd_bl_pin; in lcd_init()
1010 if (lcd.proto == LCD_PROTO_SERIAL) { /* SERIAL */ in lcd_init()
1013 if (lcd.pins.cl == PIN_NOT_SET) in lcd_init()
1014 lcd.pins.cl = DEFAULT_LCD_PIN_SCL; in lcd_init()
1015 if (lcd.pins.da == PIN_NOT_SET) in lcd_init()
1016 lcd.pins.da = DEFAULT_LCD_PIN_SDA; in lcd_init()
1018 } else if (lcd.proto == LCD_PROTO_PARALLEL) { /* PARALLEL */ in lcd_init()
1021 if (lcd.pins.e == PIN_NOT_SET) in lcd_init()
1022 lcd.pins.e = DEFAULT_LCD_PIN_E; in lcd_init()
1023 if (lcd.pins.rs == PIN_NOT_SET) in lcd_init()
1024 lcd.pins.rs = DEFAULT_LCD_PIN_RS; in lcd_init()
1025 if (lcd.pins.rw == PIN_NOT_SET) in lcd_init()
1026 lcd.pins.rw = DEFAULT_LCD_PIN_RW; in lcd_init()
1031 if (lcd.pins.bl == PIN_NOT_SET) in lcd_init()
1032 lcd.pins.bl = DEFAULT_LCD_PIN_BL; in lcd_init()
1034 if (lcd.pins.e == PIN_NOT_SET) in lcd_init()
1035 lcd.pins.e = PIN_NONE; in lcd_init()
1036 if (lcd.pins.rs == PIN_NOT_SET) in lcd_init()
1037 lcd.pins.rs = PIN_NONE; in lcd_init()
1038 if (lcd.pins.rw == PIN_NOT_SET) in lcd_init()
1039 lcd.pins.rw = PIN_NONE; in lcd_init()
1040 if (lcd.pins.bl == PIN_NOT_SET) in lcd_init()
1041 lcd.pins.bl = PIN_NONE; in lcd_init()
1042 if (lcd.pins.cl == PIN_NOT_SET) in lcd_init()
1043 lcd.pins.cl = PIN_NONE; in lcd_init()
1044 if (lcd.pins.da == PIN_NOT_SET) in lcd_init()
1045 lcd.pins.da = PIN_NONE; in lcd_init()
1047 if (lcd.charset == NOT_SET) in lcd_init()
1048 lcd.charset = DEFAULT_LCD_CHARSET; in lcd_init()
1050 if (lcd.charset == LCD_CHARSET_KS0074) in lcd_init()
1055 pin_to_bits(lcd.pins.e, lcd_bits[LCD_PORT_D][LCD_BIT_E], in lcd_init()
1057 pin_to_bits(lcd.pins.rs, lcd_bits[LCD_PORT_D][LCD_BIT_RS], in lcd_init()
1059 pin_to_bits(lcd.pins.rw, lcd_bits[LCD_PORT_D][LCD_BIT_RW], in lcd_init()
1061 pin_to_bits(lcd.pins.bl, lcd_bits[LCD_PORT_D][LCD_BIT_BL], in lcd_init()
1063 pin_to_bits(lcd.pins.cl, lcd_bits[LCD_PORT_D][LCD_BIT_CL], in lcd_init()
1065 pin_to_bits(lcd.pins.da, lcd_bits[LCD_PORT_D][LCD_BIT_DA], in lcd_init()
1068 lcd.charlcd = charlcd; in lcd_init()
1069 lcd.initialized = true; in lcd_init()
1408 if (keypressed && lcd.enabled && lcd.initialized) in panel_scan_timer()
1409 charlcd_poke(lcd.charlcd); in panel_scan_timer()
1603 /* must init LCD first, just in case an IRQ from the keypad is in panel_attach()
1606 if (lcd.enabled) { in panel_attach()
1608 if (!lcd.charlcd || charlcd_register(lcd.charlcd)) in panel_attach()
1622 if (lcd.enabled) in panel_attach()
1623 charlcd_unregister(lcd.charlcd); in panel_attach()
1625 charlcd_free(lcd.charlcd); in panel_attach()
1626 lcd.charlcd = NULL; in panel_attach()
1649 if (lcd.enabled) { in panel_detach()
1650 charlcd_unregister(lcd.charlcd); in panel_detach()
1651 lcd.initialized = false; in panel_detach()
1652 charlcd_free(lcd.charlcd); in panel_detach()
1653 lcd.charlcd = NULL; in panel_detach()
1715 * Overwrite selection with module param values (both keypad and lcd), in panel_init_module()
1730 lcd.enabled = (selected_lcd_type > 0); in panel_init_module()
1732 if (lcd.enabled) { in panel_init_module()
1734 * Init lcd struct with load-time values to preserve exact in panel_init_module()
1737 lcd.charset = lcd_charset; in panel_init_module()
1738 lcd.proto = lcd_proto; in panel_init_module()
1739 lcd.pins.e = lcd_e_pin; in panel_init_module()
1740 lcd.pins.rs = lcd_rs_pin; in panel_init_module()
1741 lcd.pins.rw = lcd_rw_pin; in panel_init_module()
1742 lcd.pins.cl = lcd_cl_pin; in panel_init_module()
1743 lcd.pins.da = lcd_da_pin; in panel_init_module()
1744 lcd.pins.bl = lcd_bl_pin; in panel_init_module()
1762 if (!lcd.enabled && !keypad.enabled) { in panel_init_module()