name driver differently when in kernel and module

so that we can load the module driver and also have the in kernel driver
for a splash screen at start up it is necessary for the two modules to
be named differently else the module will not load as Linux will think
the module is already loaded; this patch makes the patch rename
fls_lcd.* to fls_lcd_ik.* when installed via the patch.
add memory barriers to io r/w ops

I don't think these are needed on a arm9, but it is probably good
pratice to have them
make define for if we should make a dev/lcd node

rather than looking at the MODULE define directly, look at the DEVNODE
define instead to determine if a /dev/lcd interface node should be made
or not. DEVNODE is still defined if MODULE is defined, but splitting
them just makes development easier.
add control for lcd power switch

the power switch hardware does not seem to work just yet (transistor is
not turning fully on/off for some reason) so this function remains
uncalled for now, but the line toggles just fine for when the switch is
working
clean up lcd init process

this splits the 4-bit init from the lcd settings etc (expect for the
font and lines as this should only be done once according to the
datasheet)

now the 4 bit init sets the mode to 8 bit a few times to ensure the lcd
nibble order is synced on init, once in sync we switch to 4 bit mode and
init the lines and font; this makes the init much more reliable and
ensures we don't get our nibbles (4 bits) out of sync when reloading the
driver, hence we run this on every lcd_init regardless of hw_reset
state.

now during the lcd_init we power cycle the lcd (or we will when the power
switch is ready, but no harm in just doing this in the code so we can
debug it) only if hw_reset is defined; also if hw_reset is defined we
clear the screen etc to put it into a known state since it probably only
just got power; if hw_reset is not defined we just home the cursor so
at we insmod with the cursor in a known position.
do full lcd reset & hw_reset for 4 bit init

it seems that the 4 bit init used to sync with the lcd may corrupt the
data on the screen, hence we need to clear the screen, home the cursor,
set the entry mode etc, etc; hence if we want to sync we may as well
just do the whole hw_reset process, and if the driver needs to be
re-inserted wo hw_reset we just hope it stays synced (it should do
unless there are hw bugs generating false falling edges on e)

hence normally the insmod will want to run with hw_reset=1 which it will
by default
make the driver load asap for different modes

if the driver does not need a dev node (ie just display splash and use
module to do other display work) then we can show the splash screen very
fast via early_initcall

if the driver does need a device node the earliest we can load the
driver is via a pure_initcall as we will need to make a device entry

if the driver is a module then it needs to be loaded via module_init
obviously