public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Zoltan Kelemen <zoltan@digisec.se>
To: willy@meta-x.org, gregkh@linuxfoundation.org
Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org
Subject: [PATCH 2/3] staging:panel: Add support for APEX lcd/keypad
Date: Thu, 28 Jun 2012 22:58:10 +0200	[thread overview]
Message-ID: <4FECC562.6060105@digisec.se> (raw)

[-- Attachment #1: Type: text/plain, Size: 0 bytes --]



[-- Attachment #2: panel-patch2 --]
[-- Type: text/plain, Size: 5882 bytes --]

Patch containing the following changes:
* Adds support for lcd/keypad from Taiwanese company APEX. 
* Fixes lcd type constants in code to match the ones in Kconfig.

This patch depends on patch 1 and should therefore be applied after it.

Signed-off-by: Zoltan Kelemen <zoltan@digisec.se>
----
diff -ru linux-next/drivers/staging/panel/Kconfig panel-patch2/drivers/staging/panel/Kconfig
--- linux-next/drivers/staging/panel/Kconfig	2012-06-28 13:05:05.196967738 +0200
+++ panel-patch2/drivers/staging/panel/Kconfig	2012-06-28 13:10:37.274466384 +0200
@@ -23,9 +23,9 @@
 	  and so on.
 
 config PANEL_PROFILE
-	int "Default panel profile (0-5, 0=custom)"
+	int "Default panel profile (0-6, 0=custom)"
 	depends on PANEL
-	range 0 5
+	range 0 6
 	default "5"
 	---help---
 	  To ease configuration, the driver supports different configuration
@@ -39,6 +39,7 @@
 	    3 = 2x16 parallel LCD (Hantronix), no keypad
 	    4 = 2x16 parallel LCD (Nexcom NSA1045) with Nexcom's keypad
 	    5 = 2x40 parallel LCD (old one), with old keypad
+	    6 = 2x20 parallel LCD (APEX) with APEX's keypad
 
 	  Custom configurations allow you to define how your display is
 	  wired to the parallel port, and how it works. This is only intended
@@ -46,8 +47,8 @@
 
 config PANEL_KEYPAD
 	depends on PANEL && PANEL_PROFILE="0"
-	int "Keypad type (0=none, 1=old 6 keys, 2=new 6 keys, 3=Nexcom 4 keys)"
-	range 0 3
+	int "Keypad type (0=none, 1=old 6 keys, 2=new 6 keys, 3=Nexcom 4 keys, 4=APEX 4 keys)"
+	range 0 4
 	default 0
 	---help---
 	  This enables and configures a keypad connected to the parallel port.
@@ -57,14 +58,15 @@
 	    1 : old 6 keys keypad
 	    2 : new 6 keys keypad, as used on the server at www.ant-computing.com
 	    3 : Nexcom NSA1045's 4 keys keypad
+	    4 : APEX 4 keys keypad
 
 	  New profiles can be described in the driver source. The driver also
 	  supports simultaneous keys pressed when the keypad supports them.
 
 config PANEL_LCD
 	depends on PANEL && PANEL_PROFILE="0"
-	int "LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom)"
-	range 0 5
+	int "LCD type (0=none, 1=custom, 2=old, 3=ks0074, 4=hantronix, 5=Nexcom, 6=APEX)"
+	range 0 6
 	default 0
 	---help---
 	   This enables and configures an LCD connected to the parallel port.
@@ -79,6 +81,7 @@
 	     3 : 2x16 serial LCD (KS-0074 based)
 	     4 : 2x16 parallel LCD (Hantronix wiring)
 	     5 : 2x16 parallel LCD (Nexcom wiring)
+             6 : 2x20 parallel LCD (APEX wiring)
 
 	   When type '1' is specified, other options will appear to configure
 	   more precise aspects (wiring, dimensions, protocol, ...). Please note
diff -ru linux-next/drivers/staging/panel/panel.c panel-patch2/drivers/staging/panel/panel.c
--- linux-next/drivers/staging/panel/panel.c	2012-06-28 13:07:14.824466481 +0200
+++ panel-patch2/drivers/staging/panel/panel.c	2012-06-28 13:10:37.274466384 +0200
@@ -307,11 +307,12 @@
  * LCD types
  */
 #define LCD_TYPE_NONE		0
-#define LCD_TYPE_OLD		1
-#define LCD_TYPE_KS0074		2
-#define LCD_TYPE_HANTRONIX	3
-#define LCD_TYPE_NEXCOM		4
-#define LCD_TYPE_CUSTOM		5
+#define LCD_TYPE_CUSTOM		1
+#define LCD_TYPE_OLD		2
+#define LCD_TYPE_KS0074		3
+#define LCD_TYPE_HANTRONIX	4
+#define LCD_TYPE_NEXCOM		5
+#define LCD_TYPE_APEX		6
 
 /*
  * keypad types
@@ -320,6 +321,7 @@
 #define KEYPAD_TYPE_OLD		1
 #define KEYPAD_TYPE_NEW		2
 #define KEYPAD_TYPE_NEXCOM	3
+#define KEYPAD_TYPE_APEX	4
 
 /*
  * panel profiles
@@ -330,6 +332,7 @@
 #define PANEL_PROFILE_HANTRONIX	3
 #define PANEL_PROFILE_NEXCOM	4
 #define PANEL_PROFILE_LARGE	5
+#define PANEL_PROFILE_APEX	6
 
 /*
  * Construct custom config from the kernel's configuration
@@ -468,8 +471,8 @@
 static int lcd_type = -1;
 module_param(lcd_type, int, 0000);
 MODULE_PARM_DESC(lcd_type,
-		 "LCD type: 0=none, 1=old //, 2=serial ks0074, "
-		 "3=hantronix //, 4=nexcom //, 5=compiled-in");
+		 "LCD type: 0=none, 1=custom, 2=old, 3=serial ks0074, "
+		 "4=hantronix, 5=nexcom, 6=apex");
 
 static int lcd_proto = -1;
 module_param(lcd_proto, int, 0000);
@@ -485,7 +488,7 @@
 module_param(keypad_type, int, 0000);
 MODULE_PARM_DESC(keypad_type,
 		 "Keypad type: 0=none, 1=old 6 keys, 2=new 6+1 keys, "
-		 "3=nexcom 4 keys");
+		 "3=nexcom 4 keys, 4=apex 4 keys");
 
 static int profile = DEFAULT_PROFILE;
 module_param(profile, int, 0000);
@@ -610,6 +613,16 @@
 	{"", "", "", ""}
 };
 
+/* signals, press, repeat, release */
+char apex_keypad_profile[][4][9] = {
+	{"a-p-E-", "Left\n", "Left\n", ""},
+	{"a-P-E-", "Up\n", "Up\n", ""},
+	{"a-P-e-", "Down\n", "Down\n", ""},
+	{"a-p-e-", "Right\n", "Right\n", ""},
+	/* add new signals above this line */
+	{"", "", "", ""}
+};
+
 static char (*keypad_profile)[4][9] = old_keypad_profile;
 
 /* FIXME: this should be converted to a bit array containing signals states */
@@ -1503,6 +1516,7 @@
 			lcd_height = 2;
 		break;
 	case LCD_TYPE_NEXCOM:
+	case LCD_TYPE_APEX:
 		/* parallel mode, 8 bits, generic */
 		if (lcd_proto < 0)
 			lcd_proto = LCD_PROTO_PARALLEL;
@@ -1514,9 +1528,11 @@
 			lcd_rs_pin = PIN_SELECP;
 		if (lcd_rw_pin == PIN_NOT_SET)
 			lcd_rw_pin = PIN_INITP;
+		if (lcd_type == LCD_TYPE_APEX && lcd_bl_pin == PIN_NOT_SET)
+			lcd_bl_pin = PIN_STROBE;
 
 		if (lcd_width < 0)
-			lcd_width = 16;
+			lcd_width = (lcd_type == LCD_TYPE_NEXCOM) ? 16 : 20;
 		if (lcd_bwidth < 0)
 			lcd_bwidth = 40;
 		if (lcd_hwidth < 0)
@@ -2487,6 +2503,13 @@
 		if (lcd_type < 0)
 			lcd_type = LCD_TYPE_OLD;
 		break;
+	case PANEL_PROFILE_APEX:
+		/* generic 8 bits, 2*20, APEX keypad */
+		if (keypad_type < 0)
+			keypad_type = KEYPAD_TYPE_APEX;
+		if (lcd_type < 0)
+			lcd_type = LCD_TYPE_APEX;
+		break;
 	}
 
 	lcd_enabled = (lcd_type > 0);
@@ -2502,6 +2525,9 @@
 	case KEYPAD_TYPE_NEXCOM:
 		keypad_profile = nexcom_keypad_profile;
 		break;
+	case KEYPAD_TYPE_APEX:
+		keypad_profile = apex_keypad_profile;
+		break;
 	}
 
 	lcd_init_globals();

                 reply	other threads:[~2012-06-28 21:29 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FECC562.6060105@digisec.se \
    --to=zoltan@digisec.se \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=willy@meta-x.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox